From caf9f4b80fde985ef1afccf259be85f0c6655e7e Mon Sep 17 00:00:00 2001 From: Gregory Kurtzer Date: Wed, 1 Sep 2021 21:13:46 -0700 Subject: [PATCH] Have more intelligence on splitting bind paths --- .../app/wwctl/container/exec/child/main.go | 6 ++- internal/pkg/util/util.go | 40 +++++++++++++++++++ 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/internal/app/wwctl/container/exec/child/main.go b/internal/app/wwctl/container/exec/child/main.go index 1e464fbd..8d797eef 100644 --- a/internal/app/wwctl/container/exec/child/main.go +++ b/internal/app/wwctl/container/exec/child/main.go @@ -7,10 +7,10 @@ import ( "fmt" "os" "path" - "strings" "syscall" "github.com/hpcng/warewulf/internal/pkg/container" + "github.com/hpcng/warewulf/internal/pkg/util" "github.com/hpcng/warewulf/internal/pkg/wwlog" "github.com/spf13/cobra" ) @@ -38,9 +38,11 @@ func CobraRunE(cmd *cobra.Command, args []string) error { var source string var dest string - bind := strings.Split(b, ":") + bind := util.SplitPaths(b, ":") source = bind[0] + fmt.Println(bind) + if len(bind) == 1 { dest = source } else { diff --git a/internal/pkg/util/util.go b/internal/pkg/util/util.go index c2698ce4..146b86e2 100644 --- a/internal/pkg/util/util.go +++ b/internal/pkg/util/util.go @@ -315,3 +315,43 @@ func CopyUIDGID(source string, dest string) error { err = os.Chown(dest, UID, GID) return err } + +func SplitEscaped(input, delim, escape string) []string { + var ret []string + str := "" + for i := 1; i < len(input); i++ { + str += string(input[i-1]) + if string(input[i]) == delim && string(input[i-1]) != escape { + i++ + ret = append(ret, str) + str = "" + } + if string(input[i]) == escape { + i++ + } + + } + str += string(input[len(input)-1]) + ret = append(ret, str) + + return (ret) +} + +func SplitPaths(input, delim string) []string { + var ret []string + str := "" + for i := 1; i < len(input); i++ { + str += string(input[i-1]) + //if (string(input[i]) == delim && string(input[i-1]) != "/") && (IsDir(str) || IsFile(str)) { + if string(input[i]) == delim && (IsDir(str) || IsFile(str)) { + i++ + ret = append(ret, str) + str = "" + } + + } + str += string(input[len(input)-1]) + ret = append(ret, str) + + return (ret) +}