]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
wpa_supplicant: Test all compiled drivers before failing
authorSamuel Ortiz <sameo@linux.intel.com>
Tue, 9 Nov 2010 14:45:27 +0000 (16:45 +0200)
committerJouni Malinen <j@w1.fi>
Tue, 9 Nov 2010 14:45:27 +0000 (16:45 +0200)
wpa_supplicant_set_driver() is returning an error if the first driver
in the driver list is not built in. It should continue through the
driver list until it finds one that's built in.

wpa_supplicant/wpa_supplicant.c

index ff1cfd33f5569616f4f13d98ebfe6c91c69840f6..0a603af06a82b29a59d7286ac17bab5a77a981e6 100644 (file)
@@ -1702,7 +1702,7 @@ static int wpa_supplicant_set_driver(struct wpa_supplicant *wpa_s,
 {
        int i;
        size_t len;
-       const char *pos;
+       const char *pos, *driver = name;
 
        if (wpa_s == NULL)
                return -1;
@@ -1720,20 +1720,26 @@ static int wpa_supplicant_set_driver(struct wpa_supplicant *wpa_s,
                return 0;
        }
 
-       pos = os_strchr(name, ',');
-       if (pos)
-               len = pos - name;
-       else
-               len = os_strlen(name);
-       for (i = 0; wpa_drivers[i]; i++) {
-               if (os_strlen(wpa_drivers[i]->name) == len &&
-                   os_strncmp(name, wpa_drivers[i]->name, len) ==
-                   0) {
-                       wpa_s->driver = wpa_drivers[i];
-                       wpa_s->global_drv_priv = wpa_s->global->drv_priv[i];
-                       return 0;
+       do {
+               pos = os_strchr(driver, ',');
+               if (pos)
+                       len = pos - driver;
+               else
+                       len = os_strlen(driver);
+
+               for (i = 0; wpa_drivers[i]; i++) {
+                       if (os_strlen(wpa_drivers[i]->name) == len &&
+                           os_strncmp(driver, wpa_drivers[i]->name, len) ==
+                           0) {
+                               wpa_s->driver = wpa_drivers[i];
+                               wpa_s->global_drv_priv =
+                                       wpa_s->global->drv_priv[i];
+                               return 0;
+                       }
                }
-       }
+
+               driver = pos + 1;
+       } while (pos);
 
        wpa_printf(MSG_ERROR, "Unsupported driver '%s'.", name);
        return -1;