Ejemplo n.º 1
0
 def testGetDhcpOption(self, optscan, socket):
   optscan.return_value = None
   result = dhcp.GetDhcpOption('192.168.0.1', '11:22:33:44:55:66', 102)
   self.assertEqual(None, result)
   optscan.return_value = 'America/Chicago'
   result = dhcp.GetDhcpOption('192.168.0.2', '11:22:33:44:55:66', 101)
   self.assertEqual('America/Chicago', result)
   socket.return_value.recv.side_effect = dhcp.socket.timeout
   result = dhcp.GetDhcpOption(
       '192.168.0.2',
       '11:22:33:44:55:66',
       101,
       server_addr='10.0.0.1',
       socket_timeout=5)
   socket.return_value.sendto.assert_called_with(mock.ANY, ('10.0.0.1', 67))
   socket.return_value.settimeout.assert_called_with(5)
   self.assertEqual(None, result)
   # bad mac
   result = dhcp.GetDhcpOption(
       '192.168.0.2', None, 101, server_addr='10.0.0.1', socket_timeout=5)
   # bad ip
   self.assertEqual(None, result)
   result = dhcp.GetDhcpOption(
       None,
       '11:22:33:44:55:66',
       101,
       server_addr='10.0.0.1',
       socket_timeout=5)
   self.assertEqual(None, result)
Ejemplo n.º 2
0
    def Run(self):
        """Sets the timezone inside unattend.xml."""
        local_tz = 'Pacific Standard Time'
        from_dhcp = False
        retries = 0
        while not from_dhcp and retries < 5:
            for intf in self._build_info.NetInterfaces():
                if intf.ip_address and intf.mac_address:
                    servers = ['255.255.255.255']
                    if intf.dhcp_server:
                        servers.insert(0, intf.dhcp_server)
                    logging.debug(
                        'Attempting to get timezone from interface with IP %s and MAC %s',
                        intf.ip_address, intf.mac_address)
                    for dhcp_server in servers:
                        dhcp_response = dhcp.GetDhcpOption(
                            client_addr=intf.ip_address,
                            client_mac=intf.mac_address,
                            option=101,
                            server_addr=dhcp_server)
                        try:
                            from_dhcp = dhcp_response.decode('utf-8')
                        except AttributeError:
                            logging.warning(
                                'could not decode dhcp response %s',
                                dhcp_response)
                            from_dhcp = None
                        logging.debug('DHCP server %s returned: %s',
                                      dhcp_server, from_dhcp)
                        if from_dhcp:
                            break
                    if from_dhcp:
                        break
            logging.debug('No result from DHCP.  Retrying...')
            retries += 1

        if from_dhcp:
            logging.debug('Got timezone %s from DHCP.', from_dhcp)
            tz = timezone.Timezone(load_map=True)
            translated = tz.TranslateZone(from_dhcp)
            if translated:
                local_tz = translated
                logging.debug('Successfully translated timezone to %s.',
                              local_tz)
            else:
                logging.error('Could not translate DHCP timezone.')
        else:
            logging.error('Could not find timezone from DHCP.')
        logging.debug('Finalized timezone is %s.', local_tz)
        self._EditUnattend(local_tz)