From: Luke Howard Date: Mon, 21 Mar 2011 07:15:51 +0000 (+1100) Subject: Heimdal cannot deal with NULL realm, so make zero-length string X-Git-Url: http://www.project-moonshot.org/gitweb/?a=commitdiff_plain;h=5887f37dafcca7c04c0cb88eb219e674a8e70d0c;p=moonshot.git Heimdal cannot deal with NULL realm, so make zero-length string --- diff --git a/mech_eap/util_name.c b/mech_eap/util_name.c index 144d26e..aa19b94 100644 --- a/mech_eap/util_name.c +++ b/mech_eap/util_name.c @@ -149,20 +149,15 @@ krbPrincipalToName(OM_uint32 *minor, return GSS_S_COMPLETE; } -static krb5_error_code -gssEapGetDefaultRealm(krb5_context krbContext, char **defaultRealm) +static char * +gssEapGetDefaultRealm(krb5_context krbContext) { - *defaultRealm = NULL; + char *defaultRealm = NULL; krb5_appdefault_string(krbContext, "eap_gss", - NULL, "default_realm", "", defaultRealm); + NULL, "default_realm", "", &defaultRealm); - if (*defaultRealm != NULL && (*defaultRealm)[0] == '\0') { - GSSEAP_FREE(*defaultRealm); - *defaultRealm = NULL; - } - - return (*defaultRealm != NULL) ? 0 : KRB5_CONFIG_NODEFREALM; + return defaultRealm; } static OM_uint32 @@ -188,7 +183,7 @@ importServiceName(OM_uint32 *minor, host++; } - gssEapGetDefaultRealm(krbContext, &realm); + realm = gssEapGetDefaultRealm(krbContext); code = krb5_build_principal(krbContext, &krbPrinc, @@ -262,14 +257,22 @@ importEapNameFlags(OM_uint32 *minor, /* Possibly append the default EAP realm if required */ if (importFlags & IMPORT_FLAG_DEFAULT_REALM) - gssEapGetDefaultRealm(krbContext, &defaultRealm); + defaultRealm = gssEapGetDefaultRealm(krbContext); /* If no default realm, leave the realm empty in the parsed name */ - if (defaultRealm == NULL) + if (defaultRealm == NULL || defaultRealm[0] == '\0') parseFlags |= KRB5_PRINCIPAL_PARSE_NO_REALM; code = krb5_parse_name_flags(krbContext, nameString, parseFlags, &krbPrinc); +#ifdef HAVE_HEIMDAL_VERSION + if (code == 0 && KRB_PRINC_REALM(krbPrinc) == NULL) { + KRB_PRINC_REALM(krbPrinc) = GSSEAP_CALLOC(1, sizeof(char)); + if (KRB_PRINC_REALM(krbPrinc) == NULL) + code = ENOMEM; + } +#endif + if (defaultRealm != NULL) GSSEAP_FREE(defaultRealm); }