From: Stephen Henson Date: Thu, 13 Dec 2012 14:12:45 +0000 (+0000) Subject: Avoid use of deprecated functions for OpenSSL version >= 1.0 X-Git-Tag: 2.5.0-alpha~6016 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2fb0965919062ce4e0a8139b329c30f5df0a5c2b;p=apache Avoid use of deprecated functions for OpenSSL version >= 1.0 git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1421305 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/modules/ssl/mod_ssl.c b/modules/ssl/mod_ssl.c index b54c9c872f..ab9a8a65ea 100644 --- a/modules/ssl/mod_ssl.c +++ b/modules/ssl/mod_ssl.c @@ -311,7 +311,11 @@ static apr_status_t ssl_cleanup_pre_config(void *data) #if HAVE_ENGINE_LOAD_BUILTIN_ENGINES ENGINE_cleanup(); #endif +#if OPENSSL_VERSION_NUMBER >= 0x1000000fL + ERR_remove_thread_state(NULL); +#else ERR_remove_state(0); +#endif /* Don't call ERR_free_strings here; ERR_load_*_strings only * actually load the error strings once per process due to static diff --git a/modules/ssl/ssl_util.c b/modules/ssl/ssl_util.c index 475fe4d2d9..c102789adc 100644 --- a/modules/ssl/ssl_util.c +++ b/modules/ssl/ssl_util.c @@ -444,6 +444,28 @@ static void ssl_dyn_destroy_function(struct CRYPTO_dynlock_value *l, apr_pool_destroy(l->pool); } +#if OPENSSL_VERSION_NUMBER >= 0x10000000L + +static void ssl_util_thr_id(CRYPTO_THREADID *id) +{ + /* OpenSSL needs this to return an unsigned long. On OS/390, the pthread + * id is a structure twice that big. Use the TCB pointer instead as a + * unique unsigned long. + */ +#ifdef __MVS__ + struct PSA { + char unmapped[540]; + unsigned long PSATOLD; + } *psaptr = 0; + + CRYPTO_THREADID_set_numeric(id, psaptr->PSATOLD); +#else + CRYPTO_THREADID_set_numeric(id, (unsigned long) apr_os_thread_current()); +#endif +} + +#else + static unsigned long ssl_util_thr_id(void) { /* OpenSSL needs this to return an unsigned long. On OS/390, the pthread @@ -462,10 +484,16 @@ static unsigned long ssl_util_thr_id(void) #endif } +#endif + static apr_status_t ssl_util_thread_cleanup(void *data) { CRYPTO_set_locking_callback(NULL); +#if OPENSSL_VERSION_NUMBER >= 0x10000000L + CRYPTO_THREADID_set_callback(NULL); +#else CRYPTO_set_id_callback(NULL); +#endif CRYPTO_set_dynlock_create_callback(NULL); CRYPTO_set_dynlock_lock_callback(NULL); @@ -489,7 +517,11 @@ void ssl_util_thread_setup(apr_pool_t *p) apr_thread_mutex_create(&(lock_cs[i]), APR_THREAD_MUTEX_DEFAULT, p); } +#if OPENSSL_VERSION_NUMBER >= 0x10000000L + CRYPTO_THREADID_set_callback(ssl_util_thr_id); +#else CRYPTO_set_id_callback(ssl_util_thr_id); +#endif CRYPTO_set_locking_callback(ssl_util_thr_lock);