View | Details | Raw Unified | Return to bug 216781 | Differences between
and this patch

Collapse All | Expand All

(-)net/qt5-network/Makefile (-1 / +2 lines)
Lines 26-32 Link Here
26
26
27
post-patch:
27
post-patch:
28
	@${REINPLACE_CMD} -e 's|/usr/local|${LOCALBASE}|g' \
28
	@${REINPLACE_CMD} -e 's|/usr/local|${LOCALBASE}|g' \
29
		${BUILD_WRKSRC}/ssl/qsslsocket_openssl.cpp \
29
		${BUILD_WRKSRC}/ssl/qsslsocket_openssl.cpp
30
	@${REINPLACE_CMD} -e 's|%%OPENSSLLIB%%|${OPENSSLLIB}|g' \
30
		${BUILD_WRKSRC}/ssl/qsslsocket_openssl_symbols.cpp
31
		${BUILD_WRKSRC}/ssl/qsslsocket_openssl_symbols.cpp
31
32
32
post-build:
33
post-build:
(-)net/qt5-network/files/patch-src_network_ssl_qsslcontext__openssl.cpp (-24 / +32 lines)
Lines 1-29 Link Here
1
Obtained from: https://github.com/libressl-portable/openbsd/issues/33
1
--- src/network/ssl/qsslcontext_openssl.cpp.orig	2016-09-16 05:49:42 UTC
2
3
From 81494e67eccba04fc3fe554d76a9ca6fe7f2250e Mon Sep 17 00:00:00 2001
4
From: hasufell <hasufell@gentoo.org>
5
Date: Sat, 10 Oct 2015 01:15:01 +0200
6
Subject: [PATCH] Fix compilation with libressl
7
8
By additionally checking for defined(SSL_CTRL_SET_CURVES), which
9
is defined in openssl, but not in libressl.
10
--- src/network/ssl/qsslcontext_openssl.cpp.orig	2015-10-13 04:35:28 UTC
11
+++ src/network/ssl/qsslcontext_openssl.cpp
2
+++ src/network/ssl/qsslcontext_openssl.cpp
12
@@ -338,7 +338,7 @@ init_context:
3
@@ -343,15 +343,25 @@ init_context:
13
 
4
 #if OPENSSL_VERSION_NUMBER >= 0x10002000L && !defined(OPENSSL_NO_EC)
14
     const QVector<QSslEllipticCurve> qcurves = sslContext->sslConfiguration.ellipticCurves();
