diff options
author | Andreas K. Hüttel <dilfridge@gentoo.org> | 2011-08-27 22:07:04 +0000 |
---|---|---|
committer | Andreas K. Hüttel <dilfridge@gentoo.org> | 2011-08-27 22:07:04 +0000 |
commit | aa086b9da2985402a4b0d72e7471fa45d6226814 (patch) | |
tree | 31f7f5c77a62b55785c6f87c8b74f810faa896bb /kde-base | |
parent | Make CONFIG check for EXPORTFS matadory for USE=nfs (diff) | |
download | gentoo-2-aa086b9da2985402a4b0d72e7471fa45d6226814.tar.gz gentoo-2-aa086b9da2985402a4b0d72e7471fa45d6226814.tar.bz2 gentoo-2-aa086b9da2985402a4b0d72e7471fa45d6226814.zip |
Add upstream patch to fix sftp authentication, bug 380707
(Portage version: 2.1.10.11/cvs/Linux x86_64)
Diffstat (limited to 'kde-base')
3 files changed, 230 insertions, 1 deletions
diff --git a/kde-base/kdebase-kioslaves/ChangeLog b/kde-base/kdebase-kioslaves/ChangeLog index bac5f9fbd5ac..39e4723aa977 100644 --- a/kde-base/kdebase-kioslaves/ChangeLog +++ b/kde-base/kdebase-kioslaves/ChangeLog @@ -1,6 +1,13 @@ # ChangeLog for kde-base/kdebase-kioslaves # Copyright 1999-2011 Gentoo Foundation; Distributed under the GPL v2 -# $Header: /var/cvsroot/gentoo-x86/kde-base/kdebase-kioslaves/ChangeLog,v 1.231 2011/08/15 20:51:32 maekke Exp $ +# $Header: /var/cvsroot/gentoo-x86/kde-base/kdebase-kioslaves/ChangeLog,v 1.232 2011/08/27 22:07:04 dilfridge Exp $ + +*kdebase-kioslaves-4.7.0-r1 (27 Aug 2011) + + 27 Aug 2011; Andreas K. Huettel <dilfridge@gentoo.org> + +kdebase-kioslaves-4.7.0-r1.ebuild, + +files/kdebase-kioslaves-4.7.0-sftp.patch: + Add upstream patch to fix sftp authentication, bug 380707 15 Aug 2011; Markus Meier <maekke@gentoo.org> kdebase-kioslaves-4.6.5.ebuild: x86 stable, bug #377465 diff --git a/kde-base/kdebase-kioslaves/files/kdebase-kioslaves-4.7.0-sftp.patch b/kde-base/kdebase-kioslaves/files/kdebase-kioslaves-4.7.0-sftp.patch new file mode 100644 index 000000000000..a9843295fdf5 --- /dev/null +++ b/kde-base/kdebase-kioslaves/files/kdebase-kioslaves-4.7.0-sftp.patch @@ -0,0 +1,169 @@ +commit 23e4ab03091e9d824e78171ea92a2da2326256d8 +Author: Dawit Alemayehu <adawit@kde.org> +Date: Thu Aug 25 00:29:14 2011 -0400 + + Fix the logic for user name change redirection so it won't break normal + login into sftp servers. + +diff --git a/kioslave/sftp/kio_sftp.cpp b/kioslave/sftp/kio_sftp.cpp +index eb5c8a8..2a55ff9 100644 +--- a/kioslave/sftp/kio_sftp.cpp ++++ b/kioslave/sftp/kio_sftp.cpp +@@ -429,12 +429,11 @@ sftpProtocol::~sftpProtocol() { + } + + void sftpProtocol::setHost(const QString& host, quint16 port, const QString& user, const QString& pass) { +- kDebug(KIO_SFTP_DB) << "setHost(): " << user << "@" << host << ":" << port; ++ kDebug(KIO_SFTP_DB) << user << "@" << host << ":" << port; + + // Close connection if the request is to another server... +- if (mConnected && +- (host != mHost || port != mPort || +- user != mUsername || pass != mPassword)) { ++ if (host != mHost || port != mPort || ++ user != mUsername || pass != mPassword) { + closeConnection(); + } + +@@ -451,9 +450,7 @@ void sftpProtocol::setHost(const QString& host, quint16 port, const QString& use + } + } + +- kDebug(KIO_SFTP_DB) << "setHost(): mPort=" << mPort; +- +- mUsername = mOrigUsername = user; ++ mUsername = user; + mPassword = pass; + } + +@@ -479,6 +476,7 @@ void sftpProtocol::openConnection() { + info.url.setPort(mPort); + info.url.setUser(mUsername); + info.username = mUsername; ++ const QString origPasswd (mPassword); + + // Check for cached authentication info if no password is specified... + if (mPassword.isEmpty()) { +@@ -497,6 +495,7 @@ void sftpProtocol::openConnection() { + int rc, state, hlen; + int timeout_sec = 30, timeout_usec = 0; + ++login_start: + mSession = ssh_new(); + if (mSession == NULL) { + error(KIO::ERR_INTERNAL, i18n("Could not create a new SSH session.")); +@@ -722,8 +721,12 @@ void sftpProtocol::openConnection() { + firstTime = false; + + if (!mUsername.isEmpty() && mUsername != info.username) { +- info.url.setUser(info.username); // update the AuthInfo URL's username + kDebug(KIO_SFTP_DB) << "Username changed from" << mUsername << "to" << info.username; ++ info.url.setUser(info.username); ++ mUsername = info.username; ++ mPassword = info.password; ++ closeConnection(); ++ goto login_start; + } + } + +@@ -770,6 +773,7 @@ void sftpProtocol::openConnection() { + setTimeoutSpecialCommand(KIO_SFTP_SPECIAL_TIMEOUT); + + mConnected = true; ++ mPassword = origPasswd; + connected(); + + info.password.fill('x'); +@@ -777,13 +781,17 @@ void sftpProtocol::openConnection() { + } + + void sftpProtocol::closeConnection() { +- kDebug(KIO_SFTP_DB) << "closeConnection()"; ++ kDebug(KIO_SFTP_DB); + +- sftp_free(mSftp); +- mSftp = NULL; ++ if (mSftp) { ++ sftp_free(mSftp); ++ mSftp = NULL; ++ } + +- ssh_disconnect(mSession); +- mSession = NULL; ++ if (mSession) { ++ ssh_disconnect(mSession); ++ mSession = NULL; ++ } + + mConnected = false; + } +@@ -1824,28 +1832,28 @@ sftpProtocol::GetRequest::~GetRequest() { + sftp_attributes_free(mSb); + } + +-bool sftpProtocol::requiresUserNameRedirection() ++void sftpProtocol::requiresUserNameRedirection() + { +- kDebug(KIO_SFTP_DB) << "Connected ?" << mConnected << "Original:" << mOrigUsername << "Current:" << mUsername; +- if (!mConnected || mOrigUsername.isEmpty() || mOrigUsername == mUsername) +- return false; +- +- KUrl realURL; +- realURL.setProtocol( QLatin1String("sftp") ); +- realURL.setUser( mUsername ); +- realURL.setPass( mPassword ); +- realURL.setHost( mHost ); +- if ( mPort > 0) +- realURL.setPort( mPort ); +- kDebug(KIO_SFTP_DB) << "User name changed! Redirecting to" << realURL.prettyUrl(); +- redirection( realURL ); +- finished(); +- mOrigUsername = mUsername; +- return true; ++ KUrl redirectUrl; ++ redirectUrl.setProtocol( QLatin1String("sftp") ); ++ redirectUrl.setUser( mUsername ); ++ redirectUrl.setPass( mPassword ); ++ redirectUrl.setHost( mHost ); ++ if (mPort > 0) ++ redirectUrl.setPort( mPort ); ++ kDebug(KIO_SFTP_DB) << "redirecting to" << redirectUrl; ++ redirection( redirectUrl ); + } + + bool sftpProtocol::sftpConnect() + { ++ const QString origUsername = mUsername; + openConnection(); +- return !requiresUserNameRedirection(); ++ kDebug(KIO_SFTP_DB) << "connected ?" << mConnected << "username: old=" << origUsername << "new=" << mUsername; ++ if (!origUsername.isEmpty() && origUsername != mUsername) { ++ requiresUserNameRedirection(); ++ finished(); ++ return false; ++ } ++ return true; + } +diff --git a/kioslave/sftp/kio_sftp.h b/kioslave/sftp/kio_sftp.h +index 7cd16d1..c937e2e 100644 +--- a/kioslave/sftp/kio_sftp.h ++++ b/kioslave/sftp/kio_sftp.h +@@ -101,9 +101,6 @@ private: // Private variables + /** The sftp session for the connection */ + sftp_session mSftp; + +- /** Username originally set when setHost was called. */ +- QString mOrigUsername; +- + /** Username to use when connecting */ + QString mUsername; + +@@ -194,7 +191,7 @@ private: // private methods + KIO::UDSEntry &entry, short int details); + + QString canonicalizePath(const QString &path); +- bool requiresUserNameRedirection(); ++ void requiresUserNameRedirection(); + bool sftpConnect(); + }; + diff --git a/kde-base/kdebase-kioslaves/kdebase-kioslaves-4.7.0-r1.ebuild b/kde-base/kdebase-kioslaves/kdebase-kioslaves-4.7.0-r1.ebuild new file mode 100644 index 000000000000..6f964a78be11 --- /dev/null +++ b/kde-base/kdebase-kioslaves/kdebase-kioslaves-4.7.0-r1.ebuild @@ -0,0 +1,53 @@ +# Copyright 1999-2011 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/kde-base/kdebase-kioslaves/kdebase-kioslaves-4.7.0-r1.ebuild,v 1.1 2011/08/27 22:07:04 dilfridge Exp $ + +EAPI=4 + +KDE_HANDBOOK="optional" +KMNAME="kde-runtime" +KMMODULE="kioslave" +inherit kde4-meta + +KEYWORDS="~amd64 ~arm ~ppc ~ppc64 ~x86 ~amd64-linux ~x86-linux" +DESCRIPTION="kioslave: the kde VFS framework - kioslave plugins present a filesystem-like view of arbitrary data" +IUSE="+bzip2 exif debug lzma openexr samba +sftp" + +# tests hang, last checked for 4.2.96 +RESTRICT="test" + +DEPEND=" + !aqua? ( x11-libs/libXcursor ) + bzip2? ( app-arch/bzip2 ) + exif? ( media-gfx/exiv2 ) + lzma? ( app-arch/xz-utils ) + openexr? ( media-libs/openexr ) + samba? ( net-fs/samba[smbclient] ) + sftp? ( >=net-libs/libssh-0.4.0[sftp] ) +" +RDEPEND="${DEPEND} + $(add_kdebase_dep kdelibs 'bzip2?,lzma?') + $(add_kdebase_dep kdialog) + virtual/ssh + !aqua? ( !kernel_SunOS? ( virtual/eject ) ) +" + +PATCHES=( "${FILESDIR}/${P}-sftp.patch" ) + +KMEXTRA=" + kioexec + kdeeject +" + +src_configure() { + mycmakeargs=( + -DWITH_SLP=OFF + $(cmake-utils_use_with bzip2 BZip2) + $(cmake-utils_use_with exif Exiv2) + $(cmake-utils_use_with lzma LibLZMA) + $(cmake-utils_use_with openexr OpenEXR) + $(cmake-utils_use_with samba) + $(cmake-utils_use_with sftp LibSSH) + ) + kde4-meta_src_configure +} |