summaryrefslogtreecommitdiffstats
path: root/source/kde/kde/patch/kdepim-runtime/fb456a2ad77b8d2bd4b0013832591c1dda8bb09a.patch
blob: 9aa39dbfe5cff1c76f06c38dd2c3044a5859d778 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
From fb456a2ad77b8d2bd4b0013832591c1dda8bb09a Mon Sep 17 00:00:00 2001
From: Albert Astals Cid <aacid@kde.org>
Date: Fri, 10 Dec 2021 21:55:13 +0100
Subject: [PATCH] POP3: Fix SSL/TLS connections

We need to go into ssl before trying to read from the socket, otherwise
nothing works

BUGS: 446751
---
 resources/pop3/pop3protocol.cpp | 61 +++++++++++++++++----------------
 1 file changed, 31 insertions(+), 30 deletions(-)

diff --git a/resources/pop3/pop3protocol.cpp b/resources/pop3/pop3protocol.cpp
index c2d01d33a..02fa49770 100644
--- a/resources/pop3/pop3protocol.cpp
+++ b/resources/pop3/pop3protocol.cpp
@@ -560,6 +560,37 @@ Result POP3Protocol::openConnection()
             return Result::fail(mSocket->error(), errorString);
         }
 
+        if (mSettings.useSSL() || mSettings.useTLS()) {
+            mSocket->ignoreSslErrors(); // Don't worry, errors are handled manually below
+            mSocket->startClientEncryption();
+            const bool encryptionStarted = mSocket->waitForEncrypted(s_connectTimeout);
+
+            const QSslCipher cipher = mSocket->sessionCipher();
+            const QList<QSslError> errors = mSocket->sslHandshakeErrors();
+            if (!encryptionStarted || !errors.isEmpty() || !mSocket->isEncrypted() || cipher.isNull() || cipher.usedBits() == 0) {
+                QString errorString = std::accumulate(errors.begin(), errors.end(), QString(), [](QString cur, const QSslError &error) {
+                    if (!cur.isEmpty())
+                        cur += QLatin1Char('\n');
+                    cur += error.errorString();
+                    return cur;
+                });
+
+                qCDebug(POP3_LOG) << "Initial SSL handshake failed. cipher.isNull() is" << cipher.isNull() << ", cipher.usedBits() is" << cipher.usedBits()
+                                  << ", the socket says:" << mSocket->errorString() << "and the SSL errors are:" << errorString;
+                mContinueAfterSslError = false;
+                Q_EMIT sslError(KSslErrorUiData(mSocket));
+                if (!mContinueAfterSslError) {
+                    if (errorString.isEmpty())
+                        errorString = mSocket->errorString();
+                    qCDebug(POP3_LOG) << "TLS setup has failed. Aborting." << errorString;
+                    closeConnection();
+                    return Result::fail(ERR_SSL_FAILURE, i18n("SSL/TLS error: %1", errorString));
+                }
+            } else {
+                qCDebug(POP3_LOG) << "TLS has been enabled.";
+            }
+        }
+
         mConnected = true;
 
         greeting_buf = new char[GREETING_BUF_LEN];
@@ -609,36 +640,6 @@ Result POP3Protocol::openConnection()
                                          "disable TLS in the POP account settings dialog."));
             }
         }
-        if (mSettings.useSSL() || mSettings.useTLS()) {
-            mSocket->ignoreSslErrors(); // Don't worry, errors are handled manually below
-            mSocket->startClientEncryption();
-            const bool encryptionStarted = mSocket->waitForEncrypted(s_connectTimeout);
-
-            const QSslCipher cipher = mSocket->sessionCipher();
-            const QList<QSslError> errors = mSocket->sslHandshakeErrors();
-            if (!encryptionStarted || !errors.isEmpty() || !mSocket->isEncrypted() || cipher.isNull() || cipher.usedBits() == 0) {
-                QString errorString = std::accumulate(errors.begin(), errors.end(), QString(), [](QString cur, const QSslError &error) {
-                    if (!cur.isEmpty())
-                        cur += QLatin1Char('\n');
-                    cur += error.errorString();
-                    return cur;
-                });
-
-                qCDebug(POP3_LOG) << "Initial SSL handshake failed. cipher.isNull() is" << cipher.isNull() << ", cipher.usedBits() is" << cipher.usedBits()
-                                  << ", the socket says:" << mSocket->errorString() << "and the SSL errors are:" << errorString;
-                mContinueAfterSslError = false;
-                Q_EMIT sslError(KSslErrorUiData(mSocket));
-                if (!mContinueAfterSslError) {
-                    if (errorString.isEmpty())
-                        errorString = mSocket->errorString();
-                    qCDebug(POP3_LOG) << "TLS setup has failed. Aborting." << errorString;
-                    closeConnection();
-                    return Result::fail(ERR_SSL_FAILURE, i18n("SSL/TLS error: %1", errorString));
-                }
-            } else {
-                qCDebug(POP3_LOG) << "TLS has been enabled.";
-            }
-        }
 
         if (supports_apop && m_try_apop) {
             qCDebug(POP3_LOG) << "Trying APOP";
-- 
GitLab