added check for serial aa
authorheiko
Mon, 19 Jan 2015 10:33:29 +0100
changeset 23 1eed74960c1c
parent 22 8fdd1e3a6bc3
child 24 d20452378ead
added check for serial aa Now we can ask the serial() to request aa answers.
lib/Nagios/Check/DNS/delegation.pm
t/20-serial-aa.t
--- a/lib/Nagios/Check/DNS/delegation.pm	Fri Jan 16 16:42:13 2015 +0100
+++ b/lib/Nagios/Check/DNS/delegation.pm	Mon Jan 19 10:33:29 2015 +0100
@@ -100,6 +100,7 @@
 sub serial {
     my $domain = shift;
     my %resflags = (nameservers => \@extns, @_);
+    my $aa = delete $resflags{aa};
     my $nameservers = join ',' => @{$resflags{nameservers}};
 
     my $r = Net::DNS::Resolver->new(%resflags);
@@ -109,6 +110,7 @@
         $q  = $r->query($domain, 'SOA') and last;
     }
     die $r->errorstring, "\@$nameservers\n" if not $q;
+    die "no aa \@$nameservers\n" if $aa and not $q->header->aa;
 
     return (map { $_->serial } grep { $_->type eq 'SOA' } $q->answer)[0];
 }
@@ -126,26 +128,28 @@
     my ($domain, $reference, $override) = @_;
 
     my (@errs, @ns);
+    # obtain an authoritive list of nameservers from the reference server
     my @our = eval { sort +ns($domain, nameservers => [$reference], aa => 1, override => $override) };
     if (chomp $@) {
         push @errs, $@;
         push @our, $@;
     }
 
-    my @their = eval { sort +ns($domain) };
+    # obtain a list of nameservers from some public nameserver
+    my @public = eval { sort +ns($domain) };
     if (chomp $@) {
         push @errs, $@;
-        push @their, $@;
+        push @public, $@;
     }
 
-    if (@errs or "@our" ne "@their") {
+    if (@errs or "@our" ne "@public") {
         local $" = ', ';
-        die sprintf "NS differ (%s: @our) vs (public: @their)\n",
+        die sprintf "NS differ (%s: @our) vs (public: @public)\n",
             $override->{$domain} ? 'override' : 'our';
     
     }
 
-    @ns = uniq sort @our, @their;
+    @ns = uniq sort @our, @public;
     ### @ns
     return @ns;
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/t/20-serial-aa.t	Mon Jan 19 10:33:29 2015 +0100
@@ -0,0 +1,15 @@
+#! perl
+use strict;
+use warnings;
+use Test::More;
+use Test::Exception;
+use Nagios::Check::DNS::delegation;
+
+throws_ok { serial('schlittermann.de', 
+		nameservers => [qw/8.8.8.8 8.8.4.4/], aa => 1) }
+	  qr/no aa/ => 'throws exception on no aa';
+
+ok serial('schlittermann.de', nameservers => [qw/212.80.235.130/])
+	=> 'aa for serial';
+
+done_testing;