From 3b516d4b700243f086fec3ef46c8d5da104089f5 Mon Sep 17 00:00:00 2001 From: Panagiotis Cheilaris Date: Fri, 30 Dec 2022 18:12:12 +0100 Subject: [PATCH] convert uid/gid -1 to 0 only in 32-bit tar dump Only for a 32-bit build of restic, convert a uid or gid value of -1 to 0. --- changelog/unreleased/issue-4103 | 11 ++++------- internal/dump/tar.go | 5 +++-- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/changelog/unreleased/issue-4103 b/changelog/unreleased/issue-4103 index 78d0b2ae1..5b152f992 100644 --- a/changelog/unreleased/issue-4103 +++ b/changelog/unreleased/issue-4103 @@ -1,12 +1,9 @@ Bugfix: fix restic dump of tar file with 32-bit binary -In restic up to 0.14.0, the restic dump from a 32-bit binary of a -snapshot of standard input that was created in Windows has as a -result a tar file whose content has a negative uid and gid. As a -result, gnu tar exits with failure status whenever it tries to -access such a tar file. With this fix, the tar file that is now -dumped from a 32-bit binary has content with non-negative uid and -gid. +When using a 32-bit build of restic, the `restic dump` command could in some +cases create tar files containing negative uid and gid. These files cannot be +read by gnu tar. This corner case especially applies to backups from stdin on Windows. +We have changed the dump command to create valid tar files in this case. https://github.com/restic/restic/issues/4103 https://github.com/restic/restic/pull/4104 diff --git a/internal/dump/tar.go b/internal/dump/tar.go index 1a68331d2..6e87aabe5 100644 --- a/internal/dump/tar.go +++ b/internal/dump/tar.go @@ -38,9 +38,10 @@ const ( cISVTX = 0o1000 // Save text (sticky bit) ) -// substitute a uid or gid of -1 (which was converted to 2^32 - 1) with zero +// in a 32-bit build of restic: +// substitute a uid or gid of -1 (which was converted to 2^32 - 1) with 0 func tarIdentifier(id uint32) int { - if int32(id) == -1 { + if int(id) == -1 { return 0 } return int(id)