implement resolver for queries which we don't handle
authorDobrica Pavlinusic <dpavlin@rot13.org>
Mon, 3 Aug 2009 15:06:23 +0000 (15:06 +0000)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Mon, 3 Aug 2009 15:06:23 +0000 (15:06 +0000)
lib/PXElator/dnsd.pm

index 3bbcc2d..4a60ba6 100644 (file)
@@ -4,8 +4,18 @@ use warnings;
 use strict;
 
 use Net::DNS::Nameserver;
+use Net::DNS::Resolver;
 use Data::Dump qw/dump/;
 
+use server;
+our $debug = server::debug;
+
+my $res = Net::DNS::Resolver->new(
+#      nameserver => [ '10.60.0.1' ],
+       recurse => 1,
+       debug => $debug,
+);
+
 sub reply_handler {
        my ($qname, $qclass, $qtype, $peerhost,$query,$conn) = @_;
        my ($rcode, @ans, @auth, @add);
@@ -13,16 +23,22 @@ sub reply_handler {
        print "Received query from $peerhost to ". $conn->{"sockhost"}. "\n";
        $query->print;
 
-       
-       if ($qtype eq "A" && $qname eq "foo.example.com" ) {
-               my ($ttl, $rdata) = (3600, "10.1.2.3");
+       if ( $qtype eq "A" && $qname eq "pxelator" ) {
+               my ($ttl, $rdata) = (3600, "172.16.10.1");
                push @ans, Net::DNS::RR->new("$qname $ttl $qclass $qtype $rdata");
                $rcode = "NOERROR";
-       }elsif( $qname eq "foo.example.com" ) {
+       } elsif ( $qname eq "foo.example.com" ) {
+               $rcode = "NOERROR";
+
+       } elsif ( my $packet = $res->query( $qname, $qtype ) ) {
+
+               $packet->print;
+               push @ans, $_ foreach $packet->answer;
                $rcode = "NOERROR";
 
-       }else{
-                $rcode = "NXDOMAIN";
+       } else {
+               # not found
+               $rcode = "NXDOMAIN";
        }
 
        # mark the answer as authoritive (by setting the 'aa' flag
@@ -33,11 +49,9 @@ sub start {
        my $ns = Net::DNS::Nameserver->new(
                LocalPort    => 53,
                ReplyHandler => \&reply_handler,
-               Verbose      => 1,
+               Verbose      => $debug,
        ) || die "couldn't create nameserver object\n";
 
-       warn dump( $ns );
-
        $ns->main_loop;
 }