]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
DPP: Clear authentication instance on configuration completion in AP
authorJouni Malinen <jouni@qca.qualcomm.com>
Mon, 27 Nov 2017 18:33:43 +0000 (20:33 +0200)
committerJouni Malinen <j@w1.fi>
Mon, 27 Nov 2017 18:33:43 +0000 (20:33 +0200)
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>
src/ap/dpp_hostapd.c
src/ap/dpp_hostapd.h
src/ap/gas_serv.c

index e1d798e7d986a3b9154d3f0e2d302761245b48c6..81c3989277c10968f8a4ff5622d0b125741e7134 100644 (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)
 {
        struct dpp_configurator *conf;
index ecbdcf6f52412554bfc28b5e436a57ade3c9dc5f..c2c6200a0aaf3dc414ab348b7154069447757983 100644 (file)
@@ -26,6 +26,7 @@ void hostapd_dpp_tx_status(struct hostapd_data *hapd, const u8 *dst,
 struct wpabuf *
 hostapd_dpp_gas_req_handler(struct hostapd_data *hapd, const u8 *sa,
                            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_remove(struct hostapd_data *hapd, const char *id);
 int hostapd_dpp_configurator_sign(struct hostapd_data *hapd, const char *cmd);
index fadb740f45307ea0bfcd9c958208c05c62ef6b35..6f27b966c541d1dfe15089e7d56b44f0014096f7 100644 (file)
@@ -1460,7 +1460,7 @@ static void gas_serv_req_dpp_processing(struct hostapd_data *hapd,
                        gas_serv_write_dpp_adv_proto(tx_buf);
                        wpabuf_put_le16(tx_buf, wpabuf_len(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);
        }
@@ -1702,7 +1702,7 @@ static void gas_serv_rx_gas_comeback_req(struct hostapd_data *hapd,
                        "SD response sent");
 #ifdef CONFIG_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 */
                gas_serv_dialog_clear(dialog);
                gas_serv_free_dialogs(hapd, sa);