--- lib/PXElator/dnsd.pm 2009/08/13 12:00:51 211 +++ lib/PXElator/dnsd.pm 2009/09/08 16:54:35 393 @@ -28,26 +28,24 @@ my ($qname, $qclass, $qtype, $peerhost,$query,$conn) = @_; my ($rcode, @ans, @auth, @add); - server->refresh; $debug = server::debug; - CouchDB::audit( 'request', { + my $audit = { qname => $qname, qclass => $qclass, qtype => $qtype, peerhost => $peerhost, - sockhost => $conn->{"sockhost"} - }); + sockhost => $conn->{"sockhost"}, + source => 'unknown', + }; $query->print if $debug; - my $local = $1 if $qname =~ m{^(.+)\.\Q$server::domain_name\E$}; + my $local = $1 if $qname =~ m{^(.+)\.\Q$server::domain\E$}; $local = $qname if $qname !~ m{\.}; my $ttl = 3600; - my $audit = { source => 'unknown' }; - if ( $local ) { warn "local[$local] $qname $qtype"; $rcode = "NOERROR"; @@ -63,7 +61,7 @@ } elsif ( $qtype eq 'PTR' && $qname =~ m{^([0-9\.]*)\.in-addr\.arpa$} ) { if ( my $rdata = $ptr_cache->{$1} ) { - $rdata .= '.' . $server::domain_name; + $rdata .= '.' . $server::domain; push @ans, Net::DNS::RR->new("$qname $ttl $qclass $qtype $rdata"); $audit->{source} = 'PTR'; } else { @@ -85,7 +83,13 @@ warn "rcode: $rcode ",dump( @ans ); $audit->{rcode} = $rcode; - $audit->{ans} = [ @ans ]; + $audit->{ans} = [ map { + my $data; + foreach my $n ( keys %$_ ) { + $data->{$n} = $_->{$n}; + } + $data; + } @ans ]; CouchDB::audit( 'response', $audit ); @@ -96,12 +100,15 @@ sub start { my $ns = Net::DNS::Nameserver->new( LocalPort => 53, - ReplyHandler => \&reply_handler, + ReplyHandler => sub { + server->refresh; + reply_handler(@_); + }, Verbose => $debug, ) || die "couldn't create nameserver object\n"; - CouchDB::audit('start', { listen => { port => 53, domain_name => $server::domain_name } }); - warn "DNS $server::domain_name"; + CouchDB::audit('start', { port => 53, domain => $server::domain }); + warn "DNS $server::domain"; $ns->main_loop; }