Detect openssl header version doesn't match runtime version

We already do this for libevent; let's do it for openssl too.

For now, I'm making it always a warn, since this has caused some
problems in the past.  Later, we can see about making it less severe.
This commit is contained in:
Nick Mathewson 2012-09-04 12:41:37 -04:00
parent e3a130a7eb
commit 7607ad2bec
2 changed files with 17 additions and 0 deletions

View File

@ -0,0 +1,4 @@
o Minor features:
- Detect when we're running with a version of OpenSSL other than the
one we compiled with. This has occasionally given people hard-to-
track-down errors.

View File

@ -255,6 +255,19 @@ crypto_global_init(int useAccel, const char *accelName, const char *accelDir)
OpenSSL_add_all_algorithms(); OpenSSL_add_all_algorithms();
_crypto_global_initialized = 1; _crypto_global_initialized = 1;
setup_openssl_threading(); setup_openssl_threading();
if (SSLeay() == OPENSSL_VERSION_NUMBER &&
!strcmp(SSLeay_version(SSLEAY_VERSION), OPENSSL_VERSION_TEXT)) {
log_info(LD_CRYPTO, "OpenSSL version matches version from headers "
"(%lx: %s).", SSLeay(), SSLeay_version(SSLEAY_VERSION));
} else {
log_warn(LD_CRYPTO, "OpenSSL version from headers does not match the "
"version we're running with. If you get weird crashes, that "
"might be why. (Compiled with %lx: %s; running with %lx: %s).",
(unsigned long)OPENSSL_VERSION_NUMBER, OPENSSL_VERSION_TEXT,
SSLeay(), SSLeay_version(SSLEAY_VERSION));
}
if (useAccel > 0) { if (useAccel > 0) {
#ifdef DISABLE_ENGINES #ifdef DISABLE_ENGINES
(void)accelName; (void)accelName;