diff --git a/NEWS b/NEWS index 68e2913..1f241f7 100644 --- a/NEWS +++ b/NEWS @@ -1,4 +1,12 @@ -Wicd 1.7.0 Branch +Wicd 1.7 Series +--------------- + +1.7.1 + Major Changes: + - Wireless networks with NULL bytes ('\x00') in the ESSID are not + supported. They will still show up in the UIs, but you won't be able + to do anything with them. + 1.7.1b2: Changes for Packagers: - You will now want to use the --python option to setup.py configure to diff --git a/cli/wicd-cli.py b/cli/wicd-cli.py index 89113c7..6145771 100755 --- a/cli/wicd-cli.py +++ b/cli/wicd-cli.py @@ -158,6 +158,9 @@ if options.network_property: if not options.set_to: print wireless.GetWirelessProperty(network_id, options.network_property) else: + if '' in wireless.GetWirelessProperty(network_id, 'essid'): + print 'ERROR: networks with NULL bytes are not supported.' + sys.exit(2) wireless.SetWirelessProperty(network_id, \ options.network_property, options.set_to) elif options.wired: @@ -184,6 +187,9 @@ if options.connect: is_valid_wireless_network_id(options.network) name = wireless.GetWirelessProperty(options.network, 'essid') encryption = wireless.GetWirelessProperty(options.network, 'enctype') + if '' in name: + print 'ERROR: networks with NULL bytes are not supported.' + sys.exit(2) print "Connecting to %s with %s on %s" % (name, encryption, wireless.DetectWirelessInterface()) wireless.ConnectWireless(options.network) @@ -242,6 +248,10 @@ if options.wireless and options.list_encryption_types: if options.save and options.network > -1: if options.wireless: is_valid_wireless_network_id(options.network) + essid = wireless.GetWirelessProperty(options.network, 'essid') + if '' in essid: + print 'ERROR: networks with NULL bytes are not supported.' + sys.exit(2) config.SaveWirelessNetworkProfile(options.network) elif options.wired: config.SaveWiredNetworkProfile(options.name) diff --git a/curses/wicd-curses.py b/curses/wicd-curses.py index 7b8a5e7..e2c4148 100755 --- a/curses/wicd-curses.py +++ b/curses/wicd-curses.py @@ -364,6 +364,9 @@ class NetLabel(urwid.WidgetWrap): self.__super.__init__(w) def selectable(self): + # Disable widget if the ESSID contains one (or more) NULL byte + if '' in self.essid: + return False return True def keypress(self,size,key): return self._w.keypress(size,key) diff --git a/gtk/netentry.py b/gtk/netentry.py index 9842bf1..814240f 100644 --- a/gtk/netentry.py +++ b/gtk/netentry.py @@ -861,7 +861,11 @@ class WirelessNetworkEntry(NetworkEntry): self.show_all() self.advanced_dialog = WirelessSettingsDialog(networkID) self.wifides = self.connect("destroy", self.destroy_called) - + + # Disable widget if the ESSID contains one (or more) NULL byte + if '' in self.essid: + self.set_sensitive(False) + def _escape(self, val): """ Escapes special characters so they're displayed correctly. """ return val.replace("&", "&").replace("<", "<").\ diff --git a/wicd/wnettools.py b/wicd/wnettools.py index 81aeaed..5825586 100644 --- a/wicd/wnettools.py +++ b/wicd/wnettools.py @@ -1251,6 +1251,12 @@ class BaseWirelessInterface(BaseInterface): except (UnicodeDecodeError, UnicodeEncodeError): print 'Unicode problem with current network essid, ignoring!!' return None + + # We (well, DBus) don't support ESSIDs with null bytes in it. + # Substitute the byte for use everywhere, so that the UIs know + # what to disable. + ap['essid'].replace('\x00', '') + if ap['essid'] in ['Hidden', '', "", None]: print 'hidden' ap['hidden'] = True