From: Timo Sirainen Date: Sun, 5 Feb 2017 19:38:33 +0000 (+0200) Subject: lib-ssl-iostream: Detect whether to call ERR_remove_[thread_]state() via configure X-Git-Tag: 2.3.0.rc1~2181 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e93dc99f2b89533c4bc6af9d0d2852f83f0d5b9a;p=thirdparty%2Fdovecot%2Fcore.git lib-ssl-iostream: Detect whether to call ERR_remove_[thread_]state() via configure --- diff --git a/m4/ssl.m4 b/m4/ssl.m4 index d303b1821c..bf22f66fd0 100644 --- a/m4/ssl.m4 +++ b/m4/ssl.m4 @@ -102,6 +102,12 @@ AC_DEFUN([DOVECOT_SSL], [ AC_DEFINE(HAVE_SSL_CTX_SET1_CURVES_LIST,, [Define if you have SSL_CTX_set1_curves_list]) fi + AC_CHECK_LIB(ssl, ERR_remove_thread_state, [ + AC_DEFINE(HAVE_OPENSSL_ERR_REMOVE_THREAD_STATE,, [Define if you have ERR_remove_thread_state]) + ],, $SSL_LIBS) + AC_CHECK_LIB(ssl, OPENSSL_thread_stop, [ + AC_DEFINE(HAVE_OPENSSL_AUTO_THREAD_DEINIT,, [Define if OpenSSL performs thread cleanup automatically]) + ],, $SSL_LIBS) AC_CHECK_LIB(ssl, OPENSSL_cleanup, [ AC_DEFINE(HAVE_OPENSSL_CLEANUP,, [OpenSSL supports OPENSSL_cleanup()]) ],, $SSL_LIBS) diff --git a/src/lib-ssl-iostream/dovecot-openssl-common.c b/src/lib-ssl-iostream/dovecot-openssl-common.c index dbe63860c6..e53a2d77b8 100644 --- a/src/lib-ssl-iostream/dovecot-openssl-common.c +++ b/src/lib-ssl-iostream/dovecot-openssl-common.c @@ -95,10 +95,14 @@ bool dovecot_openssl_common_global_unref(void) ENGINE_cleanup(); EVP_cleanup(); CRYPTO_cleanup_all_ex_data(); -#if OPENSSL_VERSION_NUMBER < 0x10000000L - ERR_remove_state(0); -#elif OPENSSL_VERSION_NUMBER < 0x10100000L +#ifdef HAVE_OPENSSL_AUTO_THREAD_DEINIT + /* no cleanup needed */ +#elif defined(HAVE_OPENSSL_ERR_REMOVE_THREAD_STATE) + /* This was marked as deprecated in v1.1. */ ERR_remove_thread_state(NULL); +#else + /* This was deprecated by ERR_remove_thread_state(NULL) in v1.0.0. */ + ERR_remove_state(0); #endif ERR_free_strings(); #ifdef HAVE_OPENSSL_CLEANUP