summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Kemp <steve@steve.org.uk>2015-01-13 16:02:02 +0000
committerSteve Kemp <steve@steve.org.uk>2015-01-13 16:02:02 +0000
commitd81e114a3c4a5ffe2c89819f335c4a040704c239 (patch)
treea66b5b82f5bac8a50fb2795b7451a901258ec4cd
parent97cc01c25359fd5465b7acf2fb4ad5f7e4c19309 (diff)
Lookup MX record(s) for the domain under test.
-rw-r--r--lib/custodian/protocoltest/mx.rb50
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