summaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
authorGreg Hudson <ghudson@mit.edu>2014-02-03 21:11:34 -0500
committerGreg Hudson <ghudson@mit.edu>2014-02-05 00:40:20 -0500
commit8255613476d4c1583a5e810b50444f188fde871f (patch)
tree6ca61517376608d5dd14c6f76c786e5b1311e391 /src/lib
parent3c3638e1cfafa6ec5595e6c2c06ca209cf9d0d09 (diff)
downloadkrb5-8255613476d4c1583a5e810b50444f188fde871f.tar.gz
krb5-8255613476d4c1583a5e810b50444f188fde871f.tar.xz
krb5-8255613476d4c1583a5e810b50444f188fde871f.zip
Properly reflect MS krb5 mech in SPNEGO acceptor
r25590 changed negotiate_mech() to return an alias into the acceptor's mech set, with the unfortunate side effect of transforming the erroneous Microsoft krb5 mech OID into the correct krb5 mech OID, meaning that we answer with a different OID than the requested one. Return an alias into the initiator's mech set instead, and store that in mech_set field the SPNEGO context. The acceptor code only uses mech_set to hold the allocated storage pointed into by internal_mech, so this change is safe. ticket: 7858 target_version: 1.12.2 tags: pullup
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/gssapi/spnego/spnego_mech.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/lib/gssapi/spnego/spnego_mech.c b/src/lib/gssapi/spnego/spnego_mech.c
index 7e4bf901b4..7529c7426d 100644
--- a/src/lib/gssapi/spnego/spnego_mech.c
+++ b/src/lib/gssapi/spnego/spnego_mech.c
@@ -1388,8 +1388,8 @@ acc_ctx_new(OM_uint32 *minor_status,
*return_token = NO_TOKEN_SEND;
goto cleanup;
}
- sc->mech_set = supported_mechSet;
- supported_mechSet = GSS_C_NO_OID_SET;
+ sc->mech_set = mechTypes;
+ mechTypes = GSS_C_NO_OID_SET;
sc->internal_mech = mech_wanted;
sc->DER_mechTypes = der_mechTypes;
der_mechTypes.length = 0;
@@ -3538,7 +3538,7 @@ put_negResult(unsigned char **buf_out, OM_uint32 negResult,
* is set to ACCEPT_INCOMPLETE if it's the first mech, REQUEST_MIC if
* it's not the first mech, otherwise we return NULL and negResult
* is set to REJECT. The returned pointer is an alias into
- * supported->elements and should not be freed.
+ * received->elements and should not be freed.
*
* NOTE: There is currently no way to specify a preference order of
* mechanisms supported by the acceptor.
@@ -3560,7 +3560,7 @@ negotiate_mech(gss_OID_set supported, gss_OID_set received,
if (g_OID_equal(mech_oid, &supported->elements[j])) {
*negResult = (i == 0) ? ACCEPT_INCOMPLETE :
REQUEST_MIC;
- return &supported->elements[j];
+ return &received->elements[i];
}
}
}