summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-03-16 08:43:28 +0000
committerhsbt <hsbt@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-03-16 08:43:28 +0000
commit7d75a78604a83a4bd2eb30af4efa9f13c18966f1 (patch)
tree5d89b66df67554e10d107b831c0b850bf3a1ab64
parentdc37d6dababaf1947d9395ba0610097821906791 (diff)
* lib/webrick/server.rb: Fix regression bug in WEBrick's
:DoNotReverseLookup config option implementation. [fix GH-731] Patch by @vais * test/webrick/test_do_not_reverse_lookup.rb: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49980 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog7
-rw-r--r--lib/webrick/server.rb4
-rw-r--r--test/webrick/test_do_not_reverse_lookup.rb70
3 files changed, 80 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 3bf5a1ebef..73aefd50f5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Mon Mar 16 17:43:21 2015 SHIBATA Hiroshi <shibata.hiroshi@gmail.com>
+
+ * lib/webrick/server.rb: Fix regression bug in WEBrick's
+ :DoNotReverseLookup config option implementation.
+ [fix GH-731] Patch by @vais
+ * test/webrick/test_do_not_reverse_lookup.rb: ditto.
+
Sat Mar 14 20:05:23 2015 Kazuki Tanaka <gogotanaka@ruby-lang.org>
* math.c (math_gamma): optimization for passed small integer.
diff --git a/lib/webrick/server.rb b/lib/webrick/server.rb
index 8b53939c52..815375f30f 100644
--- a/lib/webrick/server.rb
+++ b/lib/webrick/server.rb
@@ -179,7 +179,9 @@ module WEBrick
svrs[0].each{|svr|
@tokens.pop # blocks while no token is there.
if sock = accept_client(svr)
- sock.do_not_reverse_lookup = config[:DoNotReverseLookup]
+ unless config[:DoNotReverseLookup].nil?
+ sock.do_not_reverse_lookup = !!config[:DoNotReverseLookup]
+ end
th = start_thread(sock, &block)
th[:WEBrickThread] = true
thgroup.add(th)
diff --git a/test/webrick/test_do_not_reverse_lookup.rb b/test/webrick/test_do_not_reverse_lookup.rb
new file mode 100644
index 0000000000..57f3b1d3ef
--- /dev/null
+++ b/test/webrick/test_do_not_reverse_lookup.rb
@@ -0,0 +1,70 @@
+require "test/unit"
+require "webrick"
+require_relative "utils"
+
+class TestDoNotReverseLookup < Test::Unit::TestCase
+ class DNRL < WEBrick::GenericServer
+ def run(sock)
+ sock << sock.do_not_reverse_lookup.to_s
+ end
+ end
+
+ @@original_do_not_reverse_lookup_value = Socket.do_not_reverse_lookup
+
+ def teardown
+ Socket.do_not_reverse_lookup = @@original_do_not_reverse_lookup_value
+ end
+
+ def do_not_reverse_lookup?(config)
+ result = nil
+ TestWEBrick.start_server(DNRL, config) do |server, addr, port, log|
+ TCPSocket.open(addr, port) do |sock|
+ result = {'true' => true, 'false' => false}[sock.gets]
+ end
+ end
+ result
+ end
+
+ # +--------------------------------------------------------------------------+
+ # | Expected interaction between Socket.do_not_reverse_lookup |
+ # | and WEBrick::Config::General[:DoNotReverseLookup] |
+ # +----------------------------+---------------------------------------------+
+ # | |WEBrick::Config::General[:DoNotReverseLookup]|
+ # +----------------------------+--------------+---------------+--------------+
+ # |Socket.do_not_reverse_lookup| TRUE | FALSE | NIL |
+ # +----------------------------+--------------+---------------+--------------+
+ # | TRUE | true | false | true |
+ # +----------------------------+--------------+---------------+--------------+
+ # | FALSE | true | false | false |
+ # +----------------------------+--------------+---------------+--------------+
+
+ def test_socket_dnrl_true_server_dnrl_true
+ Socket.do_not_reverse_lookup = true
+ assert_equal(true, do_not_reverse_lookup?(:DoNotReverseLookup => true))
+ end
+
+ def test_socket_dnrl_true_server_dnrl_false
+ Socket.do_not_reverse_lookup = true
+ assert_equal(false, do_not_reverse_lookup?(:DoNotReverseLookup => false))
+ end
+
+ def test_socket_dnrl_true_server_dnrl_nil
+ Socket.do_not_reverse_lookup = true
+ assert_equal(true, do_not_reverse_lookup?(:DoNotReverseLookup => nil))
+ end
+
+ def test_socket_dnrl_false_server_dnrl_true
+ Socket.do_not_reverse_lookup = false
+ assert_equal(true, do_not_reverse_lookup?(:DoNotReverseLookup => true))
+ end
+
+ def test_socket_dnrl_false_server_dnrl_false
+ Socket.do_not_reverse_lookup = false
+ assert_equal(false, do_not_reverse_lookup?(:DoNotReverseLookup => false))
+ end
+
+ def test_socket_dnrl_false_server_dnrl_nil
+ Socket.do_not_reverse_lookup = false
+ assert_equal(false, do_not_reverse_lookup?(:DoNotReverseLookup => nil))
+ end
+end