diff -ruN wicd-1.7.2.4.orig/wicd/wnettools.py wicd-1.7.2.4/wicd/wnettools.py --- wicd-1.7.2.4.orig/wicd/wnettools.py 2013-03-30 21:47:19.804907552 +0000 +++ wicd-1.7.2.4/wicd/wnettools.py 2013-03-31 08:44:37.572792110 +0000 @@ -37,6 +37,7 @@ import time from string import maketrans, translate +import tempfile import wpath import misc from misc import find_path @@ -216,6 +217,7 @@ self.flush_tool = None self.link_detect = None self.dhcp_object = None + self.dhclient_conf_path = None; def SetDebugMode(self, value): """ If True, verbose output is enabled. """ @@ -277,12 +279,6 @@ cmd = "" return (client, cmd) - # probably /var/lib/wicd/dhclient.conf with defaults - dhclient_conf_path = os.path.join( - wpath.varlib, - 'dhclient.conf' - ) - client_dict = { "dhclient" : {'connect' : r"%(cmd)s -cf %(dhclientconf)s %(iface)s", @@ -307,41 +303,44 @@ } (client_name, cmd) = get_client_name(self.DHCP_CLIENT) - # cause dhclient doesn't have a handy dandy argument - # for specifing the hostname to be sent - if client_name == "dhclient" and flavor: - if hostname == None: - # will use the system hostname - # we'll use that if there is hostname passed - # that shouldn't happen, though - hostname = '' - print 'attempting to set hostname with dhclient' - print 'using dhcpcd or another supported client may work better' - dhclient_template = \ - open(os.path.join(wpath.etc, 'dhclient.conf.template'), 'r') - - output_conf = open(dhclient_conf_path, 'w') - - for line in dhclient_template.readlines(): - line = line.replace('$_HOSTNAME', hostname) - output_conf.write(line) - - output_conf.close() - dhclient_template.close() - os.chmod(dhclient_conf_path, 0644) - if not client_name or not cmd: print "WARNING: Failed to find a valid dhcp client!" return "" if flavor == "connect": + # cause dhclient doesn't have a handy dandy argument + # for specifing the hostname to be sent + if client_name == "dhclient" and flavor: + if hostname == None: + # will use the system hostname + # we'll use that if there is hostname passed + # that shouldn't happen, though + hostname = '' + print 'attempting to set hostname with dhclient' + print 'using dhcpcd or another supported client may work better' + if not self.dhclient_conf_path: + _,self.dhclient_conf_path = tempfile.mkstemp() + print 'New dhclient conf path: %s ' % self.dhclient_conf_path + dhclient_template = \ + open(os.path.join(wpath.etc, 'dhclient.conf.template'), 'r') + + output_conf = open(self.dhclient_conf_path, 'w') + + for line in dhclient_template.readlines(): + line = line.replace('$_HOSTNAME', hostname) + output_conf.write(line) + + output_conf.close() + dhclient_template.close() + os.chmod(self.dhclient_conf_path, 0644) + if not hostname: hostname = os.uname()[1] return client_dict[client_name]['connect'] % \ { "cmd" : cmd, "iface" : self.iface, "hostname" : hostname, - 'dhclientconf' : dhclient_conf_path } + 'dhclientconf' : self.dhclient_conf_path } elif flavor == "release": return client_dict[client_name]['release'] % {"cmd":cmd, "iface":self.iface} else: