diff options
-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 |