return major;
}
- vp = rc_avpair_get(ctx->acceptorCtx.avps, PW_MSCHAP2_SUCCESS, 0);
+ vp = rc_avpair_get(ctx->acceptorCtx.avps, 0x01370010, 0);
if (ctx->encryptionType != ENCTYPE_NULL && vp != NULL) {
major = gssEapDeriveRfc3961Key(minor,
(unsigned char *)vp->strvalue,
if (GSS_ERROR(major))
goto cleanup;
- if (ctx->acceptorCtx.lastStatus == PW_ACCESS_CHALLENGE) {
+ if (ctx->acceptorCtx.lastStatus == CHALLENGE_RC) {
major = addAvpFromBuffer(minor, rh, &send, PW_STATE,
&ctx->acceptorCtx.state);
if (GSS_ERROR(major))
}
code = rc_auth(rh, 0, send, &received, msgBuffer);
- if (code != 0) {
- *minor = errno;
+ switch (code) {
+ case OK_RC:
+ case CHALLENGE_RC:
+ major = GSS_S_CONTINUE_NEEDED;
+ break;
+ case TIMEOUT_RC:
major = GSS_S_UNAVAILABLE;
+ break;
+ case REJECT_RC:
+ major = GSS_S_DEFECTIVE_CREDENTIAL;
+ break;
+ default:
+ major = GSS_S_FAILURE;
goto cleanup;
}
+ if (GSS_ERROR(major))
+ goto cleanup;
+
ctx->acceptorCtx.lastStatus = code;
- if (code == OK_RC || code == PW_ACCESS_CHALLENGE) {
- major = getBufferFromAvps(minor, received, PW_EAP_MESSAGE, outputToken);
+ major = getBufferFromAvps(minor, received, PW_EAP_MESSAGE, outputToken);
+ if (GSS_ERROR(major))
+ goto cleanup;
+
+ if (code == CHALLENGE_RC) {
+ major = getBufferFromAvps(minor, received, PW_STATE,
+ &ctx->acceptorCtx.state);
if (GSS_ERROR(major))
goto cleanup;
-
- if (code == PW_ACCESS_CHALLENGE) {
- major = getBufferFromAvps(minor, received, PW_STATE,
- &ctx->acceptorCtx.state);
- if (GSS_ERROR(major))
- goto cleanup;
- }
-
- major = GSS_S_CONTINUE_NEEDED;
} else {
- major = GSS_S_FAILURE;
- goto cleanup;
- }
-
- if (code == OK_RC) {
ctx->acceptorCtx.avps = received;
received = NULL;
goto cleanup;
ctx->state = EAP_STATE_GSS_CHANNEL_BINDINGS;
- major = GSS_S_CONTINUE_NEEDED;
}
+ major = GSS_S_CONTINUE_NEEDED;
+
cleanup:
if (received != NULL)
rc_avpair_free(received);