summaryrefslogtreecommitdiff
path: root/lib/custodian/protocoltest/mx.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/custodian/protocoltest/mx.rb')
-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