diff --git a/image_creator/os_type/windows/__init__.py b/image_creator/os_type/windows/__init__.py index 2117d8b229e2a5a57a149bca8b5086c27cc766c8..fb12e98b9d5c91ab4689483c3f22db1eea2d8ffb 100644 --- a/image_creator/os_type/windows/__init__.py +++ b/image_creator/os_type/windows/__init__.py @@ -697,8 +697,26 @@ class Windows(OSBase): super(Windows, self)._do_collect_metadata() # We only care for active users - self.meta["USERS"] = \ - " ".join([self.usernames[a] for a in self.active_users]) + active = [self.usernames[a] for a in self.active_users] + self.meta["USERS"] = " ".join(active) + + # Get RDP settings + settings = self.registry.get_rdp_settings() + + if settings['disabled']: + self.out.warn("RDP is disabled on the image") + else: + if 'REMOTE_CONNECTION' not in self.meta: + self.meta['REMOTE_CONNECTION'] = "" + else: + self.meta['REMOTE_CONNECTION'] += " " + + port = settings['port'] + if len(active): + rdp = ["rdp:port=%d,user=%s" % (port, user) for user in active] + self.meta['REMOTE_CONNECTION'] += " ".join(rdp) + else: + self.meta['REMOTE_CONNECTION'] += "rdp:port=%d" % port def _check_connectivity(self): """Check if winexe works on the Windows VM""" diff --git a/image_creator/os_type/windows/registry.py b/image_creator/os_type/windows/registry.py index e8650c5024465828c2ddac1a52432d68c5771ae9..b4f6f516dabad6b3f311bbf0c29b4ea60858a77f 100644 --- a/image_creator/os_type/windows/registry.py +++ b/image_creator/os_type/windows/registry.py @@ -170,6 +170,29 @@ class Registry(object): raise FatalError("Unknown Windows Setup State: %s" % value) + def get_rdp_settings(self): + """Returns Remote Desktop Settings of the image""" + + settings = {} + with self.open_hive('SYSTEM') as hive: + path = '%s/Control/Terminal Server' % self.current_control_set + term_server = traverse(hive, path) + + disabled = hive.node_get_value(term_server, "fDenyTSConnections") + # expecting a little endian dword + assert hive.value_type(disabled)[1] == 4 + settings['disabled'] = hive.value_dword(disabled) != 0 + + path += "/WinStations/RDP-Tcp" + rdp_tcp = traverse(hive, path) + + port = hive.node_get_value(rdp_tcp, "PortNumber") + # expecting a little endian dword + assert hive.value_type(port)[1] == 4 + settings['port'] = hive.value_dword(port) + + return settings + def runonce(self, commands): """Add commands to the RunOnce registry key"""