diff options
author | Timur Pocheptsov <timur.pocheptsov@qt.io> | 2021-02-19 15:52:36 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2021-02-22 13:00:56 +0000 |
commit | 9e5d7af6ef6ead63d653853ec5ece2d46d026a5a (patch) | |
tree | 0d80f339430f74e3ba47edd5894e26bc9fb7c9de /src/network/ssl | |
parent | f265736e9fdce7e9d049774f2e9f648f52aef31f (diff) |
A follow-up fix for potentially missing OpenSSL symbol resolving
This patch also adds 'isValid()' to know if a backend from a plugin
is in working condition (say, there is 'openssl' plugin but no or
old openssl libraries in some system).
Task-number: QTBUG-65922
Change-Id: I0b846536a069ca8c5a94e7191f11c81bac6ad527
Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io>
(cherry picked from commit 573ba145d76f239dbc7464a78aabc06ed4d00419)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'src/network/ssl')
-rw-r--r-- | src/network/ssl/qsslsocket.cpp | 5 | ||||
-rw-r--r-- | src/network/ssl/qtlsbackend.cpp | 11 | ||||
-rw-r--r-- | src/network/ssl/qtlsbackend_openssl.cpp | 11 | ||||
-rw-r--r-- | src/network/ssl/qtlsbackend_openssl_p.h | 1 | ||||
-rw-r--r-- | src/network/ssl/qtlsbackend_p.h | 2 |
5 files changed, 28 insertions, 2 deletions
diff --git a/src/network/ssl/qsslsocket.cpp b/src/network/ssl/qsslsocket.cpp index 83383db8ca..9a02f439ab 100644 --- a/src/network/ssl/qsslsocket.cpp +++ b/src/network/ssl/qsslsocket.cpp @@ -2844,6 +2844,11 @@ QTlsBackend *QSslSocketPrivate::tlsBackendInUse() if (!activeBackendName.size()) activeBackendName = QTlsBackend::defaultBackendName(); + if (!activeBackendName.size()) { + qCWarning(lcSsl, "No functional TLS backend was found"); + return nullptr; + } + return tlsBackend = QTlsBackend::findBackend(activeBackendName); } diff --git a/src/network/ssl/qtlsbackend.cpp b/src/network/ssl/qtlsbackend.cpp index ac6d965bd3..1df462e362 100644 --- a/src/network/ssl/qtlsbackend.cpp +++ b/src/network/ssl/qtlsbackend.cpp @@ -110,8 +110,10 @@ public: return names; names.reserve(backends.size()); - for (const auto *factory : backends) - names.append(factory->backendName()); + for (const auto *backend : backends) { + if (backend->isValid()) + names.append(backend->backendName()); + } return names; } @@ -198,6 +200,11 @@ QTlsBackend::~QTlsBackend() backends->removeBackend(this); } +bool QTlsBackend::isValid() const +{ + return true; +} + QString QTlsBackend::backendName() const { return QStringLiteral("dummyTLS"); diff --git a/src/network/ssl/qtlsbackend_openssl.cpp b/src/network/ssl/qtlsbackend_openssl.cpp index b0dd920aed..e288498820 100644 --- a/src/network/ssl/qtlsbackend_openssl.cpp +++ b/src/network/ssl/qtlsbackend_openssl.cpp @@ -41,6 +41,10 @@ #include "qtlskey_openssl_p.h" #include "qx509_openssl_p.h" +// TLSTODO: Later, this code (ensure initialised, etc.) +// must move from the socket to backend. +#include "qsslsocket_p.h" +// #include "qsslsocket_openssl_symbols_p.h" #include <qssl.h> @@ -83,6 +87,13 @@ QString QTlsBackendOpenSSL::backendName() const return builtinBackendNames[nameIndexOpenSSL]; } +bool QTlsBackendOpenSSL::isValid() const +{ + // TLSTODO: backend should do initialization, + // not socket. + return QSslSocket::supportsSsl(); +} + QList<QSsl::SslProtocol> QTlsBackendOpenSSL::supportedProtocols() const { QList<QSsl::SslProtocol> protocols; diff --git a/src/network/ssl/qtlsbackend_openssl_p.h b/src/network/ssl/qtlsbackend_openssl_p.h index 67472980af..478e4762c2 100644 --- a/src/network/ssl/qtlsbackend_openssl_p.h +++ b/src/network/ssl/qtlsbackend_openssl_p.h @@ -68,6 +68,7 @@ public: static void clearErrorQueue(); private: QString backendName() const override; + bool isValid() const override; QList<QSsl::SslProtocol> supportedProtocols() const override; QList<QSsl::SupportedFeature> supportedFeatures() const override; diff --git a/src/network/ssl/qtlsbackend_p.h b/src/network/ssl/qtlsbackend_p.h index e077521b32..c1d5137ca3 100644 --- a/src/network/ssl/qtlsbackend_p.h +++ b/src/network/ssl/qtlsbackend_p.h @@ -195,6 +195,8 @@ public: QTlsBackend(); ~QTlsBackend() override; + virtual bool isValid() const; + virtual QString backendName() const = 0; virtual QList<QSsl::SslProtocol> supportedProtocols() const = 0; virtual QList<QSsl::SupportedFeature> supportedFeatures() const = 0; |