[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