|
@@ -398,6 +398,9 @@ static int wpa_supplicant_match_privacy(struct wpa_bss *bss,
|
|
if (wpa_key_mgmt_wpa(ssid->key_mgmt))
|
|
if (wpa_key_mgmt_wpa(ssid->key_mgmt))
|
|
privacy = 1;
|
|
privacy = 1;
|
|
|
|
|
|
|
|
+ if (ssid->key_mgmt & WPA_KEY_MGMT_OSEN)
|
|
|
|
+ privacy = 1;
|
|
|
|
+
|
|
if (bss->caps & IEEE80211_CAP_PRIVACY)
|
|
if (bss->caps & IEEE80211_CAP_PRIVACY)
|
|
return privacy;
|
|
return privacy;
|
|
return !privacy;
|
|
return !privacy;
|
|
@@ -539,6 +542,12 @@ static int wpa_supplicant_ssid_bss_match(struct wpa_supplicant *wpa_s,
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if ((ssid->key_mgmt & WPA_KEY_MGMT_OSEN) &&
|
|
|
|
+ wpa_bss_get_vendor_ie(bss, OSEN_IE_VENDOR_TYPE)) {
|
|
|
|
+ wpa_dbg(wpa_s, MSG_DEBUG, " allow in OSEN");
|
|
|
|
+ return 1;
|
|
|
|
+ }
|
|
|
|
+
|
|
if (!wpa_key_mgmt_wpa(ssid->key_mgmt)) {
|
|
if (!wpa_key_mgmt_wpa(ssid->key_mgmt)) {
|
|
wpa_dbg(wpa_s, MSG_DEBUG, " allow in non-WPA/WPA2");
|
|
wpa_dbg(wpa_s, MSG_DEBUG, " allow in non-WPA/WPA2");
|
|
return 1;
|
|
return 1;
|
|
@@ -736,6 +745,7 @@ static struct wpa_ssid * wpa_scan_res_match(struct wpa_supplicant *wpa_s,
|
|
struct wpa_blacklist *e;
|
|
struct wpa_blacklist *e;
|
|
const u8 *ie;
|
|
const u8 *ie;
|
|
struct wpa_ssid *ssid;
|
|
struct wpa_ssid *ssid;
|
|
|
|
+ int osen;
|
|
|
|
|
|
ie = wpa_bss_get_vendor_ie(bss, WPA_IE_VENDOR_TYPE);
|
|
ie = wpa_bss_get_vendor_ie(bss, WPA_IE_VENDOR_TYPE);
|
|
wpa_ie_len = ie ? ie[1] : 0;
|
|
wpa_ie_len = ie ? ie[1] : 0;
|
|
@@ -743,14 +753,18 @@ static struct wpa_ssid * wpa_scan_res_match(struct wpa_supplicant *wpa_s,
|
|
ie = wpa_bss_get_ie(bss, WLAN_EID_RSN);
|
|
ie = wpa_bss_get_ie(bss, WLAN_EID_RSN);
|
|
rsn_ie_len = ie ? ie[1] : 0;
|
|
rsn_ie_len = ie ? ie[1] : 0;
|
|
|
|
|
|
|
|
+ ie = wpa_bss_get_vendor_ie(bss, OSEN_IE_VENDOR_TYPE);
|
|
|
|
+ osen = ie != NULL;
|
|
|
|
+
|
|
wpa_dbg(wpa_s, MSG_DEBUG, "%d: " MACSTR " ssid='%s' "
|
|
wpa_dbg(wpa_s, MSG_DEBUG, "%d: " MACSTR " ssid='%s' "
|
|
- "wpa_ie_len=%u rsn_ie_len=%u caps=0x%x level=%d%s%s",
|
|
|
|
|
|
+ "wpa_ie_len=%u rsn_ie_len=%u caps=0x%x level=%d%s%s%s",
|
|
i, MAC2STR(bss->bssid), wpa_ssid_txt(bss->ssid, bss->ssid_len),
|
|
i, MAC2STR(bss->bssid), wpa_ssid_txt(bss->ssid, bss->ssid_len),
|
|
wpa_ie_len, rsn_ie_len, bss->caps, bss->level,
|
|
wpa_ie_len, rsn_ie_len, bss->caps, bss->level,
|
|
wpa_bss_get_vendor_ie(bss, WPS_IE_VENDOR_TYPE) ? " wps" : "",
|
|
wpa_bss_get_vendor_ie(bss, WPS_IE_VENDOR_TYPE) ? " wps" : "",
|
|
(wpa_bss_get_vendor_ie(bss, P2P_IE_VENDOR_TYPE) ||
|
|
(wpa_bss_get_vendor_ie(bss, P2P_IE_VENDOR_TYPE) ||
|
|
wpa_bss_get_vendor_ie_beacon(bss, P2P_IE_VENDOR_TYPE)) ?
|
|
wpa_bss_get_vendor_ie_beacon(bss, P2P_IE_VENDOR_TYPE)) ?
|
|
- " p2p" : "");
|
|
|
|
|
|
+ " p2p" : "",
|
|
|
|
+ osen ? " osen=1" : "");
|
|
|
|
|
|
e = wpa_blacklist_get(wpa_s, bss->bssid);
|
|
e = wpa_blacklist_get(wpa_s, bss->bssid);
|
|
if (e) {
|
|
if (e) {
|
|
@@ -848,7 +862,7 @@ static struct wpa_ssid * wpa_scan_res_match(struct wpa_supplicant *wpa_s,
|
|
if (!wpa_supplicant_ssid_bss_match(wpa_s, ssid, bss))
|
|
if (!wpa_supplicant_ssid_bss_match(wpa_s, ssid, bss))
|
|
continue;
|
|
continue;
|
|
|
|
|
|
- if (!wpa &&
|
|
|
|
|
|
+ if (!osen && !wpa &&
|
|
!(ssid->key_mgmt & WPA_KEY_MGMT_NONE) &&
|
|
!(ssid->key_mgmt & WPA_KEY_MGMT_NONE) &&
|
|
!(ssid->key_mgmt & WPA_KEY_MGMT_WPS) &&
|
|
!(ssid->key_mgmt & WPA_KEY_MGMT_WPS) &&
|
|
!(ssid->key_mgmt & WPA_KEY_MGMT_IEEE8021X_NO_WPA)) {
|
|
!(ssid->key_mgmt & WPA_KEY_MGMT_IEEE8021X_NO_WPA)) {
|
|
@@ -863,6 +877,12 @@ static struct wpa_ssid * wpa_scan_res_match(struct wpa_supplicant *wpa_s,
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if ((ssid->key_mgmt & WPA_KEY_MGMT_OSEN) && !osen) {
|
|
|
|
+ wpa_dbg(wpa_s, MSG_DEBUG, " skip - non-OSEN network "
|
|
|
|
+ "not allowed");
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+
|
|
if (!wpa_supplicant_match_privacy(bss, ssid)) {
|
|
if (!wpa_supplicant_match_privacy(bss, ssid)) {
|
|
wpa_dbg(wpa_s, MSG_DEBUG, " skip - privacy "
|
|
wpa_dbg(wpa_s, MSG_DEBUG, " skip - privacy "
|
|
"mismatch");
|
|
"mismatch");
|