15
     if (!qcurves.isEmpty()) {
16
-#if OPENSSL_VERSION_NUMBER >= 0x10002000L && !defined(OPENSSL_NO_EC)
17
+#if OPENSSL_VERSION_NUMBER >= 0x10002000L && defined(SSL_CTRL_SET_CURVES) && !defined(OPENSSL_NO_EC)
18
         // Set the curves to be used
5
         // Set the curves to be used
19
         if (q_SSLeay() >= 0x10002000L) {
6
         if (q_SSLeay() >= 0x10002000L) {
20
             // SSL_CTX_ctrl wants a non-const pointer as last argument,
7
-            // SSL_CTX_ctrl wants a non-const pointer as last argument,
21
@@ -352,7 +352,7 @@ init_context:
8
-            // but let's avoid a copy into a temporary array
22
                 return sslContext;
9
-            if (!q_SSL_CTX_ctrl(sslContext->ctx,
10
-                                SSL_CTRL_SET_CURVES,
11
-                                qcurves.size(),
12
-                                const_cast<int *>(reinterpret_cast<const int *>(qcurves.data())))) {
13
-                sslContext->errorStr = msgErrorSettingEllipticCurves(QSslSocketBackendPrivate::getErrorsFromOpenSsl());
14
-                sslContext->errorCode = QSslError::UnspecifiedError;
15
-                return sslContext;
16
+            switch (q_SSL_CTX_set1_curves(sslContext->ctx,
17
+                                     const_cast<int *>(reinterpret_cast<const int *>(qcurves.data())),
18
+                                     qcurves.size())) {
19
+                case 1:
20
+                default:
21
+                    break;
22
+                case 0:
23
+                    sslContext->errorStr = msgErrorSettingEllipticCurves(QSslSocketBackendPrivate::getErrorsFromOpenSsl());
24
+                    sslContext->errorCode = QSslError::UnspecifiedError;
25
+                    return sslContext;
26
+                case -1:
27
+                    if (q_SSL_CTX_set1_groups(sslContext->ctx,
28
+                                            reinterpret_cast<const int *>(qcurves.data()),
29
+                                            qcurves.size()) < 1) {
30
+                        sslContext->errorStr = msgErrorSettingEllipticCurves(QSslSocketBackendPrivate::getErrorsFromOpenSsl());
31
+                        sslContext->errorCode = QSslError::UnspecifiedError;
32
+                        return sslContext;
33
+                    }
34
+                    break;
23
             }
35
             }
24
         } else
36
         } else
25
-#endif // OPENSSL_VERSION_NUMBER >= 0x10002000L && !defined(OPENSSL_NO_EC)
37
 #endif // OPENSSL_VERSION_NUMBER >= 0x10002000L && !defined(OPENSSL_NO_EC)
26
+#endif // OPENSSL_VERSION_NUMBER >= 0x10002000L && defined(SSL_CTRL_SET_CURVES) && !defined(OPENSSL_NO_EC)
27
         {
28
             // specific curves requested, but not possible to set -> error
29
             sslContext->errorStr = msgErrorSettingEllipticCurves(QSslSocket::tr("OpenSSL version too old, need at least v1.0.2"));
(-)net/qt5-network/files/patch-src_network_ssl_qsslsocket__openssl__symbols.cpp (-7 / +29 lines)
Lines 1-24 Link Here
1
--- src/network/ssl/qsslsocket_openssl_symbols.cpp.orig	2015-02-17 04:56:38 UTC
1
--- src/network/ssl/qsslsocket_openssl_symbols.cpp.orig	2016-09-16 05:49:42 UTC
2
+++ src/network/ssl/qsslsocket_openssl_symbols.cpp
2
+++ src/network/ssl/qsslsocket_openssl_symbols.cpp
3
@@ -611,8 +611,8 @@ static QPair<QLibrary*, QLibrary*> loadO
3
@@ -424,6 +424,8 @@ DEFINEFUNC(void, EC_KEY_free, EC_KEY *ec
4
 DEFINEFUNC2(size_t, EC_get_builtin_curves, EC_builtin_curve * r, r, size_t nitems, nitems, return 0, return)
5
 #if OPENSSL_VERSION_NUMBER >= 0x10002000L
6
 DEFINEFUNC(int, EC_curve_nist2nid, const char *name, name, return 0, return)
7
+DEFINEFUNC3(int, SSL_CTX_set1_curves, SSL_CTX *a, a, int *b, b, int c, c, return -1, return)
8
+DEFINEFUNC3(int, SSL_CTX_set1_groups, SSL_CTX *a, a, const int *b, b, size_t c, c, return -1, return)
9
 #endif // OPENSSL_VERSION_NUMBER >= 0x10002000L
10
 #endif // OPENSSL_NO_EC
11
 
12
@@ -652,8 +654,8 @@ static QPair<QLibrary*, QLibrary*> loadO
4
 #endif
13
 #endif
5
 #if defined(SHLIB_VERSION_NUMBER) && !defined(Q_OS_QNX) // on QNX, the libs are always libssl.so and libcrypto.so
14
 #if defined(SHLIB_VERSION_NUMBER) && !defined(Q_OS_QNX) // on QNX, the libs are always libssl.so and libcrypto.so
6
     // first attempt: the canonical name is libssl.so.<SHLIB_VERSION_NUMBER>
15
     // first attempt: the canonical name is libssl.so.<SHLIB_VERSION_NUMBER>
7
-    libssl->setFileNameAndVersion(QLatin1String("ssl"), QLatin1String(SHLIB_VERSION_NUMBER));
16
-    libssl->setFileNameAndVersion(QLatin1String("ssl"), QLatin1String(SHLIB_VERSION_NUMBER));
8
-    libcrypto->setFileNameAndVersion(QLatin1String("crypto"), QLatin1String(SHLIB_VERSION_NUMBER));
17
-    libcrypto->setFileNameAndVersion(QLatin1String("crypto"), QLatin1String(SHLIB_VERSION_NUMBER));
9
+    libssl->setFileNameAndVersion(QLatin1String("/usr/local/libssl"), QLatin1String(SHLIB_VERSION_NUMBER));
18
+    libssl->setFileNameAndVersion(QLatin1String("%%OPENSSLLIB%%/libssl"), QLatin1String(SHLIB_VERSION_NUMBER));
10
+    libcrypto->setFileNameAndVersion(QLatin1String("/usr/local/libcrypto"), QLatin1String(SHLIB_VERSION_NUMBER));
19
+    libcrypto->setFileNameAndVersion(QLatin1String("%%OPENSSLLIB%%/libcrypto"), QLatin1String(SHLIB_VERSION_NUMBER));
11
     if (libcrypto->load() && libssl->load()) {
20
     if (libcrypto->load() && libssl->load()) {
12
         // libssl.so.<SHLIB_VERSION_NUMBER> and libcrypto.so.<SHLIB_VERSION_NUMBER> found
21
         // libssl.so.<SHLIB_VERSION_NUMBER> and libcrypto.so.<SHLIB_VERSION_NUMBER> found
13
         return pair;
22
         return pair;
14
@@ -629,8 +629,8 @@ static QPair<QLibrary*, QLibrary*> loadO
23
@@ -670,8 +672,8 @@ static QPair<QLibrary*, QLibrary*> loadO
15
     //  OS X's /usr/lib/libssl.dylib, /usr/lib/libcrypto.dylib will be picked up in the third
24
     //  OS X's /usr/lib/libssl.dylib, /usr/lib/libcrypto.dylib will be picked up in the third
16
     //    attempt, _after_ <bundle>/Contents/Frameworks has been searched.
25
     //    attempt, _after_ <bundle>/Contents/Frameworks has been searched.
17
     //  iOS does not ship a system libssl.dylib, libcrypto.dylib in the first place.
26
     //  iOS does not ship a system libssl.dylib, libcrypto.dylib in the first place.
18
-    libssl->setFileNameAndVersion(QLatin1String("ssl"), -1);
27
-    libssl->setFileNameAndVersion(QLatin1String("ssl"), -1);
19
-    libcrypto->setFileNameAndVersion(QLatin1String("crypto"), -1);
28
-    libcrypto->setFileNameAndVersion(QLatin1String("crypto"), -1);
20
+    libssl->setFileNameAndVersion(QLatin1String("/usr/local/lib/libssl"), -1);
29
+    libssl->setFileNameAndVersion(QLatin1String("%%OPENSSLLIB%%/libssl"), -1);
21
+    libcrypto->setFileNameAndVersion(QLatin1String("/usr/local/lib/libcrypto"), -1);
30
+    libcrypto->setFileNameAndVersion(QLatin1String("%%OPENSSLLIB%%/libcrypto"), -1);
22
     if (libcrypto->load() && libssl->load()) {
31
     if (libcrypto->load() && libssl->load()) {
23
         // libssl.so.0 and libcrypto.so.0 found
32
         // libssl.so.0 and libcrypto.so.0 found
24
         return pair;
33
         return pair;
34
@@ -976,8 +978,11 @@ bool q_resolveOpenSslSymbols()
35
     RESOLVEFUNC(EC_KEY_free)
36
     RESOLVEFUNC(EC_get_builtin_curves)
37
 #if OPENSSL_VERSION_NUMBER >= 0x10002000L
38
-    if (q_SSLeay() >= 0x10002000L)
39
+    if (q_SSLeay() >= 0x10002000L) {
40
         RESOLVEFUNC(EC_curve_nist2nid)
41
+        RESOLVEFUNC(SSL_CTX_set1_curves)
42
+        RESOLVEFUNC(SSL_CTX_set1_groups)
43
+	}
44
 #endif // OPENSSL_VERSION_NUMBER >= 0x10002000L
45
 #endif // OPENSSL_NO_EC
46
     RESOLVEFUNC(PKCS12_parse)
(-)net/qt5-network/files/patch-src_network_ssl_qsslsocket__openssl__symbols__p.h (+11 lines)
Line 0 Link Here
1
--- src/network/ssl/qsslsocket_openssl_symbols_p.h.orig	2016-09-16 05:49:42 UTC
2
+++ src/network/ssl/qsslsocket_openssl_symbols_p.h
3
@@ -481,6 +481,8 @@ void q_EC_KEY_free(EC_KEY *ecdh);
4
 size_t q_EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems);
5
 #if OPENSSL_VERSION_NUMBER >= 0x10002000L
6
 int q_EC_curve_nist2nid(const char *name);
7
+int q_SSL_CTX_set1_curves(SSL_CTX *a, int *b, int c);
8
+int q_SSL_CTX_set1_groups(SSL_CTX *a, const int *b, size_t c);
9
 #endif // OPENSSL_VERSION_NUMBER >= 0x10002000L
10
 #endif // OPENSSL_NO_EC
11
 

Return to bug 216781