mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-11-25 17:59:25 +01:00
peap: accept EAP type 33 as termination mechanism for PEAPv1
EAP Extensions type 33 is used in PEAPv0 as a termination mechanism for the tunneled EAP methods. In PEAPv1 the regular EAP-Success/Failure packets must be used to terminate the method. Some of the server implementations of PEAPv1 rely on EAP Extensions method to terminate the conversation instead of the required Success/Failure packets. This patch makes iwd interoperable with such devices.
This commit is contained in:
parent
397bf9c0bd
commit
958bd12624
@ -361,30 +361,29 @@ static void eap_peap_phase2_handle_request(struct eap_state *eap,
|
||||
size_t len)
|
||||
{
|
||||
struct eap_peap_state *peap = eap_get_data(eap);
|
||||
uint8_t id;
|
||||
|
||||
if (len > 4 && pkt[4] == EAP_TYPE_EXTENSIONS) {
|
||||
uint16_t pkt_len;
|
||||
uint8_t code = pkt[0];
|
||||
|
||||
if (code != EAP_CODE_REQUEST)
|
||||
return;
|
||||
|
||||
pkt_len = l_get_be16(pkt + 2);
|
||||
if (pkt_len != len)
|
||||
return;
|
||||
|
||||
id = pkt[1];
|
||||
|
||||
eap_extensions_handle_request(eap, id,
|
||||
pkt + EAP_EXTENSIONS_HEADER_LEN,
|
||||
len - EAP_EXTENSIONS_HEADER_LEN);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (peap->version == PEAP_VERSION_0) {
|
||||
uint8_t id;
|
||||
|
||||
if (len > 4 && pkt[4] == EAP_TYPE_EXTENSIONS) {
|
||||
uint16_t pkt_len;
|
||||
uint8_t code = pkt[0];
|
||||
|
||||
if (code != EAP_CODE_REQUEST)
|
||||
return;
|
||||
|
||||
pkt_len = l_get_be16(pkt + 2);
|
||||
if (pkt_len != len)
|
||||
return;
|
||||
|
||||
id = pkt[1];
|
||||
|
||||
eap_extensions_handle_request(eap, id,
|
||||
pkt + EAP_EXTENSIONS_HEADER_LEN,
|
||||
len - EAP_EXTENSIONS_HEADER_LEN);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (len < 1)
|
||||
return;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user