diff options
author | Thomas Haller <thaller@redhat.com> | 2017-06-05 17:32:39 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2017-06-05 17:32:39 +0200 |
commit | 14529f5b4635f8b856b7698a2eebc687b31c516e (patch) | |
tree | 53efba761ab60f8ebea13e2bbeca8341b37760a9 | |
parent | de0da1df32fc29a3a89afb549c7d9e8ff016fc09 (diff) | |
parent | 8870b7ab129463f10bd34da71555ff19ecdb307f (diff) | |
download | NetworkManager-14529f5b4635f8b856b7698a2eebc687b31c516e.tar.gz |
wifi: merge branch 'th/wifi-ap-hidden'
https://github.com/NetworkManager/NetworkManager/pull/22
-rw-r--r-- | src/devices/wifi/nm-device-wifi.c | 43 |
1 files changed, 30 insertions, 13 deletions
diff --git a/src/devices/wifi/nm-device-wifi.c b/src/devices/wifi/nm-device-wifi.c index 6153f5d93c..633bcd6aae 100644 --- a/src/devices/wifi/nm-device-wifi.c +++ b/src/devices/wifi/nm-device-wifi.c @@ -791,15 +791,18 @@ complete_connection (NMDevice *device, NMSettingWireless *s_wifi; const char *setting_mac; char *str_ssid = NULL; - NMWifiAP *ap = NULL; + NMWifiAP *ap; const GByteArray *ssid = NULL; GByteArray *tmp_ssid = NULL; GBytes *setting_ssid = NULL; gboolean hidden = FALSE; const char *perm_hw_addr; + const char *mode; s_wifi = nm_connection_get_setting_wireless (connection); + mode = s_wifi ? nm_setting_wireless_get_mode (s_wifi) : NULL; + if (!specific_object) { /* If not given a specific object, we need at minimum an SSID */ if (!s_wifi) { @@ -819,19 +822,29 @@ complete_connection (NMDevice *device, return FALSE; } - /* Find a compatible AP in the scan list */ - ap = find_first_compatible_ap (self, connection, FALSE); + if (!nm_streq0 (mode, NM_SETTING_WIRELESS_MODE_AP)) { + /* Find a compatible AP in the scan list */ + ap = find_first_compatible_ap (self, connection, FALSE); - /* If we still don't have an AP, then the WiFI settings needs to be - * fully specified by the client. Might not be able to find an AP - * if the network isn't broadcasting the SSID for example. - */ - if (!ap) { + /* If we still don't have an AP, then the WiFI settings needs to be + * fully specified by the client. Might not be able to find an AP + * if the network isn't broadcasting the SSID for example. + */ + if (!ap) { + if (!nm_setting_verify (NM_SETTING (s_wifi), connection, error)) + return FALSE; + + hidden = TRUE; + } + } else { if (!nm_setting_verify (NM_SETTING (s_wifi), connection, error)) return FALSE; - - hidden = TRUE; + ap = NULL; } + } else if (nm_streq0 (mode, NM_SETTING_WIRELESS_MODE_AP)) { + if (!nm_setting_verify (NM_SETTING (s_wifi), connection, error)) + return FALSE; + ap = NULL; } else { ap = get_ap_by_path (self, specific_object); if (!ap) { @@ -1364,8 +1377,12 @@ hidden_filter_func (NMSettings *settings, if (!nm_connection_is_type (NM_CONNECTION (connection), NM_SETTING_WIRELESS_SETTING_NAME)) return FALSE; - s_wifi = (NMSettingWireless *) nm_connection_get_setting_wireless (NM_CONNECTION (connection)); - return s_wifi ? nm_setting_wireless_get_hidden (s_wifi) : FALSE; + s_wifi = nm_connection_get_setting_wireless (NM_CONNECTION (connection)); + if (!s_wifi) + return FALSE; + if (nm_streq0 (nm_setting_wireless_get_mode (s_wifi), NM_SETTING_WIRELESS_MODE_AP)) + return FALSE; + return nm_setting_wireless_get_hidden (s_wifi); } static GPtrArray * @@ -1488,7 +1505,7 @@ request_wireless_scan (NMDeviceWifi *self, gboolean force_if_scanning, GVariant ? nm_utils_ssid_to_utf8 (ssid->data, ssid->len) : NULL; _LOGD (LOGD_WIFI, "wifi-scan: (%u) probe scanning SSID %s%s%s", - i, NM_PRINT_FMT_QUOTED (foo, "\"", foo, "\"", "<hidden>")); + i, NM_PRINT_FMT_QUOTED (foo, "\"", foo, "\"", "*any*")); g_free (foo); } } else |