summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'kde-apps/kio-extras/files/kio-extras-18.04.2-fix-sftp-links.patch')
-rw-r--r--kde-apps/kio-extras/files/kio-extras-18.04.2-fix-sftp-links.patch227
1 files changed, 0 insertions, 227 deletions
diff --git a/kde-apps/kio-extras/files/kio-extras-18.04.2-fix-sftp-links.patch b/kde-apps/kio-extras/files/kio-extras-18.04.2-fix-sftp-links.patch
deleted file mode 100644
index 8f7c02338794..000000000000
--- a/kde-apps/kio-extras/files/kio-extras-18.04.2-fix-sftp-links.patch
+++ /dev/null
@@ -1,227 +0,0 @@
-From bca40518682a038aa08823fbbfb2cc4b9ef63802 Mon Sep 17 00:00:00 2001
-From: Jaime Torres <jtamate@gmail.com>
-Date: Wed, 13 Jun 2018 19:21:34 +0200
-Subject: fix sftp links with new uds implementation
-
-Summary:
-When listening a directory with links in sftp, the type of the entry of a symlink was inserted twice.
-Now the entry data is inserted only once.
-Get rid of the goto statement using local variables.
-
-Test Plan: Tested in sftp://127.0.0.1 with broken symbolic links and sftp://127.0.0.1/usr/lib64 with a lot of symbolic links.
-
-Reviewers: dfaure, martinkostolny, asturmlechner, lbeltrame, bruns
-
-Reviewed By: dfaure, martinkostolny
-
-Differential Revision: https://phabricator.kde.org/D13475
----
- sftp/kio_sftp.cpp | 129 ++++++++++++++++++++++++++++--------------------------
- 1 file changed, 67 insertions(+), 62 deletions(-)
-
-diff --git a/sftp/kio_sftp.cpp b/sftp/kio_sftp.cpp
-index 0a82365..f515458 100644
---- a/sftp/kio_sftp.cpp
-+++ b/sftp/kio_sftp.cpp
-@@ -342,6 +342,9 @@ bool sftpProtocol::createUDSEntry(const QString &filename, const QByteArray &pat
- mode_t type;
- mode_t access;
- char *link;
-+ bool isBrokenLink = false;
-+ long long fileType = S_IFREG;
-+ long long size = 0LL;
-
- Q_ASSERT(entry.count() == 0);
-
-@@ -353,54 +356,53 @@ bool sftpProtocol::createUDSEntry(const QString &filename, const QByteArray &pat
- entry.insert(KIO::UDSEntry::UDS_NAME, filename);
-
- if (sb->type == SSH_FILEXFER_TYPE_SYMLINK) {
-- entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFREG);
- link = sftp_readlink(mSftp, path.constData());
- if (link == nullptr) {
- sftp_attributes_free(sb);
- return false;
- }
- entry.insert(KIO::UDSEntry::UDS_LINK_DEST, QFile::decodeName(link));
-- delete link;
-+ free(link);
- // A symlink -> follow it only if details > 1
- if (details > 1) {
- sftp_attributes sb2 = sftp_stat(mSftp, path.constData());
- if (sb2 == nullptr) {
-- // It is a link pointing to nowhere
-- type = S_IFMT - 1;
-- access = S_IRWXU | S_IRWXG | S_IRWXO;
-- entry.insert( KIO::UDSEntry::UDS_FILE_TYPE, type);
-- entry.insert( KIO::UDSEntry::UDS_ACCESS, access);
-- entry.insert( KIO::UDSEntry::UDS_SIZE, 0LL );
--
-- goto notype;
-+ isBrokenLink = true;
-+ } else {
-+ sftp_attributes_free(sb);
-+ sb = sb2;
- }
-- sftp_attributes_free(sb);
-- sb = sb2;
- }
- }
-
-- switch (sb->type) {
-- case SSH_FILEXFER_TYPE_REGULAR:
-- entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFREG);
-- break;
-- case SSH_FILEXFER_TYPE_DIRECTORY:
-- entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR);
-- break;
-- case SSH_FILEXFER_TYPE_SYMLINK:
-- entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFLNK);
-- break;
-- case SSH_FILEXFER_TYPE_SPECIAL:
-- case SSH_FILEXFER_TYPE_UNKNOWN:
-- entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFMT - 1);
-- break;
-+ if (isBrokenLink) {
-+ // It is a link pointing to nowhere
-+ fileType = S_IFMT - 1;
-+ access = S_IRWXU | S_IRWXG | S_IRWXO;
-+ size = 0LL;
-+ } else {
-+ switch (sb->type) {
-+ case SSH_FILEXFER_TYPE_REGULAR:
-+ fileType = S_IFREG;
-+ break;
-+ case SSH_FILEXFER_TYPE_DIRECTORY:
-+ fileType = S_IFDIR;
-+ break;
-+ case SSH_FILEXFER_TYPE_SYMLINK:
-+ fileType = S_IFLNK;
-+ break;
-+ case SSH_FILEXFER_TYPE_SPECIAL:
-+ case SSH_FILEXFER_TYPE_UNKNOWN:
-+ fileType = S_IFMT - 1;
-+ break;
-+ }
-+ access = sb->permissions & 07777;
-+ size = sb->size;
- }
--
-- access = sb->permissions & 07777;
-+ entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, fileType);
- entry.insert(KIO::UDSEntry::UDS_ACCESS, access);
-+ entry.insert( KIO::UDSEntry::UDS_SIZE, size);
-
-- entry.insert(KIO::UDSEntry::UDS_SIZE, sb->size);
--
--notype:
- if (details > 0) {
- if (sb->owner) {
- entry.insert(KIO::UDSEntry::UDS_USER, QString::fromUtf8(sb->owner));
-@@ -419,6 +421,7 @@ notype:
- entry.insert(KIO::UDSEntry::UDS_CREATION_TIME, sb->createtime);
- }
-
-+
- sftp_attributes_free(sb);
-
- return true;
-@@ -1830,6 +1833,9 @@ void sftpProtocol::listDir(const QUrl& url) {
- mode_t access;
- mode_t type;
- char *link;
-+ bool isBrokenLink = false;
-+ long long fileType = S_IFREG;
-+ long long size = 0LL;
-
- dirent = sftp_readdir(mSftp, dp);
- if (dirent == nullptr) {
-@@ -1842,8 +1848,6 @@ void sftpProtocol::listDir(const QUrl& url) {
- if (dirent->type == SSH_FILEXFER_TYPE_SYMLINK) {
- QByteArray file = path + '/' + QFile::decodeName(dirent->name).toUtf8();
-
-- entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFREG);
--
- link = sftp_readlink(mSftp, file.constData());
- if (link == nullptr) {
- sftp_attributes_free(dirent);
-@@ -1851,46 +1855,47 @@ void sftpProtocol::listDir(const QUrl& url) {
- return;
- }
- entry.insert(KIO::UDSEntry::UDS_LINK_DEST, QFile::decodeName(link));
-- delete link;
-+ free(link);
- // A symlink -> follow it only if details > 1
- if (details > 1) {
- sftp_attributes sb = sftp_stat(mSftp, file.constData());
- if (sb == nullptr) {
-- // It is a link pointing to nowhere
-- type = S_IFMT - 1;
-- access = S_IRWXU | S_IRWXG | S_IRWXO;
-- entry.insert( KIO::UDSEntry::UDS_FILE_TYPE, type);
-- entry.insert( KIO::UDSEntry::UDS_ACCESS, access);
-- entry.insert( KIO::UDSEntry::UDS_SIZE, 0LL );
--
-- goto notype;
-+ isBrokenLink = true;
-+ } else {
-+ sftp_attributes_free(dirent);
-+ dirent = sb;
- }
-- sftp_attributes_free(dirent);
-- dirent = sb;
- }
- }
-
-- switch (dirent->type) {
-- case SSH_FILEXFER_TYPE_REGULAR:
-- entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFREG);
-- break;
-- case SSH_FILEXFER_TYPE_DIRECTORY:
-- entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFDIR);
-- break;
-- case SSH_FILEXFER_TYPE_SYMLINK:
-- entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, S_IFLNK);
-- break;
-- case SSH_FILEXFER_TYPE_SPECIAL:
-- case SSH_FILEXFER_TYPE_UNKNOWN:
-- break;
-- }
-+ if (isBrokenLink) {
-+ // It is a link pointing to nowhere
-+ fileType = S_IFMT - 1;
-+ access = S_IRWXU | S_IRWXG | S_IRWXO;
-+ size = 0LL;
-+ } else {
-+ switch (dirent->type) {
-+ case SSH_FILEXFER_TYPE_REGULAR:
-+ fileType = S_IFREG;
-+ break;
-+ case SSH_FILEXFER_TYPE_DIRECTORY:
-+ fileType = S_IFDIR;
-+ break;
-+ case SSH_FILEXFER_TYPE_SYMLINK:
-+ fileType = S_IFLNK;
-+ break;
-+ case SSH_FILEXFER_TYPE_SPECIAL:
-+ case SSH_FILEXFER_TYPE_UNKNOWN:
-+ break;
-+ }
-
-- access = dirent->permissions & 07777;
-+ access = dirent->permissions & 07777;
-+ size = dirent->size;
-+ }
-+ entry.insert(KIO::UDSEntry::UDS_FILE_TYPE, fileType);
- entry.insert(KIO::UDSEntry::UDS_ACCESS, access);
-+ entry.insert(KIO::UDSEntry::UDS_SIZE, size);
-
-- entry.insert(KIO::UDSEntry::UDS_SIZE, dirent->size);
--
--notype:
- if (details > 0) {
- if (dirent->owner) {
- entry.insert(KIO::UDSEntry::UDS_USER, QString::fromUtf8(dirent->owner));
---
-cgit v0.11.2
-