summaryrefslogtreecommitdiff
path: root/Modules/_ssl.c
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2011-07-08 18:47:06 +0200
committerAntoine Pitrou <solipsis@pitrou.net>2011-07-08 18:47:06 +0200
commitb9ac25d1c394714f0565845b274e7eebb402f1e7 (patch)
treeab68b24e92248ffd54b256fe8e7c38d67d63b2bd /Modules/_ssl.c
parent6e2e3b9e8188acca0d40df365f3d9595fad59991 (diff)
downloadcpython-git-b9ac25d1c394714f0565845b274e7eebb402f1e7.tar.gz
Issue #12440: When testing whether some bits in SSLContext.options can be
reset, check the version of the OpenSSL headers Python was compiled against, rather than the runtime version of the OpenSSL library.
Diffstat (limited to 'Modules/_ssl.c')
-rw-r--r--Modules/_ssl.c34
1 files changed, 25 insertions, 9 deletions
diff --git a/Modules/_ssl.c b/Modules/_ssl.c
index a813d5fef2..27dcdbc573 100644
--- a/Modules/_ssl.c
+++ b/Modules/_ssl.c
@@ -2037,6 +2037,24 @@ static struct PyModuleDef _sslmodule = {
NULL
};
+
+static void
+parse_openssl_version(unsigned long libver,
+ unsigned int *major, unsigned int *minor,
+ unsigned int *fix, unsigned int *patch,
+ unsigned int *status)
+{
+ *status = libver & 0xF;
+ libver >>= 4;
+ *patch = libver & 0xFF;
+ libver >>= 8;
+ *fix = libver & 0xFF;
+ libver >>= 8;
+ *minor = libver & 0xFF;
+ libver >>= 8;
+ *major = libver & 0xFF;
+}
+
PyMODINIT_FUNC
PyInit__ssl(void)
{
@@ -2149,15 +2167,7 @@ PyInit__ssl(void)
return NULL;
if (PyModule_AddObject(m, "OPENSSL_VERSION_NUMBER", r))
return NULL;
- status = libver & 0xF;
- libver >>= 4;
- patch = libver & 0xFF;
- libver >>= 8;
- fix = libver & 0xFF;
- libver >>= 8;
- minor = libver & 0xFF;
- libver >>= 8;
- major = libver & 0xFF;
+ parse_openssl_version(libver, &major, &minor, &fix, &patch, &status);
r = Py_BuildValue("IIIII", major, minor, fix, patch, status);
if (r == NULL || PyModule_AddObject(m, "OPENSSL_VERSION_INFO", r))
return NULL;
@@ -2165,5 +2175,11 @@ PyInit__ssl(void)
if (r == NULL || PyModule_AddObject(m, "OPENSSL_VERSION", r))
return NULL;
+ libver = OPENSSL_VERSION_NUMBER;
+ parse_openssl_version(libver, &major, &minor, &fix, &patch, &status);
+ r = Py_BuildValue("IIIII", major, minor, fix, patch, status);
+ if (r == NULL || PyModule_AddObject(m, "_OPENSSL_API_VERSION", r))
+ return NULL;
+
return m;
}