X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;ds=sidebyside;f=dsa-nagios-checks%2Fchecks%2Fdsa-check-soas;h=7c762a01c579738f32e1be13294b308d0f6734bc;hb=3722e31f9385e9a1edad92073167c7122dbcfcb9;hp=80f4924a2488617ac311133e75dcfbf70c4bfc08;hpb=352bbe893e3eb3fcfecc653e50c09f8b8e88d0d7;p=mirror%2Fdsa-nagios.git diff --git a/dsa-nagios-checks/checks/dsa-check-soas b/dsa-nagios-checks/checks/dsa-check-soas index 80f4924..7c762a0 100755 --- a/dsa-nagios-checks/checks/dsa-check-soas +++ b/dsa-nagios-checks/checks/dsa-check-soas @@ -98,7 +98,6 @@ class DSADNS < Resolv::DNS begin @config.resolv(name) {|candidate, tout, nameserver, port| msg = Message.new -puts @rd msg.rd = @rd msg.add_question(candidate, typeclass) unless sender = senders[[candidate, nameserver, port]] @@ -134,13 +133,13 @@ puts @rd end end -warnings = [] -oks = [] +@warnings = [] +@oks = [] def resolve_ns(dns, domain, nameserver) puts "Getting A record for nameserver #{nameserver} for #{domain}" if @verbose > 0 arecords = dns.getresources(nameserver, Resolv::DNS::Resource::IN::A) - warnings << "Nameserver #{nameserver} for #{domain} has #{arecords.length} A records" if arecords.length != 1 + @warnings << "Nameserver #{nameserver} for #{domain} has #{arecords.length} A records" if arecords.length != 1 addresses = arecords.map { |a| a.address.to_s } puts "Addresses for nameserver #{nameserver} for #{domain}: #{addresses.join(', ')}" if @verbose > 0 return addresses @@ -148,14 +147,14 @@ 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) nameservernames = nameservers.collect{ |ns| ns.name.to_s } nameservernames.each do |nameserver| addrs = resolve_ns(dns, domain, nameserver) - warnings << "Duplicate nameserver #{nameserver} for #{domain}" if nameserver_addresses[nameserver] + @warnings << "Duplicate nameserver #{nameserver} for #{domain}" if nameserver_addresses[nameserver] nameserver_addresses[nameserver] = addrs end end @@ -166,7 +165,7 @@ ARGV.each{ |domain| rescue ArgumentError addrs = resolve_ns(dns, domain, ns) end - warnings << "Duplicate nameserver #{ns} for #{domain}" if nameserver_addresses[ns] + @warnings << "Duplicate nameserver #{ns} for #{domain}" if nameserver_addresses[ns] nameserver_addresses[ns] = addrs end @@ -179,32 +178,41 @@ ARGV.each{ |domain| resolver.rd = 0 soas = resolver.getresources(domain, Resolv::DNS::Resource::IN::SOA) rescue SystemCallError => e - warnings << "Could not resolve #{domain} on #{nameserver}: #{e.message}" + @warnings << "Could not resolve #{domain} on #{nameserver}: #{e.message}" else resolver.close - warnings << "Nameserver #{nameserver} for #{domain} returns #{soas.length} SOAs" if soas.length != 1 + @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}" + @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 -if warnings.length > 0 - puts warnings.join('; ') +if @warnings.length > 0 + puts @warnings.join('; ') exit NAGIOS_STATUS[:WARNING] else - puts oks.join('; ') + puts @oks.join('; ') exit NAGIOS_STATUS[:OK] end