* lib/resolv.rb (Resolv::DNS#initialize): new option :nameserver_port.
(Resolv::DNS#each_resource): pass port number. (Resolv::DNS#make_requester): ditto. (Resolv::DNS::Config#lazy_initialize): initialize @nameserver_port instead of @nameserver. (Resolv::DNS::Config#single?): return port number addition to the nameserver. (Resolv::DNS::Config#generate_timeouts): use @nameserver_port. (Resolv::DNS::Config#resolv): yield port number. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26230 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
7aab2aad6e
commit
1dc1bf28ab
12
ChangeLog
12
ChangeLog
@ -1,3 +1,15 @@
|
|||||||
|
Sat Jan 2 15:57:54 2010 Tanaka Akira <akr@fsij.org>
|
||||||
|
|
||||||
|
* lib/resolv.rb (Resolv::DNS#initialize): new option :nameserver_port.
|
||||||
|
(Resolv::DNS#each_resource): pass port number.
|
||||||
|
(Resolv::DNS#make_requester): ditto.
|
||||||
|
(Resolv::DNS::Config#lazy_initialize): initialize @nameserver_port
|
||||||
|
instead of @nameserver.
|
||||||
|
(Resolv::DNS::Config#single?): return port number addition to the
|
||||||
|
nameserver.
|
||||||
|
(Resolv::DNS::Config#generate_timeouts): use @nameserver_port.
|
||||||
|
(Resolv::DNS::Config#resolv): yield port number.
|
||||||
|
|
||||||
Sat Jan 2 00:43:22 2010 NARUSE, Yui <naruse@ruby-lang.org>
|
Sat Jan 2 00:43:22 2010 NARUSE, Yui <naruse@ruby-lang.org>
|
||||||
|
|
||||||
* lib/uri/common.rb (initialize_regexp): allow leading
|
* lib/uri/common.rb (initialize_regexp): allow leading
|
||||||
|
@ -313,6 +313,16 @@ class Resolv
|
|||||||
# nil:: Uses /etc/resolv.conf.
|
# nil:: Uses /etc/resolv.conf.
|
||||||
# String:: Path to a file using /etc/resolv.conf's format.
|
# String:: Path to a file using /etc/resolv.conf's format.
|
||||||
# Hash:: Must contain :nameserver, :search and :ndots keys.
|
# Hash:: Must contain :nameserver, :search and :ndots keys.
|
||||||
|
# :nameserver_port can be used to specify port number of nameserver address.
|
||||||
|
#
|
||||||
|
# The value of :nameserver should be an address string or
|
||||||
|
# an array of address strings.
|
||||||
|
# - :nameserver => '8.8.8.8'
|
||||||
|
# - :nameserver => ['8.8.8.8', '8.8.4.4']
|
||||||
|
#
|
||||||
|
# The value of :nameserver_port should be an array of
|
||||||
|
# pair of nameserver address and port number.
|
||||||
|
# - :nameserver_port => [['8.8.8.8', 53], ['8.8.4.4', 53]]
|
||||||
#
|
#
|
||||||
# Example:
|
# Example:
|
||||||
#
|
#
|
||||||
@ -485,13 +495,13 @@ class Resolv
|
|||||||
requester = make_requester
|
requester = make_requester
|
||||||
senders = {}
|
senders = {}
|
||||||
begin
|
begin
|
||||||
@config.resolv(name) {|candidate, tout, nameserver|
|
@config.resolv(name) {|candidate, tout, nameserver, port|
|
||||||
msg = Message.new
|
msg = Message.new
|
||||||
msg.rd = 1
|
msg.rd = 1
|
||||||
msg.add_question(candidate, typeclass)
|
msg.add_question(candidate, typeclass)
|
||||||
unless sender = senders[[candidate, nameserver]]
|
unless sender = senders[[candidate, nameserver, port]]
|
||||||
sender = senders[[candidate, nameserver]] =
|
sender = senders[[candidate, nameserver, port]] =
|
||||||
requester.sender(msg, candidate, nameserver)
|
requester.sender(msg, candidate, nameserver, port)
|
||||||
end
|
end
|
||||||
reply, reply_name = requester.request(sender, tout)
|
reply, reply_name = requester.request(sender, tout)
|
||||||
case reply.rcode
|
case reply.rcode
|
||||||
@ -510,8 +520,8 @@ class Resolv
|
|||||||
end
|
end
|
||||||
|
|
||||||
def make_requester # :nodoc:
|
def make_requester # :nodoc:
|
||||||
if nameserver = @config.single?
|
if nameserver_port = @config.single?
|
||||||
Requester::ConnectedUDP.new(nameserver)
|
Requester::ConnectedUDP.new(*nameserver_port)
|
||||||
else
|
else
|
||||||
Requester::UnconnectedUDP.new
|
Requester::UnconnectedUDP.new
|
||||||
end
|
end
|
||||||
@ -846,7 +856,7 @@ class Resolv
|
|||||||
def lazy_initialize
|
def lazy_initialize
|
||||||
@mutex.synchronize {
|
@mutex.synchronize {
|
||||||
unless @initialized
|
unless @initialized
|
||||||
@nameserver = []
|
@nameserver_port = []
|
||||||
@search = nil
|
@search = nil
|
||||||
@ndots = 1
|
@ndots = 1
|
||||||
case @config_info
|
case @config_info
|
||||||
@ -865,11 +875,18 @@ class Resolv
|
|||||||
else
|
else
|
||||||
raise ArgumentError.new("invalid resolv configuration: #{@config_info.inspect}")
|
raise ArgumentError.new("invalid resolv configuration: #{@config_info.inspect}")
|
||||||
end
|
end
|
||||||
@nameserver = config_hash[:nameserver] if config_hash.include? :nameserver
|
if config_hash.include? :nameserver
|
||||||
|
@nameserver_port = config_hash[:nameserver].map {|ns| [ns, Port] }
|
||||||
|
end
|
||||||
|
if config_hash.include? :nameserver_port
|
||||||
|
@nameserver_port = config_hash[:nameserver_port].map {|ns, port| [ns, (port || Port)] }
|
||||||
|
end
|
||||||
@search = config_hash[:search] if config_hash.include? :search
|
@search = config_hash[:search] if config_hash.include? :search
|
||||||
@ndots = config_hash[:ndots] if config_hash.include? :ndots
|
@ndots = config_hash[:ndots] if config_hash.include? :ndots
|
||||||
|
|
||||||
@nameserver = ['0.0.0.0'] if @nameserver.empty?
|
if @nameserver_port.empty?
|
||||||
|
@nameserver_port = ['0.0.0.0', Port]
|
||||||
|
end
|
||||||
if @search
|
if @search
|
||||||
@search = @search.map {|arg| Label.split(arg) }
|
@search = @search.map {|arg| Label.split(arg) }
|
||||||
else
|
else
|
||||||
@ -881,9 +898,14 @@ class Resolv
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if !@nameserver.kind_of?(Array) ||
|
if !@nameserver_port.kind_of?(Array) ||
|
||||||
!@nameserver.all? {|ns| String === ns }
|
@nameserver_port.any? {|ns_port|
|
||||||
raise ArgumentError.new("invalid nameserver config: #{@nameserver.inspect}")
|
!(Array === ns_port) ||
|
||||||
|
ns_port.length != 2
|
||||||
|
!(String === ns_port[0]) ||
|
||||||
|
!(Integer === ns_port[1])
|
||||||
|
}
|
||||||
|
raise ArgumentError.new("invalid nameserver config: #{@nameserver_port.inspect}")
|
||||||
end
|
end
|
||||||
|
|
||||||
if !@search.kind_of?(Array) ||
|
if !@search.kind_of?(Array) ||
|
||||||
@ -903,8 +925,8 @@ class Resolv
|
|||||||
|
|
||||||
def single?
|
def single?
|
||||||
lazy_initialize
|
lazy_initialize
|
||||||
if @nameserver.length == 1
|
if @nameserver_port.length == 1
|
||||||
return @nameserver[0]
|
return @nameserver_port[0]
|
||||||
else
|
else
|
||||||
return nil
|
return nil
|
||||||
end
|
end
|
||||||
@ -930,7 +952,7 @@ class Resolv
|
|||||||
|
|
||||||
def generate_timeouts
|
def generate_timeouts
|
||||||
ts = [InitialTimeout]
|
ts = [InitialTimeout]
|
||||||
ts << ts[-1] * 2 / @nameserver.length
|
ts << ts[-1] * 2 / @nameserver_port.length
|
||||||
ts << ts[-1] * 2
|
ts << ts[-1] * 2
|
||||||
ts << ts[-1] * 2
|
ts << ts[-1] * 2
|
||||||
return ts
|
return ts
|
||||||
@ -943,9 +965,9 @@ class Resolv
|
|||||||
candidates.each {|candidate|
|
candidates.each {|candidate|
|
||||||
begin
|
begin
|
||||||
timeouts.each {|tout|
|
timeouts.each {|tout|
|
||||||
@nameserver.each {|nameserver|
|
@nameserver_port.each {|nameserver, port|
|
||||||
begin
|
begin
|
||||||
yield candidate, tout, nameserver
|
yield candidate, tout, nameserver, port
|
||||||
rescue ResolvTimeout
|
rescue ResolvTimeout
|
||||||
end
|
end
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user