From 6c7487039ce73d7229fb5f28ec372cde67b274b6 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Sun, 5 Feb 2017 21:04:35 +0200 Subject: [PATCH] lib-ssl-iostream: Detect OpenSSL memory functions' parameters via configure The version number check doesn't work correctly for LibreSSL. --- configure.ac | 22 +++++++++++++++++++ src/lib-ssl-iostream/dovecot-openssl-common.c | 6 ++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/configure.ac b/configure.ac index 3f9afd4c6d..44cb25078a 100644 --- a/configure.ac +++ b/configure.ac @@ -1747,6 +1747,28 @@ if test $want_openssl != no && test $have_ssl = no; then AC_DEFINE(HAVE_SSL_CLEAR_OPTIONS,, [Define if you have SSL_clear_options]) fi + # New style mem functions? Should be in v1.1+ + AC_CACHE_CHECK([whether CRYPTO_set_mem_functions has new style parameters],i_cv_have_ssl_new_mem_funcs,[ + old_LIBS=$LIBS + LIBS="$LIBS -lssl" + AC_TRY_LINK([ + #include + int CRYPTO_set_mem_functions( + void *(*m) (size_t, const char *, int), + void *(*r) (void *, size_t, const char *, int), + void (*f) (void *, const char *, int)); + ], [ + ], [ + i_cv_have_ssl_new_mem_funcs=yes + ], [ + i_cv_have_ssl_new_mem_funcs=no + ]) + LIBS=$old_LIBS + ]) + if test $i_cv_have_ssl_new_mem_funcs = yes; then + AC_DEFINE(HAVE_SSL_NEW_MEM_FUNCS,, [Define if CRYPTO_set_mem_functions has new style parameters]) + fi + AC_CHECK_LIB(ssl, SSL_get_current_compression, [ AC_DEFINE(HAVE_SSL_COMPRESSION,, [Build with OpenSSL compression]) ],, $SSL_LIBS) diff --git a/src/lib-ssl-iostream/dovecot-openssl-common.c b/src/lib-ssl-iostream/dovecot-openssl-common.c index a2d4e6f526..ece359b08f 100644 --- a/src/lib-ssl-iostream/dovecot-openssl-common.c +++ b/src/lib-ssl-iostream/dovecot-openssl-common.c @@ -10,7 +10,7 @@ static int openssl_init_refcount = 0; static ENGINE *dovecot_openssl_engine; -#if OPENSSL_VERSION_NUMBER >= 0x10100000L +#ifdef HAVE_SSL_NEW_MEM_FUNCS static void *dovecot_openssl_malloc(size_t size, const char *u0 ATTR_UNUSED, int u1 ATTR_UNUSED) #else static void *dovecot_openssl_malloc(size_t size) @@ -26,7 +26,7 @@ static void *dovecot_openssl_malloc(size_t size) return mem; } -#if OPENSSL_VERSION_NUMBER >= 0x10100000L +#ifdef HAVE_SSL_NEW_MEM_FUNCS static void *dovecot_openssl_realloc(void *ptr, size_t size, const char *u0 ATTR_UNUSED, int u1 ATTR_UNUSED) #else static void *dovecot_openssl_realloc(void *ptr, size_t size) @@ -40,7 +40,7 @@ static void *dovecot_openssl_realloc(void *ptr, size_t size) return mem; } -#if OPENSSL_VERSION_NUMBER >= 0x10100000L +#ifdef HAVE_SSL_NEW_MEM_FUNCS static void dovecot_openssl_free(void *ptr, const char *u0 ATTR_UNUSED, int u1 ATTR_UNUSED) #else static void dovecot_openssl_free(void *ptr)