aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndriy Tkachuk <andriy.v.tkachuk@globallogic.com>2009-11-01 20:19:02 (GMT)
committerJouni Malinen <j@w1.fi>2009-11-22 19:12:53 (GMT)
commit213837d44e59285b70b7c3c4100d44bf965aabb3 (patch)
tree2a992020ab0a7e10d26b2b79910c7aaeacc0b540
parentd0912572d7a0f786e016a4cae1afd550e7af78f8 (diff)
downloadhostap-06-213837d44e59285b70b7c3c4100d44bf965aabb3.zip
hostap-06-213837d44e59285b70b7c3c4100d44bf965aabb3.tar.gz
hostap-06-213837d44e59285b70b7c3c4100d44bf965aabb3.tar.bz2
WPS: SelectedRegistrar expiration for internal PIN registrar
Though we have such a timeout when handling SetSelectedRegistrar UPnP message from an external registrar, it looks like we don't have one when the internal registrar is activated for PIN connection. Thus we set the SelectedRegistrar flag when AP is activated for PIN connection but we never reset it - not by some timeout, nor when registration succeeds. This lead to situations where AP everlastingly declare that it is activated for WPS PIN connection when in reality it is not. Use the same timeout (and also success with PIN) to clear the selected registrar flag when using internal registrar, too. (cherry picked from commit 72ffc08242cc1b8200ceb4af7bf7b723e2a07012)
-rw-r--r--src/wps/wps_registrar.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/wps/wps_registrar.c b/src/wps/wps_registrar.c
index 31f958e..f9a6bcb 100644
--- a/src/wps/wps_registrar.c
+++ b/src/wps/wps_registrar.c
@@ -443,6 +443,10 @@ int wps_registrar_add_pin(struct wps_registrar *reg, const u8 *uuid,
reg->selected_registrar = 1;
reg->pbc = 0;
wps_set_ie(reg);
+ eloop_cancel_timeout(wps_registrar_set_selected_timeout, reg, NULL);
+ eloop_register_timeout(WPS_PBC_WALK_TIME, 0,
+ wps_registrar_set_selected_timeout,
+ reg, NULL);
return 0;
}
@@ -610,6 +614,14 @@ static void wps_registrar_pbc_completed(struct wps_registrar *reg)
wps_registrar_stop_pbc(reg);
}
+static void wps_registrar_pin_completed(struct wps_registrar *reg)
+{
+ wpa_printf(MSG_DEBUG, "WPS: PIN completed using internal Registrar");
+ eloop_cancel_timeout(wps_registrar_set_selected_timeout, reg, NULL);
+ reg->selected_registrar = 0;
+ wps_set_ie(reg);
+}
+
/**
* wps_registrar_probe_req_rx - Notify Registrar of Probe Request
@@ -2387,6 +2399,8 @@ static enum wps_process_res wps_process_wsc_done(struct wps_data *wps,
wps_registrar_remove_pbc_session(wps->wps->registrar,
wps->mac_addr_e, wps->uuid_e);
wps_registrar_pbc_completed(wps->wps->registrar);
+ } else {
+ wps_registrar_pin_completed(wps->wps->registrar);
}
wps_success_event(wps->wps);