1
0
mirror of https://github.com/gryf/wicd.git synced 2026-01-06 05:44:18 +01:00

Add support for using resolvconf instead of directly editing /etc/resolv.conf if it's available.

This commit is contained in:
Dan O'Reilly
2009-02-28 16:01:26 -05:00
parent edbfd18553
commit 454770e5e9
3 changed files with 67 additions and 44 deletions

View File

@@ -96,6 +96,10 @@ def Run(cmd, include_stderr=False, return_pipe=False, return_obj=False):
else: else:
err = None err = None
fds = False fds = False
if return_obj:
std_in = PIPE
else:
std_in = None
# We need to make sure that the results of the command we run # We need to make sure that the results of the command we run
# are in English, so we set up a temporary environment. # are in English, so we set up a temporary environment.
@@ -106,8 +110,8 @@ def Run(cmd, include_stderr=False, return_pipe=False, return_obj=False):
tmpenv["LANG"] = __LANG tmpenv["LANG"] = __LANG
try: try:
f = Popen(cmd, shell=False, stdout=PIPE, stderr=err, close_fds=fds, f = Popen(cmd, shell=False, stdout=PIPE, stdin=std_in, stderr=err,
cwd='/', env=tmpenv) close_fds=fds, cwd='/', env=tmpenv)
except OSError, e: except OSError, e:
print "Running command %s failed: %s" % (str(cmd), str(e)) print "Running command %s failed: %s" % (str(cmd), str(e))
return "" return ""

View File

