From 505ef72e6978bcba3dbad8e03e3d1d9aae1e8580 Mon Sep 17 00:00:00 2001 From: Roman Khavronenko Date: Wed, 16 Aug 2023 14:45:35 +0200 Subject: [PATCH] vmbackup: correctly check if specified `-dst` belongs to specified `-storageDataPath` (#4841) See this issue https://github.com/VictoriaMetrics/VictoriaMetrics/issues/4837 Signed-off-by: hagen1778 (cherry picked from commit 6da32a27acf601505ea8e5ceaea69d01c4c10ca0) --- app/vmbackup/main.go | 15 ++++++++++++++- app/vmbackup/main_test.go | 5 +++++ docs/CHANGELOG.md | 1 + 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/app/vmbackup/main.go b/app/vmbackup/main.go index d0900caa63..602e9275f0 100644 --- a/app/vmbackup/main.go +++ b/app/vmbackup/main.go @@ -220,7 +220,20 @@ func hasFilepathPrefix(path, prefix string) bool { if err != nil { return false } - return strings.HasPrefix(pathAbs, prefixAbs) + if prefixAbs == pathAbs { + return true + } + rel, err := filepath.Rel(prefixAbs, pathAbs) + if err != nil { + // if paths can't be related - they don't match + return false + } + if i := strings.Index(rel, "."); i == 0 { + // if path can be related only with . as first char - they still don't match + return false + } + // if paths are related - it is a match + return true } func newOriginFS() (common.OriginFS, error) { diff --git a/app/vmbackup/main_test.go b/app/vmbackup/main_test.go index f3288fb499..c1a87e51d3 100644 --- a/app/vmbackup/main_test.go +++ b/app/vmbackup/main_test.go @@ -26,4 +26,9 @@ func TestHasFilepathPrefix(t *testing.T) { f("fs://"+pwd+"/foo", pwd+"/foo/bar", false) f("fs://"+pwd+"/foo/bar", pwd+"/foo", true) f("fs://"+pwd+"/foo", pwd+"/bar", false) + f("fs:///data1", "/data", false) + f("fs:///data", "/data1", false) + f("fs:///data", "/data/foo", false) + f("fs:///data/foo", "/data", true) + f("fs:///data/foo/", "/data/", true) } diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index e9df27d132..eaeb37ea4e 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -30,6 +30,7 @@ The following `tip` changes can be tested by building VictoriaMetrics components * BUGFIX: remove `DEBUG` logging when parsing `if` filters inside [relabeling rules](https://docs.victoriametrics.com/vmagent.html#relabeling-enhancements) and when parsing `match` filters inside [stream aggregation rules](https://docs.victoriametrics.com/stream-aggregation.html). * BUGFIX: properly replace `:` chars in label names with `_` when `-usePromCompatibleNaming` command-line flag is passed to `vmagent`, `vminsert` or single-node VictoriaMetrics. This addresses [this comment](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/3113#issuecomment-1275077071). * BUGFIX: [Official Grafana dashboards for VictoriaMetrics](https://grafana.com/orgs/victoriametrics): fix display of ingested rows rate for `Samples ingested/s` and `Samples rate` panels for vmagent's dasbhoard. Previously, not all ingested protocols were accounted in these panels. An extra panel `Rows rate` was added to `Ingestion` section to display the split for rows ingested rate by protocol. +* BUGFIX: [vmbackup](https://docs.victoriametrics.com/vmbackup.html): correctly check if specified `-dst` belongs to specified `-storageDataPath`. See [this issue](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/4837). ## [v1.93.0](https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/v1.93.0)