lib/Nagios/Check/DNS/delegation.pm
changeset 24 d20452378ead
parent 23 1eed74960c1c
child 25 88749a69668e
--- 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;