Created
May 10, 2019 04:24
-
-
Save neheb/997e33ae81107f7ebccc3b032189d02c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/folly/io/async/ssl/OpenSSLUtils.cpp b/folly/io/async/ssl/OpenSSLUtils.cpp | |
index 0504cf8..a9c2775 100644 | |
--- a/folly/io/async/ssl/OpenSSLUtils.cpp | |
+++ b/folly/io/async/ssl/OpenSSLUtils.cpp | |
@@ -155,8 +155,12 @@ static std::unordered_map<uint16_t, std::string> getOpenSSLCipherNames() { | |
SSL_CTX* ctx = nullptr; | |
SSL* ssl = nullptr; | |
+#if OPENSSL_VERSION_NUMBER < 0x10100000L | |
const SSL_METHOD* meth = SSLv23_server_method(); | |
OpenSSL_add_ssl_algorithms(); | |
+#else | |
+ const SSL_METHOD* meth = TLS_server_method(); | |
+#endif | |
if ((ctx = SSL_CTX_new(meth)) == nullptr) { | |
return ret; | |
diff --git a/folly/portability/OpenSSL.h b/folly/portability/OpenSSL.h | |
index a4f4b04..427bf95 100644 | |
--- a/folly/portability/OpenSSL.h | |
+++ b/folly/portability/OpenSSL.h | |
@@ -27,6 +27,7 @@ | |
#include <openssl/asn1.h> | |
#include <openssl/bio.h> | |
+#include <openssl/bn.h> | |
#include <openssl/crypto.h> | |
#include <openssl/dh.h> | |
#include <openssl/err.h> | |
diff --git a/folly/ssl/OpenSSLCertUtils.cpp b/folly/ssl/OpenSSLCertUtils.cpp | |
index 544bb4f..423dd2c 100644 | |
--- a/folly/ssl/OpenSSLCertUtils.cpp | |
+++ b/folly/ssl/OpenSSLCertUtils.cpp | |
@@ -155,12 +155,17 @@ folly::Optional<std::string> OpenSSLCertUtils::toString(X509& x509) { | |
} | |
} | |
+#if OPENSSL_VERSION_NUMBER < 0x10100000L | |
+#define X509_get0_notAfter X509_get_notAfter | |
+#define X509_get0_notBefore X509_get_notBefore | |
+#endif | |
+ | |
std::string OpenSSLCertUtils::getNotAfterTime(X509& x509) { | |
- return getDateTimeStr(X509_get_notAfter(&x509)); | |
+ return getDateTimeStr(X509_get0_notAfter(&x509)); | |
} | |
std::string OpenSSLCertUtils::getNotBeforeTime(X509& x509) { | |
- return getDateTimeStr(X509_get_notBefore(&x509)); | |
+ return getDateTimeStr(X509_get0_notBefore(&x509)); | |
} | |
std::string OpenSSLCertUtils::getDateTimeStr(const ASN1_TIME* time) { | |
diff --git a/folly/ssl/OpenSSLVersionFinder.h b/folly/ssl/OpenSSLVersionFinder.h | |
index d0110d7..9d65580 100644 | |
--- a/folly/ssl/OpenSSLVersionFinder.h | |
+++ b/folly/ssl/OpenSSLVersionFinder.h | |
@@ -18,6 +18,12 @@ | |
#include <folly/Conv.h> | |
#include <folly/portability/OpenSSL.h> | |
+#if OPENSSL_VERSION_NUMBER < 0x10100000L | |
+#define OPENSSL_VERSION SSLEAY_VERSION | |
+#define OpenSSL_version SSLeay_version | |
+#define OpenSSL_version_num SSLeay | |
+#endif | |
+ | |
// This is used to find the OpenSSL version at runtime. Just returning | |
// OPENSSL_VERSION_NUMBER is insufficient as runtime version may be different | |
// from the compile-time version | |
@@ -25,7 +31,7 @@ namespace folly { | |
namespace ssl { | |
inline std::string getOpenSSLLongVersion() { | |
#ifdef OPENSSL_VERSION_TEXT | |
- return SSLeay_version(SSLEAY_VERSION); | |
+ return OpenSSL_version(OPENSSL_VERSION); | |
#elif defined(OPENSSL_VERSION_NUMBER) | |
return folly::format("0x{:x}", OPENSSL_VERSION_NUMBER).str(); | |
#else | |
@@ -35,7 +41,7 @@ inline std::string getOpenSSLLongVersion() { | |
inline uint64_t getOpenSSLNumericVersion() { | |
#ifdef OPENSSL_VERSION_NUMBER | |
- return SSLeay(); | |
+ return OpenSSL_version_num(); | |
#else | |
return 0; | |
#endif | |
diff --git a/folly/ssl/detail/OpenSSLThreading.cpp b/folly/ssl/detail/OpenSSLThreading.cpp | |
index 3414fbd..ce345ab 100644 | |
--- a/folly/ssl/detail/OpenSSLThreading.cpp | |
+++ b/folly/ssl/detail/OpenSSLThreading.cpp | |
@@ -115,6 +115,7 @@ struct SSLLock { | |
// SSLContext runs in such environments. | |
// Instead of declaring a static member we "new" the static | |
// member so that it won't be destructed on exit(). | |
+#if !FOLLY_SSL_DETAIL_OPENSSL_IS_110 | |
static std::unique_ptr<SSLLock[]>& locks() { | |
static auto locksInst = new std::unique_ptr<SSLLock[]>(); | |
return *locksInst; | |
@@ -128,8 +129,8 @@ static void callbackLocking(int mode, int n, const char*, int) { | |
} | |
} | |
-static unsigned long callbackThreadID() { | |
- return static_cast<unsigned long>(folly::getCurrentThreadID()); | |
+static void callbackThreadID(CRYPTO_THREADID *id) { | |
+ return CRYPTO_THREADID_set_numeric(id, folly::getCurrentThreadID()); | |
} | |
static CRYPTO_dynlock_value* dyn_create(const char*, int) { | |
@@ -150,28 +151,33 @@ dyn_lock(int mode, struct CRYPTO_dynlock_value* lock, const char*, int) { | |
static void dyn_destroy(struct CRYPTO_dynlock_value* lock, const char*, int) { | |
delete lock; | |
} | |
+#endif | |
void installThreadingLocks() { | |
+#if !FOLLY_SSL_DETAIL_OPENSSL_IS_110 | |
// static locking | |
locks() = std::make_unique<SSLLock[]>(size_t(CRYPTO_num_locks())); | |
for (auto it : lockTypes()) { | |
locks()[size_t(it.first)].lockType = it.second; | |
} | |
- CRYPTO_set_id_callback(callbackThreadID); | |
+ CRYPTO_THREADID_set_callback(callbackThreadID); | |
CRYPTO_set_locking_callback(callbackLocking); | |
// dynamic locking | |
CRYPTO_set_dynlock_create_callback(dyn_create); | |
CRYPTO_set_dynlock_lock_callback(dyn_lock); | |
CRYPTO_set_dynlock_destroy_callback(dyn_destroy); | |
+#endif | |
} | |
void cleanupThreadingLocks() { | |
- CRYPTO_set_id_callback(nullptr); | |
+#if !FOLLY_SSL_DETAIL_OPENSSL_IS_110 | |
+ CRYPTO_THREADID_set_callback(nullptr); | |
CRYPTO_set_locking_callback(nullptr); | |
CRYPTO_set_dynlock_create_callback(nullptr); | |
CRYPTO_set_dynlock_lock_callback(nullptr); | |
CRYPTO_set_dynlock_destroy_callback(nullptr); | |
locks().reset(); | |
+#endif | |
} | |
} // namespace detail |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment