--- 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;