From c3bcda73cb6cae66d31d054189a42f3a129b760b Mon Sep 17 00:00:00 2001 From: Dan O'Reilly Date: Sun, 8 Feb 2009 16:09:55 -0500 Subject: [PATCH 1/4] Enforce only one scan being allowed to happen at a time in the daemon. --- .bzrignore | 1 + wicd/wicd-daemon.py | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.bzrignore b/.bzrignore index e1b9094..4cb9c80 100644 --- a/.bzrignore +++ b/.bzrignore @@ -2,3 +2,4 @@ experimental.wpr install.log uninstall.log .bzrignore +vcsinfo.py diff --git a/wicd/wicd-daemon.py b/wicd/wicd-daemon.py index 44c6b2e..086e039 100644 --- a/wicd/wicd-daemon.py +++ b/wicd/wicd-daemon.py @@ -97,6 +97,7 @@ class WicdDaemon(dbus.service.Object): self.connection_info = [""] self.auto_connecting = False self.prefer_wired = False + self._scanning = False self.dhcp_client = 0 self.link_detect_tool = 0 self.flush_tool = 0 @@ -949,6 +950,10 @@ class WirelessDaemon(dbus.service.Object): be done synchronously. """ + if self._scanning: + if self.debug_mode: + print "scan already in progress, skipping" + return False if self.debug_mode: print 'scanning start' self.SendStartScanSignal() @@ -956,6 +961,7 @@ class WirelessDaemon(dbus.service.Object): self._sync_scan() else: self._async_scan() + return True @misc.threaded def _async_scan(self): @@ -1251,12 +1257,12 @@ class WirelessDaemon(dbus.service.Object): @dbus.service.signal(dbus_interface='org.wicd.daemon.wireless', signature='') def SendStartScanSignal(self): """ Emits a signal announcing a scan has started. """ - pass + self._scanning = True @dbus.service.signal(dbus_interface='org.wicd.daemon.wireless', signature='') def SendEndScanSignal(self): """ Emits a signal announcing a scan has finished. """ - pass + self._scanning = False def _wireless_autoconnect(self, fresh=True): """ Attempts to autoconnect to a wireless network. """ From 725da7c5b3d2def45e77e5bf5a62ef70ac443f16 Mon Sep 17 00:00:00 2001 From: Dan O'Reilly Date: Sun, 8 Feb 2009 16:14:17 -0500 Subject: [PATCH 2/4] Applied LC_MESSAGES patch from David Paleino --- wicd/misc.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/wicd/misc.py b/wicd/misc.py index 0f22f49..daa1110 100644 --- a/wicd/misc.py +++ b/wicd/misc.py @@ -313,16 +313,20 @@ def get_gettext(): # http://www.learningpython.com/2006/12/03/translating-your-pythonpygtk-application/ local_path = wpath.translations langs = [] + osLanguage = os.environ.get('LANGUAGE', None) + if osLanguage: + langs += osLanguage.split(":") + osLanguage = None + osLanguage = os.environ.get('LC_MESSAGES', None) + if osLanguage: + langs += osLanguage.split(":") try: lc, encoding = locale.getdefaultlocale() except ValueError, e: print str(e) print "Default locale unavailable, falling back to en_US" if (lc): - langs = [lc] - osLanguage = os.environ.get('LANGUAGE', None) - if (osLanguage): - langs += osLanguage.split(":") + langs += [lc] langs += ["en_US"] lang = gettext.translation('wicd', local_path, languages=langs, fallback=True) From e162bb1c7b1fcf99179ee4b6e60f75ebaa9efb8f Mon Sep 17 00:00:00 2001 From: Dan O'Reilly Date: Sun, 8 Feb 2009 18:42:05 -0500 Subject: [PATCH 3/4] Fix crashing bug in daemon. Dont have wicd-monitor inherit stdin from the daemon. --- wicd/wicd-daemon.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/wicd/wicd-daemon.py b/wicd/wicd-daemon.py index 086e039..5ac55fa 100644 --- a/wicd/wicd-daemon.py +++ b/wicd/wicd-daemon.py @@ -97,7 +97,6 @@ class WicdDaemon(dbus.service.Object): self.connection_info = [""] self.auto_connecting = False self.prefer_wired = False - self._scanning = False self.dhcp_client = 0 self.link_detect_tool = 0 self.flush_tool = 0 @@ -922,6 +921,7 @@ class WirelessDaemon(dbus.service.Object): self.wifi = wifi self._debug_mode = debug self.forced_disconnect = False + self._scanning = False self.LastScan = [] self.config = ConfigManager(os.path.join(wpath.etc, "wireless-settings.conf"), @@ -1272,9 +1272,7 @@ class WirelessDaemon(dbus.service.Object): print 'Autoconnect failed because wireless interface returned None' return if fresh: - print 'start scan' self.Scan(sync=True) - print 'end scan' for x, network in enumerate(self.LastScan): if bool(network["has_profile"]): @@ -1680,10 +1678,8 @@ def main(argv): wicd_bus = dbus.service.BusName('org.wicd.daemon', bus=bus) daemon = WicdDaemon(wicd_bus, auto_connect=auto_connect) if not no_poll: - (child_pid, x, x, x) = gobject.spawn_async( - [misc.find_path("python"), "-O", os.path.join(wpath.lib, "monitor.py")], - flags=gobject.SPAWN_CHILD_INHERITS_STDIN - ) + (child_pid, x, y, z) = gobject.spawn_async( + [misc.find_path("python"), "-O", os.path.join(wpath.lib, "monitor.py")]) signal.signal(signal.SIGTERM, sigterm_caught) # Enter the main loop From 896510324d1321e7ac63f52a04060953f9077322 Mon Sep 17 00:00:00 2001 From: Dan O'Reilly Date: Sun, 8 Feb 2009 19:59:53 -0500 Subject: [PATCH 4/4] Tweak algorithm for searching for sudo progs so we search every directory in $PATH for a particular app before moving on to the next one. --- wicd/misc.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/wicd/misc.py b/wicd/misc.py index daa1110..bfd6a06 100644 --- a/wicd/misc.py +++ b/wicd/misc.py @@ -409,17 +409,19 @@ def choose_sudo_prog(prog_num=0): return find_path(sudo_dict[prog_num]) desktop_env = detect_desktop_environment() env_path = os.environ['PATH'].split(":") + paths = [] if desktop_env == "kde": - paths = [] - for p in env_path: - paths.extend([p + '/kdesu', p + '/kdesudo', p + '/ktsuss']) + progs = ["kdesu", "kdesudo", "ktusss"] else: - paths = [] - for p in env_path: - paths.extend([p + '/gksudo', p + "/gksu", p + '/ktsuss']) + progs = ["gksudo", "gksu", "ktsuss"] + + for prog in progs: + paths.extend([os.path.join(p, prog) for p in env_path]) + for path in paths: if os.path.exists(path): + print "returning %s" % path return path return None