DPP: Clear authentication instance on configuration completion in AP

wpa_supplicant was already doing this and hostapd needs to clear
hapd->dpp_auth when completing the exchange in Configurator (GAS server)
role.

Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
Jouni Malinen 2017-11-27 20:33:43 +02:00 committed by Jouni Malinen
parent 8b4adc38aa
commit 634a130a52
3 changed files with 17 additions and 2 deletions

View file

@ -1456,6 +1456,20 @@ hostapd_dpp_gas_req_handler(struct hostapd_data *hapd, const u8 *sa,
} }
void hostapd_dpp_gas_status_handler(struct hostapd_data *hapd, int ok)
{
if (!hapd->dpp_auth)
return;
if (ok)
wpa_msg(hapd->msg_ctx, MSG_INFO, DPP_EVENT_CONF_SENT);
else
wpa_msg(hapd->msg_ctx, MSG_INFO, DPP_EVENT_CONF_FAILED);
dpp_auth_deinit(hapd->dpp_auth);
hapd->dpp_auth = NULL;
}
static unsigned int hostapd_dpp_next_configurator_id(struct hostapd_data *hapd) static unsigned int hostapd_dpp_next_configurator_id(struct hostapd_data *hapd)
{ {
struct dpp_configurator *conf; struct dpp_configurator *conf;

View file

@ -26,6 +26,7 @@ void hostapd_dpp_tx_status(struct hostapd_data *hapd, const u8 *dst,
struct wpabuf * struct wpabuf *
hostapd_dpp_gas_req_handler(struct hostapd_data *hapd, const u8 *sa, hostapd_dpp_gas_req_handler(struct hostapd_data *hapd, const u8 *sa,
const u8 *query, size_t query_len); const u8 *query, size_t query_len);
void hostapd_dpp_gas_status_handler(struct hostapd_data *hapd, int ok);
int hostapd_dpp_configurator_add(struct hostapd_data *hapd, const char *cmd); int hostapd_dpp_configurator_add(struct hostapd_data *hapd, const char *cmd);
int hostapd_dpp_configurator_remove(struct hostapd_data *hapd, const char *id); int hostapd_dpp_configurator_remove(struct hostapd_data *hapd, const char *id);
int hostapd_dpp_configurator_sign(struct hostapd_data *hapd, const char *cmd); int hostapd_dpp_configurator_sign(struct hostapd_data *hapd, const char *cmd);

View file

@ -1460,7 +1460,7 @@ static void gas_serv_req_dpp_processing(struct hostapd_data *hapd,
gas_serv_write_dpp_adv_proto(tx_buf); gas_serv_write_dpp_adv_proto(tx_buf);
wpabuf_put_le16(tx_buf, wpabuf_len(buf)); wpabuf_put_le16(tx_buf, wpabuf_len(buf));
wpabuf_put_buf(tx_buf, buf); wpabuf_put_buf(tx_buf, buf);
wpa_msg(hapd->msg_ctx, MSG_INFO, DPP_EVENT_CONF_SENT); hostapd_dpp_gas_status_handler(hapd, 1);
} }
wpabuf_free(buf); wpabuf_free(buf);
} }
@ -1702,7 +1702,7 @@ static void gas_serv_rx_gas_comeback_req(struct hostapd_data *hapd,
"SD response sent"); "SD response sent");
#ifdef CONFIG_DPP #ifdef CONFIG_DPP
if (dialog->dpp) if (dialog->dpp)
wpa_msg(hapd->msg_ctx, MSG_INFO, DPP_EVENT_CONF_SENT); hostapd_dpp_gas_status_handler(hapd, 1);
#endif /* CONFIG_DPP */ #endif /* CONFIG_DPP */
gas_serv_dialog_clear(dialog); gas_serv_dialog_clear(dialog);
gas_serv_free_dialogs(hapd, sa); gas_serv_free_dialogs(hapd, sa);