# HG changeset patch # User heiko # Date 1421663640 -3600 # Node ID d20452378eadb9da9eb1a24f962c4266f58582ee # Parent 1eed74960c1c92cdee85e23a4a87fbe640430128 check serial with overrides, not with local server diff -r 1eed74960c1c -r d20452378ead lib/Nagios/Check/DNS/delegation.pm --- a/lib/Nagios/Check/DNS/delegation.pm Mon Jan 19 10:33:29 2015 +0100 +++ b/lib/Nagios/Check/DNS/delegation.pm Mon Jan 19 11:34:00 2015 +0100 @@ -91,7 +91,7 @@ } die $r->errorstring . "\@$nameservers\n" if not $q; - die "no aa \@$nameservers\n" if $aa and not $q->header->aa; + die "no aa(NS) \@$nameservers\n" if $aa and not $q->header->aa; push @ns, map { $_->nsdname } grep { $_->type eq 'NS' } $q->answer; return sort @ns; @@ -110,7 +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; + die "no aa(SOA) \@$nameservers\n" if $aa and not $q->header->aa; return (map { $_->serial } grep { $_->type eq 'SOA' } $q->answer)[0]; } @@ -125,11 +125,12 @@ # CRITICAL - if the serial cannot be found at one of the sources sub ns_ok { - my ($domain, $reference, $override) = @_; + my ($domain, $references, $is_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) }; + #my @our = eval { sort +ns($domain, nameservers => [$reference], aa => 1, override => $override) }; + my @our = eval { sort +ns($domain, nameservers => $references, aa => 1) }; if (chomp $@) { push @errs, $@; push @our, $@; @@ -145,7 +146,7 @@ if (@errs or "@our" ne "@public") { local $" = ', '; die sprintf "NS differ (%s: @our) vs (public: @public)\n", - $override->{$domain} ? 'override' : 'our'; + $is_override ? 'override' : 'our'; } @@ -155,8 +156,8 @@ } sub serial_ok { - my ($domain, @ns) = @_; - my @serials = map { my $s = serial $domain, nameservers => [$_], aa => 1; "$s\@$_" } @ns; + my ($domain, $ns) = @_; + my @serials = map { my $s = serial $domain, nameservers => [$_], aa => 1; "$s\@$_" } @$ns; ### @serials if (uniq(map { /(\d+)/ } @serials) != 1) { @@ -195,9 +196,12 @@ my (@OK, %CRITICAL); foreach my $domain (shuffle @domains) { - print STDERR "$domain " if $opt_progress; + state $all = @domains; + state $i++; + print STDERR "$domain ($i/$all) " if $opt_progress; - my @ns = eval { ns_ok($domain, $opt_reference, \%override) }; + my @ns = eval { ns_ok($domain, $override{$domain} ? $override{$domain} : [$opt_reference], + $override{$domain}) }; if ($@) { $CRITICAL{$domain} = $@; say STDERR 'fail(ns)' if $opt_progress; @@ -205,7 +209,7 @@ } print STDERR 'ok(ns) ' if $opt_progress; - my @serial = eval { serial_ok($domain, @ns, $opt_reference) }; + my @serial = eval { serial_ok($domain, [@ns, $override{$domain} ? () : $opt_reference]) }; if ($@) { $CRITICAL{$domain} = $@; say STDERR 'fail(serial)' if $opt_progress;