summaryrefslogtreecommitdiffstats
path: root/src/network/ssl
diff options
context:
space:
mode:
authorTimur Pocheptsov <timur.pocheptsov@qt.io>2021-02-19 15:52:36 +0100
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-02-22 13:00:56 +0000
commit9e5d7af6ef6ead63d653853ec5ece2d46d026a5a (patch)
tree0d80f339430f74e3ba47edd5894e26bc9fb7c9de /src/network/ssl
parentf265736e9fdce7e9d049774f2e9f648f52aef31f (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.cpp5
-rw-r--r--src/network/ssl/qtlsbackend.cpp11
-rw-r--r--src/network/ssl/qtlsbackend_openssl.cpp11
-rw-r--r--src/network/ssl/qtlsbackend_openssl_p.h1
-rw-r--r--src/network/ssl/qtlsbackend_p.h2
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;