all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [PATCH proxmox-backup v2] fix #7382: correctly anchor nested paths for include/exclude patterns.
@ 2026-03-16 13:49 Manuel Federanko
  2026-03-16 14:26 ` superseded: " Manuel Federanko
  0 siblings, 1 reply; 2+ messages in thread
From: Manuel Federanko @ 2026-03-16 13:49 UTC (permalink / raw)
  To: pbs-devel

A pattern in a subdirectory would be built by just prepending the parent
directory. This could break anchored patterns, which wouldn't match if
the parent directory didn't start with a slash.
Fixed this by explicitly checking if the base path starts with a slash
and prepending it if it does not exist.

It worked for anchored patterns in the root backup directory because
here the pattern is "" + "/exclude".

old:
match_path = /level0/level1/exclude
pattern = level0/level1/exclude

new:
match_path = /level0/level1/exclude
pattern = /level0/level1/exclude

Tested by creating a directory structure as described in the bug ticket
and verifying the behavior.

Signed-off-by: Manuel Federanko <m.federanko@proxmox.com>
Fixes: https://bugzilla.proxmox.com/show_bug.cgi?id=7382
---
changed since v1:
* use path_bytes.starts_with.

 pbs-client/src/pxar/create.rs | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/pbs-client/src/pxar/create.rs b/pbs-client/src/pxar/create.rs
index 7f605a61..5400288c 100644
--- a/pbs-client/src/pxar/create.rs
+++ b/pbs-client/src/pxar/create.rs
@@ -537,13 +537,20 @@ impl Archiver {

             let mut buf;
             let (line, mode, anchored) = if line[0] == b'/' {
-                buf = Vec::with_capacity(path_bytes.len() + 1 + line.len());
+                buf = Vec::with_capacity(path_bytes.len() + 2 + line.len());
+                // need to anchor the base path if it is not
+                if path_bytes.len() > 0 && !path_bytes.starts_with(b"/") {
+                    buf.push(b'/');
+                }
                 buf.extend(path_bytes);
                 buf.extend(line);
                 (&buf[..], MatchType::Exclude, true)
             } else if line.starts_with(b"!/") {
                 // inverted case with absolute path
-                buf = Vec::with_capacity(path_bytes.len() + line.len());
+                buf = Vec::with_capacity(path_bytes.len() + 1 + line.len());
+                if path_bytes.len() > 0 && !path_bytes.starts_with(b"/") {
+                    buf.push(b'/');
+                }
                 buf.extend(path_bytes);
                 buf.extend(&line[1..]); // without the '!'
                 (&buf[..], MatchType::Include, true)
--
2.47.3




^ permalink raw reply	[flat|nested] 2+ messages in thread

* superseded: [PATCH proxmox-backup v2] fix #7382: correctly anchor nested paths for include/exclude patterns.
  2026-03-16 13:49 [PATCH proxmox-backup v2] fix #7382: correctly anchor nested paths for include/exclude patterns Manuel Federanko
@ 2026-03-16 14:26 ` Manuel Federanko
  0 siblings, 0 replies; 2+ messages in thread
From: Manuel Federanko @ 2026-03-16 14:26 UTC (permalink / raw)
  To: pbs-devel

Superseded-by: https://lore.proxmox.com/pbs-devel/20260316142342.67535-1-m.federanko@proxmox.com/T/#u




^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2026-03-16 14:26 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-03-16 13:49 [PATCH proxmox-backup v2] fix #7382: correctly anchor nested paths for include/exclude patterns Manuel Federanko
2026-03-16 14:26 ` superseded: " Manuel Federanko

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal