Line 0
Link Here
|
|
|
1 |
Redefine SSL stack functions to their proper symbols in LibreSSL. |
2 |
Also reference a redefined DSA_bits() that does not natively exist |
3 |
in LibreSSL. |
4 |
|
5 |
Ensure that we link to the correct ssl library selected in |
6 |
DEFAULT_VERSIONS. |
7 |
|
8 |
Do not define SSL_CONF_CTX symbols absent from LibreSSL. |
9 |
|
10 |
--- src/network/ssl/qsslsocket_openssl_symbols.cpp.orig 2018-12-03 11:15:26 UTC |
11 |
+++ src/network/ssl/qsslsocket_openssl_symbols.cpp |
12 |
@@ -152,6 +152,14 @@ DEFINEFUNC2(int, BN_is_word, BIGNUM *a, a, BN_ULONG w, |
13 |
DEFINEFUNC(int, EVP_CIPHER_CTX_reset, EVP_CIPHER_CTX *c, c, return 0, return) |
14 |
DEFINEFUNC(int, EVP_PKEY_base_id, EVP_PKEY *a, a, return NID_undef, return) |
15 |
DEFINEFUNC(int, RSA_bits, RSA *a, a, return 0, return) |
16 |
+#ifdef LIBRESSL_VERSION_NUMBER |
17 |
+DEFINEFUNC(int, sk_num, OPENSSL_STACK *a, a, return -1, return) |
18 |
+DEFINEFUNC2(void, sk_pop_free, OPENSSL_STACK *a, a, void (*b)(void*), b, return, DUMMYARG) |
19 |
+DEFINEFUNC(OPENSSL_STACK *, sk_new_null, DUMMYARG, DUMMYARG, return nullptr, return) |
20 |
+DEFINEFUNC2(void, sk_push, OPENSSL_STACK *a, a, void *b, b, return, DUMMYARG) |
21 |
+DEFINEFUNC(void, sk_free, OPENSSL_STACK *a, a, return, DUMMYARG) |
22 |
+DEFINEFUNC2(void *, sk_value, OPENSSL_STACK *a, a, int b, b, return nullptr, return) |
23 |
+#else |
24 |
DEFINEFUNC(int, DSA_bits, DSA *a, a, return 0, return) |
25 |
DEFINEFUNC(int, OPENSSL_sk_num, OPENSSL_STACK *a, a, return -1, return) |
26 |
DEFINEFUNC2(void, OPENSSL_sk_pop_free, OPENSSL_STACK *a, a, void (*b)(void*), b, return, DUMMYARG) |
27 |
@@ -159,6 +167,7 @@ DEFINEFUNC(OPENSSL_STACK *, OPENSSL_sk_new_null, DUMMY |
28 |
DEFINEFUNC2(void, OPENSSL_sk_push, OPENSSL_STACK *a, a, void *b, b, return, DUMMYARG) |
29 |
DEFINEFUNC(void, OPENSSL_sk_free, OPENSSL_STACK *a, a, return, DUMMYARG) |
30 |
DEFINEFUNC2(void *, OPENSSL_sk_value, OPENSSL_STACK *a, a, int b, b, return nullptr, return) |
31 |
+#endif |
32 |
DEFINEFUNC(int, SSL_session_reused, SSL *a, a, return 0, return) |
33 |
DEFINEFUNC2(unsigned long, SSL_CTX_set_options, SSL_CTX *ctx, ctx, unsigned long op, op, return 0, return) |
34 |
#ifdef TLS1_3_VERSION |
35 |
@@ -443,7 +452,7 @@ DEFINEFUNC2(int, SSL_CTX_use_PrivateKey, SSL_CTX *a, a |
36 |
DEFINEFUNC2(int, SSL_CTX_use_RSAPrivateKey, SSL_CTX *a, a, RSA *b, b, return -1, return) |
37 |
DEFINEFUNC3(int, SSL_CTX_use_PrivateKey_file, SSL_CTX *a, a, const char *b, b, int c, c, return -1, return) |
38 |
DEFINEFUNC(X509_STORE *, SSL_CTX_get_cert_store, const SSL_CTX *a, a, return nullptr, return) |
39 |
-#if OPENSSL_VERSION_NUMBER >= 0x10002000L |
40 |
+#if OPENSSL_VERSION_NUMBER >= 0x10002000L && !defined(LIBRESSL_VERSION_NUMBER) |
41 |
DEFINEFUNC(SSL_CONF_CTX *, SSL_CONF_CTX_new, DUMMYARG, DUMMYARG, return nullptr, return); |
42 |
DEFINEFUNC(void, SSL_CONF_CTX_free, SSL_CONF_CTX *a, a, return ,return); |
43 |
DEFINEFUNC2(void, SSL_CONF_CTX_set_ssl_ctx, SSL_CONF_CTX *a, a, SSL_CTX *b, b, return, return); |
44 |
@@ -846,8 +855,8 @@ static QPair<QLibrary*, QLibrary*> loadOpenSsl() |
45 |
#endif |
46 |
#if defined(SHLIB_VERSION_NUMBER) && !defined(Q_OS_QNX) // on QNX, the libs are always libssl.so and libcrypto.so |
47 |
// first attempt: the canonical name is libssl.so.<SHLIB_VERSION_NUMBER> |
48 |
- libssl->setFileNameAndVersion(QLatin1String("ssl"), QLatin1String(SHLIB_VERSION_NUMBER)); |
49 |
- libcrypto->setFileNameAndVersion(QLatin1String("crypto"), QLatin1String(SHLIB_VERSION_NUMBER)); |
50 |
+ libssl->setFileNameAndVersion(QLatin1String("%%OPENSSLLIB%%/libssl"), QLatin1String(SHLIB_VERSION_NUMBER)); |
51 |
+ libcrypto->setFileNameAndVersion(QLatin1String("%%OPENSSLLIB%%/libcrypto"), QLatin1String(SHLIB_VERSION_NUMBER)); |
52 |
if (libcrypto->load() && libssl->load()) { |
53 |
// libssl.so.<SHLIB_VERSION_NUMBER> and libcrypto.so.<SHLIB_VERSION_NUMBER> found |
54 |
return pair; |
55 |
@@ -876,8 +885,8 @@ static QPair<QLibrary*, QLibrary*> loadOpenSsl() |
56 |
// macOS's /usr/lib/libssl.dylib, /usr/lib/libcrypto.dylib will be picked up in the third |
57 |
// attempt, _after_ <bundle>/Contents/Frameworks has been searched. |
58 |
// iOS does not ship a system libssl.dylib, libcrypto.dylib in the first place. |
59 |
- libssl->setFileNameAndVersion(QLatin1String("ssl"), -1); |
60 |
- libcrypto->setFileNameAndVersion(QLatin1String("crypto"), -1); |
61 |
+ libssl->setFileNameAndVersion(QLatin1String("%%OPENSSLLIB%%/libssl"), -1); |
62 |
+ libcrypto->setFileNameAndVersion(QLatin1String("%%OPENSSLLIB%%/libcrypto"), -1); |
63 |
if (libcrypto->load() && libssl->load()) { |
64 |
// libssl.so.0 and libcrypto.so.0 found |
65 |
return pair; |
66 |
@@ -961,12 +970,21 @@ bool q_resolveOpenSslSymbols() |
67 |
RESOLVEFUNC(EVP_CIPHER_CTX_reset) |
68 |
RESOLVEFUNC(EVP_PKEY_base_id) |
69 |
RESOLVEFUNC(RSA_bits) |
70 |
+#ifdef LIBRESSL_VERSION_NUMBER |
71 |
+ RESOLVEFUNC(sk_new_null) |
72 |
+ RESOLVEFUNC(sk_push) |
73 |
+ RESOLVEFUNC(sk_free) |
74 |
+ RESOLVEFUNC(sk_num) |
75 |
+ RESOLVEFUNC(sk_pop_free) |
76 |
+ RESOLVEFUNC(sk_value) |
77 |
+#else |
78 |
RESOLVEFUNC(OPENSSL_sk_new_null) |
79 |
RESOLVEFUNC(OPENSSL_sk_push) |
80 |
RESOLVEFUNC(OPENSSL_sk_free) |
81 |
RESOLVEFUNC(OPENSSL_sk_num) |
82 |
RESOLVEFUNC(OPENSSL_sk_pop_free) |
83 |
RESOLVEFUNC(OPENSSL_sk_value) |
84 |
+#endif |
85 |
RESOLVEFUNC(DH_get0_pqg) |
86 |
RESOLVEFUNC(SSL_CTX_set_options) |
87 |
#ifdef TLS1_3_VERSION |
88 |
@@ -1001,7 +1019,9 @@ bool q_resolveOpenSslSymbols() |
89 |
|
90 |
RESOLVEFUNC(SSL_SESSION_get_ticket_lifetime_hint) |
91 |
RESOLVEFUNC(DH_bits) |
92 |
+#ifndef LIBRESSL_VERSION_NUMBER |
93 |
RESOLVEFUNC(DSA_bits) |
94 |
+#endif |
95 |
|
96 |
#if QT_CONFIG(dtls) |
97 |
RESOLVEFUNC(DTLSv1_listen) |
98 |
@@ -1237,7 +1257,7 @@ bool q_resolveOpenSslSymbols() |
99 |
RESOLVEFUNC(SSL_CTX_use_RSAPrivateKey) |
100 |
RESOLVEFUNC(SSL_CTX_use_PrivateKey_file) |
101 |
RESOLVEFUNC(SSL_CTX_get_cert_store); |
102 |
-#if OPENSSL_VERSION_NUMBER >= 0x10002000L |
103 |
+#if OPENSSL_VERSION_NUMBER >= 0x10002000L && !defined(LIBRESSL_VERSION_NUMBER) |
104 |
RESOLVEFUNC(SSL_CONF_CTX_new); |
105 |
RESOLVEFUNC(SSL_CONF_CTX_free); |
106 |
RESOLVEFUNC(SSL_CONF_CTX_set_ssl_ctx); |