[Pkg-owncloud-commits] [owncloud-client] 392/484: Permissions: Keep more user permissions

Sandro Knauß hefee-guest at moszumanska.debian.org
Wed Dec 16 00:38:10 UTC 2015


This is an automated email from the git hooks/post-receive script.

hefee-guest pushed a commit to branch master
in repository owncloud-client.

commit 6cf5fc7f7d2798c2a4761da816c5eb770ea71367
Author: Christian Kamm <mail at ckamm.de>
Date:   Mon Nov 23 13:23:19 2015 +0100

    Permissions: Keep more user permissions
    
    t4.pl discovered that it'd needlessly override permissions sometimes
---
 src/libsync/filesystem.cpp        | 13 +++++++++++++
 src/libsync/filesystem.h          | 11 +++++++++++
 src/libsync/propagatedownload.cpp |  4 ++--
 src/libsync/syncengine.cpp        |  2 +-
 4 files changed, 27 insertions(+), 3 deletions(-)

diff --git a/src/libsync/filesystem.cpp b/src/libsync/filesystem.cpp
index db13a74..e28cfde 100644
--- a/src/libsync/filesystem.cpp
+++ b/src/libsync/filesystem.cpp
@@ -143,6 +143,19 @@ void FileSystem::setFileReadOnly(const QString& filename, bool readonly)
     file.setPermissions(permissions);
 }
 
+
+void FileSystem::setFileReadOnlyWeak(const QString& filename, bool readonly)
+{
+    QFile file(filename);
+    QFile::Permissions permissions = file.permissions();
+
+    if (!readonly && (permissions & QFile::WriteOwner)) {
+        return; // already writable enough
+    }
+
+    setFileReadOnly(filename, readonly);
+}
+
 time_t FileSystem::getModTime(const QString &filename)
 {
     csync_vio_file_stat_t* stat = csync_vio_file_stat_new();
diff --git a/src/libsync/filesystem.h b/src/libsync/filesystem.h
index e6a760a..21e6975 100644
--- a/src/libsync/filesystem.h
+++ b/src/libsync/filesystem.h
@@ -55,6 +55,17 @@ void OWNCLOUDSYNC_EXPORT setFileHidden(const QString& filename, bool hidden);
  */
 void OWNCLOUDSYNC_EXPORT setFileReadOnly(const QString& filename, bool readonly);
 
+/**
+ * @brief Marks the file as read-only.
+ *
+ * It's like setFileReadOnly(), but weaker: if readonly is false and the user
+ * already has write permissions, no change to the permissions is made.
+ *
+ * This means that it will preserve explicitly set rw-r--r-- permissions even
+ * when the umask is 0002. (setFileReadOnly() would adjust to rw-rw-r--)
+ */
+void OWNCLOUDSYNC_EXPORT setFileReadOnlyWeak(const QString& filename, bool readonly);
+
 /** convert a "normal" windows path into a path that can be 32k chars long. */
 QString OWNCLOUDSYNC_EXPORT longWinPath( const QString& inpath );
 
diff --git a/src/libsync/propagatedownload.cpp b/src/libsync/propagatedownload.cpp
index c0572e4..305f897 100644
--- a/src/libsync/propagatedownload.cpp
+++ b/src/libsync/propagatedownload.cpp
@@ -671,8 +671,8 @@ void PropagateDownloadFileQNAM::downloadFinished()
     }
 
     // Apply the remote permissions
-    FileSystem::setFileReadOnly(_tmpFile.fileName(),
-                                 !_item->_remotePerm.contains('W'));
+    FileSystem::setFileReadOnlyWeak(_tmpFile.fileName(),
+                                    !_item->_remotePerm.contains('W'));
 
     QString error;
     _propagator->addTouchedFile(fn);
diff --git a/src/libsync/syncengine.cpp b/src/libsync/syncengine.cpp
index d1e70cf..36acf77 100644
--- a/src/libsync/syncengine.cpp
+++ b/src/libsync/syncengine.cpp
@@ -493,7 +493,7 @@ int SyncEngine::treewalkFile( TREE_WALK_FILE *file, bool remote )
             SyncJournalFileRecord prev = _journal->getFileRecord(item->_file);
             if (prev._remotePerm.contains('W') != item->_remotePerm.contains('W')) {
                 const bool isReadOnly = !item->_remotePerm.contains('W');
-                FileSystem::setFileReadOnly(filePath, isReadOnly);
+                FileSystem::setFileReadOnlyWeak(filePath, isReadOnly);
             }
 
             _journal->setFileRecordMetadata(SyncJournalFileRecord(*item, filePath));

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud-client.git



More information about the Pkg-owncloud-commits mailing list