diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-30 18:31:44 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-30 18:31:44 +0000 |
commit | c23a457e72abe608715ac76f076f47dc42af07a5 (patch) | |
tree | 2772049aaf84b5c9d0ed12ec8d86812f7a7904b6 /vendor/tar/tests/all.rs | |
parent | Releasing progress-linux version 1.73.0+dfsg1-1~progress7.99u1. (diff) | |
download | rustc-c23a457e72abe608715ac76f076f47dc42af07a5.tar.xz rustc-c23a457e72abe608715ac76f076f47dc42af07a5.zip |
Merging upstream version 1.74.1+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/tar/tests/all.rs')
-rw-r--r-- | vendor/tar/tests/all.rs | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/vendor/tar/tests/all.rs b/vendor/tar/tests/all.rs index 8c5359c56..a7954e1fb 100644 --- a/vendor/tar/tests/all.rs +++ b/vendor/tar/tests/all.rs @@ -1488,3 +1488,30 @@ fn ownership_preserving() { assert!(ar.unpack(td.path()).is_err()); } } + +#[test] +#[cfg(unix)] +fn pax_and_gnu_uid_gid() { + let tarlist = [tar!("biguid_gnu.tar"), tar!("biguid_pax.tar")]; + + for file in &tarlist { + let td = t!(TempBuilder::new().prefix("tar-rs").tempdir()); + let rdr = Cursor::new(file); + let mut ar = Archive::new(rdr); + ar.set_preserve_ownerships(true); + + if unsafe { libc::getuid() } == 0 { + t!(ar.unpack(td.path())); + let meta = fs::metadata(td.path().join("test.txt")).unwrap(); + let uid = std::os::unix::prelude::MetadataExt::uid(&meta); + let gid = std::os::unix::prelude::MetadataExt::gid(&meta); + // 4294967294 = u32::MAX - 1 + assert_eq!(uid, 4294967294); + assert_eq!(gid, 4294967294); + } else { + // it's not possible to unpack tar while preserving ownership + // without root permissions + assert!(ar.unpack(td.path()).is_err()); + } + } +} |