diff options
-rwxr-xr-x | anaconda | 1 | ||||
-rw-r--r-- | network.py | 30 | ||||
-rw-r--r-- | vnc.py | 65 |
3 files changed, 56 insertions, 40 deletions
@@ -621,6 +621,7 @@ if __name__ == "__main__": graphical_failed = 0 instClass = None # the install class to use vncS = vnc.VncServer() # The vnc Server object. + vncS.anaconda = anaconda xserver_pid = None (opts, args) = parseOptions() diff --git a/network.py b/network.py index e7392cc09..c986cda7c 100644 --- a/network.py +++ b/network.py @@ -202,6 +202,36 @@ def hasActiveNetDev(): except: return False +# Return a list of device names (e.g., eth0) for all active devices. +# Returning a list here even though we will almost always have one +# device. NM uses lists throughout its D-Bus communication, so trying +# to follow suit here. Also, if this uses a list now, we can think +# about multihomed hosts during installation later. +def getActiveNetDevs(): + active_devs = set() + + bus = dbus.SystemBus() + nm = bus.get_object(isys.NM_SERVICE, isys.NM_MANAGER_PATH) + nm_props_iface = dbus.Interface(nm, isys.DBUS_PROPS_IFACE) + + active_connections = nm_props_iface.Get(isys.NM_MANAGER_IFACE, "ActiveConnections") + + for connection in active_connections: + active_connection = bus.get_object(isys.NM_SERVICE, connection) + active_connection_props_iface = dbus.Interface(active_connection, isys.DBUS_PROPS_IFACE) + devices = active_connection_props_iface.Get(isys.NM_MANAGER_IFACE, 'Devices') + + for device_path in devices: + device = bus.get_object(isys.NM_SERVICE, device_path) + device_props_iface = dbus.Interface(device, isys.DBUS_PROPS_IFACE) + + interface_name = device_props_iface.Get(isys.NM_MANAGER_IFACE, 'Interface') + active_devs.add(interface_name) + + ret = list(active_devs) + ret.sort() + return ret + class NetworkDevice(SimpleConfigFile): def __str__(self): s = "" @@ -56,6 +56,7 @@ class VncServer: self.pw_file = pw_file self.pw_init_file = pw_init_file self.connxinfo = None + self.anaconda = None self.log = logging.getLogger("anaconda.stdout") def recoverVNCPassword(self): @@ -100,52 +101,36 @@ class VncServer: # see if we can sniff out network info netinfo = network.Network() - # Look for the first configured interface and use its IP address for - # the computer to connect to. devices = netinfo.netdevices - list = devices.keys() - list.sort() - dev = devices[list[0]] + active_devs = network.getActiveNetDevs() - try: - self.ip = isys.getIPAddress(dev.get("DEVICE")) - log.info("ip of %s is %s" % (dev.get("DEVICE"), self.ip)) - - if self.ip == "127.0.0.1" or self.ip == "::1": - self.ip = None - except Exception, e: - log.warning("Got an exception trying to get the self.ip addr " - "of %s: %s" % (dev.get("DEVICE"), e)) - - # If we have a real hostname that resolves against configured DNS - # servers, use that for the name to connect to. - if netinfo.hostname != "localhost.localdomain": - if netinfo.lookupHostname() is not None: - self.name = netinfo.hostname - elif self.ip is None: - # If we get here and there's no valid IP address, just use the - # hostname and hope for the best (better than displaying nothing) - self.name = netinfo.hostname - - if self.name is not None: - self.connxinfo = "%s:%s" % (self.name, self.display) + if active_devs != []: + dev = devices[active_devs[0]] - if self.ip is not None: try: - tmp = socket.inet_pton(socket.AF_INET6, self.ip) - family = socket.AF_INET6 - except socket.error: - family = socket.AF_INET + self.ip = isys.getIPAddress(dev.get("DEVICE")) + log.info("ip of %s is %s" % (dev.get("DEVICE"), self.ip)) + + if self.ip == "127.0.0.1" or self.ip == "::1": + self.ip = None + except Exception, e: + log.warning("Got an exception trying to get the self.ip addr " + "of %s: %s" % (dev.get("DEVICE"), e)) + else: + self.ip = None - if family == socket.AF_INET6: - ipstr = "[%s]" % self.ip - else: - ipstr = self.ip + self.name = network.getDefaultHostname(self.anaconda) + ipstr = self.ip - if self.connxinfo is None: - self.connxinfo = "%s:%s" % (ipstr, self.display) - else: - self.connxinfo += " (%s)" % ipstr + if self.ip.find(':') != -1: + ipstr = "[%s]" % (self.ip,) + + if (self.name is not None) and (not self.name.startswith('localhost')) and (ipstr is not None): + self.connxinfo = "%s:%s (%s)" % (socket.getfqdn(name=self.name), self.display, ipstr,) + elif ipstr is not None: + self.connxinfo = "%s:%s" % (ipstr, self.display,) + else: + self.connxinfo = None # figure out product info if self.name is not None: |