https://github.com/python/cpython/commit/9752c840229fa6329d12e4a271698027363fd5ef
commit: 9752c840229fa6329d12e4a271698027363fd5ef
branch: main
author: Rami <[email protected]>
committer: gpshead <[email protected]>
date: 2025-04-18T15:27:32-07:00
summary:
gh-89562: Remove hostflags from PySSLContext (GH-28602)
Remove hostflags from PySSLContext as that was only needed for OpenSSL versions
prior to 1.1.1
files:
A
Misc/NEWS.d/next/Core_and_Builtins/2022-12-29-19-10-36.gh-issue-89562.g8m8RC.rst
M Modules/_ssl.c
diff --git
a/Misc/NEWS.d/next/Core_and_Builtins/2022-12-29-19-10-36.gh-issue-89562.g8m8RC.rst
b/Misc/NEWS.d/next/Core_and_Builtins/2022-12-29-19-10-36.gh-issue-89562.g8m8RC.rst
new file mode 100644
index 00000000000000..41e87c0e34802e
--- /dev/null
+++
b/Misc/NEWS.d/next/Core_and_Builtins/2022-12-29-19-10-36.gh-issue-89562.g8m8RC.rst
@@ -0,0 +1 @@
+Remove ``hostflags`` member from ``PySSLContext`` struct.
diff --git a/Modules/_ssl.c b/Modules/_ssl.c
index 03165ec1f3c71f..d5bd3affb5eb46 100644
--- a/Modules/_ssl.c
+++ b/Modules/_ssl.c
@@ -293,10 +293,6 @@ typedef struct {
unsigned int alpn_protocols_len;
PyObject *set_sni_cb;
int check_hostname;
- /* OpenSSL has no API to get hostflags from X509_VERIFY_PARAM* struct.
- * We have to maintain our own copy. OpenSSL's hostflags default to 0.
- */
- unsigned int hostflags;
int protocol;
#if defined(PySSL_HAVE_POST_HS_AUTH)
int post_handshake_auth;
@@ -824,15 +820,15 @@ _ssl_configure_hostname(PySSLSocket *self, const char*
server_hostname)
}
}
if (self->ctx->check_hostname) {
- X509_VERIFY_PARAM *param = SSL_get0_param(self->ssl);
+ X509_VERIFY_PARAM *ssl_verification_params = SSL_get0_param(self->ssl);
if (ip == NULL) {
- if (!X509_VERIFY_PARAM_set1_host(param, server_hostname,
+ if (!X509_VERIFY_PARAM_set1_host(ssl_verification_params,
server_hostname,
strlen(server_hostname))) {
_setSSLError(get_state_sock(self), NULL, 0, __FILE__,
__LINE__);
goto error;
}
} else {
- if (!X509_VERIFY_PARAM_set1_ip(param, ASN1_STRING_get0_data(ip),
+ if (!X509_VERIFY_PARAM_set1_ip(ssl_verification_params,
ASN1_STRING_get0_data(ip),
ASN1_STRING_length(ip))) {
_setSSLError(get_state_sock(self), NULL, 0, __FILE__,
__LINE__);
goto error;
@@ -909,8 +905,11 @@ newPySSLSocket(PySSLContext *sslctx, PySocketSockObject
*sock,
/* bpo43522 and OpenSSL < 1.1.1l: copy hostflags manually */
#if OPENSSL_VERSION < 0x101010cf
- X509_VERIFY_PARAM *ssl_params = SSL_get0_param(self->ssl);
- X509_VERIFY_PARAM_set_hostflags(ssl_params, sslctx->hostflags);
+ X509_VERIFY_PARAM *ssl_verification_params = SSL_get0_param(self->ssl);
+ X509_VERIFY_PARAM *ssl_ctx_verification_params = SSL_CTX_get0_param(ctx);
+
+ unsigned int ssl_ctx_host_flags =
X509_VERIFY_PARAM_get_hostflags(ssl_ctx_verification_params);
+ X509_VERIFY_PARAM_set_hostflags(ssl_verification_params,
ssl_ctx_host_flags);
#endif
SSL_set_app_data(self->ssl, self);
if (sock) {
@@ -3097,7 +3096,7 @@ _ssl__SSLContext_impl(PyTypeObject *type, int
proto_version)
uint64_t options;
const SSL_METHOD *method = NULL;
SSL_CTX *ctx = NULL;
- X509_VERIFY_PARAM *params;
+ X509_VERIFY_PARAM *ssl_verification_params;
int result;
/* slower approach, walk MRO and get borrowed reference to module.
@@ -3181,7 +3180,6 @@ _ssl__SSLContext_impl(PyTypeObject *type, int
proto_version)
return NULL;
}
self->ctx = ctx;
- self->hostflags = X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS;
self->protocol = proto_version;
self->msg_cb = NULL;
self->keylog_filename = NULL;
@@ -3271,11 +3269,11 @@ _ssl__SSLContext_impl(PyTypeObject *type, int
proto_version)
usage for no cost at all. */
SSL_CTX_set_mode(self->ctx, SSL_MODE_RELEASE_BUFFERS);
- params = SSL_CTX_get0_param(self->ctx);
+ ssl_verification_params = SSL_CTX_get0_param(self->ctx);
/* Improve trust chain building when cross-signed intermediate
certificates are present. See https://bugs.python.org/issue23476. */
- X509_VERIFY_PARAM_set_flags(params, X509_V_FLAG_TRUSTED_FIRST);
- X509_VERIFY_PARAM_set_hostflags(params, self->hostflags);
+ X509_VERIFY_PARAM_set_flags(ssl_verification_params,
X509_V_FLAG_TRUSTED_FIRST);
+ X509_VERIFY_PARAM_set_hostflags(ssl_verification_params,
X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS);
#if defined(PySSL_HAVE_POST_HS_AUTH)
self->post_handshake_auth = 0;
@@ -3530,11 +3528,11 @@ static PyObject *
_ssl__SSLContext_verify_flags_get_impl(PySSLContext *self)
/*[clinic end generated code: output=fbbf8ba28ad6e56e input=c1ec36d610b3f391]*/
{
- X509_VERIFY_PARAM *param;
+ X509_VERIFY_PARAM *ssl_verification_params;
unsigned long flags;
- param = SSL_CTX_get0_param(self->ctx);
- flags = X509_VERIFY_PARAM_get_flags(param);
+ ssl_verification_params = SSL_CTX_get0_param(self->ctx);
+ flags = X509_VERIFY_PARAM_get_flags(ssl_verification_params);
return PyLong_FromUnsignedLong(flags);
}
@@ -3548,23 +3546,23 @@ static int
_ssl__SSLContext_verify_flags_set_impl(PySSLContext *self, PyObject *value)
/*[clinic end generated code: output=a3e3b2a0ce6c2e99 input=b2a0c42583d4f34e]*/
{
- X509_VERIFY_PARAM *param;
+ X509_VERIFY_PARAM *ssl_verification_params;
unsigned long new_flags, flags, set, clear;
if (!PyArg_Parse(value, "k", &new_flags))
return -1;
- param = SSL_CTX_get0_param(self->ctx);
- flags = X509_VERIFY_PARAM_get_flags(param);
+ ssl_verification_params = SSL_CTX_get0_param(self->ctx);
+ flags = X509_VERIFY_PARAM_get_flags(ssl_verification_params);
clear = flags & ~new_flags;
set = ~flags & new_flags;
if (clear) {
- if (!X509_VERIFY_PARAM_clear_flags(param, clear)) {
+ if (!X509_VERIFY_PARAM_clear_flags(ssl_verification_params, clear)) {
_setSSLError(get_state_ctx(self), NULL, 0, __FILE__, __LINE__);
return -1;
}
}
if (set) {
- if (!X509_VERIFY_PARAM_set_flags(param, set)) {
+ if (!X509_VERIFY_PARAM_set_flags(ssl_verification_params, set)) {
_setSSLError(get_state_ctx(self), NULL, 0, __FILE__, __LINE__);
return -1;
}
@@ -3859,7 +3857,12 @@ static PyObject *
_ssl__SSLContext__host_flags_get_impl(PySSLContext *self)
/*[clinic end generated code: output=0f9db6654ce32582 input=8e3c49499eefd0e5]*/
{
- return PyLong_FromUnsignedLong(self->hostflags);
+ X509_VERIFY_PARAM *ssl_verification_params;
+ unsigned int host_flags;
+
+ ssl_verification_params = SSL_CTX_get0_param(self->ctx);
+ host_flags = X509_VERIFY_PARAM_get_hostflags(ssl_verification_params);
+ return PyLong_FromUnsignedLong(host_flags);
}
/*[clinic input]
@@ -3872,15 +3875,14 @@ static int
_ssl__SSLContext__host_flags_set_impl(PySSLContext *self, PyObject *value)
/*[clinic end generated code: output=1ed6f4027aaf2e3e input=28caf1fb9c32f6cb]*/
{
- X509_VERIFY_PARAM *param;
+ X509_VERIFY_PARAM *ssl_verification_params;
unsigned int new_flags = 0;
if (!PyArg_Parse(value, "I", &new_flags))
return -1;
- param = SSL_CTX_get0_param(self->ctx);
- self->hostflags = new_flags;
- X509_VERIFY_PARAM_set_hostflags(param, new_flags);
+ ssl_verification_params = SSL_CTX_get0_param(self->ctx);
+ X509_VERIFY_PARAM_set_hostflags(ssl_verification_params, new_flags);
return 0;
}
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]