dbus: Treat '' in SSIDs of Interface.Scan as a request for broadcast scan
This patch changes wpa_supplicant policy for handling '' in SSIDs field of Interface.SSID DBus message. It treats '' (zero-length) SSID as a request for a broadcast scan, instead of ignoring it. This patch updates DBus API .Scan() logic per the test cases listed below: 1) Interface.Scan({'Type':'active', 'Channel':(2412, 20)}) Request: Active scan with only '' SSID (1 channel) Should be: 1 broadcast ProbeRequest on specified channel Previous: 1 broadcast ProbeRequest on specified channel This Patch: 1 broadcast ProbeRequest on specified channel 2) Interface.Scan({'Type':'active', 'Channel':(2412, 20), 'SSIDs':['']}) Request: Active scan with only '' SSID (1 channel) Should be: 1 broadcast ProbeRequest on specified channel Previous: No ProbeRequests; passive scan results for specified channel This Patch: FIXED: 1 broadcast ProbeRequest on specified channel 3) Interface.Scan({'Type':'active', 'Channel':(2412, 20), 'SSIDs':['MySSID']}) Request: Active scan with only non-'' SSIDs (1 channel) Should be: 1 directed ProbeRequest for each SSID on specified channel, no broadcast ProbeRequest Previous: 1 directed ProbeRequest for each SSID on specified channel, no broadcast ProbeRequest This Patch: 1 directed ProbeRequest for each SSID on specified channel, no broadcast ProbeRequest 4) Interface.Scan({'Type':'active', 'Channel':(2412, 20), 'SSIDs':['', 'MySSID']}) Request: Active scan with SSIDs, including 1 '' SSID (1 channel) Should be: 1 broadcast ProbeRequest, 1 directed ProbeRequest for each non-'' SSID on specified channel Previous: 1 directed ProbeRequest for each non-'' SSID on specified channel This Patch: FIXED: 1 broadcast ProbeRequest, 1 directed ProbeRequest for each non-'' SSID on specified channel
This commit is contained in:
parent
a7af023b84
commit
556522ee09
1 changed files with 16 additions and 13 deletions
|
@ -987,21 +987,24 @@ static int wpas_dbus_get_scan_ssids(DBusMessage *message, DBusMessageIter *var,
|
||||||
dbus_message_iter_recurse(&array_iter, &sub_array_iter);
|
dbus_message_iter_recurse(&array_iter, &sub_array_iter);
|
||||||
|
|
||||||
dbus_message_iter_get_fixed_array(&sub_array_iter, &val, &len);
|
dbus_message_iter_get_fixed_array(&sub_array_iter, &val, &len);
|
||||||
if (len == 0) {
|
|
||||||
dbus_message_iter_next(&array_iter);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if (len != 0) {
|
||||||
ssid = os_malloc(len);
|
ssid = os_malloc(len);
|
||||||
if (ssid == NULL) {
|
if (ssid == NULL) {
|
||||||
wpa_printf(MSG_DEBUG, "wpas_dbus_handler_scan[dbus]: "
|
wpa_printf(MSG_DEBUG,
|
||||||
"out of memory. Cannot allocate memory for "
|
"wpas_dbus_handler_scan[dbus]: "
|
||||||
"SSID");
|
"out of memory. Cannot allocate "
|
||||||
|
"memory for SSID");
|
||||||
*reply = dbus_message_new_error(
|
*reply = dbus_message_new_error(
|
||||||
message, DBUS_ERROR_NO_MEMORY, NULL);
|
message, DBUS_ERROR_NO_MEMORY, NULL);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
os_memcpy(ssid, val, len);
|
os_memcpy(ssid, val, len);
|
||||||
|
} else {
|
||||||
|
/* Allow zero-length SSIDs */
|
||||||
|
ssid = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
ssids[ssids_num].ssid = ssid;
|
ssids[ssids_num].ssid = ssid;
|
||||||
ssids[ssids_num].ssid_len = len;
|
ssids[ssids_num].ssid_len = len;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue