Ticket #44: dhcpserver.py.3.diff

File dhcpserver.py.3.diff, 2.6 KB (added by broder, 16 years ago)

Fixing bugs and not using sets

  • dhcpserver.py

     
    2121
    2222dhcp_options = {'subnet_mask': '255.255.0.0',
    2323                'router': '18.181.0.1',
     24                'domain_search': ['mit.edu'],
    2425                'domain_name_server': '18.70.0.160,18.71.0.151,18.72.0.3',
    25                 'domain_name': 'mit.edu',
    2626                'ip_address_lease_time': 60*60*24}
    2727
    2828class DhcpBackend:
     
    6060    def getParameters(self, **extra):
    6161        all_options=dict(dhcp_options)
    6262        all_options.update(extra)
     63        if 'domain_search' not in all_options:
     64            all_options['domain_search'] = list()
     65        else:
     66            all_options['domain_search'] = all_options['domain_search']
     67       
     68        if 'domain_name' in all_options:
     69            all_options['domain_search'].append(all_options['domain_name'])
    6370        options = {}
    6471        for parameter, value in all_options.iteritems():
    6572            if value is None:
     
    95102                   
    96103            elif option_type == "string" :
    97104                options[parameter] = strlist(value).list()
     105           
     106            elif option_type == "RFC3397" :
     107                parsed_value = ""
     108                for item in value:
     109                    components = item.split('.')
     110                    item_fmt = "".join(chr(len(elt)) + elt for elt in components) + "\x00"
     111                    parsed_value += item_fmt
    98112               
     113                options[parameter] = strlist(parsed_value).list()
     114           
    99115            else :
    100116                options[parameter] = strlist(value).list()
    101117        return options
     
    110126        if ip is None:  #Deactivated?
    111127            return False
    112128        if nic.hostname and '.' in nic.hostname:
    113             hostname = nic.hostname
     129            hostname, domainname = nic.hostname.split('.', 1)
    114130        elif nic.machine.name:
    115             hostname = nic.machine.name + '.servers.csail.mit.edu'
     131            hostname = nic.machine.name
     132            domainname = 'servers.csail.mit.edu'
    116133        else:
    117134            hostname = None
    118135        if ip is not None:
    119136            ip = ipv4(ip)
    120137            Log.Output(Log.debug,"dhcp_backend : Discover result = "+str(ip))
    121             packet_parameters = self.getParameters(host_name=hostname)
    122 
     138            packet_parameters = self.getParameters(host_name=hostname,
     139                                                   domain_name=domainname)
     140           
    123141            # FIXME: Other offer parameters go here
    124142            packet_parameters["yiaddr"] = ip.list()
    125143