build: Check also for CRYPTO_cleanup_all_ex_data.
authorAndre Noll <maan@tuebingen.mpg.de>
Fri, 21 Dec 2018 17:11:40 +0000 (18:11 +0100)
committerAndre Noll <maan@tuebingen.mpg.de>
Sat, 16 Feb 2019 19:14:44 +0000 (20:14 +0100)
FreeBSD 12 does not seem to have it. This is not fatal since omitting
the call to CRYPTO_cleanup_all_ex_data() just results in a harmless
memory leak at exit.

configure.ac
openssl.c

index 54f9fe1..d993e52 100644 (file)
@@ -104,6 +104,16 @@ if test $HAVE_OPENSSL = yes; then
        fi
        test "$ac_cv_have_decl_RSA_set0_key" = yes &&
                AC_DEFINE([HAVE_RSA_SET0_KEY], [1], [openssl >= 1.1])
+
+       HAVE_CRYPTO_CLEANUP_ALL_EX_DATA=yes
+       AC_CHECK_DECL([CRYPTO_cleanup_all_ex_data], [],
+               [HAVE_CRYPTO_CLEANUP_ALL_EX_DATA=no],
+               [#include <openssl/rsa.h>])
+       AC_CHECK_LIB([crypto], [CRYPTO_cleanup_all_ex_data], [],
+               [HAVE_CRYPTO_CLEANUP_ALL_EX_DATA=no])
+       test $HAVE_CRYPTO_CLEANUP_ALL_EX_DATA = yes &&
+               AC_DEFINE([HAVE_CRYPTO_CLEANUP_ALL_EX_DATA], [1],
+                       [not available on FreeBSD 12])
 fi
 UNSTASH_FLAGS
 ######################################################################### gcrypt
index 4895e17..d11b104 100644 (file)
--- a/openssl.c
+++ b/openssl.c
@@ -57,7 +57,9 @@ void crypt_init(void)
 
 void crypt_shutdown(void)
 {
+#ifdef HAVE_CRYPTO_CLEANUP_ALL_EX_DATA
        CRYPTO_cleanup_all_ex_data();
+#endif
 }
 
 static int get_private_key(const char *path, RSA **rsa)