diff options
author | Andreas Sturmlechner <asturm@gentoo.org> | 2017-12-22 14:41:08 +0100 |
---|---|---|
committer | Andreas Sturmlechner <asturm@gentoo.org> | 2017-12-22 14:49:10 +0100 |
commit | 4d8f371deba438789b34ca5c0ca8b5f5afa52fe2 (patch) | |
tree | a5d229c7e493097bca97ceccaeb1587b4dcac6b2 /kde-apps | |
parent | profiles: mask sys-kernel/gentoo-sources-4.13.{15,16} (diff) | |
download | gentoo-4d8f371deba438789b34ca5c0ca8b5f5afa52fe2.tar.gz gentoo-4d8f371deba438789b34ca5c0ca8b5f5afa52fe2.tar.bz2 gentoo-4d8f371deba438789b34ca5c0ca8b5f5afa52fe2.zip |
kde-apps/ksmtp: Fix EHLO double auth
See also: https://phabricator.kde.org/D9476
KDE-Bug: https://bugs.kde.org/show_bug.cgi?id=388068
Package-Manager: Portage-2.3.13, Repoman-2.3.4
Diffstat (limited to 'kde-apps')
-rw-r--r-- | kde-apps/ksmtp/files/ksmtp-17.12.0-ehlo-auth-fix.patch | 108 | ||||
-rw-r--r-- | kde-apps/ksmtp/ksmtp-17.12.0-r1.ebuild | 24 |
2 files changed, 132 insertions, 0 deletions
diff --git a/kde-apps/ksmtp/files/ksmtp-17.12.0-ehlo-auth-fix.patch b/kde-apps/ksmtp/files/ksmtp-17.12.0-ehlo-auth-fix.patch new file mode 100644 index 000000000000..903bfe0d1144 --- /dev/null +++ b/kde-apps/ksmtp/files/ksmtp-17.12.0-ehlo-auth-fix.patch @@ -0,0 +1,108 @@ +From 4564d77d3c644a7d1f99749c4e934969b4e21952 Mon Sep 17 00:00:00 2001 +From: Fabian Vogt <fabian@ritter-vogt.de> +Date: Fri, 22 Dec 2017 14:22:49 +0100 +Subject: [PATCH] Fix duplicate authentication + +Summary: +The response to EHLO triggers an authentication command, but with TLS +two EHLOs are sent: For the 220 from the server and after TLS negotiation. +However, sending it twice results in an unexpected "503 already authenticated" +response which ends up getting parsed by the SendJob, causing confusion. + +BUG: 387926 +BUG: 388068 + +Reviewers: mlaurent, dvratil + +Subscribers: rdieter, heikobecker, asn, #kde_pim, lbeltrame, cgiboudeaux + +Tags: #kde_pim + +Differential Revision: https://phabricator.kde.org/D9476 +--- + src/session.cpp | 29 +++++++++++++++++++---------- + src/session_p.h | 1 + + src/sessionthread.cpp | 1 - + 3 files changed, 20 insertions(+), 11 deletions(-) + +diff --git a/src/session.cpp b/src/session.cpp +index 861419d..4320adc 100644 +--- a/src/session.cpp ++++ b/src/session.cpp +@@ -80,6 +80,19 @@ void SessionPrivate::setAuthenticationMethods(const QList<QByteArray> &authMetho + } + } + ++void SessionPrivate::startHandshake() ++{ ++ QByteArray cmd; ++ if (!m_ehloRejected) { ++ cmd = "EHLO "; ++ } else { ++ cmd = "HELO "; ++ } ++ setState(Session::Handshake); ++ const auto hostname = m_customHostname.isEmpty() ? m_thread->hostName() : m_customHostname; ++ sendData(cmd + QUrl::toAce(hostname)); ++} ++ + + + Session::Session(const QString &hostName, quint16 port, QObject *parent) +@@ -277,15 +290,7 @@ void SessionPrivate::responseReceived(const ServerResponse &r) + + if (m_state == Session::Ready) { + if (r.isCode(22) || m_ehloRejected) { +- QByteArray cmd; +- if (!m_ehloRejected) { +- cmd = "EHLO "; +- } else { +- cmd = "HELO "; +- } +- setState(Session::Handshake); +- const auto hostname = m_customHostname.isEmpty() ? m_thread->hostName() : m_customHostname; +- sendData(cmd + QUrl::toAce(hostname)); ++ startHandshake(); + return; + } + } +@@ -346,7 +351,11 @@ KTcpSocket::SslVersion SessionPrivate::negotiatedEncryption() const + + void SessionPrivate::encryptionNegotiationResult(bool encrypted, KTcpSocket::SslVersion version) + { +- Q_UNUSED(encrypted); ++ if (encrypted) { ++ // Get the updated auth methods ++ startHandshake(); ++ } ++ + m_sslVersion = version; + } + +diff --git a/src/session_p.h b/src/session_p.h +index 875f7be..90151f6 100644 +--- a/src/session_p.h ++++ b/src/session_p.h +@@ -73,6 +73,7 @@ private Q_SLOTS: + + private: + ++ void startHandshake(); + void startNext(); + void startSocketTimer(); + void stopSocketTimer(); +diff --git a/src/sessionthread.cpp b/src/sessionthread.cpp +index 1e4db8b..c195826 100644 +--- a/src/sessionthread.cpp ++++ b/src/sessionthread.cpp +@@ -223,7 +223,6 @@ void SessionThread::sslConnected() + } else { + qCDebug(KSMTP_LOG) << "TLS negotiation done."; + +- QMetaObject::invokeMethod(this, "sendData", Qt::QueuedConnection, Q_ARG(QByteArray, "EHLO " + QUrl::toAce(hostName()))); + Q_EMIT encryptionNegotiationResult(true, m_socket->negotiatedSslVersion()); + } + } +-- +2.13.6 + diff --git a/kde-apps/ksmtp/ksmtp-17.12.0-r1.ebuild b/kde-apps/ksmtp/ksmtp-17.12.0-r1.ebuild new file mode 100644 index 000000000000..b9a34c04f0e7 --- /dev/null +++ b/kde-apps/ksmtp/ksmtp-17.12.0-r1.ebuild @@ -0,0 +1,24 @@ +# Copyright 1999-2017 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 + +EAPI=6 + +KDE_TEST="true" +inherit kde5 + +DESCRIPTION="Job-based library to send email through an SMTP server" +LICENSE="LGPL-2.1+" +KEYWORDS="~amd64 ~x86" +IUSE="" + +DEPEND=" + $(add_frameworks_dep kcoreaddons) + $(add_frameworks_dep ki18n) + $(add_frameworks_dep kio) + $(add_kdeapps_dep kmime) + $(add_qt_dep qtnetwork) + dev-libs/cyrus-sasl +" +RDEPEND="${DEPEND}" + +PATCHES=( "${FILESDIR}/${P}-ehlo-auth-fix.patch" ) |