Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e32467c

Browse files
committed
allow ssl module to compile if openssl doesn't support SSL 3 (closes #22935)
Patch by Kurt Roeckx.
1 parent 81f01fb commit e32467c

4 files changed

Lines changed: 24 additions & 8 deletions

File tree

Lib/test/test_ftplib.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -889,7 +889,7 @@ def test_auth_issued_twice(self):
889889

890890
def test_auth_ssl(self):
891891
try:
892-
self.client.ssl_version = ssl.PROTOCOL_SSLv3
892+
self.client.ssl_version = ssl.PROTOCOL_SSLv23
893893
self.client.auth()
894894
self.assertRaises(ValueError, self.client.auth)
895895
finally:

Lib/test/test_ssl.py

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2168,20 +2168,24 @@ def test_protocol_sslv23(self):
21682168
sys.stdout.write(
21692169
" SSL2 client to SSL23 server test unexpectedly failed:\n %s\n"
21702170
% str(x))
2171-
try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv3, True)
2171+
if hasattr(ssl, 'PROTOCOL_SSLv3'):
2172+
try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv3, True)
21722173
try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv23, True)
21732174
try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_TLSv1, True)
21742175

2175-
try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv3, True, ssl.CERT_OPTIONAL)
2176+
if hasattr(ssl, 'PROTOCOL_SSLv3'):
2177+
try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv3, True, ssl.CERT_OPTIONAL)
21762178
try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv23, True, ssl.CERT_OPTIONAL)
21772179
try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_TLSv1, True, ssl.CERT_OPTIONAL)
21782180

2179-
try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv3, True, ssl.CERT_REQUIRED)
2181+
if hasattr(ssl, 'PROTOCOL_SSLv3'):
2182+
try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv3, True, ssl.CERT_REQUIRED)
21802183
try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv23, True, ssl.CERT_REQUIRED)
21812184
try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_TLSv1, True, ssl.CERT_REQUIRED)
21822185

21832186
# Server with specific SSL options
2184-
try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv3, False,
2187+
if hasattr(ssl, 'PROTOCOL_SSLv3'):
2188+
try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv3, False,
21852189
server_options=ssl.OP_NO_SSLv3)
21862190
# Will choose TLSv1
21872191
try_protocol_combo(ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_SSLv23, True,
@@ -2191,6 +2195,8 @@ def test_protocol_sslv23(self):
21912195

21922196

21932197
@skip_if_broken_ubuntu_ssl
2198+
@unittest.skipUnless(hasattr(ssl, 'PROTOCOL_SSLv3'),
2199+
"OpenSSL is compiled without SSLv3 support")
21942200
def test_protocol_sslv3(self):
21952201
"""Connecting to an SSLv3 server with various client options"""
21962202
if support.verbose:
@@ -2218,7 +2224,8 @@ def test_protocol_tlsv1(self):
22182224
try_protocol_combo(ssl.PROTOCOL_TLSv1, ssl.PROTOCOL_TLSv1, True, ssl.CERT_REQUIRED)
22192225
if hasattr(ssl, 'PROTOCOL_SSLv2'):
22202226
try_protocol_combo(ssl.PROTOCOL_TLSv1, ssl.PROTOCOL_SSLv2, False)
2221-
try_protocol_combo(ssl.PROTOCOL_TLSv1, ssl.PROTOCOL_SSLv3, False)
2227+
if hasattr(ssl, 'PROTOCOL_SSLv3'):
2228+
try_protocol_combo(ssl.PROTOCOL_TLSv1, ssl.PROTOCOL_SSLv3, False)
22222229
try_protocol_combo(ssl.PROTOCOL_TLSv1, ssl.PROTOCOL_SSLv23, False,
22232230
client_options=ssl.OP_NO_TLSv1)
22242231

@@ -2233,7 +2240,8 @@ def test_protocol_tlsv1_1(self):
22332240
try_protocol_combo(ssl.PROTOCOL_TLSv1_1, ssl.PROTOCOL_TLSv1_1, True)
22342241
if hasattr(ssl, 'PROTOCOL_SSLv2'):
22352242
try_protocol_combo(ssl.PROTOCOL_TLSv1_1, ssl.PROTOCOL_SSLv2, False)
2236-
try_protocol_combo(ssl.PROTOCOL_TLSv1_1, ssl.PROTOCOL_SSLv3, False)
2243+
if hasattr(ssl, 'PROTOCOL_SSLv3'):
2244+
try_protocol_combo(ssl.PROTOCOL_TLSv1_1, ssl.PROTOCOL_SSLv3, False)
22372245
try_protocol_combo(ssl.PROTOCOL_TLSv1_1, ssl.PROTOCOL_SSLv23, False,
22382246
client_options=ssl.OP_NO_TLSv1_1)
22392247

@@ -2255,7 +2263,8 @@ def test_protocol_tlsv1_2(self):
22552263
client_options=ssl.OP_NO_SSLv3|ssl.OP_NO_SSLv2,)
22562264
if hasattr(ssl, 'PROTOCOL_SSLv2'):
22572265
try_protocol_combo(ssl.PROTOCOL_TLSv1_2, ssl.PROTOCOL_SSLv2, False)
2258-
try_protocol_combo(ssl.PROTOCOL_TLSv1_2, ssl.PROTOCOL_SSLv3, False)
2266+
if hasattr(ssl, 'PROTOCOL_SSLv3'):
2267+
try_protocol_combo(ssl.PROTOCOL_TLSv1_2, ssl.PROTOCOL_SSLv3, False)
22592268
try_protocol_combo(ssl.PROTOCOL_TLSv1_2, ssl.PROTOCOL_SSLv23, False,
22602269
client_options=ssl.OP_NO_TLSv1_2)
22612270

Misc/NEWS

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,9 @@ Tests
215215
Build
216216
-----
217217

218+
- Issue #22935: Allow the ssl module to be compiled if openssl doesn't support
219+
SSL 3.
220+
218221
- Issue #16537: Check whether self.extensions is empty in setup.py. Patch by
219222
Jonathan Hosmer.
220223

Modules/_ssl.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2016,8 +2016,10 @@ context_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
20162016
else if (proto_version == PY_SSL_VERSION_TLS1_2)
20172017
ctx = SSL_CTX_new(TLSv1_2_method());
20182018
#endif
2019+
#ifndef OPENSSL_NO_SSL3
20192020
else if (proto_version == PY_SSL_VERSION_SSL3)
20202021
ctx = SSL_CTX_new(SSLv3_method());
2022+
#endif
20212023
#ifndef OPENSSL_NO_SSL2
20222024
else if (proto_version == PY_SSL_VERSION_SSL2)
20232025
ctx = SSL_CTX_new(SSLv2_method());
@@ -4065,8 +4067,10 @@ PyInit__ssl(void)
40654067
PyModule_AddIntConstant(m, "PROTOCOL_SSLv2",
40664068
PY_SSL_VERSION_SSL2);
40674069
#endif
4070+
#ifndef OPENSSL_NO_SSL3
40684071
PyModule_AddIntConstant(m, "PROTOCOL_SSLv3",
40694072
PY_SSL_VERSION_SSL3);
4073+
#endif
40704074
PyModule_AddIntConstant(m, "PROTOCOL_SSLv23",
40714075
PY_SSL_VERSION_SSL23);
40724076
PyModule_AddIntConstant(m, "PROTOCOL_TLSv1",

0 commit comments

Comments
 (0)