Serial needs have the aa flag set!
authorheiko
Tue, 06 Jan 2015 21:42:41 +0100
changeset 14 8da9e81acf82
parent 13 e502f4d6e7a2
child 15 bb7b3ae76cc8
Serial needs have the aa flag set!
plugins/check_dns-delegation
t/10-minimal.t
--- a/plugins/check_dns-delegation	Tue Jan 06 15:14:23 2015 +0100
+++ b/plugins/check_dns-delegation	Tue Jan 06 21:42:41 2015 +0100
@@ -12,13 +12,24 @@
 
 =head1 DESCRIPTION
 
-B<check_dns-serial> is designed as a Icinga/Nagios plugin to verify that
-all responsible NS have the same serial number for their zones.
+B<check_dns-delegation> is designed as a Icinga/Nagios plugin to verify that
+all responsible NS know about the delegation.
+
+Each domain has to survive the following tests:
+
+=over
+
+=item The I<reference> server needs to be authoritive.
 
-Domains we are not responsible for are marked as B<critical>.
-Mismatching serial numbers are marked as B<critical>.
+=item The NS records known outside (checked with some public DNS service)
+need to match the NS records obtained from the reference server.
 
-The list of domains may consist of the following items:
+=item The serial numbers obtained from the NS servers B<and> the
+reference server need to match. All servers need to be authoritive!
+
+=back
+
+The I<DOMAINS> are passed a a list in one of the following forms:
 
 =over
 
@@ -90,7 +101,7 @@
 
         if ($src =~ m{^(?:(/.*)|file://(/.*))}) {
             open(my $f, '<', $1) or die "$0: Can't open $1 for reading: $!\n";
-            push @domains, map { /^\s*(\S+)\s*/ } <$f>;
+            push @domains, map { /^\s*(\S+)\s*/ } grep { !/^\s*#/ } <$f>;
             next;
         }
 
@@ -159,6 +170,7 @@
     my (@errs, @ns);
     my @our = eval { sort +ns($domain, nameservers => [$reference], aa => 1) };
     push @errs, $@ if $@;
+
     my @their = eval { sort +ns($domain) };
     push @errs, $@ if $@;
 
@@ -179,7 +191,7 @@
 
 sub serial_ok {
     my ($domain, @ns) = @_;
-    my @serials = map { my $s = serial $domain, nameservers => [$_]; "$s\@$_" } @ns;
+    my @serials = map { my $s = serial $domain, nameservers => [$_], aa => 1; "$s\@$_" } @ns;
     ### @serials
 
     if (uniq(map { /(\d+)/ } @serials) != 1) {
@@ -219,7 +231,7 @@
         my @ns = eval { ns_ok($domain, $opt_reference) };
 	if ($@) { 
             $CRITICAL{$domain} = $@;
-            say STDERR 'ns not ok' if $opt_progress;
+            say STDERR 'fail(ns)' if $opt_progress;
             next;
         }
         print STDERR 'ok(ns) ' if $opt_progress;
@@ -227,7 +239,7 @@
         my @serial = eval { serial_ok($domain, @ns, $opt_reference) };
         if ($@) {
             $CRITICAL{$domain} = $@;
-            say STDERR 'serial not ok' if $opt_progress;
+            say STDERR 'fail(serial)' if $opt_progress;
             next;
         }
         say STDERR 'ok(serial)' if $opt_progress;
@@ -266,6 +278,10 @@
 
 Tell about the progress. (default: on if input is connected to a terminal)
 
+=item B<--additional>
+
+Domains from this list are
+
 =back
 
 =head1 PERMISSIONS
--- a/t/10-minimal.t	Tue Jan 06 15:14:23 2015 +0100
+++ b/t/10-minimal.t	Tue Jan 06 21:42:41 2015 +0100
@@ -9,7 +9,8 @@
 
 my $tmp = File::Temp->new;
 $tmp->print(<<__);
-    a
+# kommentar
+    a # more comment
     b
     c
 __