diff options
Diffstat (limited to 'lib/custodian/protocoltest')
| -rw-r--r-- | lib/custodian/protocoltest/http.rb | 64 | 
1 files changed, 36 insertions, 28 deletions
| diff --git a/lib/custodian/protocoltest/http.rb b/lib/custodian/protocoltest/http.rb index 32073f8..9ff734c 100644 --- a/lib/custodian/protocoltest/http.rb +++ b/lib/custodian/protocoltest/http.rb @@ -61,44 +61,52 @@ module Custodian        #        def ignore_failure?( protocol ) -        #  IP addresses we found for the host -        ips = [] -          # Get the hostname we're connecting to.          u = URI.parse(@url)          target = u.host -        # -        #  Resolve the target to an IP, unless it is already an address. -        # -        if (target =~ /^([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)$/) || -           (target =~ /^([0-9a-f:]+)$/) -          ips.push(target) +        # IPs for the target +        ips = [] + +        case protocol +        when :ipv4 +          if (target =~ /^([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)$/) +            ips << target +          end +        when :ipv6 +          if (target =~ /^([0-9a-f:]+)$/) +            ips << target +          end          else +          raise ArgumentError, "Sanity-checking DNS-failure of unknown type: #{protocol}" +        end -          # -          # OK if it didn't look like an IP address then attempt to -          # look it up, as both IPv4 and IPv6. -          # -          begin -            timeout(30) do +        # Early termination? +        return true unless ips.empty? +        # +        # OK if it didn't look like an IP address then attempt to +        # look it up, as both IPv4 and IPv6. +        # +        begin +          timeout(30) do + +            type = case protocol +                   when :ipv4 +                     Resolv::DNS::Resource::IN::A +                   when :ipv6 +                     Resolv::DNS::Resource::IN::AAAA +                   else +                     raise ArgumentError, "Sanity-checking DNS-failure of unknown type: #{protocol}" +                   end + +            begin                Resolv::DNS.open do |dns| - -                if ( protocol == :ipv4 ) -                  ress = dns.getresources(target, Resolv::DNS::Resource::IN::A) -                  ress.map { |r| ips.push(r.address.to_s) } -                elsif ( protocol == :ipv6 ) - -                  ress = dns.getresources(target, Resolv::DNS::Resource::IN::AAAA) -                  ress.map { |r| ips.push(r.address.to_s) } -                else -                  raise ArgumentError, "Sanity-checking DNS-failure of unknown type" -                end +                ips = dns.getresources(target, type)                end +            rescue Timeout::Error => _e +              # NOP              end -          rescue Timeout::Error => _e -            # NOP            end          end | 
