From eb257ac97ddcb477893a962318219af0871d4b93 Mon Sep 17 00:00:00 2001 From: Bill Janssen Date: Mon, 29 Sep 2008 18:56:38 +0000 Subject: [PATCH] fix for release blocker 3910, 2.6 regression in socket.ssl method --- Lib/ssl.py | 15 +++++++++++++-- Lib/test/test_ssl.py | 16 +++++++++++++++- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/Lib/ssl.py b/Lib/ssl.py index 8a799bcc56..21ae405375 100644 --- a/Lib/ssl.py +++ b/Lib/ssl.py @@ -434,7 +434,18 @@ def sslwrap_simple (sock, keyfile=None, certfile=None): for compability with Python 2.5 and earlier. Will disappear in Python 3.0.""" - ssl_sock = _ssl.sslwrap(sock._sock, 0, keyfile, certfile, CERT_NONE, + if hasattr(sock, "_sock"): + sock = sock._sock + + ssl_sock = _ssl.sslwrap(sock, 0, keyfile, certfile, CERT_NONE, PROTOCOL_SSLv23, None) - ssl_sock.do_handshake() + try: + sock.getpeername() + except: + # no, no connection yet + pass + else: + # yes, do the handshake + ssl_sock.do_handshake() + return ssl_sock diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index 98681f4fe1..5cfe7f14db 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -34,6 +34,21 @@ def handle_error(prefix): if test_support.verbose: sys.stdout.write(prefix + exc_format) + def testSimpleSSLwrap(self): + try: + ssl.sslwrap_simple(socket.socket(socket.AF_INET)) + except IOError, e: + if e.errno == 32: # broken pipe when ssl_sock.do_handshake(), this test doesn't care about that + pass + else: + raise + try: + ssl.sslwrap_simple(socket.socket(socket.AF_INET)._sock) + except IOError, e: + if e.errno == 32: # broken pipe when ssl_sock.do_handshake(), this test doesn't care about that + pass + else: + raise class BasicTests(unittest.TestCase): @@ -58,7 +73,6 @@ class BasicTests(unittest.TestCase): finally: s.close() - def testCrucialConstants(self): ssl.PROTOCOL_SSLv2 ssl.PROTOCOL_SSLv23 -- 2.40.0