In an upcoming libssl bump we're going to make SSL_CTX and SSL_CIPHER
opaque. This needs some adjustment in a number of ports that reach
inside these structs. The diff below adds two accessors
(SSL_CTX_get_cert_store() and SSL_CIPHER_get_bits()) from libssl to
QtNetwork. So this is a minor bump for QtNetwork and the two remaining
libraries linking against it.
The patch for qsslsocket_openssl.cpp uses these accessors and exploits
the fact that cipher->valid is always true in libssl.
I was unsure whether -debug and -examples need a REVISION bump, so I
bumped them to be on the safe side.
This builds on -current and will continue building after the libssl
bump, so I'd like to get this in now.
Index: Makefile
===================================================================
RCS file: /cvs/ports/x11/qt4/Makefile,v
retrieving revision 1.165
diff -u -p -r1.165 Makefile
--- Makefile 26 Jan 2021 18:29:01 -0000 1.165
+++ Makefile 2 May 2021 17:06:24 -0000
@@ -23,24 +23,24 @@ PKGNAME-main = qt4-${PKGVERSION}
PKGNAME-debug = qt4-debug-${PKGVERSION}
FULLPKGNAME-html = qt4-html-${PKGVERSION}
FULLPKGPATH-html = ${BASE_PKGPATH},-html
-REVISION-main = 24
+REVISION-main = 25
REVISION-mysql = 8
REVISION-postgresql = 7
REVISION-sqlite2 = 7
REVISION-tds = 7
-REVISION-debug = 5
-REVISION-examples = 10
+REVISION-debug = 6
+REVISION-examples = 11
REVISION-html = 4
# XXX qmake include parser is bogus
DPB_PROPERTIES = parallel nojunk
-SHARED_LIBS = Qt3Support 10.0 \
+SHARED_LIBS = Qt3Support 10.1 \
QtCore 10.0 \
QtDesigner 8.0 \
QtDesignerComponents 8.0 \
QtGui 11.0 \
- QtNetwork 12.0 \
+ QtNetwork 12.1 \
QtSql 9.0 \
QtXml 9.0 \
QtSvg 8.0 \
@@ -48,7 +48,7 @@ SHARED_LIBS = Qt3Support 10.0 \
QtDBus 4.0 \
QtScript 3.0 \
QtCLucene 2.0 \
- QtHelp 3.0 \
+ QtHelp 3.1 \
QtScriptTools 1.0
VERSION = 4.8.7
Index: patches/patch-src_network_ssl_qsslsocket_openssl_cpp
===================================================================
RCS file:
/cvs/ports/x11/qt4/patches/patch-src_network_ssl_qsslsocket_openssl_cpp,v
retrieving revision 1.4
diff -u -p -r1.4 patch-src_network_ssl_qsslsocket_openssl_cpp
--- patches/patch-src_network_ssl_qsslsocket_openssl_cpp 6 Jan 2016
17:17:32 -0000 1.4
+++ patches/patch-src_network_ssl_qsslsocket_openssl_cpp 2 May 2021
13:21:18 -0000
@@ -1,13 +1,28 @@
$OpenBSD: patch-src_network_ssl_qsslsocket_openssl_cpp,v 1.4 2016/01/06
17:17:32 zhuk Exp $
-1. Disable SSLv3 by default.
-2. TLSv1_*_method() are TLSv1.0-only, so default to SSLv23_*_method(), which
is
+
+1.,3.,4. Use accessors to access members of the SSL_CIPHER and SSL_CTX
structs.
+2. Disable SSLv3 by default.
+2a. TLSv1_*_method() are TLSv1.0-only, so default to SSLv23_*_method(), which
is
actually TLSv1.* nowadays.
-2a. Make QSsl::TlsV1 also use SSLv23_*_method(), noone in good mind would
+2b. Make QSsl::TlsV1 also use SSLv23_*_method(), noone in good mind would
want to run TLSv1.0-only connections, and too many developers fail
same way due to bad naming.
---- src/network/ssl/qsslsocket_openssl.cpp.orig Thu May 7 17:14:44 2015
-+++ src/network/ssl/qsslsocket_openssl.cpp Wed Jan 6 20:10:23 2016
-@@ -267,16 +267,18 @@ init_context:
+
+Index: src/network/ssl/qsslsocket_openssl.cpp
+--- src/network/ssl/qsslsocket_openssl.cpp.orig
++++ src/network/ssl/qsslsocket_openssl.cpp
+@@ -222,9 +222,7 @@ QSslCipher QSslSocketBackendPrivate::QSslCipher_from_S
+ ciph.d->encryptionMethod = descriptionList.at(4).mid(4);
+ ciph.d->exportable = (descriptionList.size() > 6 &&
descriptionList.at(6) == QLatin1String("export"));
+
+- ciph.d->bits = cipher->strength_bits;
+- ciph.d->supportedBits = cipher->alg_bits;
+-
++ ciph.d->bits = q_SSL_CIPHER_get_bits(cipher, &ciph.d->supportedBits);
+ }
+ return ciph;
+ }
+@@ -267,17 +265,19 @@ init_context:
#endif
break;
case QSsl::SslV3:
@@ -25,9 +40,36 @@ $OpenBSD: patch-src_network_ssl_qsslsock
+ case QSsl::TlsV1: // this is TLSv1.0 only case, but misused as TLSv1.x
too often
default:
ctx = q_SSL_CTX_new(client ? q_SSLv23_client_method() :
q_SSLv23_server_method());
-- break;
+ break;
- case QSsl::TlsV1:
- ctx = q_SSL_CTX_new(client ? q_TLSv1_client_method() :
q_TLSv1_server_method());
- break;
+- break;
}
if (!ctx) {
+ // After stopping Flash 10 the SSL library looses its ciphers. Try
re-adding them
+@@ -363,7 +363,7 @@ init_context:
+ //
+ // See also: QSslContext::fromConfiguration()
+ if (caCertificate.expiryDate() >= QDateTime::currentDateTime()) {
+- q_X509_STORE_add_cert(ctx->cert_store, (X509
*)caCertificate.handle());
++ q_X509_STORE_add_cert(q_SSL_CTX_get_cert_store(ctx), (X509
*)caCertificate.handle());
+ }
+ }
+
+@@ -659,12 +659,10 @@ void QSslSocketPrivate::resetDefaultCiphers()
+ STACK_OF(SSL_CIPHER) *supportedCiphers = q_SSL_get_ciphers(mySsl);
+ for (int i = 0; i < q_sk_SSL_CIPHER_num(supportedCiphers); ++i) {
+ if (SSL_CIPHER *cipher = q_sk_SSL_CIPHER_value(supportedCiphers, i)) {
+- if (cipher->valid) {
+- QSslCipher ciph =
QSslSocketBackendPrivate::QSslCipher_from_SSL_CIPHER(cipher);
+- if (!ciph.isNull()) {
+- if
(!ciph.name().toLower().startsWith(QLatin1String("adh")))
+- ciphers << ciph;
+- }
++ QSslCipher ciph =
QSslSocketBackendPrivate::QSslCipher_from_SSL_CIPHER(cipher);
++ if (!ciph.isNull()) {
++ if (!ciph.name().toLower().startsWith(QLatin1String("adh")))
++ ciphers << ciph;
+ }
+ }
+ }
Index: patches/patch-src_network_ssl_qsslsocket_openssl_symbols_cpp
===================================================================
RCS file:
/cvs/ports/x11/qt4/patches/patch-src_network_ssl_qsslsocket_openssl_symbols_cpp,v
retrieving revision 1.4
diff -u -p -r1.4 patch-src_network_ssl_qsslsocket_openssl_symbols_cpp
--- patches/patch-src_network_ssl_qsslsocket_openssl_symbols_cpp 27 Aug
2018 03:54:57 -0000 1.4
+++ patches/patch-src_network_ssl_qsslsocket_openssl_symbols_cpp 2 May
2021 13:21:18 -0000
@@ -2,7 +2,16 @@ $OpenBSD: patch-src_network_ssl_qsslsock
Index: src/network/ssl/qsslsocket_openssl_symbols.cpp
--- src/network/ssl/qsslsocket_openssl_symbols.cpp.orig
+++ src/network/ssl/qsslsocket_openssl_symbols.cpp
-@@ -228,13 +228,17 @@ DEFINEFUNC(int, SSL_shutdown, SSL *a, a, return -1, re
+@@ -193,6 +193,8 @@ DEFINEFUNC2(int, SSL_CTX_use_PrivateKey, SSL_CTX *a, a
+ DEFINEFUNC2(int, SSL_CTX_use_RSAPrivateKey, SSL_CTX *a, a, RSA *b, b, return
-1, return)
+ DEFINEFUNC3(int, SSL_CTX_use_PrivateKey_file, SSL_CTX *a, a, const char *b,
b, int c, c, return -1, return)
+ DEFINEFUNC(void, SSL_free, SSL *a, a, return, DUMMYARG)
++DEFINEFUNC(X509_STORE *, SSL_CTX_get_cert_store, const SSL_CTX *a, a, return
0, return)
++DEFINEFUNC2(int, SSL_CIPHER_get_bits, const SSL_CIPHER *c, c, int *alg_bits,
alg_bits, return 0, return)
+ #if OPENSSL_VERSION_NUMBER >= 0x00908000L
+ // 0.9.8 broke SC and BC by changing this function's signature.
+ DEFINEFUNC(STACK_OF(SSL_CIPHER) *, SSL_get_ciphers, const SSL *a, a, return
0, return)
+@@ -228,13 +230,17 @@ DEFINEFUNC(int, SSL_shutdown, SSL *a, a, return -1, re
#ifndef OPENSSL_NO_SSL2
DEFINEFUNC(const SSL_METHOD *, SSLv2_client_method, DUMMYARG, DUMMYARG,
return 0, return)
#endif
@@ -20,7 +29,7 @@ Index: src/network/ssl/qsslsocket_openss
DEFINEFUNC(const SSL_METHOD *, SSLv23_server_method, DUMMYARG, DUMMYARG,
return 0, return)
DEFINEFUNC(const SSL_METHOD *, TLSv1_server_method, DUMMYARG, DUMMYARG,
return 0, return)
#else
-@@ -257,6 +261,8 @@ DEFINEFUNC(void, X509_free, X509 *a, a, return, DUMMYA
+@@ -257,6 +263,8 @@ DEFINEFUNC(void, X509_free, X509 *a, a, return, DUMMYA
DEFINEFUNC2(X509_EXTENSION *, X509_get_ext, X509 *a, a, int b, b, return 0,
return)
DEFINEFUNC(int, X509_get_ext_count, X509 *a, a, return 0, return)
DEFINEFUNC4(void *, X509_get_ext_d2i, X509 *a, a, int b, b, int *c, c, int
*d, d, return 0, return)
@@ -29,7 +38,16 @@ Index: src/network/ssl/qsslsocket_openss
DEFINEFUNC(X509_NAME *, X509_get_issuer_name, X509 *a, a, return 0, return)
DEFINEFUNC(X509_NAME *, X509_get_subject_name, X509 *a, a, return 0, return)
DEFINEFUNC(int, X509_verify_cert, X509_STORE_CTX *a, a, return -1, return)
-@@ -822,13 +828,17 @@ bool q_resolveOpenSslSymbols()
+@@ -801,6 +809,8 @@ bool q_resolveOpenSslSymbols()
+ RESOLVEFUNC(SSL_clear)
+ RESOLVEFUNC(SSL_connect)
+ RESOLVEFUNC(SSL_free)
++ RESOLVEFUNC(SSL_CTX_get_cert_store)
++ RESOLVEFUNC(SSL_CIPHER_get_bits)
+ RESOLVEFUNC(SSL_get_ciphers)
+ RESOLVEFUNC(SSL_get_current_cipher)
+ RESOLVEFUNC(SSL_get_error)
+@@ -822,13 +832,17 @@ bool q_resolveOpenSslSymbols()
#ifndef OPENSSL_NO_SSL2
RESOLVEFUNC(SSLv2_client_method)
#endif
@@ -47,7 +65,7 @@ Index: src/network/ssl/qsslsocket_openss
RESOLVEFUNC(SSLv23_server_method)
RESOLVEFUNC(TLSv1_server_method)
RESOLVEFUNC(X509_NAME_entry_count)
-@@ -858,6 +868,8 @@ bool q_resolveOpenSslSymbols()
+@@ -858,6 +872,8 @@ bool q_resolveOpenSslSymbols()
RESOLVEFUNC(X509_get_ext_d2i)
RESOLVEFUNC(X509_get_issuer_name)
RESOLVEFUNC(X509_get_subject_name)
Index: patches/patch-src_network_ssl_qsslsocket_openssl_symbols_p_h
===================================================================
RCS file:
/cvs/ports/x11/qt4/patches/patch-src_network_ssl_qsslsocket_openssl_symbols_p_h,v
retrieving revision 1.2
diff -u -p -r1.2 patch-src_network_ssl_qsslsocket_openssl_symbols_p_h
--- patches/patch-src_network_ssl_qsslsocket_openssl_symbols_p_h 12 Nov
2019 09:55:51 -0000 1.2
+++ patches/patch-src_network_ssl_qsslsocket_openssl_symbols_p_h 2 May
2021 13:21:18 -0000
@@ -3,7 +3,16 @@ $OpenBSD: patch-src_network_ssl_qsslsock
Index: src/network/ssl/qsslsocket_openssl_symbols_p.h
--- src/network/ssl/qsslsocket_openssl_symbols_p.h.orig
+++ src/network/ssl/qsslsocket_openssl_symbols_p.h
-@@ -360,6 +360,8 @@ int q_X509_get_ext_count(X509 *a);
+@@ -294,6 +294,8 @@ int q_SSL_CTX_use_PrivateKey(SSL_CTX *a, EVP_PKEY *b);
+ int q_SSL_CTX_use_RSAPrivateKey(SSL_CTX *a, RSA *b);
+ int q_SSL_CTX_use_PrivateKey_file(SSL_CTX *a, const char *b, int c);
+ void q_SSL_free(SSL *a);
++X509_STORE *q_SSL_CTX_get_cert_store(const SSL_CTX *a);
++int q_SSL_CIPHER_get_bits(const SSL_CIPHER *c, int *alg_bits);
+ #if OPENSSL_VERSION_NUMBER >= 0x00908000L
+ // 0.9.8 broke SC and BC by changing this function's signature.
+ STACK_OF(SSL_CIPHER) *q_SSL_get_ciphers(const SSL *a);
+@@ -360,6 +362,8 @@ int q_X509_get_ext_count(X509 *a);
void *q_X509_get_ext_d2i(X509 *a, int b, int *c, int *d);
X509_NAME *q_X509_get_issuer_name(X509 *a);
X509_NAME *q_X509_get_subject_name(X509 *a);
@@ -12,7 +21,7 @@ Index: src/network/ssl/qsslsocket_openss
int q_X509_verify_cert(X509_STORE_CTX *ctx);
int q_X509_NAME_entry_count(X509_NAME *a);
X509_NAME_ENTRY *q_X509_NAME_get_entry(X509_NAME *a,int b);
-@@ -410,8 +412,8 @@ DSA *q_d2i_DSAPrivateKey(DSA **a, unsigned char **pp,
+@@ -410,8 +414,8 @@ DSA *q_d2i_DSAPrivateKey(DSA **a, unsigned char **pp,
#define q_sk_SSL_CIPHER_value(st, i) q_SKM_sk_value(SSL_CIPHER, (st), (i))
#define q_SSL_CTX_add_extra_chain_cert(ctx,x509) \
q_SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)x509)