diff options
author | Steve Kemp <steve@steve.org.uk> | 2015-01-13 16:02:02 +0000 |
---|---|---|
committer | Steve Kemp <steve@steve.org.uk> | 2015-01-13 16:02:02 +0000 |
commit | d81e114a3c4a5ffe2c89819f335c4a040704c239 (patch) | |
tree | a66b5b82f5bac8a50fb2795b7451a901258ec4cd /lib | |
parent | 97cc01c25359fd5465b7acf2fb4ad5f7e4c19309 (diff) |
Lookup MX record(s) for the domain under test.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/custodian/protocoltest/mx.rb | 50 |
1 files changed, 50 insertions, 0 deletions
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 |