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:
parent
bd9022962e
commit
e42d2d1da8
2 changed files with 17 additions and 1 deletions
7
changelog/unreleased/issue-1766
Normal file
7
changelog/unreleased/issue-1766
Normal file
|
@ -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
|
|
@ -186,7 +186,16 @@ func (node Node) restoreMetadata(path string) error {
|
||||||
var firsterr error
|
var firsterr error
|
||||||
|
|
||||||
if err := lchown(path, int(node.UID), int(node.GID)); err != nil {
|
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" {
|
if node.Type != "symlink" {
|
||||||
|
|
Loading…
Reference in a new issue