X-Git-Url: http://www.project-moonshot.org/gitweb/?p=mech_eap.git;a=blobdiff_plain;f=mech_eap%2Fimport_sec_context.c;h=a0ebb8c716baf0d20cd4d6746b415113be3765cb;hp=1533a1661e7a933e407d0cb14f786c580dc3fb9a;hb=HEAD;hpb=1fdd225320fd37511f8159aec3c33d44da7ad5d6 diff --git a/mech_eap/import_sec_context.c b/mech_eap/import_sec_context.c index 1533a16..a0ebb8c 100644 --- a/mech_eap/import_sec_context.c +++ b/mech_eap/import_sec_context.c @@ -209,11 +209,12 @@ importKerberosKey(OM_uint32 *minor, static OM_uint32 importName(OM_uint32 *minor, + gss_OID mech, unsigned char **pBuf, size_t *pRemain, gss_name_t *pName) { - OM_uint32 major; + OM_uint32 major, tmpMinor, flags; unsigned char *p = *pBuf; size_t remain = *pRemain; gss_buffer_desc tmp; @@ -232,10 +233,21 @@ importName(OM_uint32 *minor, tmp.value = p + 4; - major = gssEapImportNameInternal(minor, &tmp, pName, - EXPORT_NAME_FLAG_COMPOSITE); + flags = EXPORT_NAME_FLAG_COMPOSITE; + if (mech == GSS_C_NO_OID) + flags |= EXPORT_NAME_FLAG_OID; + + major = gssEapImportNameInternal(minor, &tmp, pName, flags); if (GSS_ERROR(major)) return major; + + if ((flags & EXPORT_NAME_FLAG_OID) == 0) { + major = gssEapCanonicalizeOid(minor, mech, 0, &(*pName)->mechanismUsed); + if (GSS_ERROR(major)) { + gssEapReleaseName(&tmpMinor, pName); + return major; + } + } } *pBuf += 4 + tmp.length; @@ -288,11 +300,12 @@ gssEapImportContext(OM_uint32 *minor, if (GSS_ERROR(major)) return major; - major = importName(minor, &p, &remain, &ctx->initiatorName); + /* Initiator name OID matches the context mechanism, so it's not encoded */ + major = importName(minor, ctx->mechanismUsed, &p, &remain, &ctx->initiatorName); if (GSS_ERROR(major)) return major; - major = importName(minor, &p, &remain, &ctx->acceptorName); + major = importName(minor, GSS_C_NO_OID, &p, &remain, &ctx->acceptorName); if (GSS_ERROR(major)) return major;