diff --git a/curses/prefs_curses.py b/curses/prefs_curses.py index d843705..a88ceb8 100644 --- a/curses/prefs_curses.py +++ b/curses/prefs_curses.py @@ -294,9 +294,7 @@ class PrefsDialog(urwid.WidgetWrap): ### Advanced settings # wpa_supplicant janx - self.wpadrivers = ["wext", "hostap", "madwifi", "atmel", - "ndiswrapper", "ipw"] - self.wpadrivers = wireless.GetWpaSupplicantDrivers(self.wpadrivers) + self.wpadrivers = wireless.GetWpaSupplicantDrivers() self.wpadrivers.append("ralink_legacy") # Same as above with the dbus.String self.thedrivers = [unicode(w) for w in self.wpadrivers] diff --git a/wicd/backends/be-external.py b/wicd/backends/be-external.py index 13f9303..640a804 100644 --- a/wicd/backends/be-external.py +++ b/wicd/backends/be-external.py @@ -31,7 +31,7 @@ class WirelessInterface() -- Control a wireless network interface. from wicd.wnettools import GetDefaultGateway, GetWiredInterfaces, \ GetWirelessInterfaces, IsValidWpaSuppDriver, BaseWirelessInterface, \ -BaseWiredInterface, BaseInterface +BaseWiredInterface, BaseInterface, GetWpaSupplicantDrivers NAME = "external" UPDATE_INTERVAL = 5 diff --git a/wicd/backends/be-ioctl.py b/wicd/backends/be-ioctl.py index a51db1b..d4f00bc 100644 --- a/wicd/backends/be-ioctl.py +++ b/wicd/backends/be-ioctl.py @@ -34,7 +34,8 @@ from wicd import misc from wicd import wpath from wicd.wnettools import GetDefaultGateway, GetWiredInterfaces, \ GetWirelessInterfaces, IsValidWpaSuppDriver, BaseWirelessInterface, \ -BaseWiredInterface, BaseInterface, wep_pattern, signaldbm_pattern, neediface +BaseWiredInterface, BaseInterface, GetWpaSupplicantDrivers, wep_pattern, \ +signaldbm_pattern, neediface try: import iwscan diff --git a/wicd/networking.py b/wicd/networking.py index ea6620b..605ca83 100644 --- a/wicd/networking.py +++ b/wicd/networking.py @@ -703,10 +703,9 @@ class Wireless(Controller): """ Get the out of iwconfig. """ return self.wiface.GetIwconfig() - def GetWpaSupplicantDrivers(self, drivers): - """ Returns all valid wpa_supplicant drivers in a list. """ - return [driver for driver in drivers if - BACKEND.IsValidWpaSuppDriver(driver)] + def GetWpaSupplicantDrivers(self): + """ Returns all valid wpa_supplicant drivers on the system. """ + return BACKEND.GetWpaSupplicantDrivers() def StopWPA(self): return self.wiface.StopWPA() diff --git a/wicd/prefs.py b/wicd/prefs.py index 7d3426e..757465a 100644 --- a/wicd/prefs.py +++ b/wicd/prefs.py @@ -375,9 +375,7 @@ class PreferencesDialog(object): # Replacement for the combo box hack self.wpadrivercombo = build_combobox("pref_wpa_combobox") - self.wpadrivers = ["wext", "hostap", "madwifi", "atmel", - "ndiswrapper", "ipw"] - self.wpadrivers = wireless.GetWpaSupplicantDrivers(self.wpadrivers) + self.wpadrivers = wireless.GetWpaSupplicantDrivers() self.wpadrivers.append("ralink_legacy") for x in self.wpadrivers: diff --git a/wicd/wicd-daemon.py b/wicd/wicd-daemon.py index 201b8f5..cdb0e7f 100644 --- a/wicd/wicd-daemon.py +++ b/wicd/wicd-daemon.py @@ -1269,9 +1269,9 @@ class WirelessDaemon(dbus.service.Object): self.config.remove_section(essid_key) @dbus.service.method('org.wicd.daemon.wireless') - def GetWpaSupplicantDrivers(self, drivers): - """ Returns all valid wpa_supplicant drivers in a given list. """ - return self.wifi.GetWpaSupplicantDrivers(drivers) + def GetWpaSupplicantDrivers(self): + """ Returns all valid wpa_supplicant drivers. """ + return self.wifi.GetWpaSupplicantDrivers() @dbus.service.method('org.wicd.daemon.wireless') def ReloadConfig(self): diff --git a/wicd/wnettools.py b/wicd/wnettools.py index eaa9be5..bfb2b37 100644 --- a/wicd/wnettools.py +++ b/wicd/wnettools.py @@ -155,6 +155,17 @@ def NeedsExternalCalls(): """ Returns True if the backend needs to use an external program. """ raise NotImplementedError +def GetWpaSupplicantDrivers(): + """ Returns a list of all valid wpa_supplicant drivers. """ + output = misc.Run(["wpa_supplicant", "-h"]) + try: + output = output.split("drivers:")[1].split("options:")[0].strip() + except: + print "Warning: Couldn't get list of valid wpa_supplicant drivers" + return [""] + patt = re.compile("(\S+)\s+=.*") + return patt.findall(output) or [""] + def IsValidWpaSuppDriver(driver): """ Returns True if given string is a valid wpa_supplicant driver. """ output = misc.Run(["wpa_supplicant", "-D%s" % driver, "-iolan19",