LDAP backend to dhcpd

Andy Rabagliati andyr at wizzy.com
Sun Dec 24 15:29:34 UTC 2006


Folks,

  It seems to me that the schema for the dhcpd-ldap patches are more
  oriented at replicating the dhcpd conf file than a clean schema of
  what is needed.

  For instance, dhcpHWAddress is not just the MAC address, but it is
  "ethernet 00:12:3f:8d:f5:0e" - to re-create the dhcpd.conf file.

  Things like pools and options follow the same pattern.

  I would like a set of patches that will read LDAP entries like

dn: cn=waxbill,ou=Computers,dc=aims,o=aims
cn: waxbill
objectClass: ipHost
objectClass: dhcpHost
dhcpHWAddress: 00:12:3f:8d:fd:29
ipHostNumber: 192.168.42.219

  with no other containers necessary.

  I looked at http://unixgu.ru/tmp/ctf-dhcpd/test.pl and the
  Net::DHCP perl modules, which also comes with an example DHCP server
  script, but as yet cannot get them to work.
  
  I have the LDAP lookups working, and sendAnswer (in the perl script)
  says it is working, but my clients do not receive an answer.

  The routine follows - is there anything obviously missing that would
  cause the client to not receive the reply ?

Cheers,  Andy!


sub sendAnswer {
        my( $type, $xid, $mac, $ip, $hostname ) = ( $_[0], $_[1], $_[2], $_[3], $_[4] );
print "<sendAnswer> type=$type, xid=$xid, mac=$mac, ip=$ip, hostname=$hostname\n";
        return unless $type and $mac and $ip;

        my $answer = Net::DHCP::Packet->new(
                'Op'                    => 2,
                'flags'                 => 0x8000,
                'Xid'                   => $xid,
                DHO_DHCP_MESSAGE_TYPE() => $type,
                'Yiaddr'                => $ip,
                'Chaddr'                => $mac
        );
        $answer->addOptionValue( DHO_HOST_NAME(), $hostname ) if $hostname;

        if( $type eq DHCPACK() ) {
                $answer->addOptionValue(
                        DHO_DOMAIN_NAME_SERVERS(),
                                $Config{ 'dhcp' }{ 'dnsServer' }
                        ) if $Config{ 'dhcp' }{ 'dnsServer' };
                $answer->addOptionValue(
                        DHO_ROUTERS(),
                                $Config{ 'dhcp' }{ 'defaultRoute' }
                        ) if $Config{ 'dhcp' }{ 'defaultRoute' };
        }

        $Sock->send( $answer->serialize() )
                or &handleError( 'Can\'t send answer:', $! );

print "</sendAnswer>\n";
}



More information about the dhcp-users mailing list