TNC: Fixed TNC when using EAP-TTLS with non-EAP Phase 2

Need to process EAP AVP after the non-EAP Phase 2 method. In addition,
EAP-TTLS/MSCHAPv2 needs special code for handling the starting of TNC after
extra roundtrip of MSCHAPv2 success message.
This commit is contained in:
Jouni Malinen 2008-03-09 12:04:10 +02:00
parent 7db0fca522
commit 35f39ac4c9

View file

@ -991,7 +991,7 @@ static int eap_ttls_phase2_request(struct eap_sm *sm,
} }
} }
switch (data->phase2_type) { switch (phase2_type) {
case EAP_TTLS_PHASE2_EAP: case EAP_TTLS_PHASE2_EAP:
res = eap_ttls_phase2_request_eap(sm, data, ret, hdr, resp); res = eap_ttls_phase2_request_eap(sm, data, ret, hdr, resp);
break; break;
@ -1334,6 +1334,15 @@ static int eap_ttls_process_phase2_mschapv2(struct eap_sm *sm,
} }
if (parse->mschapv2 == NULL) { if (parse->mschapv2 == NULL) {
#ifdef EAP_TNC
if (data->phase2_success && parse->eapdata) {
/*
* Allow EAP-TNC to be started after successfully
* completed MSCHAPV2.
*/
return 1;
}
#endif /* EAP_TNC */
wpa_printf(MSG_WARNING, "EAP-TTLS: no MS-CHAP2-Success AVP " wpa_printf(MSG_WARNING, "EAP-TTLS: no MS-CHAP2-Success AVP "
"received for Phase2 MSCHAPV2"); "received for Phase2 MSCHAPV2");
return -1; return -1;
@ -1435,9 +1444,7 @@ static int eap_ttls_process_decrypted(struct eap_sm *sm,
case EAP_TTLS_PHASE2_MSCHAPV2: case EAP_TTLS_PHASE2_MSCHAPV2:
res = eap_ttls_process_phase2_mschapv2(sm, data, ret, parse); res = eap_ttls_process_phase2_mschapv2(sm, data, ret, parse);
#ifdef EAP_TNC #ifdef EAP_TNC
if (res == 1 && parse->eapdata && if (res == 1 && parse->eapdata && data->phase2_success) {
ret->methodState == METHOD_DONE &&
ret->decision == DECISION_UNCOND_SUCC) {
/* /*
* TNC may be required as the next * TNC may be required as the next
* authentication method within the tunnel. * authentication method within the tunnel.