]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
DPP: Stop authentication exchange of DPP_STOP_LISTEN
authorJouni Malinen <jouni@qca.qualcomm.com>
Mon, 13 Nov 2017 10:12:08 +0000 (12:12 +0200)
committerJouni Malinen <j@w1.fi>
Mon, 13 Nov 2017 10:35:26 +0000 (12:35 +0200)
Previously, this command stopped listen operation immediately, but if
there was an ongoing authentication exchange, a new listen operation was
started. This is not really expected behavior, so stop the
authentication exchange first with this command to avoid restarting
listen operation.

Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
hostapd/ctrl_iface.c
src/ap/dpp_hostapd.c
src/ap/dpp_hostapd.h
wpa_supplicant/ctrl_iface.c
wpa_supplicant/dpp_supplicant.c
wpa_supplicant/dpp_supplicant.h

index 181760c21c92ec2b6fe11ef44450d7308c5a41d8..3161170b7693fe66f8b60f0c9b804846ea79def7 100644 (file)
@@ -3022,6 +3022,7 @@ static int hostapd_ctrl_iface_receive_process(struct hostapd_data *hapd,
                if (hostapd_dpp_listen(hapd, buf + 11) < 0)
                        reply_len = -1;
        } else if (os_strcmp(buf, "DPP_STOP_LISTEN") == 0) {
+               hostapd_dpp_stop(hapd);
                hostapd_dpp_listen_stop(hapd);
        } else if (os_strncmp(buf, "DPP_CONFIGURATOR_ADD", 20) == 0) {
                res = hostapd_dpp_configurator_add(hapd, buf + 20);
index a8d90fd0fe3ac2df5c91bd3d9f3eefc2efb037d2..a579e7fc8ea869a33700b71665736615caa7b059 100644 (file)
@@ -1600,6 +1600,13 @@ int hostapd_dpp_pkex_remove(struct hostapd_data *hapd, const char *id)
 }
 
 
+void hostapd_dpp_stop(struct hostapd_data *hapd)
+{
+       dpp_auth_deinit(hapd->dpp_auth);
+       hapd->dpp_auth = NULL;
+}
+
+
 int hostapd_dpp_init(struct hostapd_data *hapd)
 {
        dl_list_init(&hapd->dpp_bootstrap);
index f9d0efec2120fd98d58bffd210bca2c0d5b3a487..d3a57cd2edae6d6d19bd2d97cd4c57efb8774a1e 100644 (file)
@@ -30,6 +30,7 @@ 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_pkex_add(struct hostapd_data *hapd, const char *cmd);
 int hostapd_dpp_pkex_remove(struct hostapd_data *hapd, const char *id);
+void hostapd_dpp_stop(struct hostapd_data *hapd);
 int hostapd_dpp_init(struct hostapd_data *hapd);
 void hostapd_dpp_deinit(struct hostapd_data *hapd);
 
index 296423ae371c451faa45795032845c3e54908011..c2c423587e9f2609c815fd25abfbd2237edc976d 100644 (file)
@@ -10498,6 +10498,7 @@ char * wpa_supplicant_ctrl_iface_process(struct wpa_supplicant *wpa_s,
                if (wpas_dpp_listen(wpa_s, buf + 11) < 0)
                        reply_len = -1;
        } else if (os_strcmp(buf, "DPP_STOP_LISTEN") == 0) {
+               wpas_dpp_stop(wpa_s);
                wpas_dpp_listen_stop(wpa_s);
        } else if (os_strncmp(buf, "DPP_CONFIGURATOR_ADD", 20) == 0) {
                int res;
index bb4b5ada536cd7646e43300f2ad6f63990bad94f..2f7a9940ab01cd00ee20b70f58fe581b1f3b8198 100644 (file)
@@ -2201,6 +2201,13 @@ int wpas_dpp_pkex_remove(struct wpa_supplicant *wpa_s, const char *id)
 }
 
 
+void wpas_dpp_stop(struct wpa_supplicant *wpa_s)
+{
+       dpp_auth_deinit(wpa_s->dpp_auth);
+       wpa_s->dpp_auth = NULL;
+}
+
+
 int wpas_dpp_init(struct wpa_supplicant *wpa_s)
 {
        u8 adv_proto_id[7];
index 05a466d55f7c7a9115b1d2d3263a6629d69b6f14..0760b36484edf943480ce0c2638d1546c0e7c582 100644 (file)
@@ -30,6 +30,7 @@ int wpas_dpp_configurator_remove(struct wpa_supplicant *wpa_s, const char *id);
 int wpas_dpp_configurator_sign(struct wpa_supplicant *wpa_s, const char *cmd);
 int wpas_dpp_pkex_add(struct wpa_supplicant *wpa_s, const char *cmd);
 int wpas_dpp_pkex_remove(struct wpa_supplicant *wpa_s, const char *id);
+void wpas_dpp_stop(struct wpa_supplicant *wpa_s);
 int wpas_dpp_init(struct wpa_supplicant *wpa_s);
 void wpas_dpp_deinit(struct wpa_supplicant *wpa_s);
 int wpas_dpp_check_connect(struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid,