mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* ext/openssl/lib/openssl/ssl.rb (OpenSSL::SSL::SSLServer#accept):
Consider Socket#accept as well as TCPServer#accept. Reported by Sam Stelfox. [ruby-core:62064] [Bug #9750] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45863 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
1386a2303f
commit
2dbae9b1f1
3 changed files with 79 additions and 1 deletions
|
@ -1,3 +1,9 @@
|
|||
Wed May 7 21:45:00 2014 Tanaka Akira <akr@fsij.org>
|
||||
|
||||
* ext/openssl/lib/openssl/ssl.rb (OpenSSL::SSL::SSLServer#accept):
|
||||
Consider Socket#accept as well as TCPServer#accept.
|
||||
Reported by Sam Stelfox. [ruby-core:62064] [Bug #9750]
|
||||
|
||||
Wed May 7 17:24:07 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* numeric.c (num_step_scan_args): check keyword arguments and fail
|
||||
|
|
|
@ -225,7 +225,10 @@ module OpenSSL
|
|||
|
||||
# Works similar to TCPServer#accept.
|
||||
def accept
|
||||
sock = @svr.accept
|
||||
# Socket#accept returns [socket, addrinfo].
|
||||
# TCPServer#accept returns a socket.
|
||||
# The following comma strips addrinfo.
|
||||
sock, = @svr.accept
|
||||
begin
|
||||
ssl = OpenSSL::SSL::SSLSocket.new(sock, @ctx)
|
||||
ssl.sync_close = true
|
||||
|
|
|
@ -56,6 +56,64 @@ module SSLPair
|
|||
end
|
||||
end
|
||||
|
||||
module SSLPairLowlevelSocket
|
||||
def server
|
||||
host = "127.0.0.1"
|
||||
port = 0
|
||||
ctx = OpenSSL::SSL::SSLContext.new()
|
||||
ctx.ciphers = "ADH"
|
||||
ctx.tmp_dh_callback = proc { OpenSSL::TestUtils::TEST_KEY_DH1024 }
|
||||
tcps = Addrinfo.tcp(host, port).listen
|
||||
ssls = OpenSSL::SSL::SSLServer.new(tcps, ctx)
|
||||
return ssls
|
||||
end
|
||||
|
||||
def client(port)
|
||||
host = "127.0.0.1"
|
||||
ctx = OpenSSL::SSL::SSLContext.new()
|
||||
ctx.ciphers = "ADH"
|
||||
s = Addrinfo.tcp(host, port).connect
|
||||
ssl = OpenSSL::SSL::SSLSocket.new(s, ctx)
|
||||
ssl.connect
|
||||
ssl.sync_close = true
|
||||
ssl
|
||||
end
|
||||
|
||||
def ssl_pair
|
||||
ssls = server
|
||||
ths = Thread.new {
|
||||
ns = ssls.accept
|
||||
ssls.close
|
||||
ns
|
||||
}
|
||||
port = ssls.to_io.connect_address.ip_port
|
||||
thc = Thread.new {
|
||||
client(port)
|
||||
}
|
||||
s = ths.value
|
||||
c = thc.value
|
||||
if block_given?
|
||||
begin
|
||||
yield c, s
|
||||
ensure
|
||||
c.close unless c.closed?
|
||||
s.close unless s.closed?
|
||||
end
|
||||
else
|
||||
return c, s
|
||||
end
|
||||
ensure
|
||||
if ths && ths.alive?
|
||||
ths.kill
|
||||
ths.join
|
||||
end
|
||||
if thc && thc.alive?
|
||||
thc.kill
|
||||
thc.join
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
class OpenSSL::TestEOF1 < Test::Unit::TestCase
|
||||
include TestEOF
|
||||
include SSLPair
|
||||
|
@ -309,4 +367,15 @@ class OpenSSL::TestPair < Test::Unit::TestCase
|
|||
|
||||
end
|
||||
|
||||
class OpenSSL::TestPairLowlevelSocket < Test::Unit::TestCase
|
||||
include SSLPairLowlevelSocket
|
||||
|
||||
def test_getc
|
||||
ssl_pair {|s1, s2|
|
||||
s1 << "a"
|
||||
assert_equal(?a, s2.getc)
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue