From c8ed10095d4cdc01705e5f01f849f8850a0b7395 Mon Sep 17 00:00:00 2001 From: Gabriel Goller Date: Thu, 3 Aug 2023 17:22:38 +0200 Subject: [PATCH] fix #4380: stat() is run when file is executed When executing `proxmox-backup-client backup ... --exclude "test/test.txt"` it still executed stat() on "test.txt", which won't work when the current user doesn't have access to the file or the parent folder. Now we check if the file is excluded, and if it is not, then we execute stat(). Signed-off-by: Gabriel Goller --- pbs-client/src/pxar/create.rs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/pbs-client/src/pxar/create.rs b/pbs-client/src/pxar/create.rs index 2577cf98..c573c2a3 100644 --- a/pbs-client/src/pxar/create.rs +++ b/pbs-client/src/pxar/create.rs @@ -434,6 +434,15 @@ impl Archiver { assert_single_path_component(os_file_name)?; let full_path = self.path.join(os_file_name); + let match_path = PathBuf::from("/").join(full_path.clone()); + if self + .patterns + .matches(match_path.as_os_str().as_bytes(), None) + == Some(MatchType::Exclude) + { + continue; + } + let stat = match nix::sys::stat::fstatat( dir_fd, file_name.as_c_str(), @@ -444,15 +453,6 @@ impl Archiver { Err(err) => return Err(err).context(format!("stat failed on {:?}", full_path)), }; - let match_path = PathBuf::from("/").join(full_path.clone()); - if self - .patterns - .matches(match_path.as_os_str().as_bytes(), Some(stat.st_mode)) - == Some(MatchType::Exclude) - { - continue; - } - self.entry_counter += 1; if self.entry_counter > self.entry_limit { bail!(