Set GSS_S_CALL_INACCESSIBLE_READ for NULL params
[mech_eap.orig] / init_sec_context.c
index eb5a76d..25f3ae5 100644 (file)
  * SUCH DAMAGE.
  */
 
+/*
+ * Establish a security context on the initiator (client). These functions
+ * wrap around libeap.
+ */
+
 #include "gssapiP_eap.h"
 
 #ifdef GSSEAP_ENABLE_REAUTH
@@ -365,8 +370,8 @@ initBegin(OM_uint32 *minor,
         if (!gssEapInternalizeOid(mech, &ctx->mechanismUsed))
             major = duplicateOid(minor, mech, &ctx->mechanismUsed);
     } else {
-        *minor = GSSEAP_WRONG_MECH;
         major = GSS_S_BAD_MECH;
+        *minor = GSSEAP_WRONG_MECH;
     }
     if (GSS_ERROR(major))
         return major;
@@ -408,7 +413,7 @@ eapGssSmInitIdentity(OM_uint32 *minor,
     if (GSS_ERROR(major))
         return major;
 
-    ctx->state = EAP_STATE_AUTHENTICATE;
+    ctx->state = GSSEAP_STATE_AUTHENTICATE;
 
     *minor = 0;
     return GSS_S_CONTINUE_NEEDED;
@@ -453,8 +458,8 @@ eapGssSmInitAuthenticate(OM_uint32 *minor,
                                                  ctx,
                                                  &eapConfig);
         if (ctx->initiatorCtx.eap == NULL) {
-            *minor = GSSEAP_PEER_SM_INIT_FAILURE;
             major = GSS_S_FAILURE;
+            *minor = GSSEAP_PEER_SM_INIT_FAILURE;
             goto cleanup;
         }
 
@@ -480,16 +485,16 @@ eapGssSmInitAuthenticate(OM_uint32 *minor,
 
         ctx->flags &= ~(CTX_FLAG_EAP_SUCCESS);
         major = GSS_S_CONTINUE_NEEDED;
-        ctx->state = EAP_STATE_EXTENSIONS_REQ;
+        ctx->state = GSSEAP_STATE_EXTENSIONS_REQ;
     } else if (ctx->flags & CTX_FLAG_EAP_FAIL) {
-        *minor = GSSEAP_PEER_AUTH_FAILURE;
         major = GSS_S_DEFECTIVE_CREDENTIAL;
+        *minor = GSSEAP_PEER_AUTH_FAILURE;
     } else if (code == 0 && initialContextToken) {
         resp = &emptyWpaBuffer;
         major = GSS_S_CONTINUE_NEEDED;
     } else {
-        *minor = GSSEAP_PEER_BAD_MESSAGE;
         major = GSS_S_DEFECTIVE_TOKEN;
+        *minor = GSSEAP_PEER_BAD_MESSAGE;
     }
 
 cleanup:
@@ -535,7 +540,7 @@ eapGssSmInitExtensionsReq(OM_uint32 *minor,
 
     assert(outputToken->value != NULL);
 
-    ctx->state = EAP_STATE_EXTENSIONS_RESP;
+    ctx->state = GSSEAP_STATE_EXTENSIONS_RESP;
 
     *minor = 0;
     return GSS_S_CONTINUE_NEEDED;
@@ -559,7 +564,7 @@ eapGssSmInitExtensionsResp(OM_uint32 *minor,
     if (GSS_ERROR(major))
         return major;
 
-    ctx->state = EAP_STATE_ESTABLISHED;
+    ctx->state = GSSEAP_STATE_ESTABLISHED;
 
     *minor = 0;
     return GSS_S_COMPLETE;
@@ -608,8 +613,8 @@ eapGssSmInitError(OM_uint32 *minor,
     *minor = ERROR_TABLE_BASE_eapg + load_uint32_be(&p[4]);
 
     if (!GSS_ERROR(major)) {
-        *minor = GSSEAP_BAD_ERROR_TOKEN;
         major = GSS_S_FAILURE;
+        *minor = GSSEAP_BAD_ERROR_TOKEN;
     }
 
     return major;
@@ -710,12 +715,12 @@ gss_init_sec_context(OM_uint32 *minor,
 
 #ifdef GSSEAP_ENABLE_REAUTH
     if (initialContextToken && gssEapCanReauthP(cred, target_name, time_req))
-        ctx->state = EAP_STATE_KRB_REAUTH_GSS;
+        ctx->state = GSSEAP_STATE_KRB_REAUTH;
 #endif
 
     if ((cred->flags & CRED_FLAG_INITIATE) == 0) {
-        *minor = GSSEAP_CRED_USAGE_MISMATCH;
         major = GSS_S_NO_CRED;
+        *minor = GSSEAP_CRED_USAGE_MISMATCH;
         goto cleanup;
     }
 
@@ -728,10 +733,10 @@ gss_init_sec_context(OM_uint32 *minor,
             goto cleanup;
 
         if (tokType == TOK_TYPE_CONTEXT_ERR) {
-            ctx->state = EAP_STATE_ERROR;
+            ctx->state = GSSEAP_STATE_ERROR;
         } else if (tokType != sm->inputTokenType) {
-            *minor = GSSEAP_WRONG_TOK_ID;
             major = GSS_S_DEFECTIVE_TOKEN;
+            *minor = GSSEAP_WRONG_TOK_ID;
             goto cleanup;
         }
     } else {
@@ -778,7 +783,7 @@ gss_init_sec_context(OM_uint32 *minor,
     if (time_rec != NULL)
         gssEapContextTime(&tmpMinor, ctx, time_rec);
 
-    assert(ctx->state == EAP_STATE_ESTABLISHED || major == GSS_S_CONTINUE_NEEDED);
+    assert(ctx->state == GSSEAP_STATE_ESTABLISHED || major == GSS_S_CONTINUE_NEEDED);
 
 cleanup:
     if (cred != GSS_C_NO_CREDENTIAL)
@@ -813,7 +818,7 @@ eapGssSmInitGssReauth(OM_uint32 *minor,
 
     assert(cred != GSS_C_NO_CREDENTIAL);
 
-    ctx->flags |= CTX_FLAG_KRB_REAUTH_GSS;
+    ctx->flags |= CTX_FLAG_KRB_REAUTH;
 
     if (inputToken->length == 0) {
         major = initBegin(minor, cred, ctx, target, mech,
@@ -849,7 +854,7 @@ eapGssSmInitGssReauth(OM_uint32 *minor,
         major = gssEapReauthComplete(minor, ctx, cred, actualMech, timeRec);
         if (GSS_ERROR(major))
             goto cleanup;
-        ctx->state = EAP_STATE_ESTABLISHED;
+        ctx->state = GSSEAP_STATE_ESTABLISHED;
     }
 
 cleanup: