From 2f88dafa56ac9cfb36cb913364d85cb8ca90d6d6 Mon Sep 17 00:00:00 2001 From: Andreas Sommer Date: Mon, 20 Feb 2023 15:41:10 +0100 Subject: [PATCH] Only fail after chmod error if permissions differ (e.g. on config file) (#8771) --- lib/osutil/atomic.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/osutil/atomic.go b/lib/osutil/atomic.go index 0e8483617..a0422b8f4 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 + } } }