From 5bc932f7a71ede7d8ecd9d88804af95a2eb955c0 Mon Sep 17 00:00:00 2001 From: Rosen Penev Date: Sun, 3 Nov 2019 15:34:33 -0800 Subject: [PATCH] reds: Fix compilation without deprecated OpenSSL 1.1 APIs Missing headers for BN_ and RSA_ functions. Initialization is deprecated with 1.1. Signed-off-by: Rosen Penev Acked-by: Frediano Ziglio --- AUTHORS hunk removed as it does not apply (with 0.14.2 at least) AUTHORS | 1 + server/reds.c | 24 ++++++++++++++++-------- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/server/reds.c b/server/reds.c index c55aa3f8..dc03ef3a 100644 --- a/server/reds.c +++ b/server/reds.c @@ -36,7 +36,9 @@ #include #endif +#include #include +#include #if HAVE_SASL #include @@ -2838,13 +2840,8 @@ static void openssl_thread_setup(void) CRYPTO_set_id_callback(pthreads_thread_id); CRYPTO_set_locking_callback(pthreads_locking_callback); } -#else -static inline void openssl_thread_setup(void) -{ -} -#endif -static gpointer openssl_global_init(gpointer arg) +static gpointer openssl_global_init_once(gpointer arg) { SSL_library_init(); SSL_load_error_strings(); @@ -2854,9 +2851,20 @@ static gpointer openssl_global_init(gpointer arg) return NULL; } -static int reds_init_ssl(RedsState *reds) +static inline void openssl_global_init(void) { static GOnce openssl_once = G_ONCE_INIT; + g_once(&openssl_once, openssl_global_init_once, NULL); +} + +#else +static inline void openssl_global_init(void) +{ +} +#endif + +static int reds_init_ssl(RedsState *reds) +{ const SSL_METHOD *ssl_method; int return_code; /* Limit connection to TLSv1.1 or newer. @@ -2865,7 +2873,7 @@ static int reds_init_ssl(RedsState *reds) long ssl_options = SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 | SSL_OP_NO_COMPRESSION | SSL_OP_NO_TLSv1; /* Global system initialization*/ - g_once(&openssl_once, openssl_global_init, NULL); + openssl_global_init(); /* Create our context*/ /* SSLv23_method() handles TLSv1.x in addition to SSLv2/v3 */