X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=util_name.c;h=e64ebdd722b57dc25fbea1f5fb0c9907e075d9fa;hb=cff9dae64ddb2ead188889c9164961bd364e8cd2;hp=2c258322f37e1c1d57a13a50dbb931e2cdd970e9;hpb=ecc55aaf657ddecee649ffcff4fe9a4205981f30;p=mech_eap.git diff --git a/util_name.c b/util_name.c index 2c25832..e64ebdd 100644 --- a/util_name.c +++ b/util_name.c @@ -148,7 +148,7 @@ importServiceName(OM_uint32 *minor, const gss_buffer_t nameBuffer, gss_name_t *pName) { - OM_uint32 major, tmpMinor; + OM_uint32 major; krb5_context krbContext; krb5_principal krbPrinc; char *service, *host; @@ -163,7 +163,7 @@ importServiceName(OM_uint32 *minor, if (host != NULL) { *host = '\0'; host++; - } + } /* XXX this is probably NOT what we want to be doing */ *minor = krb5_sname_to_principal(krbContext, host, service, @@ -187,21 +187,28 @@ importUserName(OM_uint32 *minor, const gss_buffer_t nameBuffer, gss_name_t *pName) { - OM_uint32 major, tmpMinor; + OM_uint32 major; krb5_context krbContext; krb5_principal krbPrinc; char *nameString; GSSEAP_KRB_INIT(&krbContext); - major = bufferToString(minor, nameBuffer, &nameString); - if (GSS_ERROR(major)) - return major; + if (nameBuffer == GSS_C_NO_BUFFER) { + *minor = krb5_copy_principal(krbContext, + krb5_anonymous_principal(), &krbPrinc); + if (*minor != 0) + return GSS_S_FAILURE; + } else { + major = bufferToString(minor, nameBuffer, &nameString); + if (GSS_ERROR(major)) + return major; - *minor = krb5_parse_name(krbContext, nameString, &krbPrinc); - if (*minor != 0) { - GSSEAP_FREE(nameString); - return GSS_S_FAILURE; + *minor = krb5_parse_name(krbContext, nameString, &krbPrinc); + if (*minor != 0) { + GSSEAP_FREE(nameString); + return GSS_S_FAILURE; + } } major = krbPrincipalToName(minor, &krbPrinc, pName); @@ -369,7 +376,7 @@ gssEapExportNameInternal(OM_uint32 *minor, OM_uint32 major = GSS_S_FAILURE, tmpMinor; krb5_context krbContext; char *krbName = NULL; - size_t krbNameLen; + size_t krbNameLen, exportedNameLen; unsigned char *p; gss_buffer_desc attrs = GSS_C_EMPTY_BUFFER; @@ -386,24 +393,26 @@ gssEapExportNameInternal(OM_uint32 *minor, } krbNameLen = strlen(krbName); - exportedName->length = 0; + exportedNameLen = 0; if (flags & EXPORT_NAME_FLAG_OID) { - exportedName->length += 6 + GSS_EAP_MECHANISM->length; + exportedNameLen += 6 + GSS_EAP_MECHANISM->length; } - exportedName->length += 4 + krbNameLen; + exportedNameLen += 4 + krbNameLen; if (flags & EXPORT_NAME_FLAG_COMPOSITE) { major = gssEapExportAttrContext(minor, name, &attrs); if (GSS_ERROR(major)) goto cleanup; - exportedName->length += 4 + attrs.length; + exportedNameLen += 4 + attrs.length; } - exportedName->value = GSSEAP_MALLOC(exportedName->length); + exportedName->value = GSSEAP_MALLOC(exportedNameLen); if (exportedName->value == NULL) { major = GSS_S_FAILURE; *minor = ENOMEM; goto cleanup; } + exportedName->length = exportedNameLen; + p = (unsigned char *)exportedName->value; if (flags & EXPORT_NAME_FLAG_OID) {