summaryrefslogtreecommitdiffstats
path: root/vendor/tar
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 18:31:44 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 18:31:44 +0000
commitc23a457e72abe608715ac76f076f47dc42af07a5 (patch)
tree2772049aaf84b5c9d0ed12ec8d86812f7a7904b6 /vendor/tar
parentReleasing progress-linux version 1.73.0+dfsg1-1~progress7.99u1. (diff)
downloadrustc-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')
-rw-r--r--vendor/tar/.cargo-checksum.json2
-rw-r--r--vendor/tar/Cargo.lock95
-rw-r--r--vendor/tar/Cargo.toml4
-rw-r--r--vendor/tar/src/archive.rs23
-rw-r--r--vendor/tar/src/pax.rs40
-rw-r--r--vendor/tar/tests/all.rs27
6 files changed, 110 insertions, 81 deletions
diff --git a/vendor/tar/.cargo-checksum.json b/vendor/tar/.cargo-checksum.json
index 792994f55..77504e32a 100644
--- a/vendor/tar/.cargo-checksum.json
+++ b/vendor/tar/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.lock":"a074bb3491e0d988605218e794859ddb067bb624e793a053645fbbabadde83f6","Cargo.toml":"638559bf51f1b89359ece700138f774bc0a5c1513046e306d6109dc045799b84","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"378f5840b258e2779c39418f3f2d7b2ba96f1c7917dd6be0713f88305dbda397","README.md":"71079f1a0962c2cf288058f38d24735bddabd1427ac2dee72ec18cc5ae4bceed","examples/extract_file.rs":"dc487f6631d824175afc3ee33de99e80718a8ca3f9e57fddd7cac0a46c07d3ae","examples/list.rs":"36e412205eaffea8ab7f39be4173594b74e36acb369e091362b1975ee4a7a14b","examples/raw_list.rs":"0a735576ac354457d6d5a4d395d044fae99bf67a7c69960ca784a6f6a1743651","examples/write.rs":"419ac3e4155035e32b52cd8e6ae987a2d99cf82f60abbfb315c2a2c4f8e8fd19","src/archive.rs":"9238c58f5a253034f490ede4c42de6e1b89986ee6db343920ee34b3dcfa5b238","src/builder.rs":"2914f394d44c133557532bf5765fe63e0def30ec0b447f8f2bc620e932a2036a","src/entry.rs":"0e4b0438cbc4cbec30a821ce8f23619fe9e53c17022a022de609d642e220193c","src/entry_type.rs":"0786688729a96b4a3135b28d40b95c3d4feaad66b9574c490cbea14814ab975f","src/error.rs":"a20813fbc52f1f2e3a79654f62de6001759f6504a06acee5b0819d4865398587","src/header.rs":"fb2b1fa943c19635826b3f2becfb82527be7d08fdac115af840da3ff06152908","src/lib.rs":"5468e413205c907c367c35d28a528389103d68fd6a5b5979bbedba7c9e6b6c99","src/pax.rs":"54002e31151f9c50e02a3da26b3cacd1d3c9a3902daee008ab76d112cf5a2430","tests/all.rs":"7a64869cd99a4642f2db71aa7d283633199e59b88ccca112cb467b0739e64e83","tests/entry.rs":"af12d84160e5459ebaee6ecdd68e0c811438c37c0cb881ad210e7f94132b9739","tests/header/mod.rs":"02b05639f63c39a47559650c7209817bb60282deb4f679d5b001ed936343d9de"},"package":"ec96d2ffad078296368d46ff1cb309be1c23c513b4ab0e22a45de0185275ac96"} \ No newline at end of file
+{"files":{"Cargo.lock":"734d770757fa895a8c4e215b8063840d33083d007e02d70dfb47a07cd348b933","Cargo.toml":"1e1da319c4d28693a3e42e014ed00828480994b55b15003052f21f2342a346bb","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"378f5840b258e2779c39418f3f2d7b2ba96f1c7917dd6be0713f88305dbda397","README.md":"71079f1a0962c2cf288058f38d24735bddabd1427ac2dee72ec18cc5ae4bceed","examples/extract_file.rs":"dc487f6631d824175afc3ee33de99e80718a8ca3f9e57fddd7cac0a46c07d3ae","examples/list.rs":"36e412205eaffea8ab7f39be4173594b74e36acb369e091362b1975ee4a7a14b","examples/raw_list.rs":"0a735576ac354457d6d5a4d395d044fae99bf67a7c69960ca784a6f6a1743651","examples/write.rs":"419ac3e4155035e32b52cd8e6ae987a2d99cf82f60abbfb315c2a2c4f8e8fd19","src/archive.rs":"e38b876270e3e4e7bac24fc4bf74e05df362102113cf0e024334a853a824f61e","src/builder.rs":"2914f394d44c133557532bf5765fe63e0def30ec0b447f8f2bc620e932a2036a","src/entry.rs":"0e4b0438cbc4cbec30a821ce8f23619fe9e53c17022a022de609d642e220193c","src/entry_type.rs":"0786688729a96b4a3135b28d40b95c3d4feaad66b9574c490cbea14814ab975f","src/error.rs":"a20813fbc52f1f2e3a79654f62de6001759f6504a06acee5b0819d4865398587","src/header.rs":"fb2b1fa943c19635826b3f2becfb82527be7d08fdac115af840da3ff06152908","src/lib.rs":"5468e413205c907c367c35d28a528389103d68fd6a5b5979bbedba7c9e6b6c99","src/pax.rs":"0509d9afa47ae9f1658bf7d02d12a9791f717971736c4e2041c5fb5f7c5354c8","tests/all.rs":"81bfe5fb71e8d2dd7455c126fc77aa40c2011a2cd5871d785e39e6fb053bf352","tests/entry.rs":"af12d84160e5459ebaee6ecdd68e0c811438c37c0cb881ad210e7f94132b9739","tests/header/mod.rs":"02b05639f63c39a47559650c7209817bb60282deb4f679d5b001ed936343d9de"},"package":"b16afcea1f22891c49a00c751c7b63b2233284064f11a200fc624137c51e2ddb"} \ No newline at end of file
diff --git a/vendor/tar/Cargo.lock b/vendor/tar/Cargo.lock
index f63a631ad..3c197016f 100644
--- a/vendor/tar/Cargo.lock
+++ b/vendor/tar/Cargo.lock
@@ -3,22 +3,25 @@
version = 3
[[package]]
-name = "autocfg"
-version = "1.1.0"
+name = "bitflags"
+version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "bitflags"
-version = "1.3.2"
+version = "2.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+checksum = "630be753d4e58660abd17930c71b647fe46c27ea6b63cc59e1e3851406972e42"
[[package]]
name = "cc"
-version = "1.0.79"
+version = "1.0.82"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+checksum = "305fe645edc1442a0fa8b6726ba61d422798d37a52e12eaecf4b022ebbb88f01"
+dependencies = [
+ "libc",
+]
[[package]]
name = "cfg-if"
@@ -28,9 +31,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "errno"
-version = "0.3.1"
+version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
+checksum = "6b30f669a7961ef1631673d2766cc92f52d64f7ef354d4fe0ddfd30ed52f0f4f"
dependencies = [
"errno-dragonfly",
"libc",
@@ -49,48 +52,19 @@ dependencies = [
[[package]]
name = "fastrand"
-version = "1.9.0"
+version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
-dependencies = [
- "instant",
-]
+checksum = "6999dc1837253364c2ebb0704ba97994bd874e8f195d665c50b7548f6ea92764"
[[package]]
name = "filetime"
-version = "0.2.21"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153"
-dependencies = [
- "cfg-if",
- "libc",
- "redox_syscall 0.2.16",
- "windows-sys",
-]
-
-[[package]]
-name = "hermit-abi"
-version = "0.3.2"
+version = "0.2.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
-
-[[package]]
-name = "instant"
-version = "0.1.12"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+checksum = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0"
dependencies = [
"cfg-if",
-]
-
-[[package]]
-name = "io-lifetimes"
-version = "1.0.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
-dependencies = [
- "hermit-abi",
"libc",
+ "redox_syscall",
"windows-sys",
]
@@ -102,18 +76,9 @@ checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
[[package]]
name = "linux-raw-sys"
-version = "0.3.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
-
-[[package]]
-name = "redox_syscall"
-version = "0.2.16"
+version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
-dependencies = [
- "bitflags",
-]
+checksum = "57bcfdad1b858c2db7c38303a6d2ad4dfaf5eb53dfeb0910128b2c26d6158503"
[[package]]
name = "redox_syscall"
@@ -121,18 +86,17 @@ version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
dependencies = [
- "bitflags",
+ "bitflags 1.3.2",
]
[[package]]
name = "rustix"
-version = "0.37.23"
+version = "0.38.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06"
+checksum = "172891ebdceb05aa0005f533a6cbfca599ddd7d966f6f5d4d9b2e70478e70399"
dependencies = [
- "bitflags",
+ "bitflags 2.3.3",
"errno",
- "io-lifetimes",
"libc",
"linux-raw-sys",
"windows-sys",
@@ -140,7 +104,7 @@ dependencies = [
[[package]]
name = "tar"
-version = "0.4.39"
+version = "0.4.40"
dependencies = [
"filetime",
"libc",
@@ -150,14 +114,13 @@ dependencies = [
[[package]]
name = "tempfile"
-version = "3.6.0"
+version = "3.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "31c0432476357e58790aaa47a8efb0c5138f137343f3b5f23bd36a27e3b0a6d6"
+checksum = "dc02fddf48964c42031a0b3fe0428320ecf3a73c401040fc0096f97794310651"
dependencies = [
- "autocfg",
"cfg-if",
"fastrand",
- "redox_syscall 0.3.5",
+ "redox_syscall",
"rustix",
"windows-sys",
]
@@ -230,9 +193,9 @@ checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
[[package]]
name = "xattr"
-version = "0.2.3"
+version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6d1526bbe5aaeb5eb06885f4d987bcdfa5e23187055de9b83fe00156a821fabc"
+checksum = "f4686009f71ff3e5c4dbcf1a282d0a44db3f021ba69350cd42086b3e5f1c6985"
dependencies = [
"libc",
]
diff --git a/vendor/tar/Cargo.toml b/vendor/tar/Cargo.toml
index 6225b778f..3fe607f97 100644
--- a/vendor/tar/Cargo.toml
+++ b/vendor/tar/Cargo.toml
@@ -12,7 +12,7 @@
[package]
edition = "2018"
name = "tar"
-version = "0.4.39"
+version = "0.4.40"
authors = ["Alex Crichton <alex@alexcrichton.com>"]
exclude = ["tests/archives/*"]
description = """
@@ -45,5 +45,5 @@ default = ["xattr"]
version = "0.2"
[target."cfg(unix)".dependencies.xattr]
-version = "0.2"
+version = "1.0"
optional = true
diff --git a/vendor/tar/src/archive.rs b/vendor/tar/src/archive.rs
index c7a9d9803..760b2cb82 100644
--- a/vendor/tar/src/archive.rs
+++ b/vendor/tar/src/archive.rs
@@ -10,7 +10,7 @@ use std::path::Path;
use crate::entry::{EntryFields, EntryIo};
use crate::error::TarError;
use crate::other;
-use crate::pax::pax_extensions_size;
+use crate::pax::*;
use crate::{Entry, GnuExtSparseHeader, GnuSparseHeader, Header};
/// A top-level representation of an archive file.
@@ -275,7 +275,7 @@ impl<'a, R: Read> Iterator for Entries<'a, R> {
impl<'a> EntriesFields<'a> {
fn next_entry_raw(
&mut self,
- pax_size: Option<u64>,
+ pax_extensions: Option<&[u8]>,
) -> io::Result<Option<Entry<'a, io::Empty>>> {
let mut header = Header::new_old();
let mut header_pos = self.next;
@@ -315,6 +315,19 @@ impl<'a> EntriesFields<'a> {
return Err(other("archive header checksum mismatch"));
}
+ let mut pax_size: Option<u64> = None;
+ if let Some(pax_extensions_ref) = &pax_extensions {
+ pax_size = pax_extensions_value(pax_extensions_ref, PAX_SIZE);
+
+ if let Some(pax_uid) = pax_extensions_value(pax_extensions_ref, PAX_UID) {
+ header.set_uid(pax_uid);
+ }
+
+ if let Some(pax_gid) = pax_extensions_value(pax_extensions_ref, PAX_GID) {
+ header.set_gid(pax_gid);
+ }
+ }
+
let file_pos = self.next;
let mut size = header.entry_size()?;
if size == 0 {
@@ -360,11 +373,10 @@ impl<'a> EntriesFields<'a> {
let mut gnu_longname = None;
let mut gnu_longlink = None;
let mut pax_extensions = None;
- let mut pax_size = None;
let mut processed = 0;
loop {
processed += 1;
- let entry = match self.next_entry_raw(pax_size)? {
+ let entry = match self.next_entry_raw(pax_extensions.as_deref())? {
Some(entry) => entry,
None if processed > 1 => {
return Err(other(
@@ -408,9 +420,6 @@ impl<'a> EntriesFields<'a> {
));
}
pax_extensions = Some(EntryFields::from(entry).read_all()?);
- if let Some(pax_extensions_ref) = &pax_extensions {
- pax_size = pax_extensions_size(pax_extensions_ref);
- }
continue;
}
diff --git a/vendor/tar/src/pax.rs b/vendor/tar/src/pax.rs
index 80ca3e9b4..6e83edce8 100644
--- a/vendor/tar/src/pax.rs
+++ b/vendor/tar/src/pax.rs
@@ -1,9 +1,39 @@
+#![allow(dead_code)]
use std::io;
use std::slice;
use std::str;
use crate::other;
+// Keywords for PAX extended header records.
+pub const PAX_NONE: &str = ""; // Indicates that no PAX key is suitable
+pub const PAX_PATH: &str = "path";
+pub const PAX_LINKPATH: &str = "linkpath";
+pub const PAX_SIZE: &str = "size";
+pub const PAX_UID: &str = "uid";
+pub const PAX_GID: &str = "gid";
+pub const PAX_UNAME: &str = "uname";
+pub const PAX_GNAME: &str = "gname";
+pub const PAX_MTIME: &str = "mtime";
+pub const PAX_ATIME: &str = "atime";
+pub const PAX_CTIME: &str = "ctime"; // Removed from later revision of PAX spec, but was valid
+pub const PAX_CHARSET: &str = "charset"; // Currently unused
+pub const PAX_COMMENT: &str = "comment"; // Currently unused
+
+pub const PAX_SCHILYXATTR: &str = "SCHILY.xattr.";
+
+// Keywords for GNU sparse files in a PAX extended header.
+pub const PAX_GNUSPARSE: &str = "GNU.sparse.";
+pub const PAX_GNUSPARSENUMBLOCKS: &str = "GNU.sparse.numblocks";
+pub const PAX_GNUSPARSEOFFSET: &str = "GNU.sparse.offset";
+pub const PAX_GNUSPARSENUMBYTES: &str = "GNU.sparse.numbytes";
+pub const PAX_GNUSPARSEMAP: &str = "GNU.sparse.map";
+pub const PAX_GNUSPARSENAME: &str = "GNU.sparse.name";
+pub const PAX_GNUSPARSEMAJOR: &str = "GNU.sparse.major";
+pub const PAX_GNUSPARSEMINOR: &str = "GNU.sparse.minor";
+pub const PAX_GNUSPARSESIZE: &str = "GNU.sparse.size";
+pub const PAX_GNUSPARSEREALSIZE: &str = "GNU.sparse.realsize";
+
/// An iterator over the pax extensions in an archive entry.
///
/// This iterator yields structures which can themselves be parsed into
@@ -30,13 +60,13 @@ pub struct PaxExtension<'entry> {
value: &'entry [u8],
}
-pub fn pax_extensions_size(a: &[u8]) -> Option<u64> {
+pub fn pax_extensions_value(a: &[u8], key: &str) -> Option<u64> {
for extension in PaxExtensions::new(a) {
let current_extension = match extension {
Ok(ext) => ext,
Err(_) => return None,
};
- if current_extension.key() != Ok("size") {
+ if current_extension.key() != Ok(key) {
continue;
}
@@ -44,11 +74,11 @@ pub fn pax_extensions_size(a: &[u8]) -> Option<u64> {
Ok(value) => value,
Err(_) => return None,
};
- let size = match value.parse::<u64>() {
- Ok(size) => size,
+ let result = match value.parse::<u64>() {
+ Ok(result) => result,
Err(_) => return None,
};
- return Some(size);
+ return Some(result);
}
None
}
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());
+ }
+ }
+}