diff options
-rw-r--r-- | tdeio/kssl/kopenssl.cc | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/tdeio/kssl/kopenssl.cc b/tdeio/kssl/kopenssl.cc index 8b1aa20e0..ded836fde 100644 --- a/tdeio/kssl/kopenssl.cc +++ b/tdeio/kssl/kopenssl.cc @@ -37,6 +37,13 @@ #define GET_CRYPTOLIB_SYMBOL(a) ((_cryptoLib->hasSymbol(a)) ? _cryptoLib->symbol(a) : NULL) #define GET_SSLLIB_SYMBOL(a) ((_sslLib->hasSymbol(a)) ? _sslLib->symbol(a) : NULL) +// taken from OpenSSL 1.1 header, used to call OPENSSL_init_crypto +#if !defined(OPENSSL_INIT_ADD_ALL_CIPHERS) +# define OPENSSL_INIT_ADD_ALL_CIPHERS 0x00000004L +# define OPENSSL_INIT_ADD_ALL_DIGESTS 0x00000008L +# define OPENSSL_INIT_LOAD_CONFIG 0x00000040L +#endif + extern "C" { #ifdef KSSL_HAVE_SSL static int (*K_SSL_connect) (SSL *) = 0L; @@ -675,8 +682,22 @@ TDEConfig *cfg; // Initialize the library (once only!) void *x; - x = GET_SSLLIB_SYMBOL("SSL_library_init"); - if (_cryptoLib) { + x = GET_SSLLIB_SYMBOL("OPENSSL_init_ssl"); + if (x) { + // OpenSSL >= 1.1 + if (_cryptoLib) { + ((int (*)(unsigned long, void*))x)(0, NULL); + x = GET_CRYPTOLIB_SYMBOL("OPENSSL_init_crypto"); + if (x) ((int (*)(unsigned long, void*))x)(OPENSSL_INIT_ADD_ALL_CIPHERS + | OPENSSL_INIT_ADD_ALL_DIGESTS + | OPENSSL_INIT_LOAD_CONFIG, + NULL); + } + } + else { + // OpenSSL < 1.1 + x = GET_SSLLIB_SYMBOL("SSL_library_init"); + if (_cryptoLib) { if (x) ((int (*)())x)(); x = GET_CRYPTOLIB_SYMBOL("OpenSSL_add_all_algorithms"); if (!x) @@ -705,6 +726,7 @@ TDEConfig *cfg; if (!x) x = GET_CRYPTOLIB_SYMBOL("OPENSSL_add_all_digests"); if (x) ((void (*)())x)(); + } } } |