OM_uint32 timeReq __attribute__((__unused__)),
gss_channel_bindings_t chanBindings,
gss_buffer_t inputToken,
- gss_buffer_t outputToken);
+ gss_buffer_t outputToken,
+ int *transitionState);
#endif
/*
OM_uint32 timeReq __attribute__((__unused__)),
gss_channel_bindings_t chanBindings __attribute__((__unused__)),
gss_buffer_t inputToken,
- gss_buffer_t outputToken)
+ gss_buffer_t outputToken,
+ int *transitionState)
{
OM_uint32 major;
struct wpabuf *reqData;
wpabuf_free(reqData);
*minor = 0;
- return GSS_S_COMPLETE; /* advance state */
+ *transitionState = 1;
+
+ return GSS_S_CONTINUE_NEEDED;
}
/*
OM_uint32 timeReq __attribute__((__unused__)),
gss_channel_bindings_t chanBindings,
gss_buffer_t inputToken,
- gss_buffer_t outputToken)
+ gss_buffer_t outputToken,
+ int *transitionState)
{
OM_uint32 major, tmpMinor;
struct rs_connection *rconn;
&ctx->acceptorCtx.state, TRUE);
if (GSS_ERROR(major) && *minor != GSSEAP_NO_SUCH_ATTR)
goto cleanup;
-
- major = GSS_S_CONTINUE_NEEDED;
} else {
ctx->acceptorCtx.vps = frresp->vps;
frresp->vps = NULL;
if (GSS_ERROR(major))
goto cleanup;
- major = GSS_S_COMPLETE; /* advance state */
+ *transitionState = 1;
}
+ major = GSS_S_CONTINUE_NEEDED;
+ *minor = 0;
+
cleanup:
if (request != NULL)
rs_request_destroy(request);
OM_uint32 timeReq __attribute__((__unused__)),
gss_channel_bindings_t chanBindings,
gss_buffer_t inputToken,
- gss_buffer_t outputToken)
+ gss_buffer_t outputToken,
+ int *transitionState)
{
OM_uint32 major, tmpMinor;
gss_iov_buffer_desc iov[2];
!bufferEqual(&iov[0].buffer, &chanBindings->application_data)) {
major = GSS_S_BAD_BINDINGS;
*minor = GSSEAP_BINDINGS_MISMATCH;
- } else {
- major = GSS_S_CONTINUE_NEEDED; /* process additional extensions */
- *minor = 0;
}
gss_release_buffer(&tmpMinor, &iov[0].buffer);
OM_uint32 timeReq __attribute__((__unused__)),
gss_channel_bindings_t chanBindings __attribute__((__unused__)),
gss_buffer_t inputToken,
- gss_buffer_t outputToken)
+ gss_buffer_t outputToken,
+ int *transitionState)
{
OM_uint32 major;
if (GSS_ERROR(major))
return major;
- *minor = 0;
- return GSS_S_CONTINUE_NEEDED; /* process additional extensions */
+ return major;
}
#endif
OM_uint32 timeReq __attribute__((__unused__)),
gss_channel_bindings_t chanBindings __attribute__((__unused__)),
gss_buffer_t inputToken,
- gss_buffer_t outputToken)
+ gss_buffer_t outputToken,
+ int *transitionState)
{
*minor = 0;
- return GSS_S_COMPLETE; /* advance state */
+ *transitionState = 1;
+ return GSS_S_COMPLETE;
}
static struct gss_eap_sm eapGssAcceptorSm[] = {
1, /* required */
eapGssSmAcceptGssChannelBindings,
},
+#ifdef GSSEAP_ENABLE_REAUTH
{
ITOK_TYPE_NONE,
ITOK_TYPE_REAUTH_CREDS,
0, /* required */
eapGssSmAcceptReauthCreds,
},
+#endif
{
ITOK_TYPE_NONE,
ITOK_TYPE_NONE,
OM_uint32 timeReq __attribute__((__unused__)),
gss_channel_bindings_t chanBindings,
gss_buffer_t inputToken,
- gss_buffer_t outputToken)
+ gss_buffer_t outputToken,
+ int *transitionState)
{
OM_uint32 major, tmpMinor;
gss_name_t krbInitiator = GSS_C_NO_NAME;
if (major == GSS_S_COMPLETE) {
major = acceptReadyKrb(minor, ctx, cred,
krbInitiator, mech, timeRec);
+ *transitionState = 1;
}
ctx->gssFlags = gssFlags;