]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
Add test code for fetching the last configured GTK
authorJouni Malinen <jouni@qca.qualcomm.com>
Fri, 28 Oct 2011 11:39:44 +0000 (14:39 +0300)
committerJouni Malinen <j@w1.fi>
Mon, 20 May 2013 08:00:56 +0000 (11:00 +0300)
This can be useful for some test cases, so allow wpa_supplicant to be
built with special test functionality to expose the current (last
configured) GTK. This is disabled by default and can be enabled by
adding following line into .config:
CFLAGS += -DCONFIG_TESTING_GET_GTK

The GTK can then be fetched with "wpa_cli get gtk".

Signed-hostap: Jouni Malinen <jouni@qca.qualcomm.com>

wpa_supplicant/ctrl_iface.c
wpa_supplicant/wpa_supplicant_i.h
wpa_supplicant/wpas_glue.c

index a5b70d9257f100c4fa6824c5e1ad01b6ed1a74a8..ae0bcbcc1ccad14f606f94d85639432da5d12551 100644 (file)
@@ -461,6 +461,14 @@ static int wpa_supplicant_ctrl_iface_get(struct wpa_supplicant *wpa_s,
                        return -1;
                return res;
 #endif /* CONFIG_WIFI_DISPLAY */
+#ifdef CONFIG_TESTING_GET_GTK
+       } else if (os_strcmp(cmd, "gtk") == 0) {
+               if (wpa_s->last_gtk_len == 0)
+                       return -1;
+               res = wpa_snprintf_hex(buf, buflen, wpa_s->last_gtk,
+                                      wpa_s->last_gtk_len);
+               return res;
+#endif /* CONFIG_TESTING_GET_GTK */
        }
 
        if (res < 0 || (unsigned int) res >= buflen)
index f4e6faff507f0b1715bc5eea1bf5775030438a3f..c971ae4642bee710c7836441a6acb00897b638a0 100644 (file)
@@ -708,6 +708,11 @@ struct wpa_supplicant {
        u8 wnm_bss_termination_duration[12];
        struct neighbor_report *wnm_neighbor_report_elements;
 #endif /* CONFIG_WNM */
+
+#ifdef CONFIG_TESTING_GET_GTK
+       u8 last_gtk[32];
+       size_t last_gtk_len;
+#endif /* CONFIG_TESTING_GET_GTK */
 };
 
 
index 1a64df38cf884428b77288ba23c349fa8adfee7b..40720c5e4d5b29597993731af673980d49b9a68c 100644 (file)
@@ -437,6 +437,13 @@ static int wpa_supplicant_set_key(void *_wpa_s, enum wpa_alg alg,
                /* Clear the MIC error counter when setting a new PTK. */
                wpa_s->mic_errors_seen = 0;
        }
+#ifdef CONFIG_TESTING_GET_GTK
+       if (key_idx > 0 && addr && is_broadcast_ether_addr(addr) &&
+           alg != WPA_ALG_NONE && key_len <= sizeof(wpa_s->last_gtk)) {
+               os_memcpy(wpa_s->last_gtk, key, key_len);
+               wpa_s->last_gtk_len = key_len;
+       }
+#endif /* CONFIG_TESTING_GET_GTK */
        return wpa_drv_set_key(wpa_s, alg, addr, key_idx, set_tx, seq, seq_len,
                               key, key_len);
 }