From 8a13d1abf3a66fa4ad588af669b29c80a2880ff2 Mon Sep 17 00:00:00 2001 From: tb Date: Mon, 10 May 2021 15:10:11 +0000 Subject: [PATCH] databases/mongodb: fix upcoming build failure Backport OpenSSL 1.1 API codepath to the old embedded version of asio. This will avoid a build failure when SSL_CTX will become opaque looks good to jsing --- databases/mongodb/Makefile | 4 +- ...1-0_asio_include_asio_ssl_impl_context_ipp | 116 ++++++++++++++++++ 2 files changed, 118 insertions(+), 2 deletions(-) create mode 100644 databases/mongodb/patches/patch-src_third_party_asio-asio-1-11-0_asio_include_asio_ssl_impl_context_ipp diff --git a/databases/mongodb/Makefile b/databases/mongodb/Makefile index 5cd28e5ca8a..762061ea5b5 100644 --- a/databases/mongodb/Makefile +++ b/databases/mongodb/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.40 2021/02/23 19:39:11 sthen Exp $ +# $OpenBSD: Makefile,v 1.41 2021/05/10 15:10:11 tb Exp $ PORTROACH = limitw:1,even USE_WXNEEDED = Yes @@ -12,7 +12,7 @@ COMMENT = scalable, high-performance document-oriented database DISTNAME = mongodb-src-r3.2.22 PKGNAME = ${DISTNAME:S/src-r//} CATEGORIES = databases -REVISION = 1 +REVISION = 2 HOMEPAGE = https://www.mongodb.com/ diff --git a/databases/mongodb/patches/patch-src_third_party_asio-asio-1-11-0_asio_include_asio_ssl_impl_context_ipp b/databases/mongodb/patches/patch-src_third_party_asio-asio-1-11-0_asio_include_asio_ssl_impl_context_ipp new file mode 100644 index 00000000000..b096c529fa5 --- /dev/null +++ b/databases/mongodb/patches/patch-src_third_party_asio-asio-1-11-0_asio_include_asio_ssl_impl_context_ipp @@ -0,0 +1,116 @@ +$OpenBSD: patch-src_third_party_asio-asio-1-11-0_asio_include_asio_ssl_impl_context_ipp,v 1.1 2021/05/10 15:10:11 tb Exp $ + +Index: src/third_party/asio-asio-1-11-0/asio/include/asio/ssl/impl/context.ipp +--- src/third_party/asio-asio-1-11-0/asio/include/asio/ssl/impl/context.ipp.orig ++++ src/third_party/asio-asio-1-11-0/asio/include/asio/ssl/impl/context.ipp +@@ -192,13 +192,14 @@ context::~context() + { + if (handle_) + { +- if (handle_->default_passwd_callback_userdata) ++ void* cb_userdata = ::SSL_CTX_get_default_passwd_cb_userdata(handle_); ++ if (cb_userdata) + { + detail::password_callback_base* callback = + static_cast( +- handle_->default_passwd_callback_userdata); ++ cb_userdata); + delete callback; +- handle_->default_passwd_callback_userdata = 0; ++ ::SSL_CTX_set_default_passwd_cb_userdata(handle_, 0); + } + + if (SSL_CTX_get_app_data(handle_)) +@@ -528,10 +529,12 @@ asio::error_code context::use_certificate_chain( + bio_cleanup bio = { make_buffer_bio(chain) }; + if (bio.p) + { ++ pem_password_cb* callback = ::SSL_CTX_get_default_passwd_cb(handle_); ++ void* cb_userdata = ::SSL_CTX_get_default_passwd_cb_userdata(handle_); + x509_cleanup cert = { + ::PEM_read_bio_X509_AUX(bio.p, 0, +- handle_->default_passwd_callback, +- handle_->default_passwd_callback_userdata) }; ++ callback, ++ cb_userdata) }; + if (!cert.p) + { + ec = asio::error_code(ERR_R_PEM_LIB, +@@ -548,15 +551,11 @@ asio::error_code context::use_certificate_chain( + return ec; + } + +- if (handle_->extra_certs) +- { +- ::sk_X509_pop_free(handle_->extra_certs, X509_free); +- handle_->extra_certs = 0; +- } ++ ::SSL_CTX_clear_chain_certs(handle_); + + while (X509* cacert = ::PEM_read_bio_X509(bio.p, 0, +- handle_->default_passwd_callback, +- handle_->default_passwd_callback_userdata)) ++ callback, ++ cb_userdata)) + { + if (!::SSL_CTX_add_extra_chain_cert(handle_, cacert)) + { +@@ -621,6 +620,9 @@ asio::error_code context::use_private_key( + { + ::ERR_clear_error(); + ++ pem_password_cb* callback = ::SSL_CTX_get_default_passwd_cb(handle_); ++ void* cb_userdata = ::SSL_CTX_get_default_passwd_cb_userdata(handle_); ++ + bio_cleanup bio = { make_buffer_bio(private_key) }; + if (bio.p) + { +@@ -632,8 +634,8 @@ asio::error_code context::use_private_key( + break; + case context_base::pem: + evp_private_key.p = ::PEM_read_bio_PrivateKey( +- bio.p, 0, handle_->default_passwd_callback, +- handle_->default_passwd_callback_userdata); ++ bio.p, 0, callback, ++ cb_userdata); + break; + default: + { +@@ -680,6 +682,9 @@ asio::error_code context::use_rsa_private_key( + { + ::ERR_clear_error(); + ++ pem_password_cb* callback = ::SSL_CTX_get_default_passwd_cb(handle_); ++ void* cb_userdata = ::SSL_CTX_get_default_passwd_cb_userdata(handle_); ++ + bio_cleanup bio = { make_buffer_bio(private_key) }; + if (bio.p) + { +@@ -691,8 +696,8 @@ asio::error_code context::use_rsa_private_key( + break; + case context_base::pem: + rsa_private_key.p = ::PEM_read_bio_RSAPrivateKey( +- bio.p, 0, handle_->default_passwd_callback, +- handle_->default_passwd_callback_userdata); ++ bio.p, 0, callback, ++ cb_userdata); + break; + default: + { +@@ -911,11 +916,12 @@ int context::verify_callback_function(int preverified, + asio::error_code context::do_set_password_callback( + detail::password_callback_base* callback, asio::error_code& ec) + { +- if (handle_->default_passwd_callback_userdata) +- delete static_cast( +- handle_->default_passwd_callback_userdata); ++ void* old_callback = ::SSL_CTX_get_default_passwd_cb_userdata(handle_); ++ ::SSL_CTX_set_default_passwd_cb_userdata(handle_, callback); + +- handle_->default_passwd_callback_userdata = callback; ++ if (old_callback) ++ delete static_cast( ++ old_callback); + + SSL_CTX_set_default_passwd_cb(handle_, &context::password_callback_function); +