Browse Source

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>
Jouni Malinen 7 years ago
parent
commit
634a130a52
3 changed files with 17 additions and 2 deletions
  1. 14 0
      src/ap/dpp_hostapd.c
  2. 1 0
      src/ap/dpp_hostapd.h
  3. 2 2
      src/ap/gas_serv.c

+ 14 - 0
src/ap/dpp_hostapd.c

@@ -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;

+ 1 - 0
src/ap/dpp_hostapd.h

@@ -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);

+ 2 - 2
src/ap/gas_serv.c

@@ -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);