Allow non-WPA IEEE 802.1X to be select even if WPA is also enabled
If key_mgmt was set to allow both WPA and non-WPA IEEE 802.1X (i.e., to IEEE8021X WPA-EAP), non-WPA IEEE 802.1X was rejected while preparing association parameters. Allow this special case to be handled by selecting non-WPA case if the scan results for the AP do not include either WPA or RSN elements. Signed-hostap: Jouni Malinen <j@w1.fi>
This commit is contained in:
parent
a13e07ec4d
commit
a3f7e5186b
3 changed files with 25 additions and 0 deletions
|
@ -448,6 +448,12 @@ static int wpa_supplicant_ssid_bss_match(struct wpa_supplicant *wpa_s,
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((ssid->key_mgmt & WPA_KEY_MGMT_IEEE8021X_NO_WPA) && !wpa_ie &&
|
||||||
|
!rsn_ie) {
|
||||||
|
wpa_dbg(wpa_s, MSG_DEBUG, " allow for non-WPA IEEE 802.1X");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
if ((ssid->proto & (WPA_PROTO_WPA | WPA_PROTO_RSN)) &&
|
if ((ssid->proto & (WPA_PROTO_WPA | WPA_PROTO_RSN)) &&
|
||||||
wpa_key_mgmt_wpa(ssid->key_mgmt) && proto_match == 0) {
|
wpa_key_mgmt_wpa(ssid->key_mgmt) && proto_match == 0) {
|
||||||
wpa_dbg(wpa_s, MSG_DEBUG, " skip - no WPA/RSN proto match");
|
wpa_dbg(wpa_s, MSG_DEBUG, " skip - no WPA/RSN proto match");
|
||||||
|
|
|
@ -127,6 +127,15 @@ void sme_authenticate(struct wpa_supplicant *wpa_s,
|
||||||
"key management and encryption suites");
|
"key management and encryption suites");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
} else if ((ssid->key_mgmt & WPA_KEY_MGMT_IEEE8021X_NO_WPA) &&
|
||||||
|
wpa_key_mgmt_wpa_ieee8021x(ssid->key_mgmt)) {
|
||||||
|
/*
|
||||||
|
* Both WPA and non-WPA IEEE 802.1X enabled in configuration -
|
||||||
|
* use non-WPA since the scan results did not indicate that the
|
||||||
|
* AP is using WPA or WPA2.
|
||||||
|
*/
|
||||||
|
wpa_supplicant_set_non_wpa_policy(wpa_s, ssid);
|
||||||
|
wpa_s->sme.assoc_req_ie_len = 0;
|
||||||
} else if (wpa_key_mgmt_wpa_any(ssid->key_mgmt)) {
|
} else if (wpa_key_mgmt_wpa_any(ssid->key_mgmt)) {
|
||||||
wpa_s->sme.assoc_req_ie_len = sizeof(wpa_s->sme.assoc_req_ie);
|
wpa_s->sme.assoc_req_ie_len = sizeof(wpa_s->sme.assoc_req_ie);
|
||||||
if (wpa_supplicant_set_suites(wpa_s, NULL, ssid,
|
if (wpa_supplicant_set_suites(wpa_s, NULL, ssid,
|
||||||
|
|
|
@ -1309,6 +1309,16 @@ void wpa_supplicant_associate(struct wpa_supplicant *wpa_s,
|
||||||
"key management and encryption suites");
|
"key management and encryption suites");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
} else if ((ssid->key_mgmt & WPA_KEY_MGMT_IEEE8021X_NO_WPA) && bss &&
|
||||||
|
wpa_key_mgmt_wpa_ieee8021x(ssid->key_mgmt)) {
|
||||||
|
/*
|
||||||
|
* Both WPA and non-WPA IEEE 802.1X enabled in configuration -
|
||||||
|
* use non-WPA since the scan results did not indicate that the
|
||||||
|
* AP is using WPA or WPA2.
|
||||||
|
*/
|
||||||
|
wpa_supplicant_set_non_wpa_policy(wpa_s, ssid);
|
||||||
|
wpa_ie_len = 0;
|
||||||
|
wpa_s->wpa_proto = 0;
|
||||||
} else if (wpa_key_mgmt_wpa_any(ssid->key_mgmt)) {
|
} else if (wpa_key_mgmt_wpa_any(ssid->key_mgmt)) {
|
||||||
wpa_ie_len = sizeof(wpa_ie);
|
wpa_ie_len = sizeof(wpa_ie);
|
||||||
if (wpa_supplicant_set_suites(wpa_s, NULL, ssid,
|
if (wpa_supplicant_set_suites(wpa_s, NULL, ssid,
|
||||||
|
|
Loading…
Reference in a new issue