]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
SAE: Allow commit fields to be overridden for testing purposes (STA)
authorJouni Malinen <jouni@qca.qualcomm.com>
Fri, 1 Sep 2017 23:12:44 +0000 (02:12 +0300)
committerJouni Malinen <j@w1.fi>
Mon, 4 Sep 2017 10:32:03 +0000 (13:32 +0300)
The new "SET sae_commit_override <hexdump>" control interface command
can be used to force wpa_supplicant to override SAE commit message
fields for testing purposes. This is included only in
CONFIG_TESTING_OPTIONS=y builds.

Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
wpa_supplicant/ctrl_iface.c
wpa_supplicant/sme.c
wpa_supplicant/wpa_supplicant_i.h

index 62b1bafc55cefbec9516bd6abaf45a89fa5072ee..6710ca34e821a5b7dc51976d256714431dc7e1bc 100644 (file)
@@ -636,6 +636,12 @@ static int wpa_supplicant_ctrl_iface_set(struct wpa_supplicant *wpa_s,
                        wpa_s->get_pref_freq_list_override = NULL;
                else
                        wpa_s->get_pref_freq_list_override = os_strdup(value);
+       } else if (os_strcasecmp(cmd, "sae_commit_override") == 0) {
+               wpabuf_free(wpa_s->sae_commit_override);
+               if (value[0] == '\0')
+                       wpa_s->sae_commit_override = NULL;
+               else
+                       wpa_s->sae_commit_override = wpabuf_parse_bin(value);
 #ifdef CONFIG_DPP
        } else if (os_strcasecmp(cmd, "dpp_config_obj_override") == 0) {
                os_free(wpa_s->dpp_config_obj_override);
@@ -7766,6 +7772,8 @@ static void wpa_supplicant_ctrl_iface_flush(struct wpa_supplicant *wpa_s)
        wpa_sm_set_test_assoc_ie(wpa_s->wpa, NULL);
        os_free(wpa_s->get_pref_freq_list_override);
        wpa_s->get_pref_freq_list_override = NULL;
+       wpabuf_free(wpa_s->sae_commit_override);
+       wpa_s->sae_commit_override = NULL;
 #endif /* CONFIG_TESTING_OPTIONS */
 
        wpa_s->disconnected = 0;
index f1bd89ee5e144ec1f7fbe4e45d7cfdf4f3ed2298..a4d5f75b947175ff9b586f711094c380beb3f13e 100644 (file)
@@ -88,6 +88,19 @@ static struct wpabuf * sme_auth_build_sae_commit(struct wpa_supplicant *wpa_s,
        struct wpabuf *buf;
        size_t len;
 
+#ifdef CONFIG_TESTING_OPTIONS
+       if (wpa_s->sae_commit_override) {
+               wpa_printf(MSG_DEBUG, "SAE: TESTING - commit override");
+               buf = wpabuf_alloc(4 + wpabuf_len(wpa_s->sae_commit_override));
+               if (!buf)
+                       return NULL;
+               wpabuf_put_le16(buf, 1); /* Transaction seq# */
+               wpabuf_put_le16(buf, WLAN_STATUS_SUCCESS);
+               wpabuf_put_buf(buf, wpa_s->sae_commit_override);
+               return buf;
+       }
+#endif /* CONFIG_TESTING_OPTIONS */
+
        if (ssid->passphrase == NULL) {
                wpa_printf(MSG_DEBUG, "SAE: No password available");
                return NULL;
index 61ea5ee3d41e4ef66d5bea7621a9a5bebe149d96..13eab2f407d4fbaef40b5ee9c70f42baf0581f79 100644 (file)
@@ -1076,6 +1076,7 @@ struct wpa_supplicant {
        unsigned int p2p_go_csa_on_inv:1;
        unsigned int ignore_auth_resp:1;
        unsigned int ignore_assoc_disallow:1;
+       struct wpabuf *sae_commit_override;
 #endif /* CONFIG_TESTING_OPTIONS */
 
        struct wmm_ac_assoc_data *wmm_ac_assoc_info;