make inputs to gssEapImportName const
[mech_eap.orig] / util_name.c
index 85f8b3f..81aaec1 100644 (file)
 
 #include "gssapiP_eap.h"
 
-static gss_OID_desc gssEapNtPrincipalName = {
+static gss_OID_desc gssEapNtEapName = {
     /* 1.3.6.1.4.1.5322.22.2.1  */
     10, "\x2B\x06\x01\x04\x01\xA9\x4A\x16\x02\x01"
 };
 
-gss_OID GSS_EAP_NT_PRINCIPAL_NAME = &gssEapNtPrincipalName;
+gss_OID GSS_EAP_NT_EAP_NAME = &gssEapNtEapName;
 
 OM_uint32
 gssEapAllocName(OM_uint32 *minor, gss_name_t *pName)
@@ -196,10 +196,18 @@ importUserName(OM_uint32 *minor,
     OM_uint32 major;
     krb5_context krbContext;
     krb5_principal krbPrinc;
-    char *nameString;
+    char *nameString, *realm = NULL;
+    int flags = 0;
+    krb5_error_code code;
 
     GSSEAP_KRB_INIT(&krbContext);
 
+    code = krb5_get_default_realm(krbContext, &realm);
+    if (code != 0 || realm == NULL)
+        flags |= KRB5_PRINCIPAL_PARSE_REQUIRE_REALM;
+    else
+        krb5_free_default_realm(krbContext, realm);
+
     if (nameBuffer == GSS_C_NO_BUFFER) {
         *minor = krb5_copy_principal(krbContext,
                                      krbAnonymousPrincipal(), &krbPrinc);
@@ -210,7 +218,7 @@ importUserName(OM_uint32 *minor,
         if (GSS_ERROR(major))
             return major;
 
-        *minor = krb5_parse_name(krbContext, nameString, &krbPrinc);
+        *minor = krb5_parse_name_flags(krbContext, nameString, flags, &krbPrinc);
         if (*minor != 0) {
             GSSEAP_FREE(nameString);
             return GSS_S_FAILURE;
@@ -391,20 +399,20 @@ importCompositeExportName(OM_uint32 *minor,
 #endif
 
 struct gss_eap_name_import_provider {
-    gss_OID oid;
+    gss_const_OID oid;
     OM_uint32 (*import)(OM_uint32 *, const gss_buffer_t, gss_name_t *);
 };
 
 OM_uint32
 gssEapImportName(OM_uint32 *minor,
                  const gss_buffer_t nameBuffer,
-                 gss_OID nameType,
-                 gss_OID mechType,
+                 const gss_OID nameType,
+                 const gss_OID mechType,
                  gss_name_t *pName)
 {
     struct gss_eap_name_import_provider nameTypes[] = {
+        { GSS_EAP_NT_EAP_NAME,              importUserName              },
         { GSS_C_NT_USER_NAME,               importUserName              },
-        { GSS_EAP_NT_PRINCIPAL_NAME,        importUserName              },
         { GSS_C_NT_HOSTBASED_SERVICE,       importServiceName           },
         { GSS_C_NT_HOSTBASED_SERVICE_X,     importServiceName           },
         { GSS_C_NT_ANONYMOUS,               importAnonymousName         },
@@ -418,11 +426,9 @@ gssEapImportName(OM_uint32 *minor,
     OM_uint32 tmpMinor;
     gss_name_t name = GSS_C_NO_NAME;
 
-    if (nameType == GSS_C_NO_OID)
-        nameType = nameTypes[0].oid;
-
     for (i = 0; i < sizeof(nameTypes) / sizeof(nameTypes[0]); i++) {
-        if (oidEqual(nameTypes[i].oid, nameType)) {
+        if (oidEqual(nameTypes[i].oid,
+                     nameType == GSS_C_NO_OID ? GSS_EAP_NT_EAP_NAME : nameType)) {
             major = nameTypes[i].import(minor, nameBuffer, &name);
             break;
         }
@@ -658,7 +664,7 @@ gssEapDisplayName(OM_uint32 *minor,
                                name->krbPrincipal, krbAnonymousPrincipal())) {
         name_type = GSS_C_NT_ANONYMOUS;
     } else {
-        name_type = GSS_EAP_NT_PRINCIPAL_NAME;
+        name_type = GSS_EAP_NT_EAP_NAME;
     }
 
     if (output_name_type != NULL)