diff --git a/changelog/unreleased/issue-1766 b/changelog/unreleased/issue-1766 new file mode 100644 index 000000000..6d8e312dd --- /dev/null +++ b/changelog/unreleased/issue-1766 @@ -0,0 +1,7 @@ +Enhancement: restore: suppress lchown errors when not running as root + +Like "cp" and "rsync" do, restic now only reports errors for changing +the ownership of files during restore if it is run as root, on non-Windows +operating systems. On Windows, the error is reported as usual. + +https://github.com/restic/restic/issues/1766 diff --git a/internal/restic/node.go b/internal/restic/node.go index cec7938e5..c8b089791 100644 --- a/internal/restic/node.go +++ b/internal/restic/node.go @@ -186,7 +186,16 @@ func (node Node) restoreMetadata(path string) error { var firsterr error if err := lchown(path, int(node.UID), int(node.GID)); err != nil { - firsterr = errors.Wrap(err, "Lchown") + // Like "cp -a" and "rsync -a" do, we only report lchown permission errors + // if we run as root. + // On Windows, Geteuid always returns -1, and we always report lchown + // permission errors. + if os.Geteuid() > 0 && os.IsPermission(err) { + debug.Log("not running as root, ignoring lchown permission error for %v: %v", + path, err) + } else { + firsterr = errors.Wrap(err, "Lchown") + } } if node.Type != "symlink" {