diff -r 8fdd1e3a6bc3 -r 1eed74960c1c lib/Nagios/Check/DNS/delegation.pm --- 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; }