lib/Nagios/Check/DNS/delegation.pm
changeset 23 1eed74960c1c
parent 22 8fdd1e3a6bc3
child 24 d20452378ead
--- 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;
 }