summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Sommer <andreas.sommer87@googlemail.com>2023-02-20 15:41:10 +0100
committerGitHub <noreply@github.com>2023-02-20 15:41:10 +0100
commit2f88dafa56ac9cfb36cb913364d85cb8ca90d6d6 (patch)
treea546445010c6930c2fae63c56f48ea513f7e76ee
parent2321d0db0809056d6bf81b14b32f1c7269345661 (diff)
Only fail after chmod error if permissions differ (e.g. on config file) (#8771)
-rw-r--r--lib/osutil/atomic.go10
1 files changed, 8 insertions, 2 deletions
diff --git a/lib/osutil/atomic.go b/lib/osutil/atomic.go
index 0e84836176..a0422b8f42 100644
--- a/lib/osutil/atomic.go
+++ b/lib/osutil/atomic.go
@@ -109,9 +109,15 @@ func (w *AtomicWriter) Close() error {
return err
}
if infoErr == nil {
+ // Restore chmod setting for final file to what it was
if err := w.fs.Chmod(w.path, info.Mode()); err != nil {
- w.err = err
- return err
+ // Only fail if permissions differ, since some filesystems are expected to not allow chmod (e.g. error
+ // `operation not permitted`).
+ infoAfterRename, infoAfterRenameErr := w.fs.Lstat(w.path)
+ if infoAfterRenameErr != nil || infoAfterRename.Mode() != info.Mode() {
+ w.err = err
+ return err
+ }
}
}