changeset 21481:0f676a75b649

lib-ssl-iostream: Detect whether to call ERR_remove_[thread_]state() via configure
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Sun, 05 Feb 2017 21:38:33 +0200
parents 6660ab6ba3a3
children d7227df3624d
files configure.ac src/lib-ssl-iostream/dovecot-openssl-common.c
diffstat 2 files changed, 13 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/configure.ac	Sun Feb 05 21:31:08 2017 +0200
+++ b/configure.ac	Sun Feb 05 21:38:33 2017 +0200
@@ -1769,6 +1769,12 @@
       AC_DEFINE(HAVE_SSL_NEW_MEM_FUNCS,, [Define if CRYPTO_set_mem_functions has new style parameters])
     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)
--- a/src/lib-ssl-iostream/dovecot-openssl-common.c	Sun Feb 05 21:31:08 2017 +0200
+++ b/src/lib-ssl-iostream/dovecot-openssl-common.c	Sun Feb 05 21:38:33 2017 +0200
@@ -95,10 +95,14 @@
 	ENGINE_cleanup();
 	EVP_cleanup();
 	CRYPTO_cleanup_all_ex_data();
-#if OPENSSL_VERSION_NUMBER < 0x10000000L
+#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);
-#elif OPENSSL_VERSION_NUMBER < 0x10100000L
-	ERR_remove_thread_state(NULL);
 #endif
 	ERR_free_strings();
 #ifdef HAVE_OPENSSL_CLEANUP