static void rsn_preauth_timeout(void *eloop_ctx, void *timeout_ctx) { struct wpa_supplicant *wpa_s = eloop_ctx; wpa_msg(wpa_s, MSG_INFO, "RSN: pre-authentication with " MACSTR " timed out", MAC2STR(wpa_s->preauth_bssid)); rsn_preauth_deinit(wpa_s); rsn_preauth_candidate_process(wpa_s); }
static void rsn_preauth_timeout(void *eloop_ctx, void *timeout_ctx) { struct wpa_sm *sm = eloop_ctx; wpa_msg(sm->ctx->ctx, MSG_INFO, "RSN: pre-authentication with " MACSTR " timed out", MAC2STR(sm->preauth_bssid)); rsn_preauth_deinit(sm); rsn_preauth_candidate_process(sm); }
static void test_eapol_clean(struct wpa_supplicant *wpa_s) { rsn_preauth_deinit(wpa_s->wpa); pmksa_candidate_free(wpa_s->wpa); wpa_sm_deinit(wpa_s->wpa); scard_deinit(wpa_s->scard); if (wpa_s->ctrl_iface) { wpa_supplicant_ctrl_iface_deinit(wpa_s->ctrl_iface); wpa_s->ctrl_iface = NULL; } wpa_config_free(wpa_s->conf); }
static int wpa_supplicant_ctrl_iface_preauth(struct wpa_supplicant *wpa_s, char *addr) { u8 bssid[ETH_ALEN]; if (hwaddr_aton(addr, bssid)) { wpa_printf(MSG_DEBUG, "CTRL_IFACE PREAUTH: invalid address " "'%s'", addr); return -1; } wpa_printf(MSG_DEBUG, "CTRL_IFACE PREAUTH " MACSTR, MAC2STR(bssid)); rsn_preauth_deinit(wpa_s->wpa); if (rsn_preauth_init(wpa_s->wpa, bssid, wpa_s->current_ssid)) return -1; return 0; }
static void rsn_preauth_eapol_cb(struct eapol_sm *eapol, int success, void *ctx) { struct wpa_sm *sm = ctx; u8 pmk[PMK_LEN]; if (success) { int res, pmk_len; pmk_len = PMK_LEN; res = eapol_sm_get_key(eapol, pmk, PMK_LEN); if (res) { /* * EAP-LEAP is an exception from other EAP methods: it * uses only 16-byte PMK. */ res = eapol_sm_get_key(eapol, pmk, 16); pmk_len = 16; } if (res == 0) { wpa_hexdump_key(MSG_DEBUG, "RSN: PMK from pre-auth", pmk, pmk_len); sm->pmk_len = pmk_len; pmksa_cache_add(sm->pmksa, pmk, pmk_len, sm->preauth_bssid, sm->own_addr, sm->network_ctx, WPA_KEY_MGMT_IEEE8021X); } else { wpa_msg(sm->ctx->ctx, MSG_INFO, "RSN: failed to get " "master session key from pre-auth EAPOL state " "machines"); success = 0; } } wpa_msg(sm->ctx->ctx, MSG_INFO, "RSN: pre-authentication with " MACSTR " %s", MAC2STR(sm->preauth_bssid), success ? "completed successfully" : "failed"); rsn_preauth_deinit(sm); rsn_preauth_candidate_process(sm); }
static void rsn_preauth_eapol_cb(struct eapol_sm *eapol, int success, void *ctx) { struct wpa_sm *sm = ctx; u8 pmk[PMK_LEN]; if (success) { int res, pmk_len; pmk_len = PMK_LEN; res = eapol_sm_get_key(eapol, pmk, PMK_LEN); #ifdef EAP_LEAP if (res) { res = eapol_sm_get_key(eapol, pmk, 16); pmk_len = 16; } #endif /* EAP_LEAP */ if (res == 0) { wpa_hexdump_key(MSG_DEBUG, "RSN: PMK from pre-auth", pmk, pmk_len); sm->pmk_len = pmk_len; pmksa_cache_add(sm, pmk, pmk_len, sm->preauth_bssid, sm->own_addr, sm->cur_ssid); } else { wpa_msg(sm->ctx->ctx, MSG_INFO, "RSN: failed to get " "master session key from pre-auth EAPOL state " "machines"); success = 0; } } wpa_msg(sm->ctx->ctx, MSG_INFO, "RSN: pre-authentication with " MACSTR " %s", MAC2STR(sm->preauth_bssid), success ? "completed successfully" : "failed"); rsn_preauth_deinit(sm); rsn_preauth_candidate_process(sm); }