mirror of
https://github.com/ruby/ruby.git
synced 2025-09-17 17:43:59 +02:00
merge revision(s) r44880: [Backport #9477]
* lib/resolv.rb: Ignore name servers which cause EAFNOSUPPORT on socket creation. Reported by Bjoern Rennhak. [ruby-core:60442] [Bug #9477] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_0_0@44977 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
d9e36580ef
commit
af33a148ab
3 changed files with 21 additions and 7 deletions
|
@ -1,3 +1,9 @@
|
|||
Sun Feb 16 00:01:16 2014 Tanaka Akira <akr@fsij.org>
|
||||
|
||||
* lib/resolv.rb: Ignore name servers which cause EAFNOSUPPORT on
|
||||
socket creation.
|
||||
Reported by Bjoern Rennhak. [ruby-core:60442] [Bug #9477]
|
||||
|
||||
Sat Feb 15 23:58:31 2014 Tanaka Akira <akr@fsij.org>
|
||||
|
||||
* lib/resolv.rb (Resolv::DNS::Message::MessageDecoder): Raise
|
||||
|
|
|
@ -515,8 +515,9 @@ class Resolv
|
|||
msg.rd = 1
|
||||
msg.add_question(candidate, typeclass)
|
||||
unless sender = senders[[candidate, nameserver, port]]
|
||||
sender = senders[[candidate, nameserver, port]] =
|
||||
requester.sender(msg, candidate, nameserver, port)
|
||||
sender = requester.sender(msg, candidate, nameserver, port)
|
||||
next if !sender
|
||||
senders[[candidate, nameserver, port]] = sender
|
||||
end
|
||||
reply, reply_name = requester.request(sender, tout)
|
||||
case reply.rcode
|
||||
|
@ -725,7 +726,11 @@ class Resolv
|
|||
af = Socket::AF_INET
|
||||
end
|
||||
next if @socks_hash[bind_host]
|
||||
sock = UDPSocket.new(af)
|
||||
begin
|
||||
sock = UDPSocket.new(af)
|
||||
rescue Errno::EAFNOSUPPORT
|
||||
next # The kernel doesn't support the address family.
|
||||
end
|
||||
sock.do_not_reverse_lookup = true
|
||||
sock.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC) if defined? Fcntl::F_SETFD
|
||||
DNS.bind_random_port(sock, bind_host)
|
||||
|
@ -740,11 +745,12 @@ class Resolv
|
|||
end
|
||||
|
||||
def sender(msg, data, host, port=Port)
|
||||
sock = @socks_hash[host.index(':') ? "::" : "0.0.0.0"]
|
||||
return nil if !sock
|
||||
service = [host, port]
|
||||
id = DNS.allocate_request_id(host, port)
|
||||
request = msg.encode
|
||||
request[0,2] = [id].pack('n')
|
||||
sock = @socks_hash[host.index(':') ? "::" : "0.0.0.0"]
|
||||
return @senders[[service, id]] =
|
||||
Sender.new(request, data, sock, host, port)
|
||||
end
|
||||
|
@ -765,6 +771,7 @@ class Resolv
|
|||
attr_reader :data
|
||||
|
||||
def send
|
||||
raise "@sock is nil." if @sock.nil?
|
||||
@sock.send(@msg, 0, @host, @port)
|
||||
end
|
||||
end
|
||||
|
@ -808,6 +815,7 @@ class Resolv
|
|||
|
||||
class Sender < Requester::Sender # :nodoc:
|
||||
def send
|
||||
raise "@sock is nil." if @sock.nil?
|
||||
@sock.send(@msg, 0)
|
||||
end
|
||||
attr_reader :data
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
#define RUBY_VERSION "2.0.0"
|
||||
#define RUBY_RELEASE_DATE "2014-02-15"
|
||||
#define RUBY_PATCHLEVEL 411
|
||||
#define RUBY_RELEASE_DATE "2014-02-16"
|
||||
#define RUBY_PATCHLEVEL 412
|
||||
|
||||
#define RUBY_RELEASE_YEAR 2014
|
||||
#define RUBY_RELEASE_MONTH 2
|
||||
#define RUBY_RELEASE_DAY 15
|
||||
#define RUBY_RELEASE_DAY 16
|
||||
|
||||
#include "ruby/version.h"
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue