diff options
author | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-02-22 05:20:38 +0000 |
---|---|---|
committer | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-02-22 05:20:38 +0000 |
commit | 96cfe6614ae723855bec1acbc197480e2168f419 (patch) | |
tree | 9fe7d34a00e1ff9350978a5ff3fbe663ba251f86 | |
parent | 95985829574c638cf169e611ff76749602353a50 (diff) |
merge revision(s) 44880: [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_1@45110 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | lib/resolv.rb | 16 | ||||
-rw-r--r-- | version.h | 2 |
3 files changed, 19 insertions, 5 deletions
@@ -1,3 +1,9 @@ +Sat Feb 22 14:18:35 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 22 14:07:04 2014 Tanaka Akira <akr@fsij.org> * lib/resolv.rb (Resolv::DNS::Message::MessageDecoder): Raise diff --git a/lib/resolv.rb b/lib/resolv.rb index ed12764a1b..ee21c9c843 100644 --- a/lib/resolv.rb +++ b/lib/resolv.rb @@ -522,8 +522,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 @@ -741,7 +742,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) @@ -756,11 +761,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 @@ -781,6 +787,7 @@ class Resolv attr_reader :data def send + raise "@sock is nil." if @sock.nil? @sock.send(@msg, 0, @host, @port) end end @@ -824,6 +831,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,6 +1,6 @@ #define RUBY_VERSION "2.1.1" #define RUBY_RELEASE_DATE "2014-02-22" -#define RUBY_PATCHLEVEL 54 +#define RUBY_PATCHLEVEL 55 #define RUBY_RELEASE_YEAR 2014 #define RUBY_RELEASE_MONTH 2 |