dsa-check-soas: on soa disagreement, list nameservers
authorPeter Palfrader <peter@palfrader.org>
Thu, 6 Aug 2015 07:38:42 +0000 (09:38 +0200)
committerPeter Palfrader <peter@palfrader.org>
Thu, 6 Aug 2015 07:38:42 +0000 (09:38 +0200)
dsa-nagios-checks/checks/dsa-check-soas
dsa-nagios-checks/debian/changelog

index 8d88915..eb28d8c 100755 (executable)
@@ -147,7 +147,7 @@ end
 
 dns = Resolv::DNS.new
 ARGV.each{ |domain|
-       serial = []
+       serial = {}
        nameserver_addresses = {}
        if @check_soa_nameservers
                nameservers = dns.getresources(domain, Resolv::DNS::Resource::IN::NS)
@@ -184,18 +184,27 @@ ARGV.each{ |domain|
                                warnings << "Nameserver #{nameserver} for #{domain} returns #{soas.length} SOAs" if soas.length != 1
                                soas.each do |soa|
                                        puts " Nameserver #{nameserver} returns serial #{soa.serial} for #{domain}" if @verbose > 0
-                                       serial << soa.serial unless serial.include? soa.serial
+                                       sn = soa.serial.to_i
+                                       if serial.has_key? sn then
+                                               serial[sn] << nameserver
+                                       else
+                                               serial[sn] = [nameserver]
+                                       end
                                end
                        end
                end
        end
-       case serial.length
+       case serial.keys.length
                when 0
                        warnings << "Found no serials for #{domain}"
                when 1
-                       oks << "#{domain} is at #{serial.first}"
+                       oks << "#{domain} is at #{serial.keys.first}"
                else
-                       warnings << "Nameservers disagree on serials for #{domain}: found #{serial.join(', ')}" if serial.length != 1
+                       text = []
+                       serial.keys.sort.each do |sn|
+                               text << "#{sn} (#{serial[sn].join(', ')})"
+                       end
+                       warnings << "Nameservers disagree on serials for #{domain}: found #{text.join(', ')}"
        end
 }
 dns.close
index c6953c4..7b42604 100644 (file)
@@ -2,8 +2,9 @@ dsa-nagios-checks (108+XXXX) UNRELEASED; urgency=medium
 
   * dsa-check-dabackup: use old logfile if lockfile indicates da-backup still
     running.
+  * dsa-check-soas: on soa disagreement, list nameservers.
 
- -- Peter Palfrader <weasel@debian.org>  Wed, 05 Aug 2015 09:16:19 +0200
+ -- Peter Palfrader <weasel@debian.org>  Thu, 06 Aug 2015 09:37:24 +0200
 
 dsa-nagios-checks (108) unstable; urgency=medium