--- lib/PXElator/dnsd.pm 2009/08/05 19:49:19 152 +++ lib/PXElator/dnsd.pm 2009/08/15 14:41:33 223 @@ -6,6 +6,7 @@ use Net::DNS::Nameserver; use Net::DNS::Resolver; use Data::Dump qw/dump/; +use CouchDB; use server; our $debug = server::debug; @@ -30,7 +31,14 @@ server->refresh; $debug = server::debug; - print "$qname $qclass $qtype $peerhost to ". $conn->{"sockhost"}. "\n"; + CouchDB::audit( 'request', { + qname => $qname, + qclass => $qclass, + qtype => $qtype, + peerhost => $peerhost, + sockhost => $conn->{"sockhost"} + }); + $query->print if $debug; my $local = $1 if $qname =~ m{^(.+)\.\Q$server::domain_name\E$}; @@ -38,12 +46,15 @@ my $ttl = 3600; + my $audit = { source => 'unknown' }; + if ( $local ) { warn "local[$local] $qname $qtype"; $rcode = "NOERROR"; my $rdata; if ( $qtype eq "A" && $local eq "server" ) { $rdata = name_ip( $local, $server::ip ); + $audit->{source} = 'local'; } else { $rcode = "NXDOMAIN"; } @@ -54,12 +65,14 @@ if ( my $rdata = $ptr_cache->{$1} ) { $rdata .= '.' . $server::domain_name; push @ans, Net::DNS::RR->new("$qname $ttl $qclass $qtype $rdata"); + $audit->{source} = 'PTR'; } else { warn "## ",dump( $ptr_cache ); $rcode = "NXDOMAIN"; } } elsif ( my $packet = $res->query( $qname, $qtype ) ) { + $audit->{source} = 'upstream'; $packet->print; push @ans, $_ foreach $packet->answer; $rcode = "NOERROR"; @@ -71,6 +84,17 @@ warn "rcode: $rcode ",dump( @ans ); + $audit->{rcode} = $rcode; + $audit->{ans} = [ map { + my $data; + foreach my $n ( keys %$_ ) { + $data->{$n} = $_->{$n}; + } + $data; + } @ans ]; + + CouchDB::audit( 'response', $audit ); + # mark the answer as authoritive (by setting the 'aa' flag return ($rcode, \@ans, \@auth, \@add, { aa => 1 }); } @@ -82,6 +106,7 @@ 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"; $ns->main_loop;