From b79151ef07b55ab43ef3a310b41788324967c3d2 Mon Sep 17 00:00:00 2001 From: Dan O'Reilly Date: Fri, 3 Apr 2009 19:07:00 -0400 Subject: [PATCH 1/2] Always use the "C" local when running external commands. --- wicd/misc.py | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/wicd/misc.py b/wicd/misc.py index f380794..3b66f2f 100644 --- a/wicd/misc.py +++ b/wicd/misc.py @@ -73,7 +73,6 @@ class WicdError(Exception): pass -__LANG = None def Run(cmd, include_stderr=False, return_pipe=False, return_obj=False, return_retcode=True): """ Run a command. @@ -93,7 +92,6 @@ def Run(cmd, include_stderr=False, return_pipe=False, for the command that was run. """ - global __LANG if not isinstance(cmd, list): cmd = to_unicode(str(cmd)) cmd = cmd.split() @@ -110,11 +108,9 @@ def Run(cmd, include_stderr=False, return_pipe=False, # We need to make sure that the results of the command we run # are in English, so we set up a temporary environment. - if not __LANG: - __LANG = get_good_lang() tmpenv = os.environ.copy() - tmpenv["LC_ALL"] = __LANG - tmpenv["LANG"] = __LANG + tmpenv["LC_ALL"] = "C" + tmpenv["LANG"] = "C" try: f = Popen(cmd, shell=False, stdout=PIPE, stdin=std_in, stderr=err, @@ -123,7 +119,6 @@ def Run(cmd, include_stderr=False, return_pipe=False, print "Running command %s failed: %s" % (str(cmd), str(e)) return "" - if return_obj: return f if return_pipe: @@ -131,14 +126,6 @@ def Run(cmd, include_stderr=False, return_pipe=False, else: return f.communicate()[0] -def get_good_lang(): - """ Check if en_US.utf8 is an available locale, if not use C. """ - output = Popen(["locale", "-a"], shell=False, stdout=PIPE).communicate()[0] - if "en_US.utf8" in output: - return "en_US.utf8" - else: - return "C" - def LaunchAndWait(cmd): """ Launches the given program with the given arguments, then blocks. @@ -553,4 +540,3 @@ def grouper(n, iterable, fillvalue=None): """ args = [iter(iterable)] * n return izip_longest(fillvalue=fillvalue, *args) - From 665fe76885d192c886a27c498176f2843cd75ea5 Mon Sep 17 00:00:00 2001 From: Dan O'Reilly Date: Sat, 4 Apr 2009 13:43:29 -0400 Subject: [PATCH 2/2] Fix crash with hidden essids if it was stored in wireless-settings.conf as None. Only trigger a wpa_supplicant rescan once when connecting. --- wicd/wicd-daemon.py | 11 +++++------ wicd/wnettools.py | 7 +++++-- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/wicd/wicd-daemon.py b/wicd/wicd-daemon.py index 1daa5be..e4e26fc 100644 --- a/wicd/wicd-daemon.py +++ b/wicd/wicd-daemon.py @@ -1170,18 +1170,17 @@ class WirelessDaemon(dbus.service.Object): cur_network["has_profile"] = True - # Read the essid because we need to name those hidden - # wireless networks now - but only read it if it is hidden. - if cur_network["hidden"]: - cur_network["essid"] = self.config.get(section, "essid") - if cur_network["essid"] in ["", "Hidden", ""]: - cur_network["essid"] = "" for x in self.config.options(section): if not cur_network.has_key(x) or x.endswith("script"): cur_network[x] = misc.Noneify(self.config.get(section, x)) for option in ['use_static_dns', 'use_global_dns', 'encryption', 'use_settings_globally']: cur_network[option] = bool(cur_network.get(option)) + # Read the essid because we need to name those hidden + # wireless networks now - but only read it if it is hidden. + if cur_network["hidden"]: + if cur_network.get("essid") in ["", "Hidden", "", None]: + cur_network["essid"] = "" return "100: Loaded Profile" @dbus.service.method('org.wicd.daemon.wireless') diff --git a/wicd/wnettools.py b/wicd/wnettools.py index a0eae85..62cf751 100644 --- a/wicd/wnettools.py +++ b/wicd/wnettools.py @@ -1094,7 +1094,8 @@ class BaseWirelessInterface(BaseInterface): except (UnicodeDecodeError, UnicodeEncodeError): print 'Unicode problem with current network essid, ignoring!!' return None - if ap['essid'] in ['', ""]: + if ap['essid'] in ['', "", None]: + print 'hidden' ap['hidden'] = True ap['essid'] = "" else: @@ -1176,6 +1177,7 @@ class BaseWirelessInterface(BaseInterface): MAX_TIME = 35 MAX_DISCONNECTED_TIME = 3 disconnected_time = 0 + forced_rescan = False while (time.time() - auth_time) < MAX_TIME: cmd = '%s -i %s status' % (self.wpa_cli_cmd, self.iface) output = misc.Run(cmd) @@ -1187,11 +1189,12 @@ class BaseWirelessInterface(BaseInterface): return False if result == "COMPLETED": return True - elif result == "DISCONNECTED": + elif result == "DISCONNECTED" and not forced_rescan: disconnected_time += 1 if disconnected_time > MAX_DISCONNECTED_TIME: disconnected_time = 0 # Force a rescan to get wpa_supplicant moving again. + forced_rescan = True self._ForceSupplicantScan() MAX_TIME += 5 else: