From d79090a00a26f31f48d1facc2178950f6e090e4a Mon Sep 17 00:00:00 2001 From: Charlie Li Date: Wed, 24 Apr 2019 23:15:56 -0400 Subject: [PATCH] Reconcile exdata and version functions between libraries/versions. --- openssl-sys/build/cfgs.rs | 3 +++ openssl-sys/src/crypto.rs | 10 ++++++++-- openssl/build.rs | 4 ++++ openssl/src/ssl/mod.rs | 9 ++++++--- openssl/src/version.rs | 2 +- 5 files changed, 22 insertions(+), 6 deletions(-) diff --git a/openssl-sys/build/cfgs.rs b/openssl-sys/build/cfgs.rs index 6de8a078..c74c2bb0 100644 --- a/openssl-sys/build/cfgs.rs +++ b/openssl-sys/build/cfgs.rs @@ -13,6 +13,9 @@ pub fn get(openssl_version: Option, libressl_version: Option) -> Vec<& if libressl_version >= 0x2_07_00_00_0 { cfgs.push("libressl270"); } + if libressl_version >= 0x2_07_01_00_0 { + cfgs.push("libressl271"); + } if libressl_version >= 0x2_07_03_00_0 { cfgs.push("libressl273"); } diff --git a/openssl-sys/src/crypto.rs b/openssl-sys/src/crypto.rs index 48f4e062..24e495cd 100644 --- a/openssl-sys/src/crypto.rs +++ b/openssl-sys/src/crypto.rs @@ -15,7 +15,13 @@ cfg_if! { if #[cfg(ossl110)] { pub const CRYPTO_EX_INDEX_SSL: c_int = 0; pub const CRYPTO_EX_INDEX_SSL_CTX: c_int = 1; - + } else if #[cfg(libressl)] { + pub const CRYPTO_EX_INDEX_SSL: c_int = 1; + pub const CRYPTO_EX_INDEX_SSL_CTX: c_int = 2; + } +} +cfg_if! { + if #[cfg(any(ossl110, libressl271))] { extern "C" { pub fn OpenSSL_version_num() -> c_ulong; pub fn OpenSSL_version(key: c_int) -> *const c_char; @@ -64,7 +70,7 @@ pub type CRYPTO_EX_free = unsafe extern "C" fn( argp: *mut c_void, ); extern "C" { - #[cfg(ossl110)] + #[cfg(any(ossl110, libressl))] pub fn CRYPTO_get_ex_new_index( class_index: c_int, argl: c_long, diff --git a/openssl/build.rs b/openssl/build.rs index 3b3f09d6..c1a5ccff 100644 --- a/openssl/build.rs +++ b/openssl/build.rs @@ -46,6 +46,10 @@ fn main() { println!("cargo:rustc-cfg=libressl270"); } + if version >= 0x2_07_01_00_0 { + println!("cargo:rustc-cfg=libressl271"); + } + if version >= 0x2_07_03_00_0 { println!("cargo:rustc-cfg=libressl273"); } diff --git a/openssl/src/ssl/mod.rs b/openssl/src/ssl/mod.rs index 00b3179b..8f173637 100644 --- a/openssl/src/ssl/mod.rs +++ b/openssl/src/ssl/mod.rs @@ -3833,7 +3833,12 @@ cfg_if! { cfg_if! { if #[cfg(any(ossl110, libressl291))] { use ffi::{TLS_method, DTLS_method}; - + } else { + use ffi::{SSLv23_method as TLS_method, DTLSv1_method as DTLS_method}; + } +} +cfg_if! { + if #[cfg(ossl110)] { unsafe fn get_new_idx(f: ffi::CRYPTO_EX_free) -> c_int { ffi::CRYPTO_get_ex_new_index( ffi::CRYPTO_EX_INDEX_SSL_CTX, @@ -3856,8 +3861,6 @@ cfg_if! { ) } } else { - use ffi::{SSLv23_method as TLS_method, DTLSv1_method as DTLS_method}; - unsafe fn get_new_idx(f: ffi::CRYPTO_EX_free) -> c_int { ffi::SSL_CTX_get_ex_new_index(0, ptr::null_mut(), None, None, Some(f)) } diff --git a/openssl/src/version.rs b/openssl/src/version.rs index dc8508d1..0d2d5bb6 100644 --- a/openssl/src/version.rs +++ b/openssl/src/version.rs @@ -14,7 +14,7 @@ use std::ffi::CStr; cfg_if! { - if #[cfg(ossl110)] { + if #[cfg(any(ossl110, libressl271))] { use ffi::{ OPENSSL_VERSION, OPENSSL_CFLAGS, OPENSSL_BUILT_ON, OPENSSL_PLATFORM, OPENSSL_DIR, OpenSSL_version_num, OpenSSL_version,