net/qt4-network: fix openssl runtime linking
The PCBSD community discovered an issue with OpenSSL runtime linking, where the OS bundled OpenSSL libraries are being loaded despite the user having installed and selected a PORTS OpenSSL installation. The patch provided in [1] resolves this by hard-coding the OpenSSL path to the default PREFIX of /usr/local. References: [1] https://mail.kde.org/pipermail/kde-freebsd/2015-November/020535.html PR: 209317 Submitted by: Kris Moore <kris@pcbsd.org>
This commit is contained in:
parent
20a4270783
commit
9d24625be1
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=415856
@ -9,11 +9,13 @@ PKGNAMEPREFIX= qt4-
|
||||
MAINTAINER= kde@FreeBSD.org
|
||||
COMMENT= Qt network module
|
||||
|
||||
LICENSE= GPLv3 LGPL21 LGPL3 GFDL
|
||||
LICENSE_COMB= dual
|
||||
|
||||
RUN_DEPENDS= ${LOCALBASE}/share/certs/ca-root-nss.crt:security/ca_root_nss
|
||||
|
||||
USE_QT4= qmake_build moc_build rcc_build corelib
|
||||
QT_DIST= yes
|
||||
|
||||
HAS_CONFIGURE= yes
|
||||
USE_LDCONFIG= ${PREFIX}/${QT_LIBDIR_REL}
|
||||
USE_OPENSSL= yes
|
||||
@ -52,6 +54,7 @@ post-configure:
|
||||
-E -e 's|(.*location=).*uic|\1${PREFIX}/${QT_BINDIR_REL}/${UIC:T}|g' \
|
||||
${WRKSRC}/lib/pkgconfig/QtNetwork.pc
|
||||
${REINPLACE_CMD} -e 's|/usr/local|${LOCALBASE}|g' \
|
||||
${WRKSRC}/src/network/ssl/qsslsocket_openssl.cpp
|
||||
${WRKSRC}/src/network/ssl/qsslsocket_openssl.cpp \
|
||||
${WRKSRC}/src/network/ssl/qsslsocket_openssl_symbols.cpp
|
||||
|
||||
.include <bsd.port.mk>
|
||||
|
@ -0,0 +1,21 @@
|
||||
--- src/network/ssl/qsslsocket_openssl.cpp.orig 2015-05-07 14:14:44 UTC
|
||||
+++ src/network/ssl/qsslsocket_openssl.cpp
|
||||
@@ -267,15 +267,14 @@ init_context:
|
||||
#endif
|
||||
break;
|
||||
case QSsl::SslV3:
|
||||
- ctx = q_SSL_CTX_new(client ? q_SSLv3_client_method() : q_SSLv3_server_method());
|
||||
+ ctx = 0; // SSL 3 not supported by the system, but chosen deliberately -> error
|
||||
break;
|
||||
- case QSsl::SecureProtocols: // SslV2 will be disabled below
|
||||
- case QSsl::TlsV1SslV3: // SslV2 will be disabled below
|
||||
case QSsl::AnyProtocol:
|
||||
- default:
|
||||
ctx = q_SSL_CTX_new(client ? q_SSLv23_client_method() : q_SSLv23_server_method());
|
||||
break;
|
||||
case QSsl::TlsV1:
|
||||
+ case QSsl::SecureProtocols:
|
||||
+ default:
|
||||
ctx = q_SSL_CTX_new(client ? q_TLSv1_client_method() : q_TLSv1_server_method());
|
||||
break;
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
--- src/network/ssl/qsslsocket_openssl_symbols.cpp.orig 2015-05-07 14:14:44 UTC
|
||||
+++ src/network/ssl/qsslsocket_openssl_symbols.cpp
|
||||
@@ -511,9 +511,9 @@ static QPair<QLibrary*, QLibrary*> loadO
|
||||
libcrypto->setLoadHints(libcrypto->loadHints() | QLibrary::ImprovedSearchHeuristics);
|
||||
#elif defined(SHLIB_VERSION_NUMBER)
|
||||
// first attempt: the canonical name is libssl.so.<SHLIB_VERSION_NUMBER>
|
||||
- libssl->setFileNameAndVersion(QLatin1String("ssl"), QLatin1String(SHLIB_VERSION_NUMBER));
|
||||
+ libssl->setFileNameAndVersion(QLatin1String("/usr/local/lib/libssl"), QLatin1String(SHLIB_VERSION_NUMBER));
|
||||
libssl->setLoadHints(QLibrary::ImprovedSearchHeuristics);
|
||||
- libcrypto->setFileNameAndVersion(QLatin1String("crypto"), QLatin1String(SHLIB_VERSION_NUMBER));
|
||||
+ libcrypto->setFileNameAndVersion(QLatin1String("/usr/local/lib/libcrypto"), QLatin1String(SHLIB_VERSION_NUMBER));
|
||||
libcrypto->setLoadHints(libcrypto->loadHints() | QLibrary::ImprovedSearchHeuristics);
|
||||
if (libcrypto->load() && libssl->load()) {
|
||||
// libssl.so.<SHLIB_VERSION_NUMBER> and libcrypto.so.<SHLIB_VERSION_NUMBER> found
|
||||
@@ -525,8 +525,8 @@ static QPair<QLibrary*, QLibrary*> loadO
|
||||
#endif
|
||||
|
||||
// second attempt: find the development files libssl.so and libcrypto.so
|
||||
- libssl->setFileNameAndVersion(QLatin1String("ssl"), -1);
|
||||
- libcrypto->setFileNameAndVersion(QLatin1String("crypto"), -1);
|
||||
+ libssl->setFileNameAndVersion(QLatin1String("/usr/local/lib/libssl"), -1);
|
||||
+ libcrypto->setFileNameAndVersion(QLatin1String("/usr/local/lib/libcrypto"), -1);
|
||||
if (libcrypto->load() && libssl->load()) {
|
||||
// libssl.so.0 and libcrypto.so.0 found
|
||||
return pair;
|
Loading…
Reference in New Issue
Block a user