Project

General

Profile

« Previous | Next » 

Revision 522231bf

Added by Dmitri Dolguikh over 7 years ago

Fixes #17037 - Resolver::DNS#getresources is used now.

It replaces calls to Resolver::DNS#getaddresses and
Resolver::DNS#getnames in dns module and its providers.

View differences:

modules/dns_common/dns_common.rb
logger.warn(%q{Proxy::Dns::Record#dns_find has been deprecated and will be removed in future versions of Smart-Proxy.
Please use ::Proxy::Dns::Record#get_name or ::Proxy::Dns::Record#get_address instead.})
if key =~ /\.in-addr\.arpa$/ || key =~ /\.ip6\.arpa$/
resolver.getname(ptr_to_ip(key)).to_s
get_name(key)
else
resolver.getaddress(key).to_s
end
......
end
def get_name(a_ptr)
resolver.getname(ptr_to_ip(a_ptr))
rescue Resolv::ResolvError
false
get_resource_as_string(a_ptr, Resolv::DNS::Resource::IN::PTR, :name)
end
def get_name!(a_ptr)
resolver.getname(ptr_to_ip(a_ptr))
rescue Resolv::ResolvError
raise Proxy::Dns::NotFound.new("Cannot find DNS entry for #{a_ptr}")
get_resource_as_string!(a_ptr, Resolv::DNS::Resource::IN::PTR, :name)
end
def get_ipv4_address!(fqdn)
get_address!(fqdn, Resolv::IPv4::Regex)
get_resource_as_string!(fqdn, Resolv::DNS::Resource::IN::A, :address)
end
def get_ipv4_address(fqdn)
get_address(fqdn, Resolv::IPv4::Regex)
get_resource_as_string(fqdn, Resolv::DNS::Resource::IN::A, :address)
end
def get_ipv6_address!(fqdn)
get_address!(fqdn, Resolv::IPv6::Regex)
get_resource_as_string!(fqdn, Resolv::DNS::Resource::IN::AAAA, :address)
end
def get_ipv6_address(fqdn)
get_address(fqdn, Resolv::IPv6::Regex)
get_resource_as_string(fqdn, Resolv::DNS::Resource::IN::AAAA, :address)
end
def get_address(a_fqdn, should_match = nil)
addresses = getaddresses(a_fqdn)
found = should_match.nil? ? addresses.first : addresses.find {|a| a =~ should_match}
found || false
def get_resource_as_string(value, resource_type, attr)
resolver.getresource(value, resource_type).send(attr).to_s
rescue Resolv::ResolvError
false
end
def get_address!(a_fqdn, should_match = nil)
found = get_address(a_fqdn, should_match)
raise Proxy::Dns::NotFound.new("Cannot find DNS entry for #{a_fqdn}") unless found
found
def get_resource_as_string!(value, resource_type, attr)
resolver.getresource(value, resource_type).send(attr).to_s
rescue Resolv::ResolvError
raise Proxy::Dns::NotFound.new("Cannot find DNS entry for #{value}")
end
def ptr_to_ip ptr
......
# no conflict: -1; conflict: 1, conflict but record / ip matches: 0
def a_record_conflicts(fqdn, ip)
if ip_addr = to_ipaddress(ip)
addresses = getaddresses(fqdn).select { |a| a =~ Resolv::IPv4::Regex }
addresses = resolver.getresources(fqdn, Resolv::DNS::Resource::IN::A).map {|r| IPAddr.new(r.address.to_s)}
return -1 if addresses.empty?
return 0 if addresses.any? {|a| IPAddr.new(a.to_s) == ip_addr}
return 0 if addresses.any? {|a| a == ip_addr}
1
else
raise Proxy::Dns::Error.new("Not an IP Address: '#{ip}'")
......
def aaaa_record_conflicts(fqdn, ip)
if ip_addr = to_ipaddress(ip)
addresses = getaddresses(fqdn).select { |a| a =~ Resolv::IPv6::Regex }
addresses = resolver.getresources(fqdn, Resolv::DNS::Resource::IN::AAAA).map {|r| IPAddr.new(r.address.to_s)}
return -1 if addresses.empty?
return 0 if addresses.any? {|a| IPAddr.new(a.to_s) == ip_addr}
return 0 if addresses.any? {|a| a == ip_addr}
1
else
raise Proxy::Dns::Error.new("Not an IP Address: '#{ip}'")
......
end
def ptr_record_conflicts(fqdn, ip)
if ip_addr = to_ipaddress(ip)
names = resolver.getnames(ip_addr.to_s)
return -1 if names.empty?
return 0 if names.any? {|n| n.to_s.casecmp(fqdn) == 0}
1
else
raise Proxy::Dns::Error.new("Not an IP Address: '#{ip}'")
end
names = if ip.match(Resolv::IPv4::Regex) || ip.match(Resolv::IPv6::Regex)
logger.warn(%q{Proxy::Dns::Record#ptr_record_conflicts with a non-ptr record parameter has been deprecated and will be removed in future versions of Smart-Proxy.
Please use ::Proxy::Dns::Record#ptr_record_conflicts('101.212.58.216.in-addr.arpa') format instead.})
resolver.getnames(ip).map {|r| r.to_s}
else
resolver.getresources(ip, Resolv::DNS::Resource::IN::PTR).map {|r| r.name.to_s}
end
return -1 if names.empty?
return 0 if names.any? {|n| n.casecmp(fqdn) == 0}
1
end
def to_ipaddress ip
......
def remove_cname_record(fqdn)
raise Proxy::Dns::Error.new("This DNS provider does not support CNAME management")
end
def getaddresses(fqdn)
resolver.getaddresses(fqdn).map(&:to_s)
end
end
end

Also available in: Unified diff