From: carlier.jeremy@... Date: 2017-04-12T17:50:50+00:00 Subject: [ruby-core:80668] [Ruby trunk Bug#13429] Net::SMTP has no read timeout when connexion over TLS Issue #13429 has been reported by keysen (J��r��my Carlier). ---------------------------------------- Bug #13429: Net::SMTP has no read timeout when connexion over TLS https://bugs.ruby-lang.org/issues/13429 * Author: keysen (J��r��my Carlier) * Status: Open * Priority: Normal * Assignee: * Target version: * ruby -v: 2.3.1 * Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN ---------------------------------------- Hello, When connecting using TLS to an unresponsive SMTP server, Net::SMTP can hang until 10 minutes. The issue is here, we should have a read timeout: ``` ruby def tlsconnect(s) verified = false s = ssl_socket(s, @ssl_context) logging "TLS connection started" s.sync_close = true s.connect if @ssl_context.verify_mode != OpenSSL::SSL::VERIFY_NONE s.post_connection_check(@address) end verified = true s ensure s.close unless verified end ``` To workaround the issue for the moment I used: ``` ruby module Net class SMTP alias :original_tlsconnect :tlsconnect def tlsconnect(s) Timeout.timeout(@read_timeout, Net::ReadTimeout) { original_tlsconnect(s) } end end end ``` Here the steps to reproduce the bug: ``` ruby smtp = Net::SMTP.new('mail.example.com', 465) smtp.read_timeout = 3 smtp.enable_tls smtp.start('localhost.localdomain', 'medecins@example.com', '********') {} ``` Sorry for the credentials I can't provide this publicly, after testing with one failing server you will be able to see that the read timeout is ignored. By failing server I mean an SMTPS server where you are able to open a connection but you can't read on the socket. Working case: ``` ruby smtp = Net::SMTP.new('mail.example.com', 465) smtp.read_timeout = 3 smtp.start('localhost.localdomain', 'medecins@example.com', '********') {} ``` Without TLS it's ok! If you have any questions, suggestions just ask, if I can help. -- https://bugs.ruby-lang.org/ Unsubscribe: