From 997e523722cb45f51c4962e2b5b0dfff83772046 Mon Sep 17 00:00:00 2001 From: Dan O'Reilly Date: Tue, 30 Dec 2008 23:20:00 -0500 Subject: [PATCH] Add a domain entry for dns settings. Display an error if global dns is enabled for a network, but global dns entries aren't entered in the general preferences window. --- data/wicd.glade | 90 ++++++++++++++++++++++++++++--------------- wicd/configmanager.py | 6 +-- wicd/gui.py | 6 ++- wicd/misc.py | 6 ++- wicd/netentry.py | 16 ++++++-- wicd/networking.py | 35 +++++++++-------- wicd/prefs.py | 11 ++++-- wicd/wicd-daemon.py | 24 ++++++++---- wicd/wnettools.py | 6 ++- 9 files changed, 134 insertions(+), 66 deletions(-) diff --git a/data/wicd.glade b/data/wicd.glade index 8a5260d..bb6bdc2 100644 --- a/data/wicd.glade +++ b/data/wicd.glade @@ -1,6 +1,6 @@ - + 450 @@ -424,7 +424,7 @@ True - 16 + 17 2 4 4 @@ -458,8 +458,8 @@ 1 2 - 6 - 7 + 7 + 8 @@ -471,8 +471,8 @@ 1 2 - 7 - 8 + 8 + 9 @@ -484,8 +484,8 @@ 1 2 - 8 - 9 + 9 + 10 @@ -537,8 +537,8 @@ - 6 - 7 + 7 + 8 @@ -555,8 +555,8 @@ - 7 - 8 + 8 + 9 @@ -573,8 +573,8 @@ - 8 - 9 + 9 + 10 @@ -586,8 +586,8 @@ 1 2 - 9 - 10 + 10 + 11 @@ -604,8 +604,8 @@ - 9 - 10 + 10 + 11 @@ -692,8 +692,8 @@ 2 - 10 - 11 + 11 + 12 @@ -715,8 +715,8 @@ 2 - 11 - 12 + 12 + 13 @@ -738,8 +738,8 @@ 2 - 12 - 13 + 13 + 14 @@ -760,8 +760,8 @@ 2 - 13 - 14 + 14 + 15 @@ -774,8 +774,8 @@ 2 - 14 - 15 + 15 + 16 @@ -795,8 +795,38 @@ 2 - 15 - 16 + 16 + 17 + + + + + + True + True + + + 1 + 2 + 6 + 7 + + + + + True + 24 + + + True + 0 + DNS domain: + + + + + 6 + 7 diff --git a/wicd/configmanager.py b/wicd/configmanager.py index 2b130a9..6630773 100644 --- a/wicd/configmanager.py +++ b/wicd/configmanager.py @@ -26,7 +26,7 @@ reusable for other purposes as well. from ConfigParser import RawConfigParser -from wicd.misc import stringToNone +from wicd.misc import stringToNone, Noneify class ConfigManager(RawConfigParser): @@ -89,12 +89,12 @@ class ConfigManager(RawConfigParser): ret = default else: ret = None - + # Try to intelligently handle the type of the return value. try: ret = int(ret) except (ValueError, TypeError): - ret = stringToNone(ret) + ret = Noneify(ret) return ret def get(self, *args, **kargs): diff --git a/wicd/gui.py b/wicd/gui.py index 39dad83..93fbb93 100644 --- a/wicd/gui.py +++ b/wicd/gui.py @@ -303,9 +303,9 @@ class appGui(object): bus.add_signal_receiver(handle_no_dbus, "DaemonClosing", "org.wicd.daemon") try: - gobject.timeout_add_seconds(1, self.update_statusbar) + gobject.timeout_add_seconds(2, self.update_statusbar) except: - gobject.timeout_add(1000, self.update_statusbar) + gobject.timeout_add(2000, self.update_statusbar) self.refresh_clicked() @@ -689,6 +689,7 @@ class appGui(object): not entry.chkbox_global_dns.get_active(): entry.set_net_prop('use_static_dns', True) entry.set_net_prop('use_global_dns', False) + entry.set_net_prop('dns_domain', noneToString(entry.txt_domain.get_text())) entry.set_net_prop("search_domain", noneToString(entry.txt_search_dom.get_text())) entry.set_net_prop("dns1", noneToString(entry.txt_dns_1.get_text())) entry.set_net_prop("dns2", noneToString(entry.txt_dns_2.get_text())) @@ -700,6 +701,7 @@ class appGui(object): else: entry.set_net_prop('use_static_dns', False) entry.set_net_prop('use_global_dns', False) + entry.set_net_prop('dns_domain', '') entry.set_net_prop("search_domain", '') entry.set_net_prop("dns1", '') entry.set_net_prop("dns2", '') diff --git a/wicd/misc.py b/wicd/misc.py index dcb9ce9..e412cdc 100644 --- a/wicd/misc.py +++ b/wicd/misc.py @@ -498,10 +498,12 @@ def get_language_list_gui(): language["route_flush"] = _("Route Table Flushing") language["backend"] = _("Backend") language["backend_alert"] = _("Changes to your backend won't occur until the daemon is restarted.") - language['search_domain'] = _("Search Domain") + language['dns_domain'] = _("DNS domain") + language['search_domain'] = _("Search domain") + language['global_dns_not_enabled'] = _("Global DNS has not been enabled in general preferences.") language['scripts_need_pass'] = _('You must enter your password to configure scripts') language['no_sudo_prog'] = _("Could not find a graphical sudo program. The script editor could not be launched." + - "You'll have to edit scripts directly your configuration file.") + " You'll have to edit scripts directly your configuration file.") language['0'] = _('0') language['1'] = _('1') diff --git a/wicd/netentry.py b/wicd/netentry.py index b9581d1..40a5fd3 100644 --- a/wicd/netentry.py +++ b/wicd/netentry.py @@ -115,6 +115,7 @@ class AdvancedSettingsDialog(gtk.Dialog): self.txt_netmask = LabelEntry(language['netmask']) self.txt_gateway = LabelEntry(language['gateway']) self.txt_search_dom = LabelEntry(language['search_domain']) + self.txt_domain = LabelEntry(language['dns_domain']) self.txt_dns_1 = LabelEntry(language['dns'] + ' ' + language['1']) self.txt_dns_2 = LabelEntry(language['dns'] + ' ' + language['2']) self.txt_dns_3 = LabelEntry(language['dns'] + ' ' + language['3']) @@ -125,16 +126,19 @@ class AdvancedSettingsDialog(gtk.Dialog): self.hbox_dns.pack_start(self.chkbox_static_dns) self.hbox_dns.pack_start(self.chkbox_global_dns) + assert(isinstance(self.vbox, gtk.VBox)) self.vbox.pack_start(self.chkbox_static_ip, fill=False, expand=False) self.vbox.pack_start(self.txt_ip, fill=False, expand=False) self.vbox.pack_start(self.txt_netmask, fill=False, expand=False) self.vbox.pack_start(self.txt_gateway, fill=False, expand=False) self.vbox.pack_start(self.hbox_dns, fill=False, expand=False) + self.vbox.pack_start(self.txt_domain, fill=False, expand=False) self.vbox.pack_start(self.txt_search_dom, fill=False, expand=False) self.vbox.pack_start(self.txt_dns_1, fill=False, expand=False) self.vbox.pack_start(self.txt_dns_2, fill=False, expand=False) self.vbox.pack_start(self.txt_dns_3, fill=False, expand=False) + # Connect the events to the actions self.chkbox_static_ip.connect("toggled", self.toggle_ip_checkbox) self.chkbox_static_dns.connect("toggled", self.toggle_dns_checkbox) @@ -206,7 +210,7 @@ class AdvancedSettingsDialog(gtk.Dialog): self.chkbox_global_dns.set_sensitive(self.chkbox_static_dns. get_active()) - l = [self.txt_dns_1, self.txt_dns_2, self.txt_dns_3, + l = [self.txt_dns_1, self.txt_dns_2, self.txt_dns_3, self.txt_domain, self.txt_search_dom] if self.chkbox_static_dns.get_active(): # If global dns is on, don't use local dns @@ -219,9 +223,13 @@ class AdvancedSettingsDialog(gtk.Dialog): def toggle_global_dns_checkbox(self, widget=None): """ Set the DNS entries' sensitivity based on the Global checkbox. """ + global_dns_active = daemon.GetUseGlobalDNS() + if not global_dns_active and self.chkbox_global_dns.get_active(): + error(None, language['global_dns_not_enabled']) + self.chkbox_global_dns.set_active(False) if daemon.GetUseGlobalDNS() and self.chkbox_static_dns.get_active(): - for w in [self.txt_dns_1, self.txt_dns_2, - self.txt_dns_3, self.txt_search_dom]: + for w in [self.txt_dns_1, self.txt_dns_2, self.txt_dns_3, + self.txt_domain, self.txt_search_dom]: w.set_sensitive(not self.chkbox_global_dns.get_active()) def destroy_called(self, *args): @@ -251,6 +259,7 @@ class WiredSettingsDialog(AdvancedSettingsDialog): self.txt_dns_1.set_text(self.format_entry("dns1")) self.txt_dns_2.set_text(self.format_entry("dns2")) self.txt_dns_3.set_text(self.format_entry("dns3")) + self.txt_domain.set_text(self.format_entry("dns_domain")) self.txt_search_dom.set_text(self.format_entry("search_domain")) self.chkbox_global_dns.set_active(bool(wired.GetWiredProperty("use_global_dns"))) self.reset_static_checkboxes() @@ -335,6 +344,7 @@ class WirelessSettingsDialog(AdvancedSettingsDialog): self.txt_dns_1.set_text(self.format_entry(networkID, "dns1")) self.txt_dns_2.set_text(self.format_entry(networkID, "dns2")) self.txt_dns_3.set_text(self.format_entry(networkID, "dns3")) + self.txt_domain.set_text(self.format_entry(networkID, "dns_domain")) self.txt_search_dom.set_text(self.format_entry(networkID, "search_domain")) self.reset_static_checkboxes() diff --git a/wicd/networking.py b/wicd/networking.py index 6193e86..160e3a3 100644 --- a/wicd/networking.py +++ b/wicd/networking.py @@ -109,6 +109,7 @@ class Controller(object): self.global_dns_1 = None self.global_dns_2 = None self.global_dns_3 = None + self.global_dns_dom = None self.global_search_dom = None self._dhcp_client = None self._flush_tool = None @@ -226,7 +227,7 @@ class ConnectThread(threading.Thread): lock = thread.allocate_lock() def __init__(self, network, interface_name, before_script, after_script, - disconnect_script, gdns1, gdns2, gdns3, gsearch_dom, + disconnect_script, gdns1, gdns2, gdns3, gdns_dom, gsearch_dom, iface, debug): """ Initialise the required object variables and the thread. @@ -258,6 +259,7 @@ class ConnectThread(threading.Thread): self.global_dns_1 = gdns1 self.global_dns_2 = gdns2 self.global_dns_3 = gdns3 + self.global_dns_dom = gdns_dom self.global_search_dom = gsearch_dom self.iface = iface @@ -383,16 +385,18 @@ class ConnectThread(threading.Thread): """ if self.network.get('use_global_dns'): BACKEND.SetDNS(misc.Noneify(self.global_dns_1), - misc.Noneify(self.global_dns_2), - misc.Noneify(self.global_dns_3), - misc.Noneify(self.global_search_dom)) + misc.Noneify(self.global_dns_2), + misc.Noneify(self.global_dns_3), + misc.Noneify(self.global_dns_dom), + misc.Noneify(self.global_search_dom)) elif self.network.get('use_static_dns') and (self.network.get('dns1') or self.network.get('dns2') or self.network.get('dns3')): self.SetStatus('setting_static_dns') BACKEND.SetDNS(self.network.get('dns1'), - self.network.get('dns2'), - self.network.get('dns3'), - self.network.get('search_domain')) + self.network.get('dns2'), + self.network.get('dns3'), + self.network.get('dns_domain'), + self.network.get('search_domain')) @abortable def release_dhcp_clients(self, iface): @@ -543,8 +547,8 @@ class Wireless(Controller): self.connecting_thread = WirelessConnectThread(network, self.wireless_interface, self.wpa_driver, self.before_script, self.after_script, self.disconnect_script, self.global_dns_1, - self.global_dns_2, self.global_dns_3, self.global_search_dom, - self.wiface, debug) + self.global_dns_2, self.global_dns_3, self.global_dns_dom, + self.global_search_dom, self.wiface, debug) self.connecting_thread.setDaemon(True) self.connecting_thread.start() return True @@ -673,7 +677,7 @@ class WirelessConnectThread(ConnectThread): def __init__(self, network, wireless, wpa_driver, before_script, after_script, disconnect_script, gdns1, gdns2, gdns3, - gsearch_dom, wiface, debug=False): + gdns_dom, gsearch_dom, wiface, debug=False): """ Initialise the thread with network information. Keyword arguments: @@ -690,7 +694,7 @@ class WirelessConnectThread(ConnectThread): """ ConnectThread.__init__(self, network, wireless, before_script, after_script, disconnect_script, gdns1, gdns2, - gdns3, gsearch_dom, wiface, debug) + gdns3, gdns_dom, gsearch_dom, wiface, debug) self.wpa_driver = wpa_driver @@ -856,7 +860,8 @@ class Wired(Controller): self.connecting_thread = WiredConnectThread(network, self.wired_interface, self.before_script, self.after_script, self.disconnect_script, self.global_dns_1, self.global_dns_2, - self.global_dns_3, self.global_search_dom, self.liface, debug) + self.global_dns_3, self.global_dns_dom, self.global_search_dom, + self.liface, debug) self.connecting_thread.setDaemon(True) self.connecting_thread.start() return self.connecting_thread @@ -877,8 +882,8 @@ class WiredConnectThread(ConnectThread): """ def __init__(self, network, wired, before_script, after_script, - disconnect_script, gdns1, gdns2, gdns3, gsearch_dom, liface, - debug=False): + disconnect_script, gdns1, gdns2, gdns3, gdns_dom, gsearch_dom, + liface, debug=False): """ Initialise the thread with network information. Keyword arguments: @@ -895,7 +900,7 @@ class WiredConnectThread(ConnectThread): """ ConnectThread.__init__(self, network, wired, before_script, after_script, disconnect_script, gdns1, gdns2, - gdns3, gsearch_dom, liface, debug) + gdns3, gdns_dom, gsearch_dom, liface, debug) def run(self): """ The main function of the connection thread. diff --git a/wicd/prefs.py b/wicd/prefs.py index 75551bb..717cdfa 100644 --- a/wicd/prefs.py +++ b/wicd/prefs.py @@ -102,17 +102,20 @@ class PreferencesDialog(object): self.useGlobalDNSCheckbox.connect("toggled", checkboxTextboxToggle, (self.dns1Entry, self.dns2Entry, - self.dns3Entry, self.searchDomEntry)) + self.dns3Entry, self.dnsDomEntry, + self.searchDomEntry)) dns_addresses = daemon.GetGlobalDNSAddresses() self.useGlobalDNSCheckbox.set_active(daemon.GetUseGlobalDNS()) self.dns1Entry.set_text(noneToBlankString(dns_addresses[0])) self.dns2Entry.set_text(noneToBlankString(dns_addresses[1])) self.dns3Entry.set_text(noneToBlankString(dns_addresses[2])) - self.searchDomEntry.set_text(noneToBlankString(dns_addresses[3])) + self.dnsDomEntry.set_text(noneToBlankString(dns_addresses[3])) + self.searchDomEntry.set_text(noneToBlankString(dns_addresses[4])) if not daemon.GetUseGlobalDNS(): self.searchDomEntry.set_sensitive(False) + self.dnsDomEntry.set_sensitive(False) self.dns1Entry.set_sensitive(False) self.dns2Entry.set_sensitive(False) self.dns3Entry.set_sensitive(False) @@ -144,7 +147,8 @@ class PreferencesDialog(object): """ Pushes the selected settings to the daemon. """ daemon.SetUseGlobalDNS(self.useGlobalDNSCheckbox.get_active()) daemon.SetGlobalDNS(self.dns1Entry.get_text(), self.dns2Entry.get_text(), - self.dns3Entry.get_text(), self.searchDomEntry.get_text()) + self.dns3Entry.get_text(), self.dnsDomEntry.get_text(), + self.searchDomEntry.get_text()) daemon.SetWirelessInterface(self.entryWirelessInterface.get_text()) daemon.SetWiredInterface(self.entryWiredInterface.get_text()) daemon.SetWPADriver(self.wpadrivers[self.wpadrivercombo.get_active()]) @@ -305,6 +309,7 @@ class PreferencesDialog(object): self.useGlobalDNSCheckbox = setup_label("pref_global_check", 'use_global_dns') self.searchDomEntry = self.wTree.get_widget("pref_search_dom_entry") + self.dnsDomEntry = self.wTree.get_widget("pref_dns_dom_entry") self.dns1Entry = self.wTree.get_widget("pref_dns1_entry") self.dns2Entry = self.wTree.get_widget("pref_dns2_entry") self.dns3Entry = self.wTree.get_widget("pref_dns3_entry") diff --git a/wicd/wicd-daemon.py b/wicd/wicd-daemon.py index 36609a8..e762598 100644 --- a/wicd/wicd-daemon.py +++ b/wicd/wicd-daemon.py @@ -166,27 +166,35 @@ class WicdDaemon(dbus.service.Object): self.wired.use_global_dns = use @dbus.service.method('org.wicd.daemon') - def SetGlobalDNS(self, dns1=None, dns2=None, dns3=None, search_dom=None): + def SetGlobalDNS(self, dns1=None, dns2=None, dns3=None, + dns_dom =None, search_dom=None): """ Sets the global dns addresses. """ print "setting global dns" - self.config.set("Settings", "global_dns_1", misc.noneToString(dns1), True) + self.config.set("Settings", "global_dns_1", misc.noneToString(dns1)) self.dns1 = dns1 self.wifi.global_dns_1 = dns1 self.wired.global_dns_1 = dns1 - self.config.set("Settings", "global_dns_2", misc.noneToString(dns2), True) + self.config.set("Settings", "global_dns_2", misc.noneToString(dns2)) self.dns2 = dns2 self.wifi.global_dns_2 = dns2 self.wired.global_dns_2 = dns2 - self.config.set("Settings", "global_dns_3", misc.noneToString(dns3), True) + self.config.set("Settings", "global_dns_3", misc.noneToString(dns3)) self.dns3 = dns3 self.wifi.global_dns_3 = dns3 self.wired.global_dns_3 = dns3 - self.config.set("Settings", "global_search_dom", misc.noneToString(search_dom), True) + self.config.set("Settings", "global_dns_dom", misc.noneToString(dns_dom)) + self.dns_dom = dns_dom + self.wifi.dns_dom = dns_dom + self.wired.dns_dom = dns_dom + self.config.set("Settings", "global_search_dom", misc.noneToString(search_dom)) self.search_dom = search_dom self.wifi.global_search_dom = search_dom self.wired.global_search_dom = search_dom print 'global dns servers are', dns1, dns2, dns3 + print 'domain is %s' % dns_dom print 'search domain is %s' % search_dom + self.config.write() + @dbus.service.method('org.wicd.daemon') def SetBackend(self, backend): @@ -340,7 +348,8 @@ class WicdDaemon(dbus.service.Object): def GetGlobalDNSAddresses(self): """ Returns the global dns addresses. """ return (misc.noneToString(self.dns1), misc.noneToString(self.dns2), - misc.noneToString(self.dns3), misc.noneToString(self.search_dom)) + misc.noneToString(self.dns3), misc.noneToString(self.dns_dom), + misc.noneToString(self.search_dom)) @dbus.service.method('org.wicd.daemon') def CheckIfConnecting(self): @@ -798,8 +807,9 @@ class WicdDaemon(dbus.service.Object): dns1 = app_conf.get("Settings", "global_dns_1", default='None') dns2 = app_conf.get("Settings", "global_dns_2", default='None') dns3 = app_conf.get("Settings", "global_dns_3", default='None') + dns_dom =app_conf.get("Settings", "global_dns_dom", default='None') search_dom = app_conf.get("Settings", "global_search_dom", default='None') - self.SetGlobalDNS(dns1, dns2, dns3, search_dom) + self.SetGlobalDNS(dns1, dns2, dns3, dns_dom, search_dom) self.SetAutoReconnect(app_conf.get("Settings", "auto_reconnect", default=True)) self.SetDebugMode(app_conf.get("Settings", "debug_mode", default=False)) diff --git a/wicd/wnettools.py b/wicd/wnettools.py index dad8037..1df4398 100644 --- a/wicd/wnettools.py +++ b/wicd/wnettools.py @@ -57,7 +57,7 @@ def _sanitize_string_strict(string): else: return string -def SetDNS(dns1=None, dns2=None, dns3=None, search_dom=None): +def SetDNS(dns1=None, dns2=None, dns3=None, dns_dom=None, search_dom=None): """ Set the DNS of the system to the specified DNS servers. Opens up resolv.conf and writes in the nameservers. @@ -66,9 +66,13 @@ def SetDNS(dns1=None, dns2=None, dns3=None, search_dom=None): dns1 -- IP address of DNS server 1 dns2 -- IP address of DNS server 2 dns3 -- IP address of DNS server 3 + dns_dom -- DNS domain + search_dom -- DNS search domain """ resolv = open("/etc/resolv.conf", "w") + if dns_dom: + resolv.write("domain %s\n" % dns_dom) if search_dom: resolv.write('search %s\n' % search_dom) for dns in [dns1, dns2, dns3]: