]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
Interworking: Reject BSS based on disallow_aps
authorJouni Malinen <jouni@qca.qualcomm.com>
Wed, 6 Nov 2013 22:01:48 +0000 (00:01 +0200)
committerJouni Malinen <j@w1.fi>
Wed, 6 Nov 2013 22:12:30 +0000 (00:12 +0200)
If a BSS is disallowed temporarily with disallow_aps, the network
connection is going to fail. As such, there is not much point in
allowing Interworking network selection to try to connect with such BSS.
As such, do not consider disallowed networks for automatic network
selection and reject requests to connect to them through
INTERWORKING_CONNECT.

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

wpa_supplicant/interworking.c

index ffb3cb3fcb4dfaba898f6d9effce7416501e34f5..6f50c9726722079dfa938957d39d5447a1dafbe7 100644 (file)
@@ -1267,6 +1267,12 @@ int interworking_connect(struct wpa_supplicant *wpa_s, struct wpa_bss *bss)
 
        if (wpa_s->conf->cred == NULL || bss == NULL)
                return -1;
+       if (disallowed_bssid(wpa_s, bss->bssid) ||
+           disallowed_ssid(wpa_s, bss->ssid, bss->ssid_len)) {
+               wpa_printf(MSG_DEBUG, "Interworking: Reject connection to disallowed BSS "
+                          MACSTR, MAC2STR(bss->bssid));
+               return -1;
+       }
        ie = wpa_bss_get_ie(bss, WLAN_EID_SSID);
        if (ie == NULL || ie[1] == 0) {
                wpa_printf(MSG_DEBUG, "Interworking: No SSID known for "
@@ -1597,6 +1603,13 @@ static struct wpa_cred * interworking_credentials_available(
 {
        struct wpa_cred *cred, *cred2;
 
+       if (disallowed_bssid(wpa_s, bss->bssid) ||
+           disallowed_ssid(wpa_s, bss->ssid, bss->ssid_len)) {
+               wpa_printf(MSG_DEBUG, "Interworking: Ignore disallowed BSS "
+                          MACSTR, MAC2STR(bss->bssid));
+               return NULL;
+       }
+
        cred = interworking_credentials_available_realm(wpa_s, bss);
        cred2 = interworking_credentials_available_3gpp(wpa_s, bss);
        if (cred && cred2 && cred2->priority >= cred->priority)
@@ -1883,6 +1896,9 @@ static void interworking_next_anqp_fetch(struct wpa_supplicant *wpa_s)
                ie = wpa_bss_get_ie(bss, WLAN_EID_EXT_CAPAB);
                if (ie == NULL || ie[1] < 4 || !(ie[5] & 0x80))
                        continue; /* AP does not support Interworking */
+               if (disallowed_bssid(wpa_s, bss->bssid) ||
+                   disallowed_ssid(wpa_s, bss->ssid, bss->ssid_len))
+                       continue; /* Disallowed BSS */
 
                if (!(bss->flags & WPA_BSS_ANQP_FETCH_TRIED)) {
                        if (bss->anqp == NULL) {