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:
@@ -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 ""
|
||||||
|
|||||||
@@ -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',
|
||||||
|
|||||||
@@ -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. """
|
||||||
|
|||||||
Reference in New Issue
Block a user