Support for libradius
[mech_eap.git] / init_sec_context.c
index 252c468..9ec5e66 100644 (file)
@@ -68,7 +68,6 @@ policyVariableToFlag(enum eapol_bool_var variable)
     }
 
     return flag;
-        
 }
 
 static struct eap_peer_config *
@@ -294,10 +293,7 @@ eapGssSmInitAuthenticate(OM_uint32 *minor,
     OM_uint32 tmpMajor, tmpMinor;
     time_t now;
     int initialContextToken = 0, code;
-    gss_buffer_desc respBuf;
-
-    respBuf.length = 0;
-    respBuf.value = NULL;
+    gss_buffer_desc respBuf = GSS_C_EMPTY_BUFFER;
 
     initialContextToken = (inputToken == GSS_C_NO_BUFFER ||
                            inputToken->length == 0);
@@ -379,7 +375,9 @@ eapGssSmInitAuthenticate(OM_uint32 *minor,
         ctx->flags &= ~(CTX_FLAG_EAP_SUCCESS);
         major = GSS_S_CONTINUE_NEEDED;
         ctx->state = EAP_STATE_GSS_CHANNEL_BINDINGS;
-    } else if ((ctx->flags & CTX_FLAG_EAP_FAIL) || code == 0) {
+    } else if (ctx->flags & CTX_FLAG_EAP_FAIL) {
+        major = GSS_S_DEFECTIVE_CREDENTIAL;
+    } else if (code == 0) {
         major = GSS_S_FAILURE;
     }
 
@@ -545,13 +543,11 @@ gss_init_sec_context(OM_uint32 *minor,
     OM_uint32 tmpMajor, tmpMinor;
     gss_ctx_id_t ctx = *context_handle;
     struct gss_eap_initiator_sm *sm = NULL;
-    gss_buffer_desc innerInputToken, innerOutputToken;
+    gss_buffer_desc innerInputToken;
+    gss_buffer_desc innerOutputToken = GSS_C_EMPTY_BUFFER;
 
     *minor = 0;
 
-    innerOutputToken.length = 0;
-    innerOutputToken.value = NULL;
-
     output_token->length = 0;
     output_token->value = NULL;