ports/lang/python33/files/patch-PR195511
Bernard Spil 21989ce0a8 lang/python33: Fix typo in No-SSLv3 patch
- Fix typo that was introduced with the No-SSLv3 patch [1]

[1] http://svnweb.freebsd.org/changeset/ports/404347

Reported by:	antoine via pkg-fallout
Reviewed by:	koobs (mentor, python), antoine (python)
Approved by:	koobs (mentor, python), antoine (python)
Differential Revision:	https://reviews.freebsd.org/D4721
2015-12-28 12:42:40 +00:00

167 lines
6.2 KiB
Plaintext

--- Modules/_ssl.c.orig 2014-03-09 09:40:26.000000000 +0100
+++ Modules/_ssl.c 2015-09-26 15:53:49.266985391 +0200
@@ -1746,8 +1746,10 @@ context_new(PyTypeObject *type, PyObject
PySSL_BEGIN_ALLOW_THREADS
if (proto_version == PY_SSL_VERSION_TLS1)
ctx = SSL_CTX_new(TLSv1_method());
+#ifndef OPENSSL_NO_SSL3
else if (proto_version == PY_SSL_VERSION_SSL3)
ctx = SSL_CTX_new(SSLv3_method());
+#endif
#ifndef OPENSSL_NO_SSL2
else if (proto_version == PY_SSL_VERSION_SSL2)
ctx = SSL_CTX_new(SSLv2_method());
@@ -2559,6 +2561,9 @@ Returns 1 if the OpenSSL PRNG has been s
It is necessary to seed the PRNG with RAND_add() on some platforms before\n\
using the ssl() function.");
+/* ### Fix build with LibreSSL (does not have RAND_egd)
+ ### PR195511, http://bugs.python.org/issue21356 */
+#ifndef OPENSSL_NO_EGD
static PyObject *
PySSL_RAND_egd(PyObject *self, PyObject *args)
{
@@ -2586,6 +2591,8 @@ PyDoc_STRVAR(PySSL_RAND_egd_doc,
Queries the entropy gather daemon (EGD) on the socket named by 'path'.\n\
Returns number of bytes read. Raises SSLError if connection to EGD\n\
fails or if it does not provide enough data to seed PRNG.");
+#endif /* OPENSSL_NO_EGD */
+/* ### End PR195511 */
#endif /* HAVE_OPENSSL_RAND */
@@ -2604,8 +2611,13 @@ static PyMethodDef PySSL_methods[] = {
PySSL_RAND_bytes_doc},
{"RAND_pseudo_bytes", PySSL_RAND_pseudo_bytes, METH_VARARGS,
PySSL_RAND_pseudo_bytes_doc},
+/* ### Fix build with LibreSSL (does not have RAND_egd)
+ ### PR195511, http://bugs.python.org/issue21356 */
+#ifndef OPENSSL_NO_EGD
{"RAND_egd", PySSL_RAND_egd, METH_VARARGS,
PySSL_RAND_egd_doc},
+#endif /* OPENSSL_NO_EGD */
+/* ### End PR195511 */
{"RAND_status", (PyCFunction)PySSL_RAND_status, METH_NOARGS,
PySSL_RAND_status_doc},
#endif
@@ -2842,8 +2854,10 @@ PyInit__ssl(void)
PyModule_AddIntConstant(m, "PROTOCOL_SSLv2",
PY_SSL_VERSION_SSL2);
#endif
+#ifndef OPENSSL_NO_SSL3
PyModule_AddIntConstant(m, "PROTOCOL_SSLv3",
PY_SSL_VERSION_SSL3);
+#endif
PyModule_AddIntConstant(m, "PROTOCOL_SSLv23",
PY_SSL_VERSION_SSL23);
PyModule_AddIntConstant(m, "PROTOCOL_TLSv1",
--- Lib/ssl.py.orig 2014-03-09 09:40:13.000000000 +0100
+++ Lib/ssl.py 2015-09-26 15:55:40.209981202 +0200
@@ -78,7 +78,15 @@ try:
from _ssl import OP_SINGLE_ECDH_USE
except ImportError:
pass
-from _ssl import RAND_status, RAND_egd, RAND_add, RAND_bytes, RAND_pseudo_bytes
+### Fix build with LibreSSL (does not have RAND_egd)
+### PR195511, http://bugs.python.org/issue21356
+from _ssl import RAND_status, RAND_add, RAND_bytes, RAND_pseudo_bytes
+try:
+ from _ssl import RAND_egd
+except ImportError:
+ # LibreSSL does not provide RAND_egd
+ pass
+### End PR195511
from _ssl import (
SSL_ERROR_ZERO_RETURN,
SSL_ERROR_WANT_READ,
@@ -91,14 +99,13 @@ from _ssl import (
SSL_ERROR_INVALID_ERROR_CODE,
)
from _ssl import HAS_SNI, HAS_ECDH, HAS_NPN
-from _ssl import (PROTOCOL_SSLv3, PROTOCOL_SSLv23,
+from _ssl import (PROTOCOL_SSLv23,
PROTOCOL_TLSv1)
from _ssl import _OPENSSL_API_VERSION
_PROTOCOL_NAMES = {
PROTOCOL_TLSv1: "TLSv1",
PROTOCOL_SSLv23: "SSLv23",
- PROTOCOL_SSLv3: "SSLv3",
}
try:
from _ssl import PROTOCOL_SSLv2
@@ -107,6 +114,13 @@ except ImportError:
_SSLv2_IF_EXISTS = None
else:
_PROTOCOL_NAMES[PROTOCOL_SSLv2] = "SSLv2"
+try:
+ from _ssl import PROTOCOL_SSLv3
+ _SSLv3_IF_EXISTS = PROTOCOL_SSLv3
+except ImportError:
+ _SSLv3_IF_EXISTS = None
+else:
+ _PROTOCOL_NAMES[PROTOCOL_SSLv3] = "SSLv3"
from socket import getnameinfo as _getnameinfo
from socket import error as socket_error
@@ -664,7 +678,7 @@ def PEM_cert_to_DER_cert(pem_cert_string
d = pem_cert_string.strip()[len(PEM_HEADER):-len(PEM_FOOTER)]
return base64.decodebytes(d.encode('ASCII', 'strict'))
-def get_server_certificate(addr, ssl_version=PROTOCOL_SSLv3, ca_certs=None):
+def get_server_certificate(addr, ssl_version=PROTOCOL_SSLv23, ca_certs=None):
"""Retrieve the certificate from the server at the specified address,
and return it as a PEM-encoded string.
If 'ca_certs' is specified, validate the server cert against it.
--- Lib/test/test_ssl.py.orig 2014-03-09 09:40:19.000000000 +0100
+++ Lib/test/test_ssl.py 2015-09-26 15:58:58.264964564 +0200
@@ -21,11 +21,12 @@ import functools
ssl = support.import_module("ssl")
PROTOCOLS = [
- ssl.PROTOCOL_SSLv3,
ssl.PROTOCOL_SSLv23, ssl.PROTOCOL_TLSv1
]
if hasattr(ssl, 'PROTOCOL_SSLv2'):
PROTOCOLS.append(ssl.PROTOCOL_SSLv2)
+if hasattr(ssl, 'PROTOCOL_SSLv3'):
+ PROTOCOLS.append(ssl.PROTOCOL_SSLv3)
HOST = support.HOST
@@ -96,7 +97,8 @@ class BasicSocketTests(unittest.TestCase
def test_constants(self):
#ssl.PROTOCOL_SSLv2
ssl.PROTOCOL_SSLv23
- ssl.PROTOCOL_SSLv3
+ if hasattr(ssl, 'PROTOCOL_SSLv3'):
+ ssl.PROTOCOL_SSLv3
ssl.PROTOCOL_TLSv1
ssl.CERT_NONE
ssl.CERT_OPTIONAL
@@ -130,8 +132,12 @@ class BasicSocketTests(unittest.TestCase
self.assertRaises(ValueError, ssl.RAND_bytes, -5)
self.assertRaises(ValueError, ssl.RAND_pseudo_bytes, -5)
- self.assertRaises(TypeError, ssl.RAND_egd, 1)
- self.assertRaises(TypeError, ssl.RAND_egd, 'foo', 1)
+### Fix build with LibreSSL (does not have RAND_egd)
+### PR195511, http://bugs.python.org/issue21356
+ if hasattr(ssl, 'RAND_egd'):
+ self.assertRaises(TypeError, ssl.RAND_egd, 1)
+ self.assertRaises(TypeError, ssl.RAND_egd, 'foo', 1)
+### End PR195511
ssl.RAND_add("this is a random string", 75.0)
@unittest.skipUnless(os.name == 'posix', 'requires posix')
@@ -512,7 +518,8 @@ class ContextTests(unittest.TestCase):
if hasattr(ssl, 'PROTOCOL_SSLv2'):
ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv2)
ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
- ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv3)
+ if hasattr(ssl, 'PROTOCOL_SSLv3'):
+ ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv3)
ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
self.assertRaises(TypeError, ssl.SSLContext)
self.assertRaises(ValueError, ssl.SSLContext, -1)