mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-12-22 21:22:37 +01:00
peap: introduce and configure phase two eap method
This commit is contained in:
parent
50b7a01f87
commit
1ece3b13e4
@ -71,6 +71,8 @@ struct eap_peap_state {
|
|||||||
enum peap_version version;
|
enum peap_version version;
|
||||||
struct l_tls *tunnel;
|
struct l_tls *tunnel;
|
||||||
|
|
||||||
|
struct eap_state *phase2_eap;
|
||||||
|
|
||||||
struct databuf *tx_pdu_buf;
|
struct databuf *tx_pdu_buf;
|
||||||
struct databuf *plain_buf;
|
struct databuf *plain_buf;
|
||||||
|
|
||||||
@ -154,6 +156,11 @@ static void eap_peap_free(struct eap_state *eap)
|
|||||||
peap->tunnel = NULL;
|
peap->tunnel = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (peap->phase2_eap) {
|
||||||
|
eap_free(peap->phase2_eap);
|
||||||
|
peap->phase2_eap = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (peap->tx_pdu_buf) {
|
if (peap->tx_pdu_buf) {
|
||||||
databuf_free(peap->tx_pdu_buf);
|
databuf_free(peap->tx_pdu_buf);
|
||||||
peap->tx_pdu_buf = NULL;
|
peap->tx_pdu_buf = NULL;
|
||||||
@ -176,6 +183,25 @@ static void eap_peap_free(struct eap_state *eap)
|
|||||||
l_free(peap);
|
l_free(peap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void eap_peap_phase2_send_response(const uint8_t *pdu, size_t pdu_len,
|
||||||
|
void *user_data)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static void eap_peap_phase2_complete(enum eap_result result, void *user_data)
|
||||||
|
{
|
||||||
|
struct eap_state *eap = user_data;
|
||||||
|
struct eap_peap_state *peap = eap_get_data(eap);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* PEAPv1 Section 2.2
|
||||||
|
*
|
||||||
|
* The receipt of a EAP-Failure or EAP-Success within the TLS protected
|
||||||
|
* channel results in a shutdown of the TLS channel by the peer.
|
||||||
|
*/
|
||||||
|
l_tls_close(peap->tunnel);
|
||||||
|
}
|
||||||
|
|
||||||
static void eap_peap_send_fragment(struct eap_state *eap)
|
static void eap_peap_send_fragment(struct eap_state *eap)
|
||||||
{
|
{
|
||||||
struct eap_peap_state *peap = eap_get_data(eap);
|
struct eap_peap_state *peap = eap_get_data(eap);
|
||||||
@ -577,6 +603,22 @@ static bool eap_peap_load_settings(struct eap_state *eap,
|
|||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
peap->phase2_eap = eap_new(eap_peap_phase2_send_response,
|
||||||
|
eap_peap_phase2_complete, eap);
|
||||||
|
|
||||||
|
if (!peap->phase2_eap) {
|
||||||
|
l_error("Could not create the PEAP phase two EAP instance");
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
|
snprintf(entry, sizeof(entry), "%sPEAP-Phase2-", prefix);
|
||||||
|
|
||||||
|
if (!eap_load_settings(peap->phase2_eap, settings, entry)) {
|
||||||
|
eap_free(peap->phase2_eap);
|
||||||
|
|
||||||
|
goto error;
|
||||||
|
}
|
||||||
|
|
||||||
eap_set_data(eap, peap);
|
eap_set_data(eap, peap);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
Loading…
Reference in New Issue
Block a user