add some more assertion checks
[mech_eap.git] / util_sm.c
index 0788bcf..339d397 100644 (file)
--- a/util_sm.c
+++ b/util_sm.c
@@ -301,6 +301,8 @@ gssEapSmStep(OM_uint32 *minor,
             enum gss_eap_state oldState = ctx->state;
 
             smFlags = 0;
+            if (inputTokenType != NULL && (*inputTokenType & ITOK_FLAG_CRITICAL))
+                smFlags |= SM_FLAG_INPUT_TOKEN_CRITICAL;
 
             major = smp->processToken(minor, cred, ctx, target, mech, reqFlags,
                                       timeReq, chanBindings, innerInputToken,
@@ -321,7 +323,7 @@ gssEapSmStep(OM_uint32 *minor,
                 innerOutputTokens->elements[innerOutputTokens->count] = innerOutputToken;
                 assert(smp->outputTokenType != ITOK_TYPE_NONE);
                 outputTokenTypes[innerOutputTokens->count] = smp->outputTokenType;
-                if (smp->itokFlags & SM_ITOK_FLAG_CRITICAL)
+                if (smFlags & SM_FLAG_OUTPUT_TOKEN_CRITICAL)
                     outputTokenTypes[innerOutputTokens->count] |= ITOK_FLAG_CRITICAL;
                 innerOutputTokens->count++;
             }
@@ -380,7 +382,7 @@ gssEapSmStep(OM_uint32 *minor,
     /* Format output token from inner tokens */
     if (innerOutputTokens->count != 0 ||            /* inner tokens to send */
         !CTX_IS_INITIATOR(ctx) ||                   /* any leg acceptor */
-        ctx->state != GSSEAP_STATE_ESTABLISHED) {   /* non-last leg initiator */
+        !CTX_IS_ESTABLISHED(ctx)) {                 /* non-last leg initiator */
         tmpMajor = gssEapEncodeInnerTokens(&tmpMinor, innerOutputTokens,
                                            outputTokenTypes, &unwrappedOutputToken);
         if (tmpMajor == GSS_S_COMPLETE) {
@@ -394,6 +396,9 @@ gssEapSmStep(OM_uint32 *minor,
         }
     }
 
+    /* If the context is established, empty tokens only to be emitted by initiator */
+    assert(!CTX_IS_ESTABLISHED(ctx) || ((outputToken->length == 0) == CTX_IS_INITIATOR(ctx)));
+
     SM_ASSERT_VALID(ctx, major);
 
 cleanup: