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.
This commit is contained in:
Panagiotis Cheilaris 2022-12-30 18:12:12 +01:00
parent a86a56cf3b
commit 3b516d4b70
2 changed files with 7 additions and 9 deletions

View file

@ -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

View file

@ -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)