dbus: Treat '' in SSIDs of Interface.Scan as a request for broadcast scan
authorDaniel Kurtz <djkurtz@google.com>
Sat, 9 Oct 2010 13:27:53 +0000 (16:27 +0300)
committerJouni Malinen <j@w1.fi>
Sat, 9 Oct 2010 13:27:53 +0000 (16:27 +0300)
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

wpa_supplicant/dbus/dbus_new_handlers.c

index da39fa1..73f4e44 100644 (file)
@@ -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_get_fixed_array(&sub_array_iter, &val, &len);
-               if (len == 0) {
-                       dbus_message_iter_next(&array_iter);
-                       continue;
-               }
 
-               ssid = os_malloc(len);
-               if (ssid == NULL) {
-                       wpa_printf(MSG_DEBUG, "wpas_dbus_handler_scan[dbus]: "
-                                  "out of memory. Cannot allocate memory for "
-                                  "SSID");
-                       *reply = dbus_message_new_error(
-                               message, DBUS_ERROR_NO_MEMORY, NULL);
-                       return -1;
+               if (len != 0) {
+                       ssid = os_malloc(len);
+                       if (ssid == NULL) {
+                               wpa_printf(MSG_DEBUG,
+                                          "wpas_dbus_handler_scan[dbus]: "
+                                          "out of memory. Cannot allocate "
+                                          "memory for SSID");
+                               *reply = dbus_message_new_error(
+                                       message, DBUS_ERROR_NO_MEMORY, NULL);
+                               return -1;
+                       }
+                       os_memcpy(ssid, val, len);
+               } else {
+                       /* Allow zero-length SSIDs */
+                       ssid = NULL;
                }
-               os_memcpy(ssid, val, len);
+
                ssids[ssids_num].ssid = ssid;
                ssids[ssids_num].ssid_len = len;