From 06c1e4db27ca6c68c694e35af651502b0da6086e Mon Sep 17 00:00:00 2001 From: Steve Kemp Date: Tue, 13 Jan 2015 16:02:02 +0000 Subject: Lookup MX record(s) for the domain under test. --- lib/custodian/protocoltest/mx.rb | 50 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/lib/custodian/protocoltest/mx.rb b/lib/custodian/protocoltest/mx.rb index 70fe465..ed46c4c 100644 --- a/lib/custodian/protocoltest/mx.rb +++ b/lib/custodian/protocoltest/mx.rb @@ -21,10 +21,16 @@ module Custodian # Constructor # def initialize( line ) + + # Save the line away @line = line + + # The main domain we're querying + @host = line.split(/\s+/)[0] end + # # Allow this test to be serialized. # @@ -41,6 +47,50 @@ module Custodian # reset the error, in case we were previously executed. @error = nil + # + # Get the timeout period. + # + settings = Custodian::Settings.instance() + period = settings.timeout() + + # + # The MX-hosts + # + mx = Array.new() + + # + # Lookup the MX record + # + begin + timeout( period ) do + + Resolv::DNS.open do |dns| + ress = dns.getresources(@host, Resolv::DNS::Resource::IN::MX) + ress.map { |r| mx.push( IPSocket::getaddress(r.exchange.to_s) ) } + end + end + rescue Timeout::Error => e + @error = "Timed-out performing DNS lookups: #{e}" + return nil + end + + # + # At this point we should have an array of IPv4 or IPv6 addresses. + # + # If that array is empty then there will be no incoming mail because + # there are now working MX records in DNS - or because the domain + # has expired, etc. + # + # So on that basis we must alert. + # + if ( mx.empty? ) then + @error = "Failed to perform DNS lookup of MX record(s) for host #{@host}" + return false + end + + mx.each do |bob| + puts "XXXX #{bob}" + end return true; end -- cgit v1.2.1