mirror of
https://github.com/restic/restic.git
synced 2025-08-13 13:01:59 +00:00
restore: suppress lchown errors when not running as root
Like "cp -a" and "rsync -a" do, only report lchown errors if we run as root. Like cp from GNU coreutils does, we check Geteuid() to determine if we are running as root ( http://git.savannah.gnu.org/cgit/coreutils.git/tree/src/copy.c#n3012 ). On Windows, lchown errors are always reported. Fixes https://github.com/restic/restic/issues/1766
This commit is contained in:
@@ -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" {
|
||||
|
Reference in New Issue
Block a user