diff --git a/integration-cli/docker_cli_run_test.go b/integration-cli/docker_cli_run_test.go index fc71f01820..c4261a081c 100644 --- a/integration-cli/docker_cli_run_test.go +++ b/integration-cli/docker_cli_run_test.go @@ -945,4 +945,4 @@ func TestModeHostname(t *testing.T) { deleteAllContainers() logDone("run - hostname and several network modes") -} +} \ No newline at end of file diff --git a/pkg/symlink/fs.go b/pkg/symlink/fs.go index 257491f91b..32ca06b780 100644 --- a/pkg/symlink/fs.go +++ b/pkg/symlink/fs.go @@ -13,8 +13,6 @@ const maxLoopCounter = 100 // FollowSymlink will follow an existing link and scope it to the root // path provided. func FollowSymlinkInScope(link, root string) (string, error) { - prev := "/" - root, err := filepath.Abs(root) if err != nil { return "", err @@ -25,10 +23,17 @@ func FollowSymlinkInScope(link, root string) (string, error) { return "", err } + if link == root { + return root, nil + } + + if !strings.HasPrefix(filepath.Dir(link), root) { return "", fmt.Errorf("%s is not within %s", link, root) } + prev := "/" + for _, p := range strings.Split(link, "/") { prev = filepath.Join(prev, p) prev = filepath.Clean(prev)