diff options
author | Sverker Eriksson <[email protected]> | 2014-09-09 16:51:27 +0200 |
---|---|---|
committer | Sverker Eriksson <[email protected]> | 2014-09-09 16:51:27 +0200 |
commit | e3507951c22e8207e43f997c530c9af36aa58323 (patch) | |
tree | 279da5a9eefd7d497533da034a4736cc3f470f47 | |
parent | e3590a3f87f02022eb6e608ae5c3fc93bcd025d0 (diff) | |
parent | ebd23a3de8418fd70a8d12dfc90bce0fa283f4e5 (diff) | |
download | otp-e3507951c22e8207e43f997c530c9af36aa58323.tar.gz otp-e3507951c22e8207e43f997c530c9af36aa58323.tar.bz2 otp-e3507951c22e8207e43f997c530c9af36aa58323.zip |
Merge branch 'maint'
-rw-r--r-- | lib/crypto/c_src/crypto.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/lib/crypto/c_src/crypto.c b/lib/crypto/c_src/crypto.c index 27b4e7abbd..a42de9adb1 100644 --- a/lib/crypto/c_src/crypto.c +++ b/lib/crypto/c_src/crypto.c @@ -498,9 +498,11 @@ static void hmac_context_dtor(ErlNifEnv* env, struct hmac_context*); /* #define PRINTF_ERR0(FMT) enif_fprintf(stderr, FMT "\n") #define PRINTF_ERR1(FMT, A1) enif_fprintf(stderr, FMT "\n", A1) +#define PRINTF_ERR2(FMT, A1, A2) enif_fprintf(stderr, FMT "\n", A1, A2) */ #define PRINTF_ERR0(FMT) #define PRINTF_ERR1(FMT,A1) +#define PRINTF_ERR2(FMT,A1,A2) #ifdef __OSE__ @@ -542,6 +544,23 @@ static int init_ose_crypto() { #define CHECK_OSE_CRYPTO() #endif + +static int verify_lib_version(void) +{ + const unsigned long libv = SSLeay(); + const unsigned long hdrv = OPENSSL_VERSION_NUMBER; + +# define MAJOR_VER(V) ((unsigned long)(V) >> (7*4)) + + if (MAJOR_VER(libv) != MAJOR_VER(hdrv)) { + PRINTF_ERR2("CRYPTO: INCOMPATIBLE SSL VERSION" + " lib=%lx header=%lx\n", libv, hdrv); + return 0; + } + return 1; +} + + #ifdef HAVE_DYNAMIC_CRYPTO_LIB # if defined(DEBUG) @@ -590,6 +609,9 @@ static int init(ErlNifEnv* env, ERL_NIF_TERM load_info) if (!INIT_OSE_CRYPTO()) return 0; + if (!verify_lib_version()) + return 0; + /* load_info: {301, <<"/full/path/of/this/library">>} */ if (!enif_get_tuple(env, load_info, &tpl_arity, &tpl_array) || tpl_arity != 2 |