diff options
author | shugo <shugo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-11-26 09:29:11 +0000 |
---|---|---|
committer | shugo <shugo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-11-26 09:29:11 +0000 |
commit | 473d0d3211b6853deda01891b00076af074b2cb5 (patch) | |
tree | a2a0eac1f791f523816e9fa28caa717beca2b0c6 | |
parent | 631dde2572eb78cbf09d73d23a43852ccb199bd1 (diff) |
net/ftp: support timeout for TLS handshake.
Net::FTP inherits ssl_socket_connect from Net::Protocol to implement timeout.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56898 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | lib/net/ftp.rb | 4 | ||||
-rw-r--r-- | test/net/ftp/test_ftp.rb | 24 |
2 files changed, 26 insertions, 2 deletions
diff --git a/lib/net/ftp.rb b/lib/net/ftp.rb index 7aac61afe8..1f17e9bdc4 100644 --- a/lib/net/ftp.rb +++ b/lib/net/ftp.rb @@ -77,7 +77,7 @@ module Net # - #rename # - #delete # - class FTP + class FTP < Protocol include MonitorMixin if defined?(OpenSSL::SSL) include OpenSSL @@ -338,7 +338,7 @@ module Net # ProFTPD returns 425 for data connections if session is not reused. ssl_sock.session = @ssl_session end - ssl_sock.connect + ssl_socket_connect(ssl_sock, @open_timeout) if @ssl_context.verify_mode != VERIFY_NONE ssl_sock.post_connection_check(@host) end diff --git a/test/net/ftp/test_ftp.rb b/test/net/ftp/test_ftp.rb index 5028bd410f..380b80259a 100644 --- a/test/net/ftp/test_ftp.rb +++ b/test/net/ftp/test_ftp.rb @@ -2100,6 +2100,30 @@ EOF ftp.close end end + + def test_tls_connect_timeout + server = TCPServer.new(SERVER_ADDR, 0) + port = server.addr[1] + commands = [] + sock = nil + @thread = Thread.start do + sock = server.accept + sock.print("220 (test_ftp).\r\n") + commands.push(sock.gets) + sock.print("234 AUTH success.\r\n") + end + begin + assert_raise(Net::OpenTimeout) do + Net::FTP.new("localhost", + port: port, + ssl: { ca_file: CA_FILE }, + open_timeout: 0.1) + end + ensure + sock.close if sock + server.close + end + end end def test_abort_tls |