diff options
Diffstat (limited to 'libntp/ssl_init.c')
| -rw-r--r-- | libntp/ssl_init.c | 53 | 
1 files changed, 33 insertions, 20 deletions
| diff --git a/libntp/ssl_init.c b/libntp/ssl_init.c index ef0f1c185a881..bebf6e1755310 100644 --- a/libntp/ssl_init.c +++ b/libntp/ssl_init.c @@ -13,52 +13,65 @@  #include <lib_strbuf.h>  #ifdef OPENSSL +#include "openssl/crypto.h"  #include "openssl/err.h"  #include "openssl/evp.h" +#include "openssl/opensslv.h"  #include "libssl_compat.h" -void	atexit_ssl_cleanup(void); -  int ssl_init_done; +#if OPENSSL_VERSION_NUMBER < 0x10100000L + +static void +atexit_ssl_cleanup(void) +{ +	if (!ssl_init_done) +		return; + +	ssl_init_done = FALSE; +	EVP_cleanup(); +	ERR_free_strings(); +} +  void  ssl_init(void)  {  	init_lib(); -	if (ssl_init_done) -		return; - -	ERR_load_crypto_strings(); -	OpenSSL_add_all_algorithms(); -	atexit(&atexit_ssl_cleanup); - -	ssl_init_done = TRUE; +	if ( ! ssl_init_done) { +	    ERR_load_crypto_strings(); +	    OpenSSL_add_all_algorithms(); +	    atexit(&atexit_ssl_cleanup); +	    ssl_init_done = TRUE; +	}  } +#else /* OPENSSL_VERSION_NUMBER >= 0x10100000L */  void -atexit_ssl_cleanup(void) +ssl_init(void)  { -	if (!ssl_init_done) -		return; - -	ssl_init_done = FALSE; -	EVP_cleanup(); -	ERR_free_strings(); +	init_lib(); +	ssl_init_done = TRUE;  } +#endif /* OPENSSL_VERSION_NUMBER */ +  void  ssl_check_version(void)  { -	if ((SSLeay() ^ OPENSSL_VERSION_NUMBER) & ~0xff0L) { +	u_long	v; +	 +	v = OpenSSL_version_num(); +	if ((v ^ OPENSSL_VERSION_NUMBER) & ~0xff0L) {  		msyslog(LOG_WARNING,  		    "OpenSSL version mismatch. Built against %lx, you have %lx", -		    (u_long)OPENSSL_VERSION_NUMBER, SSLeay()); +		    (u_long)OPENSSL_VERSION_NUMBER, v);  		fprintf(stderr,  		    "OpenSSL version mismatch. Built against %lx, you have %lx\n", -		    (u_long)OPENSSL_VERSION_NUMBER, SSLeay()); +		    (u_long)OPENSSL_VERSION_NUMBER, v);  	}  	INIT_SSL(); | 
