wpabuf_free(reqData);
+ GSSEAP_SM_TRANSITION_NEXT(ctx);
+
*minor = 0;
- *smFlags |= SM_FLAG_TRANSITION;
return GSS_S_CONTINUE_NEEDED;
}
if (GSS_ERROR(major))
goto cleanup;
- *smFlags |= SM_FLAG_TRANSITION;
+ GSSEAP_SM_TRANSITION_NEXT(ctx);
}
major = GSS_S_CONTINUE_NEEDED;
return major;
}
-static OM_uint32
-eapGssSmAcceptCompleteInitiatorExts(OM_uint32 *minor,
- gss_cred_id_t cred,
- gss_ctx_id_t ctx,
- gss_name_t target __attribute__((__unused__)),
- gss_OID mech __attribute__((__unused__)),
- OM_uint32 reqFlags __attribute__((__unused__)),
- OM_uint32 timeReq __attribute__((__unused__)),
- gss_channel_bindings_t chanBindings __attribute__((__unused__)),
- gss_buffer_t inputToken,
- gss_buffer_t outputToken,
- OM_uint32 *smFlags)
-{
- *minor = 0;
- *smFlags |= SM_FLAG_TRANSITION | SM_FLAG_STOP_EVAL;
- return GSS_S_CONTINUE_NEEDED;
-}
-
#ifdef GSSEAP_ENABLE_REAUTH
static OM_uint32
eapGssSmAcceptReauthCreds(OM_uint32 *minor,
#endif
static OM_uint32
+eapGssSmAcceptCompleteInitiatorExts(OM_uint32 *minor,
+ gss_cred_id_t cred,
+ gss_ctx_id_t ctx,
+ gss_name_t target,
+ gss_OID mech,
+ OM_uint32 reqFlags,
+ OM_uint32 timeReq,
+ gss_channel_bindings_t chanBindings,
+ gss_buffer_t inputToken,
+ gss_buffer_t outputToken,
+ OM_uint32 *smFlags)
+{
+ GSSEAP_SM_TRANSITION_NEXT(ctx);
+
+ *minor = 0;
+
+ return GSS_S_CONTINUE_NEEDED;
+}
+
+static OM_uint32
eapGssSmAcceptCompleteAcceptorExts(OM_uint32 *minor,
gss_cred_id_t cred,
gss_ctx_id_t ctx,
- gss_name_t target __attribute__((__unused__)),
- gss_OID mech __attribute__((__unused__)),
- OM_uint32 reqFlags __attribute__((__unused__)),
- OM_uint32 timeReq __attribute__((__unused__)),
- gss_channel_bindings_t chanBindings __attribute__((__unused__)),
+ gss_name_t target,
+ gss_OID mech,
+ OM_uint32 reqFlags,
+ OM_uint32 timeReq,
+ gss_channel_bindings_t chanBindings,
gss_buffer_t inputToken,
gss_buffer_t outputToken,
OM_uint32 *smFlags)
{
+ GSSEAP_SM_TRANSITION(ctx, GSSEAP_STATE_ESTABLISHED);
+
*minor = 0;
- *smFlags |= SM_FLAG_TRANSITION | SM_FLAG_STOP_EVAL;
+ *smFlags |= SM_FLAG_FORCE_SEND_TOKEN;
+
return GSS_S_COMPLETE;
}
ITOK_TYPE_REAUTH_REQ,
ITOK_TYPE_REAUTH_RESP,
GSSEAP_STATE_INITIAL,
- 0, /* critical */
- 0, /* required */
+ 0,
eapGssSmAcceptGssReauth,
},
#endif
ITOK_TYPE_NONE,
ITOK_TYPE_EAP_REQ,
GSSEAP_STATE_INITIAL,
- 1, /* critical */
- 1, /* required */
+ SM_ITOK_FLAG_CRITICAL | SM_ITOK_FLAG_REQUIRED,
eapGssSmAcceptIdentity,
},
{
ITOK_TYPE_EAP_RESP,
ITOK_TYPE_EAP_REQ,
GSSEAP_STATE_AUTHENTICATE,
- 1, /* critical */
- 1, /* required */
+ SM_ITOK_FLAG_CRITICAL | SM_ITOK_FLAG_REQUIRED,
eapGssSmAcceptAuthenticate
},
{
ITOK_TYPE_GSS_CHANNEL_BINDINGS,
ITOK_TYPE_NONE,
GSSEAP_STATE_INITIATOR_EXTS,
- 1, /* critical */
- 1, /* required */
+ SM_ITOK_FLAG_CRITICAL | SM_ITOK_FLAG_REQUIRED,
eapGssSmAcceptGssChannelBindings,
},
{
ITOK_TYPE_NONE,
ITOK_TYPE_NONE,
GSSEAP_STATE_INITIATOR_EXTS,
- 1, /* critical */
- 1, /* required */
+ 0,
eapGssSmAcceptCompleteInitiatorExts,
},
#ifdef GSSEAP_ENABLE_REAUTH
ITOK_TYPE_NONE,
ITOK_TYPE_REAUTH_CREDS,
GSSEAP_STATE_ACCEPTOR_EXTS,
- 0, /* critical */
- 0, /* required */
+ 0,
eapGssSmAcceptReauthCreds,
},
#endif
ITOK_TYPE_NONE,
ITOK_TYPE_NONE,
GSSEAP_STATE_ACCEPTOR_EXTS,
- 1, /* critical */
- 1, /* required */
+ 0,
eapGssSmAcceptCompleteAcceptorExts
},
};
major = acceptReadyKrb(minor, ctx, cred,
krbInitiator, mech, timeRec);
if (major == GSS_S_COMPLETE) {
- ctx->state = GSSEAP_STATE_ACCEPTOR_EXTS;
- *smFlags |= SM_FLAG_TRANSITION | SM_FLAG_STOP_EVAL;
+ GSSEAP_SM_TRANSITION(ctx, GSSEAP_STATE_ESTABLISHED);
}
}