From 04fe818b2239ac2fcc4af48618b699cb50ccf543 Mon Sep 17 00:00:00 2001 From: Pavel Sanda Date: Fri, 7 Dec 2018 23:10:46 +0100 Subject: [PATCH] Keep permissions of the saved files intact. Previously the permission were destroyed by the newly created temporary file -- which is later used as new saved file. Tested on symlinks as well but only on Linux. --- src/Buffer.cpp | 3 +++ src/support/FileName.cpp | 7 +++++++ src/support/FileName.h | 2 ++ 3 files changed, 12 insertions(+) diff --git a/src/Buffer.cpp b/src/Buffer.cpp index 41a86ba1a9..1f6436662d 100644 --- a/src/Buffer.cpp +++ b/src/Buffer.cpp @@ -1443,6 +1443,9 @@ bool Buffer::save() const FileName savefile(tempfile->name()); LYXERR(Debug::FILES, "Saving to " << savefile.absFileName()); + if (!savefile.clonePermissions(fileName())) + LYXERR0("Failed to clone the permission from " << fileName().absFileName() << " to " << savefile.absFileName()); + if (!writeFile(savefile)) return false; diff --git a/src/support/FileName.cpp b/src/support/FileName.cpp index 3d22acbe70..b485ae9395 100644 --- a/src/support/FileName.cpp +++ b/src/support/FileName.cpp @@ -288,6 +288,13 @@ bool FileName::changePermission(unsigned long int mode) const return true; } +bool FileName::clonePermissions(FileName const & source) +{ + QFile fin(toqstr(source.absFileName())); + QFile f(toqstr(absFileName())); + + return f.setPermissions(fin.permissions()); +} string FileName::toFilesystemEncoding() const { diff --git a/src/support/FileName.h b/src/support/FileName.h index 8264d8087b..fad5077bdf 100644 --- a/src/support/FileName.h +++ b/src/support/FileName.h @@ -150,6 +150,8 @@ public: /// support this. /// \return true on success. bool changePermission(unsigned long int mode) const; + // sets permission based on the file given as an argument + bool clonePermissions(FileName const & target); /// remove pointed directory and all contents. /// \return true on success. -- 2.39.5