@@ -420,7 +420,7 @@ class ConnectThread(threading.Thread):
return return
@abortable @abortable
def set_dns_addresses(self): def set_dns_addresses(self, iface):
""" Set the DNS address(es). """ Set the DNS address(es).
If static DNS servers or global DNS servers are specified, set them. If static DNS servers or global DNS servers are specified, set them.
@@ -428,19 +428,19 @@ class ConnectThread(threading.Thread):
""" """
if self.network.get('use_global_dns'): if self.network.get('use_global_dns'):
BACKEND.SetDNS(misc.Noneify(self.global_dns_1), iface.SetDNS(misc.Noneify(self.global_dns_1),
misc.Noneify(self.global_dns_2), misc.Noneify(self.global_dns_2),
misc.Noneify(self.global_dns_3), misc.Noneify(self.global_dns_3),
misc.Noneify(self.global_dns_dom), misc.Noneify(self.global_dns_dom),
misc.Noneify(self.global_search_dom)) misc.Noneify(self.global_search_dom))
elif self.network.get('use_static_dns') and (self.network.get('dns1') or elif self.network.get('use_static_dns') and (self.network.get('dns1') or
self.network.get('dns2') or self.network.get('dns3')): self.network.get('dns2') or self.network.get('dns3')):
self.SetStatus('setting_static_dns') self.SetStatus('setting_static_dns')
BACKEND.SetDNS(self.network.get('dns1'), iface.SetDNS(self.network.get('dns1'),
self.network.get('dns2'), self.network.get('dns2'),
self.network.get('dns3'), self.network.get('dns3'),
self.network.get('dns_domain'), self.network.get('dns_domain'),
self.network.get('search_domain')) self.network.get('search_domain'))
@abortable @abortable
def release_dhcp_clients(self, iface): def release_dhcp_clients(self, iface):
@@ -799,7 +799,7 @@ class WirelessConnectThread(ConnectThread):
# Set up gateway, IP address, and DNS servers. # Set up gateway, IP address, and DNS servers.
self.set_broadcast_address(wiface) self.set_broadcast_address(wiface)
self.set_ip_address(wiface) self.set_ip_address(wiface)
self.set_dns_addresses() self.set_dns_addresses(wiface)
# Run post-connection script. # Run post-connection script.
self.run_script_if_needed(self.after_script, 'post-connection', self.run_script_if_needed(self.after_script, 'post-connection',
@@ -985,7 +985,7 @@ class WiredConnectThread(ConnectThread):
# Set gateway, IP adresses, and DNS servers. # Set gateway, IP adresses, and DNS servers.
self.set_broadcast_address(liface) self.set_broadcast_address(liface)
self.set_ip_address(liface) self.set_ip_address(liface)
self.set_dns_addresses() self.set_dns_addresses(liface)
# Run post-connection script. # Run post-connection script.
self.run_script_if_needed(self.after_script, 'post-connection', 'wired', self.run_script_if_needed(self.after_script, 'post-connection', 'wired',

View File

@@ -69,7 +69,7 @@ blacklist_strict = '!"#$%&\'()*+,./:;<=>?@[\\]^`{|}~ '
blacklist_norm = ";`$!*|><&\\" blacklist_norm = ";`$!*|><&\\"
blank_trans = maketrans("", "") blank_trans = maketrans("", "")
__all__ = ["SetDNS", "GetDefaultGateway", "GetWiredInterfaces", __all__ = ["GetDefaultGateway", "GetWiredInterfaces",
"GetWirelessInterfaces", "IsValidWpaSuppDriver"] "GetWirelessInterfaces", "IsValidWpaSuppDriver"]
def _sanitize_string(string): def _sanitize_string(string):
@@ -84,33 +84,6 @@ def _sanitize_string_strict(string):
else: else:
return string return string
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.
Keyword arguments:
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]:
if dns:
if misc.IsValidIP(dns):
print 'Setting DNS : ' + dns
resolv.write('nameserver ' + dns + '\n')
else:
print 'DNS IP is not a valid IP address, not writing to resolv.conf'
resolv.close()
def GetDefaultGateway(): def GetDefaultGateway():
""" Attempts to determine the default gateway by parsing route -n. """ """ Attempts to determine the default gateway by parsing route -n. """
route_info = misc.Run("route -n") route_info = misc.Run("route -n")
@@ -286,6 +259,11 @@ class BaseInterface(object):
self.CheckWirelessTools() self.CheckWirelessTools()
self.CheckSudoApplications() self.CheckSudoApplications()
self.CheckRouteFlushTool() self.CheckRouteFlushTool()
self.CheckResolvConf()
def CheckResolvConf(self):
""" Checks for the existence of resolvconf."""
self.resolvconf_cmd = self._find_program_path("resolvconf")
def CheckDHCP(self): def CheckDHCP(self):
""" Check for the existence of valid DHCP clients. """ Check for the existence of valid DHCP clients.
@@ -513,7 +491,48 @@ class BaseInterface(object):
return return
if self.verbose: print cmd if self.verbose: print cmd
misc.Run(cmd) misc.Run(cmd)
def SetDNS(self, 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.
Keyword arguments:
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_params = ""
if dns_dom:
resolv_params = ''.join([resolv_params, 'domain ', dns_dom, '\n'])
if search_dom:
resolv_params = ''.join([resolv_params, 'search ', search_dom,
'\n'])
valid_dns_list = ['nameserver']
for dns in [dns1, dns2, dns3]:
if dns:
if misc.IsValidIP(dns):
print 'Setting DNS : ' + dns
valid_dns_list.append(dns)
else:
print 'DNS IP is not a valid IP address, skipping'
# Make sure we have more than just 'nameserver' in the list.
if len(valid_dns_list) > 1:
resolv_params += ' '.join(valid_dns_list) + '\n'
if self.resolvconf_cmd:
print "running resolvconf"
p = misc.Run(' '.join([self.resolvconf_cmd, '-a', self.iface]),
include_stderr=True, return_obj=True)
p.communicate(input=resolv_params)[0]
else:
resolv = open("/etc/resolv.conf", "w")
resolv.write(resolv_params + "\n")
resolv.close()
def FlushRoutes(self): def FlushRoutes(self):
""" Flush network routes for this device. """ """ Flush network routes for this device. """