Get default credentials for acceptor context too
[mech_eap.orig] / init_sec_context.c
index a195815..ae0a65c 100644 (file)
@@ -616,7 +616,7 @@ eapGssSmInitError(OM_uint32 *minor,
     major = load_uint32_be(&p[0]);
     *minor = ERROR_TABLE_BASE_eapg + load_uint32_be(&p[4]);
 
-    if (!GSS_ERROR(major)) {
+    if (!GSS_ERROR(major) || !IS_WIRE_ERROR(*minor)) {
         major = GSS_S_FAILURE;
         *minor = GSSEAP_BAD_ERROR_TOKEN;
     }
@@ -671,7 +671,6 @@ gss_init_sec_context(OM_uint32 *minor,
     gss_buffer_desc innerInputToken;
     gss_buffer_desc innerOutputToken = GSS_C_EMPTY_BUFFER;
     enum gss_eap_token_type tokType;
-    gss_cred_id_t defaultCred = GSS_C_NO_CREDENTIAL;
     int initialContextToken = 0;
 
     *minor = 0;
@@ -698,21 +697,21 @@ gss_init_sec_context(OM_uint32 *minor,
     GSSEAP_MUTEX_LOCK(&ctx->mutex);
 
     if (cred == GSS_C_NO_CREDENTIAL) {
-        if (ctx->initiatorCtx.defaultCred == GSS_C_NO_CREDENTIAL) {
+        if (ctx->defaultCred == GSS_C_NO_CREDENTIAL) {
             major = gssEapAcquireCred(minor,
                                       GSS_C_NO_NAME,
                                       GSS_C_NO_BUFFER,
                                       time_req,
                                       GSS_C_NO_OID_SET,
                                       GSS_C_INITIATE,
-                                      &defaultCred,
+                                      &ctx->defaultCred,
                                       NULL,
                                       NULL);
             if (GSS_ERROR(major))
                 goto cleanup;
         }
 
-        cred = ctx->initiatorCtx.defaultCred;
+        cred = ctx->defaultCred;
     }
 
     GSSEAP_MUTEX_LOCK(&cred->mutex);
@@ -730,7 +729,7 @@ gss_init_sec_context(OM_uint32 *minor,
 
     sm = &eapGssInitiatorSm[ctx->state];
 
-    if (input_token != GSS_C_NO_BUFFER) {
+    if (input_token != GSS_C_NO_BUFFER && input_token->length != 0) {
         major = gssEapVerifyToken(minor, ctx, input_token,
                                   &tokType, &innerInputToken);
         if (GSS_ERROR(major))