# HG changeset patch # User Timo Sirainen # Date 1486321475 -7200 # Node ID 25414f0084569a2085674bddd51a763da32fe5a0 # Parent 15eafce831edf68699c12baf077d6075dec854ca lib-ssl-iostream: Detect OpenSSL memory functions' parameters via configure The version number check doesn't work correctly for LibreSSL. diff -r 15eafce831ed -r 25414f008456 configure.ac --- a/configure.ac Sun Feb 05 21:56:20 2017 +0200 +++ b/configure.ac Sun Feb 05 21:04:35 2017 +0200 @@ -1747,6 +1747,28 @@ 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 -r 15eafce831ed -r 25414f008456 src/lib-ssl-iostream/dovecot-openssl-common.c --- a/src/lib-ssl-iostream/dovecot-openssl-common.c Sun Feb 05 21:56:20 2017 +0200 +++ b/src/lib-ssl-iostream/dovecot-openssl-common.c Sun Feb 05 21:04:35 2017 +0200 @@ -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 @@ 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 @@ 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)