From 52948d32c802be125479cd6411a797e799755a8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Leszczy=C5=84ski?= <2000michal@wp.pl> Date: Wed, 5 Jun 2024 12:04:28 +0200 Subject: [PATCH] feat(rcserver): allow for cat operation on /backup/schema files For Scylla 6.0, schema is backed up in a json file which needs to be opened and applied to cluster via cql session by SM during restore. --- pkg/rclone/rcserver/rc.go | 2 +- pkg/rclone/rcserver/rchardening.go | 11 +++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/pkg/rclone/rcserver/rc.go b/pkg/rclone/rcserver/rc.go index 57d9a92ede..e2d0cbfd04 100644 --- a/pkg/rclone/rcserver/rc.go +++ b/pkg/rclone/rcserver/rc.go @@ -331,7 +331,7 @@ func init() { rc.Add(rc.Call{ Path: "operations/cat", AuthRequired: true, - Fn: wrap(rcCat, pathHasPrefix("backup/meta/")), + Fn: wrap(rcCat, pathHasPrefix("backup/meta/", "backup/schema/")), Title: "Concatenate any files and send them in response", Help: `This takes the following parameters diff --git a/pkg/rclone/rcserver/rchardening.go b/pkg/rclone/rcserver/rchardening.go index 3083e48d24..bab44693c0 100644 --- a/pkg/rclone/rcserver/rchardening.go +++ b/pkg/rclone/rcserver/rchardening.go @@ -26,7 +26,7 @@ func wrap(fn rc.Func, v paramsValidator) rc.Func { // pathHasPrefix reads "fs" and "remote" params, evaluates absolute path and // ensures it has the required prefix. -func pathHasPrefix(prefix string) paramsValidator { +func pathHasPrefix(prefixes ...string) paramsValidator { return func(ctx context.Context, in rc.Params) error { _, p, err := joined(in, "fs", "remote") if err != nil { @@ -37,10 +37,13 @@ func pathHasPrefix(prefix string) paramsValidator { i := strings.Index(p, "/") p = p[i+1:] - if !strings.HasPrefix(p, prefix) { - return fs.ErrorPermissionDenied + for _, prefix := range prefixes { + if strings.HasPrefix(p, prefix) { + return nil + } } - return nil + + return fs.ErrorPermissionDenied } }