|
|
|
@ -1,614 +0,0 @@
|
|
|
|
|
This file is part of MXE. See LICENSE.md for licensing information.
|
|
|
|
|
|
|
|
|
|
Contains ad hoc patches for cross building.
|
|
|
|
|
|
|
|
|
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
|
|
|
From: xantares <xantares09@hotmail.com>
|
|
|
|
|
Date: Mon, 28 Sep 2015 08:21:42 +0000
|
|
|
|
|
Subject: [PATCH 1/4] Fix {make,jump}_fcontext visibility with mingw
|
|
|
|
|
|
|
|
|
|
taken from: https://github.com/boostorg/context/pull/22
|
|
|
|
|
|
|
|
|
|
diff --git a/libs/context/src/asm/jump_i386_ms_pe_gas.asm b/libs/context/src/asm/jump_i386_ms_pe_gas.asm
|
|
|
|
|
index 1111111..2222222 100644
|
|
|
|
|
--- a/libs/context/src/asm/jump_i386_ms_pe_gas.asm
|
|
|
|
|
+++ b/libs/context/src/asm/jump_i386_ms_pe_gas.asm
|
|
|
|
|
@@ -138,3 +138,6 @@ _jump_fcontext:
|
|
|
|
|
|
|
|
|
|
/* indirect jump to context */
|
|
|
|
|
jmp *%edx
|
|
|
|
|
+
|
|
|
|
|
+.section .drectve
|
|
|
|
|
+.ascii " -export:\"jump_fcontext\""
|
|
|
|
|
diff --git a/libs/context/src/asm/jump_x86_64_ms_pe_gas.asm b/libs/context/src/asm/jump_x86_64_ms_pe_gas.asm
|
|
|
|
|
index 1111111..2222222 100644
|
|
|
|
|
--- a/libs/context/src/asm/jump_x86_64_ms_pe_gas.asm
|
|
|
|
|
+++ b/libs/context/src/asm/jump_x86_64_ms_pe_gas.asm
|
|
|
|
|
@@ -223,3 +223,6 @@ jump_fcontext:
|
|
|
|
|
/* indirect jump to context */
|
|
|
|
|
jmp *%r10
|
|
|
|
|
.seh_endproc
|
|
|
|
|
+
|
|
|
|
|
+.section .drectve
|
|
|
|
|
+.ascii " -export:\"jump_fcontext\""
|
|
|
|
|
diff --git a/libs/context/src/asm/make_i386_ms_pe_gas.asm b/libs/context/src/asm/make_i386_ms_pe_gas.asm
|
|
|
|
|
index 1111111..2222222 100644
|
|
|
|
|
--- a/libs/context/src/asm/make_i386_ms_pe_gas.asm
|
|
|
|
|
+++ b/libs/context/src/asm/make_i386_ms_pe_gas.asm
|
|
|
|
|
@@ -122,3 +122,6 @@ finish:
|
|
|
|
|
hlt
|
|
|
|
|
|
|
|
|
|
.def __exit; .scl 2; .type 32; .endef /* standard C library function */
|
|
|
|
|
+
|
|
|
|
|
+.section .drectve
|
|
|
|
|
+.ascii " -export:\"make_fcontext\""
|
|
|
|
|
diff --git a/libs/context/src/asm/make_x86_64_ms_pe_gas.asm b/libs/context/src/asm/make_x86_64_ms_pe_gas.asm
|
|
|
|
|
index 1111111..2222222 100644
|
|
|
|
|
--- a/libs/context/src/asm/make_x86_64_ms_pe_gas.asm
|
|
|
|
|
+++ b/libs/context/src/asm/make_x86_64_ms_pe_gas.asm
|
|
|
|
|
@@ -149,3 +149,6 @@ finish:
|
|
|
|
|
.seh_endproc
|
|
|
|
|
|
|
|
|
|
.def _exit; .scl 2; .type 32; .endef /* standard C library function */
|
|
|
|
|
+
|
|
|
|
|
+.section .drectve
|
|
|
|
|
+.ascii " -export:\"make_fcontext\""
|
|
|
|
|
|
|
|
|
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
|
|
|
From: Tony Theodore <tonyt@logyst.com>
|
|
|
|
|
Date: Wed, 28 Feb 2018 19:43:45 +1100
|
|
|
|
|
Subject: [PATCH 2/4] fast-forward asio/ssl from 1.62 release
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
diff --git a/boost/asio/ssl/detail/impl/engine.ipp b/boost/asio/ssl/detail/impl/engine.ipp
|
|
|
|
|
index 1111111..2222222 100644
|
|
|
|
|
--- a/boost/asio/ssl/detail/impl/engine.ipp
|
|
|
|
|
+++ b/boost/asio/ssl/detail/impl/engine.ipp
|
|
|
|
|
@@ -203,23 +203,21 @@ const boost::system::error_code& engine::map_error_code(
|
|
|
|
|
// If there's data yet to be read, it's an error.
|
|
|
|
|
if (BIO_wpending(ext_bio_))
|
|
|
|
|
{
|
|
|
|
|
- ec = boost::system::error_code(
|
|
|
|
|
- ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SHORT_READ),
|
|
|
|
|
- boost::asio::error::get_ssl_category());
|
|
|
|
|
+ ec = boost::asio::ssl::error::stream_truncated;
|
|
|
|
|
return ec;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// SSL v2 doesn't provide a protocol-level shutdown, so an eof on the
|
|
|
|
|
// underlying transport is passed through.
|
|
|
|
|
+#if (OPENSSL_VERSION_NUMBER < 0x10100000L)
|
|
|
|
|
if (ssl_->version == SSL2_VERSION)
|
|
|
|
|
return ec;
|
|
|
|
|
+#endif // (OPENSSL_VERSION_NUMBER < 0x10100000L)
|
|
|
|
|
|
|
|
|
|
// Otherwise, the peer should have negotiated a proper shutdown.
|
|
|
|
|
if ((::SSL_get_shutdown(ssl_) & SSL_RECEIVED_SHUTDOWN) == 0)
|
|
|
|
|
{
|
|
|
|
|
- ec = boost::system::error_code(
|
|
|
|
|
- ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SHORT_READ),
|
|
|
|
|
- boost::asio::error::get_ssl_category());
|
|
|
|
|
+ ec = boost::asio::ssl::error::stream_truncated;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return ec;
|
|
|
|
|
diff --git a/boost/asio/ssl/detail/impl/openssl_init.ipp b/boost/asio/ssl/detail/impl/openssl_init.ipp
|
|
|
|
|
index 1111111..2222222 100644
|
|
|
|
|
--- a/boost/asio/ssl/detail/impl/openssl_init.ipp
|
|
|
|
|
+++ b/boost/asio/ssl/detail/impl/openssl_init.ipp
|
|
|
|
|
@@ -40,11 +40,15 @@ public:
|
|
|
|
|
::SSL_load_error_strings();
|
|
|
|
|
::OpenSSL_add_all_algorithms();
|
|
|
|
|
|
|
|
|
|
+#if (OPENSSL_VERSION_NUMBER < 0x10100000L)
|
|
|
|
|
mutexes_.resize(::CRYPTO_num_locks());
|
|
|
|
|
for (size_t i = 0; i < mutexes_.size(); ++i)
|
|
|
|
|
mutexes_[i].reset(new boost::asio::detail::mutex);
|
|
|
|
|
::CRYPTO_set_locking_callback(&do_init::openssl_locking_func);
|
|
|
|
|
+#endif // (OPENSSL_VERSION_NUMBER < 0x10100000L)
|
|
|
|
|
+#if (OPENSSL_VERSION_NUMBER < 0x10000000L)
|
|
|
|
|
::CRYPTO_set_id_callback(&do_init::openssl_id_func);
|
|
|
|
|
+#endif // (OPENSSL_VERSION_NUMBER < 0x10000000L)
|
|
|
|
|
|
|
|
|
|
#if !defined(SSL_OP_NO_COMPRESSION) \
|
|
|
|
|
&& (OPENSSL_VERSION_NUMBER >= 0x00908000L)
|
|
|
|
|
@@ -61,20 +65,33 @@ public:
|
|
|
|
|
#endif // !defined(SSL_OP_NO_COMPRESSION)
|
|
|
|
|
// && (OPENSSL_VERSION_NUMBER >= 0x00908000L)
|
|
|
|
|
|
|
|
|
|
+#if (OPENSSL_VERSION_NUMBER < 0x10000000L)
|
|
|
|
|
::CRYPTO_set_id_callback(0);
|
|
|
|
|
+#endif // (OPENSSL_VERSION_NUMBER < 0x10000000L)
|
|
|
|
|
+#if (OPENSSL_VERSION_NUMBER < 0x10100000L)
|
|
|
|
|
::CRYPTO_set_locking_callback(0);
|
|
|
|
|
::ERR_free_strings();
|
|
|
|
|
-#if (OPENSSL_VERSION_NUMBER >= 0x10000000L)
|
|
|
|
|
- ::ERR_remove_thread_state(NULL);
|
|
|
|
|
-#else // (OPENSSL_VERSION_NUMBER >= 0x10000000L)
|
|
|
|
|
- ::ERR_remove_state(0);
|
|
|
|
|
-#endif // (OPENSSL_VERSION_NUMBER >= 0x10000000L)
|
|
|
|
|
::EVP_cleanup();
|
|
|
|
|
::CRYPTO_cleanup_all_ex_data();
|
|
|
|
|
+#endif // (OPENSSL_VERSION_NUMBER < 0x10100000L)
|
|
|
|
|
+#if (OPENSSL_VERSION_NUMBER < 0x10000000L)
|
|
|
|
|
+ ::ERR_remove_state(0);
|
|
|
|
|
+#elif (OPENSSL_VERSION_NUMBER < 0x10100000L)
|
|
|
|
|
+ ::ERR_remove_thread_state(NULL);
|
|
|
|
|
+#endif // (OPENSSL_VERSION_NUMBER < 0x10000000L)
|
|
|
|
|
+#if (OPENSSL_VERSION_NUMBER >= 0x10002000L) \
|
|
|
|
|
+ && (OPENSSL_VERSION_NUMBER < 0x10100000L)
|
|
|
|
|
+ ::SSL_COMP_free_compression_methods();
|
|
|
|
|
+#endif // (OPENSSL_VERSION_NUMBER >= 0x10002000L)
|
|
|
|
|
+ // && (OPENSSL_VERSION_NUMBER < 0x10100000L)
|
|
|
|
|
+#if !defined(OPENSSL_IS_BORINGSSL)
|
|
|
|
|
::CONF_modules_unload(1);
|
|
|
|
|
-#if !defined(OPENSSL_NO_ENGINE)
|
|
|
|
|
+#endif // !defined(OPENSSL_IS_BORINGSSL)
|
|
|
|
|
+#if !defined(OPENSSL_NO_ENGINE) \
|
|
|
|
|
+ && (OPENSSL_VERSION_NUMBER < 0x10100000L)
|
|
|
|
|
::ENGINE_cleanup();
|
|
|
|
|
#endif // !defined(OPENSSL_NO_ENGINE)
|
|
|
|
|
+ // && (OPENSSL_VERSION_NUMBER < 0x10100000L)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#if !defined(SSL_OP_NO_COMPRESSION) \
|
|
|
|
|
@@ -87,19 +104,20 @@ public:
|
|
|
|
|
// && (OPENSSL_VERSION_NUMBER >= 0x00908000L)
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
+#if (OPENSSL_VERSION_NUMBER < 0x10000000L)
|
|
|
|
|
static unsigned long openssl_id_func()
|
|
|
|
|
{
|
|
|
|
|
#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
|
|
|
|
|
return ::GetCurrentThreadId();
|
|
|
|
|
#else // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
|
|
|
|
|
- void* id = instance()->thread_id_;
|
|
|
|
|
- if (id == 0)
|
|
|
|
|
- instance()->thread_id_ = id = &id; // Ugh.
|
|
|
|
|
+ void* id = &errno;
|
|
|
|
|
BOOST_ASIO_ASSERT(sizeof(unsigned long) >= sizeof(void*));
|
|
|
|
|
return reinterpret_cast<unsigned long>(id);
|
|
|
|
|
#endif // defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
|
|
|
|
|
}
|
|
|
|
|
+#endif // (OPENSSL_VERSION_NUMBER < 0x10000000L)
|
|
|
|
|
|
|
|
|
|
+#if (OPENSSL_VERSION_NUMBER < 0x10100000L)
|
|
|
|
|
static void openssl_locking_func(int mode, int n,
|
|
|
|
|
const char* /*file*/, int /*line*/)
|
|
|
|
|
{
|
|
|
|
|
@@ -112,11 +130,7 @@ private:
|
|
|
|
|
// Mutexes to be used in locking callbacks.
|
|
|
|
|
std::vector<boost::asio::detail::shared_ptr<
|
|
|
|
|
boost::asio::detail::mutex> > mutexes_;
|
|
|
|
|
-
|
|
|
|
|
-#if !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
|
|
|
|
|
- // The thread identifiers to be used by openssl.
|
|
|
|
|
- boost::asio::detail::tss_ptr<void> thread_id_;
|
|
|
|
|
-#endif // !defined(BOOST_ASIO_WINDOWS) && !defined(__CYGWIN__)
|
|
|
|
|
+#endif // (OPENSSL_VERSION_NUMBER < 0x10100000L)
|
|
|
|
|
|
|
|
|
|
#if !defined(SSL_OP_NO_COMPRESSION) \
|
|
|
|
|
&& (OPENSSL_VERSION_NUMBER >= 0x00908000L)
|
|
|
|
|
diff --git a/boost/asio/ssl/detail/openssl_types.hpp b/boost/asio/ssl/detail/openssl_types.hpp
|
|
|
|
|
index 1111111..2222222 100644
|
|
|
|
|
--- a/boost/asio/ssl/detail/openssl_types.hpp
|
|
|
|
|
+++ b/boost/asio/ssl/detail/openssl_types.hpp
|
|
|
|
|
@@ -21,7 +21,9 @@
|
|
|
|
|
#if !defined(OPENSSL_NO_ENGINE)
|
|
|
|
|
# include <openssl/engine.h>
|
|
|
|
|
#endif // !defined(OPENSSL_NO_ENGINE)
|
|
|
|
|
+#include <openssl/dh.h>
|
|
|
|
|
#include <openssl/err.h>
|
|
|
|
|
+#include <openssl/rsa.h>
|
|
|
|
|
#include <openssl/x509v3.h>
|
|
|
|
|
#include <boost/asio/detail/socket_types.hpp>
|
|
|
|
|
|
|
|
|
|
diff --git a/boost/asio/ssl/error.hpp b/boost/asio/ssl/error.hpp
|
|
|
|
|
index 1111111..2222222 100644
|
|
|
|
|
--- a/boost/asio/ssl/error.hpp
|
|
|
|
|
+++ b/boost/asio/ssl/error.hpp
|
|
|
|
|
@@ -26,6 +26,7 @@ namespace error {
|
|
|
|
|
|
|
|
|
|
enum ssl_errors
|
|
|
|
|
{
|
|
|
|
|
+ // Error numbers are those produced by openssl.
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
extern BOOST_ASIO_DECL
|
|
|
|
|
@@ -35,6 +36,29 @@ static const boost::system::error_category& ssl_category
|
|
|
|
|
= boost::asio::error::get_ssl_category();
|
|
|
|
|
|
|
|
|
|
} // namespace error
|
|
|
|
|
+namespace ssl {
|
|
|
|
|
+namespace error {
|
|
|
|
|
+
|
|
|
|
|
+enum stream_errors
|
|
|
|
|
+{
|
|
|
|
|
+#if defined(GENERATING_DOCUMENTATION)
|
|
|
|
|
+ /// The underlying stream closed before the ssl stream gracefully shut down.
|
|
|
|
|
+ stream_truncated
|
|
|
|
|
+#elif (OPENSSL_VERSION_NUMBER < 0x10100000L) && !defined(OPENSSL_IS_BORINGSSL)
|
|
|
|
|
+ stream_truncated = ERR_PACK(ERR_LIB_SSL, 0, SSL_R_SHORT_READ)
|
|
|
|
|
+#else
|
|
|
|
|
+ stream_truncated = 1
|
|
|
|
|
+#endif
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+extern BOOST_ASIO_DECL
|
|
|
|
|
+const boost::system::error_category& get_stream_category();
|
|
|
|
|
+
|
|
|
|
|
+static const boost::system::error_category& stream_category
|
|
|
|
|
+ = boost::asio::ssl::error::get_stream_category();
|
|
|
|
|
+
|
|
|
|
|
+} // namespace error
|
|
|
|
|
+} // namespace ssl
|
|
|
|
|
} // namespace asio
|
|
|
|
|
} // namespace boost
|
|
|
|
|
|
|
|
|
|
@@ -46,6 +70,11 @@ template<> struct is_error_code_enum<boost::asio::error::ssl_errors>
|
|
|
|
|
static const bool value = true;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
+template<> struct is_error_code_enum<boost::asio::ssl::error::stream_errors>
|
|
|
|
|
+{
|
|
|
|
|
+ static const bool value = true;
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
} // namespace system
|
|
|
|
|
} // namespace boost
|
|
|
|
|
|
|
|
|
|
@@ -60,6 +89,17 @@ inline boost::system::error_code make_error_code(ssl_errors e)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} // namespace error
|
|
|
|
|
+namespace ssl {
|
|
|
|
|
+namespace error {
|
|
|
|
|
+
|
|
|
|
|
+inline boost::system::error_code make_error_code(stream_errors e)
|
|
|
|
|
+{
|
|
|
|
|
+ return boost::system::error_code(
|
|
|
|
|
+ static_cast<int>(e), get_stream_category());
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+} // namespace error
|
|
|
|
|
+} // namespace ssl
|
|
|
|
|
} // namespace asio
|
|
|
|
|
} // namespace boost
|
|
|
|
|
|
|
|
|
|
diff --git a/boost/asio/ssl/impl/context.ipp b/boost/asio/ssl/impl/context.ipp
|
|
|
|
|
index 1111111..2222222 100644
|
|
|
|
|
--- a/boost/asio/ssl/impl/context.ipp
|
|
|
|
|
+++ b/boost/asio/ssl/impl/context.ipp
|
|
|
|
|
@@ -71,7 +71,8 @@ context::context(context::method m)
|
|
|
|
|
|
|
|
|
|
switch (m)
|
|
|
|
|
{
|
|
|
|
|
-#if defined(OPENSSL_NO_SSL2)
|
|
|
|
|
+#if defined(OPENSSL_NO_SSL2) \
|
|
|
|
|
+ || (OPENSSL_VERSION_NUMBER >= 0x10100000L)
|
|
|
|
|
case context::sslv2:
|
|
|
|
|
case context::sslv2_client:
|
|
|
|
|
case context::sslv2_server:
|
|
|
|
|
@@ -79,6 +80,7 @@ context::context(context::method m)
|
|
|
|
|
boost::asio::error::invalid_argument, "context");
|
|
|
|
|
break;
|
|
|
|
|
#else // defined(OPENSSL_NO_SSL2)
|
|
|
|
|
+ // || (OPENSSL_VERSION_NUMBER >= 0x10100000L)
|
|
|
|
|
case context::sslv2:
|
|
|
|
|
handle_ = ::SSL_CTX_new(::SSLv2_method());
|
|
|
|
|
break;
|
|
|
|
|
@@ -89,6 +91,7 @@ context::context(context::method m)
|
|
|
|
|
handle_ = ::SSL_CTX_new(::SSLv2_server_method());
|
|
|
|
|
break;
|
|
|
|
|
#endif // defined(OPENSSL_NO_SSL2)
|
|
|
|
|
+ // || (OPENSSL_VERSION_NUMBER >= 0x10100000L)
|
|
|
|
|
#if defined(OPENSSL_NO_SSL3)
|
|
|
|
|
case context::sslv3:
|
|
|
|
|
case context::sslv3_client:
|
|
|
|
|
@@ -107,6 +110,7 @@ context::context(context::method m)
|
|
|
|
|
handle_ = ::SSL_CTX_new(::SSLv3_server_method());
|
|
|
|
|
break;
|
|
|
|
|
#endif // defined(OPENSSL_NO_SSL3)
|
|
|
|
|
+#if (OPENSSL_VERSION_NUMBER < 0x10100000L)
|
|
|
|
|
case context::tlsv1:
|
|
|
|
|
handle_ = ::SSL_CTX_new(::TLSv1_method());
|
|
|
|
|
break;
|
|
|
|
|
@@ -116,6 +120,7 @@ context::context(context::method m)
|
|
|
|
|
case context::tlsv1_server:
|
|
|
|
|
handle_ = ::SSL_CTX_new(::TLSv1_server_method());
|
|
|
|
|
break;
|
|
|
|
|
+#endif // (OPENSSL_VERSION_NUMBER < 0x10100000L)
|
|
|
|
|
case context::sslv23:
|
|
|
|
|
handle_ = ::SSL_CTX_new(::SSLv23_method());
|
|
|
|
|
break;
|
|
|
|
|
@@ -125,6 +130,7 @@ context::context(context::method m)
|
|
|
|
|
case context::sslv23_server:
|
|
|
|
|
handle_ = ::SSL_CTX_new(::SSLv23_server_method());
|
|
|
|
|
break;
|
|
|
|
|
+#if (OPENSSL_VERSION_NUMBER < 0x10100000L)
|
|
|
|
|
#if defined(SSL_TXT_TLSV1_1)
|
|
|
|
|
case context::tlsv11:
|
|
|
|
|
handle_ = ::SSL_CTX_new(::TLSv1_1_method());
|
|
|
|
|
@@ -161,6 +167,23 @@ context::context(context::method m)
|
|
|
|
|
boost::asio::error::invalid_argument, "context");
|
|
|
|
|
break;
|
|
|
|
|
#endif // defined(SSL_TXT_TLSV1_2)
|
|
|
|
|
+#else // (OPENSSL_VERSION_NUMBER < 0x10100000L)
|
|
|
|
|
+ case context::tlsv1:
|
|
|
|
|
+ case context::tlsv11:
|
|
|
|
|
+ case context::tlsv12:
|
|
|
|
|
+ handle_ = ::SSL_CTX_new(::TLS_method());
|
|
|
|
|
+ break;
|
|
|
|
|
+ case context::tlsv1_client:
|
|
|
|
|
+ case context::tlsv11_client:
|
|
|
|
|
+ case context::tlsv12_client:
|
|
|
|
|
+ handle_ = ::SSL_CTX_new(::TLS_client_method());
|
|
|
|
|
+ break;
|
|
|
|
|
+ case context::tlsv1_server:
|
|
|
|
|
+ case context::tlsv11_server:
|
|
|
|
|
+ case context::tlsv12_server:
|
|
|
|
|
+ handle_ = ::SSL_CTX_new(::TLS_server_method());
|
|
|
|
|
+ break;
|
|
|
|
|
+#endif // (OPENSSL_VERSION_NUMBER < 0x10100000L)
|
|
|
|
|
default:
|
|
|
|
|
handle_ = ::SSL_CTX_new(0);
|
|
|
|
|
break;
|
|
|
|
|
@@ -205,13 +228,22 @@ context::~context()
|
|
|
|
|
{
|
|
|
|
|
if (handle_)
|
|
|
|
|
{
|
|
|
|
|
- if (handle_->default_passwd_callback_userdata)
|
|
|
|
|
+#if (OPENSSL_VERSION_NUMBER >= 0x10100000L)
|
|
|
|
|
+ void* cb_userdata = ::SSL_CTX_get_default_passwd_cb_userdata(handle_);
|
|
|
|
|
+#else // (OPENSSL_VERSION_NUMBER >= 0x10100000L)
|
|
|
|
|
+ void* cb_userdata = handle_->default_passwd_callback_userdata;
|
|
|
|
|
+#endif // (OPENSSL_VERSION_NUMBER >= 0x10100000L)
|
|
|
|
|
+ if (cb_userdata)
|
|
|
|
|
{
|
|
|
|
|
detail::password_callback_base* callback =
|
|
|
|
|
static_cast<detail::password_callback_base*>(
|
|
|
|
|
- handle_->default_passwd_callback_userdata);
|
|
|
|
|
+ cb_userdata);
|
|
|
|
|
delete callback;
|
|
|
|
|
+#if (OPENSSL_VERSION_NUMBER >= 0x10100000L)
|
|
|
|
|
+ ::SSL_CTX_set_default_passwd_cb_userdata(handle_, 0);
|
|
|
|
|
+#else // (OPENSSL_VERSION_NUMBER >= 0x10100000L)
|
|
|
|
|
handle_->default_passwd_callback_userdata = 0;
|
|
|
|
|
+#endif // (OPENSSL_VERSION_NUMBER >= 0x10100000L)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (SSL_CTX_get_app_data(handle_))
|
|
|
|
|
@@ -546,10 +578,17 @@ boost::system::error_code context::use_certificate_chain(
|
|
|
|
|
bio_cleanup bio = { make_buffer_bio(chain) };
|
|
|
|
|
if (bio.p)
|
|
|
|
|
{
|
|
|
|
|
+#if (OPENSSL_VERSION_NUMBER >= 0x10100000L)
|
|
|
|
|
+ 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)
|
|
|
|
|
+ pem_password_cb* callback = handle_->default_passwd_callback;
|
|
|
|
|
+ void* cb_userdata = handle_->default_passwd_callback_userdata;
|
|
|
|
|
+#endif // (OPENSSL_VERSION_NUMBER >= 0x10100000L)
|
|
|
|
|
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 = boost::system::error_code(ERR_R_PEM_LIB,
|
|
|
|
|
@@ -577,8 +616,8 @@ boost::system::error_code context::use_certificate_chain(
|
|
|
|
|
#endif // (OPENSSL_VERSION_NUMBER >= 0x10002000L)
|
|
|
|
|
|
|
|
|
|
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))
|
|
|
|
|
{
|
|
|
|
|
@@ -643,6 +682,14 @@ boost::system::error_code context::use_private_key(
|
|
|
|
|
{
|
|
|
|
|
::ERR_clear_error();
|
|
|
|
|
|
|
|
|
|
+#if (OPENSSL_VERSION_NUMBER >= 0x10100000L)
|
|
|
|
|
+ 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)
|
|
|
|
|
+ pem_password_cb* callback = handle_->default_passwd_callback;
|
|
|
|
|
+ void* cb_userdata = handle_->default_passwd_callback_userdata;
|
|
|
|
|
+#endif // (OPENSSL_VERSION_NUMBER >= 0x10100000L)
|
|
|
|
|
+
|
|
|
|
|
bio_cleanup bio = { make_buffer_bio(private_key) };
|
|
|
|
|
if (bio.p)
|
|
|
|
|
{
|
|
|
|
|
@@ -654,8 +701,8 @@ boost::system::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:
|
|
|
|
|
{
|
|
|
|
|
@@ -702,6 +749,14 @@ boost::system::error_code context::use_rsa_private_key(
|
|
|
|
|
{
|
|
|
|
|
::ERR_clear_error();
|
|
|
|
|
|
|
|
|
|
+#if (OPENSSL_VERSION_NUMBER >= 0x10100000L)
|
|
|
|
|
+ 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)
|
|
|
|
|
+ pem_password_cb* callback = handle_->default_passwd_callback;
|
|
|
|
|
+ void* cb_userdata = handle_->default_passwd_callback_userdata;
|
|
|
|
|
+#endif // (OPENSSL_VERSION_NUMBER >= 0x10100000L)
|
|
|
|
|
+
|
|
|
|
|
bio_cleanup bio = { make_buffer_bio(private_key) };
|
|
|
|
|
if (bio.p)
|
|
|
|
|
{
|
|
|
|
|
@@ -713,8 +768,8 @@ boost::system::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:
|
|
|
|
|
{
|
|
|
|
|
@@ -933,11 +988,17 @@ 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 (handle_->default_passwd_callback_userdata)
|
|
|
|
|
- delete static_cast<detail::password_callback_base*>(
|
|
|
|
|
- handle_->default_passwd_callback_userdata);
|
|
|
|
|
-
|
|
|
|
|
+#if (OPENSSL_VERSION_NUMBER >= 0x10100000L)
|
|
|
|
|
+ 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)
|
|
|
|
|
+ void* old_callback = handle_->default_passwd_callback_userdata;
|
|
|
|
|
handle_->default_passwd_callback_userdata = callback;
|
|
|
|
|
+#endif // (OPENSSL_VERSION_NUMBER >= 0x10100000L)
|
|
|
|
|
+
|
|
|
|
|
+ if (old_callback)
|
|
|
|
|
+ delete static_cast<detail::password_callback_base*>(
|
|
|
|
|
+ old_callback);
|
|
|
|
|
|
|
|
|
|
SSL_CTX_set_default_passwd_cb(handle_, &context::password_callback_function);
|
|
|
|
|
|
|
|
|
|
diff --git a/boost/asio/ssl/impl/error.ipp b/boost/asio/ssl/impl/error.ipp
|
|
|
|
|
index 1111111..2222222 100644
|
|
|
|
|
--- a/boost/asio/ssl/impl/error.ipp
|
|
|
|
|
+++ b/boost/asio/ssl/impl/error.ipp
|
|
|
|
|
@@ -24,7 +24,6 @@
|
|
|
|
|
namespace boost {
|
|
|
|
|
namespace asio {
|
|
|
|
|
namespace error {
|
|
|
|
|
-
|
|
|
|
|
namespace detail {
|
|
|
|
|
|
|
|
|
|
class ssl_category : public boost::system::error_category
|
|
|
|
|
@@ -51,6 +50,50 @@ const boost::system::error_category& get_ssl_category()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} // namespace error
|
|
|
|
|
+namespace ssl {
|
|
|
|
|
+namespace error {
|
|
|
|
|
+
|
|
|
|
|
+#if (OPENSSL_VERSION_NUMBER < 0x10100000L) && !defined(OPENSSL_IS_BORINGSSL)
|
|
|
|
|
+
|
|
|
|
|
+const boost::system::error_category& get_stream_category()
|
|
|
|
|
+{
|
|
|
|
|
+ return boost::asio::error::get_ssl_category();
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+#else
|
|
|
|
|
+
|
|
|
|
|
+namespace detail {
|
|
|
|
|
+
|
|
|
|
|
+class stream_category : public boost::system::error_category
|
|
|
|
|
+{
|
|
|
|
|
+public:
|
|
|
|
|
+ const char* name() const BOOST_ASIO_ERROR_CATEGORY_NOEXCEPT
|
|
|
|
|
+ {
|
|
|
|
|
+ return "asio.ssl.stream";
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ std::string message(int value) const
|
|
|
|
|
+ {
|
|
|
|
|
+ switch (value)
|
|
|
|
|
+ {
|
|
|
|
|
+ case stream_truncated: return "stream truncated";
|
|
|
|
|
+ default: return "asio.ssl.stream error";
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+} // namespace detail
|
|
|
|
|
+
|
|
|
|
|
+const boost::system::error_category& get_stream_category()
|
|
|
|
|
+{
|
|
|
|
|
+ static detail::stream_category instance;
|
|
|
|
|
+ return instance;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+#endif
|
|
|
|
|
+
|
|
|
|
|
+} // namespace error
|
|
|
|
|
+} // namespace ssl
|
|
|
|
|
} // namespace asio
|
|
|
|
|
} // namespace boost
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
|
|
|
From: jzmaddock <john@johnmaddock.co.uk>
|
|
|
|
|
Date: Fri, 24 Jul 2015 18:50:28 +0100
|
|
|
|
|
Subject: [PATCH 3/4] Remove depricated type_traits usage.
|
|
|
|
|
|
|
|
|
|
curl -L 'https://patch-diff.githubusercontent.com/raw/boostorg/iostreams/pull/15.patch' | sed 's,include/,,g' | git am
|
|
|
|
|
|
|
|
|
|
diff --git a/boost/iostreams/detail/is_dereferenceable.hpp b/boost/iostreams/detail/is_dereferenceable.hpp
|
|
|
|
|
index 1111111..2222222 100644
|
|
|
|
|
--- a/boost/iostreams/detail/is_dereferenceable.hpp
|
|
|
|
|
+++ b/boost/iostreams/detail/is_dereferenceable.hpp
|
|
|
|
|
@@ -9,9 +9,8 @@
|
|
|
|
|
#ifndef BOOST_IOSTREAMS_DETAIL_IS_DEREFERENCEABLE_HPP_INCLUDED
|
|
|
|
|
#define BOOST_IOSTREAMS_DETAIL_IS_DEREFERENCEABLE_HPP_INCLUDED
|
|
|
|
|
|
|
|
|
|
-# include <boost/type_traits/detail/bool_trait_def.hpp>
|
|
|
|
|
-# include <boost/type_traits/detail/template_arity_spec.hpp>
|
|
|
|
|
# include <boost/type_traits/remove_cv.hpp>
|
|
|
|
|
+# include <boost/type_traits/integral_constant.hpp>
|
|
|
|
|
# include <boost/mpl/aux_/lambda_support.hpp>
|
|
|
|
|
# include <boost/mpl/bool.hpp>
|
|
|
|
|
# include <boost/detail/workaround.hpp>
|
|
|
|
|
@@ -69,17 +68,10 @@ namespace is_dereferenceable_
|
|
|
|
|
# undef BOOST_comma
|
|
|
|
|
|
|
|
|
|
template<typename T>
|
|
|
|
|
-struct is_dereferenceable
|
|
|
|
|
- BOOST_TT_AUX_BOOL_C_BASE(is_dereferenceable_::impl<T>::value)
|
|
|
|
|
-{
|
|
|
|
|
- BOOST_TT_AUX_BOOL_TRAIT_VALUE_DECL(is_dereferenceable_::impl<T>::value)
|
|
|
|
|
- BOOST_MPL_AUX_LAMBDA_SUPPORT(1,is_dereferenceable,(T))
|
|
|
|
|
-};
|
|
|
|
|
+struct is_dereferenceable : public boost::integral_constant<bool, is_dereferenceable_::impl<T>::value> {};
|
|
|
|
|
|
|
|
|
|
} }
|
|
|
|
|
|
|
|
|
|
-BOOST_TT_AUX_TEMPLATE_ARITY_SPEC(1, ::boost::iostreams::detail::is_dereferenceable)
|
|
|
|
|
-
|
|
|
|
|
} // End namespaces detail, iostreams, boost.
|
|
|
|
|
|
|
|
|
|
#endif // BOOST_IOSTREAMS_DETAIL_IS_DEREFERENCEABLE_HPP_INCLUDED
|
|
|
|
|
|
|
|
|
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
|
|
|
From: Tony Theodore <tonyt@logyst.com>
|
|
|
|
|
Date: Wed, 8 Apr 2020 00:37:10 +1000
|
|
|
|
|
Subject: [PATCH 4/4] fix darwin build
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
diff --git a/tools/build/src/tools/darwin.jam b/tools/build/src/tools/darwin.jam
|
|
|
|
|
index 1111111..2222222 100644
|
|
|
|
|
--- a/tools/build/src/tools/darwin.jam
|
|
|
|
|
+++ b/tools/build/src/tools/darwin.jam
|
|
|
|
|
@@ -135,12 +135,6 @@ rule init ( version ? : command * : options * : requirement * )
|
|
|
|
|
|
|
|
|
|
# - Set the toolset generic common options.
|
|
|
|
|
common.handle-options darwin : $(condition) : $(command) : $(options) ;
|
|
|
|
|
-
|
|
|
|
|
- # - GCC 4.0 and higher in Darwin does not have -fcoalesce-templates.
|
|
|
|
|
- if $(real-version) < "4.0.0"
|
|
|
|
|
- {
|
|
|
|
|
- flags darwin.compile.c++ OPTIONS $(condition) : -fcoalesce-templates ;
|
|
|
|
|
- }
|
|
|
|
|
# - GCC 4.2 and higher in Darwin does not have -Wno-long-double.
|
|
|
|
|
if $(real-version) < "4.2.0"
|
|
|
|
|
{
|