i2pd: [Boost bug] compilation with libressl

Hi,

following a bug on gentoo bugzilla, https://bugs.gentoo.org/show_bug.cgi?id=597798

There seems to be a problem with building 2.10.0 release with libressl. We tried the patch at https://github.com/PurpleI2P/i2pd/commit/ed09c1171bc2b5ce3e41d8051d7e404343026005, it does not solve the issue. The error looks like

In file included from /usr/include/boost/asio/ssl/context.hpp:786:0,
                 from /usr/include/boost/asio/ssl.hpp:19,
                 from /var/tmp/portage/net-misc/i2pd-2.10.0/work/i2pd-2.10.0/Reseed.cpp:5:
/usr/include/boost/asio/ssl/impl/context.ipp: In destructor ‘boost::asio::ssl::context::~context()’:
/usr/include/boost/asio/ssl/impl/context.ipp:232:25: error: ‘::SSL_CTX_get_default_passwd_cb_userdata’ has not been declared
     void* cb_userdata = ::SSL_CTX_get_default_passwd_cb_userdata(handle_);

About this issue

  • Original URL
  • State: closed
  • Created 8 years ago
  • Comments: 28 (24 by maintainers)

Most upvoted comments

course.

cat files/boost-1.62.0-asio-libressl.patch

From 4808f72a1f524873f351acff8fda0d0d17acfca5 Mon Sep 17 00:00:00 2001
From: Christopher Kohlhoff <chris@kohlhoff.com>
Date: Sun, 5 Mar 2017 22:47:57 +1100
Subject: [PATCH] Re-enable building against LibreSSL.

---
 boost/asio/ssl/impl/context.ipp | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/boost/asio/ssl/impl/context.ipp b/boost/asio/ssl/impl/context.ipp
index 4667575..c8c5f43 100644
--- a/boost/asio/ssl/impl/context.ipp
+++ b/boost/asio/ssl/impl/context.ipp
@@ -228,7 +228,7 @@ context::~context()
 {
   if (handle_)
   {
-#if (OPENSSL_VERSION_NUMBER >= 0x10100000L)
+#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && !defined(LIBRESSL_VERSION_NUMBER)
     void* cb_userdata = ::SSL_CTX_get_default_passwd_cb_userdata(handle_);
 #else // (OPENSSL_VERSION_NUMBER >= 0x10100000L)
     void* cb_userdata = handle_->default_passwd_callback_userdata;
@@ -239,7 +239,7 @@ context::~context()
         static_cast<detail::password_callback_base*>(
             cb_userdata);
       delete callback;
-#if (OPENSSL_VERSION_NUMBER >= 0x10100000L)
+#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && !defined(LIBRESSL_VERSION_NUMBER)
       ::SSL_CTX_set_default_passwd_cb_userdata(handle_, 0);
 #else // (OPENSSL_VERSION_NUMBER >= 0x10100000L)
       handle_->default_passwd_callback_userdata = 0;
@@ -578,7 +578,7 @@ boost::system::error_code context::use_certificate_chain(
   bio_cleanup bio = { make_buffer_bio(chain) };
   if (bio.p)
   {
-#if (OPENSSL_VERSION_NUMBER >= 0x10100000L)
+#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && !defined(LIBRESSL_VERSION_NUMBER)
     pem_password_cb* callback = ::SSL_CTX_get_default_passwd_cb(handle_);
     void* cb_userdata = ::SSL_CTX_get_default_passwd_cb_userdata(handle_);
 #else // (OPENSSL_VERSION_NUMBER >= 0x10100000L)
@@ -682,7 +682,7 @@ boost::system::error_code context::use_private_key(
 {
   ::ERR_clear_error();
 
-#if (OPENSSL_VERSION_NUMBER >= 0x10100000L)
+#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && !defined(LIBRESSL_VERSION_NUMBER)
     pem_password_cb* callback = ::SSL_CTX_get_default_passwd_cb(handle_);
     void* cb_userdata = ::SSL_CTX_get_default_passwd_cb_userdata(handle_);
 #else // (OPENSSL_VERSION_NUMBER >= 0x10100000L)
@@ -749,7 +749,7 @@ boost::system::error_code context::use_rsa_private_key(
 {
   ::ERR_clear_error();
 
-#if (OPENSSL_VERSION_NUMBER >= 0x10100000L)
+#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && !defined(LIBRESSL_VERSION_NUMBER)
     pem_password_cb* callback = ::SSL_CTX_get_default_passwd_cb(handle_);
     void* cb_userdata = ::SSL_CTX_get_default_passwd_cb_userdata(handle_);
 #else // (OPENSSL_VERSION_NUMBER >= 0x10100000L)
@@ -988,7 +988,7 @@ int context::verify_callback_function(int preverified, X509_STORE_CTX* ctx)
 boost::system::error_code context::do_set_password_callback(
     detail::password_callback_base* callback, boost::system::error_code& ec)
 {
-#if (OPENSSL_VERSION_NUMBER >= 0x10100000L)
+#if (OPENSSL_VERSION_NUMBER >= 0x10100000L) && !defined(LIBRESSL_VERSION_NUMBER)
   void* old_callback = ::SSL_CTX_get_default_passwd_cb_userdata(handle_);
   ::SSL_CTX_set_default_passwd_cb_userdata(handle_, callback);
 #else // (OPENSSL_VERSION_NUMBER >= 0x10100000L)

it’s from libressl overlay for gentoo please note what this patch should be applied to boost sources, not i2pd sources

The right way it to eliminate boost::asio::ssl completely