wifi: fix completing Wi-Fi connection for AP mode

In AP mode we should not look up an access point. It is wrong to
do, and it ends up marking the connection as hidden.

It seems wrong to me that if the client explicitly set
hidden=FALSE before AddAndActivate(), that complete_connection()
would still set it to TRUE if it cannot find the access
point. That is, because complete_connection() does not know
whether hidden was omitted or set intentionally by the user.
This commit is contained in:
Thomas Haller 2017-06-03 17:40:53 +02:00
parent 74335004f3
commit c5fb410998

View file

@ -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) {