2
2
mirror of https://github.com/octoleo/restic.git synced 2024-12-22 10:58:55 +00:00

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 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 When using a 32-bit build of restic, the `restic dump` command could in some
snapshot of standard input that was created in Windows has as a cases create tar files containing negative uid and gid. These files cannot be
result a tar file whose content has a negative uid and gid. As a read by gnu tar. This corner case especially applies to backups from stdin on Windows.
result, gnu tar exits with failure status whenever it tries to We have changed the dump command to create valid tar files in this case.
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.
https://github.com/restic/restic/issues/4103 https://github.com/restic/restic/issues/4103
https://github.com/restic/restic/pull/4104 https://github.com/restic/restic/pull/4104

View File

@ -38,9 +38,10 @@ const (
cISVTX = 0o1000 // Save text (sticky bit) 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 { func tarIdentifier(id uint32) int {
if int32(id) == -1 { if int(id) == -1 {
return 0 return 0
} }
return int(id) return int(id)