eap-tls: Implement reset_state method

This commit is contained in:
Denis Kenzior 2018-06-07 19:58:56 -05:00
parent 092ccb4372
commit e4bc7149c3
1 changed files with 34 additions and 18 deletions

View File

@ -47,34 +47,49 @@ struct eap_tls_state {
bool completed; bool completed;
}; };
static void __eap_tls_reset_state(struct eap_tls_state *tls)
{
tls->completed = false;
l_free(tls->rx_pkt_buf);
tls->rx_pkt_buf = NULL;
tls->rx_pkt_received = 0;
tls->rx_pkt_len = 0;
l_free(tls->tx_pkt_buf);
tls->tx_pkt_buf = NULL;
tls->tx_pkt_capacity = 0;
tls->tx_pkt_len = 0;
tls->tx_pkt_offset = 0;
if (tls->tls) {
l_tls_free(tls->tls);
tls->tls = NULL;
}
}
static bool eap_tls_reset_state(struct eap_state *eap)
{
struct eap_tls_state *tls = eap_get_data(eap);
__eap_tls_reset_state(tls);
return true;
}
static void eap_tls_free(struct eap_state *eap) static void eap_tls_free(struct eap_state *eap)
{ {
struct eap_tls_state *tls = eap_get_data(eap); struct eap_tls_state *tls = eap_get_data(eap);
__eap_tls_reset_state(tls);
eap_set_data(eap, NULL); eap_set_data(eap, NULL);
l_free(tls->ca_cert); l_free(tls->ca_cert);
l_free(tls->client_cert); l_free(tls->client_cert);
l_free(tls->client_key); l_free(tls->client_key);
if (tls->passphrase)
if (tls->passphrase) {
memset(tls->passphrase, 0, strlen(tls->passphrase)); memset(tls->passphrase, 0, strlen(tls->passphrase));
l_free(tls->passphrase); l_free(tls->passphrase);
if (tls->rx_pkt_buf) {
l_free(tls->rx_pkt_buf);
tls->rx_pkt_buf = NULL;
}
if (tls->tx_pkt_buf) {
l_free(tls->tx_pkt_buf);
tls->tx_pkt_buf = NULL;
tls->tx_pkt_capacity = 0;
tls->tx_pkt_len = 0;
}
if (tls->tls) {
l_tls_free(tls->tls);
tls->tls = NULL;
} }
l_free(tls); l_free(tls);
@ -518,6 +533,7 @@ static struct eap_method eap_tls = {
.handle_request = eap_tls_handle_request, .handle_request = eap_tls_handle_request,
.check_settings = eap_tls_check_settings, .check_settings = eap_tls_check_settings,
.load_settings = eap_tls_load_settings, .load_settings = eap_tls_load_settings,
.reset_state = eap_tls_reset_state,
}; };
static int eap_tls_init(void) static int eap_tls_init(void)