# HG changeset patch # User heiko # Date 1421660009 -3600 # Node ID 1eed74960c1c92cdee85e23a4a87fbe640430128 # Parent 8fdd1e3a6bc32943021389665d52c5e165356903 added check for serial aa Now we can ask the serial() to request aa answers. 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; } diff -r 8fdd1e3a6bc3 -r 1eed74960c1c t/20-serial-aa.t --- /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;