diff options
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 | 
