summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiuseppe Scrivano <gscrivan@redhat.com>2018-10-09 10:48:28 +0200
committerGiuseppe Scrivano <gscrivan@redhat.com>2018-10-14 16:57:30 +0200
commit6dd6ce1ebcdb17023f09fad93698d09408227385 (patch)
tree7eaf26aff02dc9da3259511f1967d80ed0eaf855
parent2ad6012ea1943cb045ebc1a7071c9a9a61538d11 (diff)
downloadpodman-6dd6ce1ebcdb17023f09fad93698d09408227385.tar.gz
podman-6dd6ce1ebcdb17023f09fad93698d09408227385.tar.bz2
podman-6dd6ce1ebcdb17023f09fad93698d09408227385.zip
volume: resolve symlinks in paths
ensure the volume paths are resolved in the mountpoint scope. Otherwise we might end up using host paths. Closes: https://github.com/containers/libpod/issues/1608 Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
-rw-r--r--libpod/container_internal.go15
1 files changed, 13 insertions, 2 deletions
diff --git a/libpod/container_internal.go b/libpod/container_internal.go
index 0a17996d6..9291d72c1 100644
--- a/libpod/container_internal.go
+++ b/libpod/container_internal.go
@@ -13,6 +13,7 @@ import (
"strings"
"syscall"
+ "github.com/containers/buildah/imagebuildah"
"github.com/containers/libpod/pkg/chrootuser"
"github.com/containers/libpod/pkg/hooks"
"github.com/containers/libpod/pkg/hooks/exec"
@@ -1193,8 +1194,6 @@ func (c *Container) addLocalVolumes(ctx context.Context, g *generate.Generator)
continue
}
volumePath := filepath.Join(c.config.StaticDir, "volumes", k)
- srcPath := filepath.Join(mountPoint, k)
-
var (
uid uint32
gid uint32
@@ -1209,6 +1208,18 @@ func (c *Container) addLocalVolumes(ctx context.Context, g *generate.Generator)
}
}
+ // Ensure the symlinks are resolved
+ resolvedSymlink, err := imagebuildah.ResolveSymLink(mountPoint, k)
+ if err != nil {
+ return errors.Wrapf(ErrCtrStateInvalid, "cannot resolve %s in %s for container %s", k, mountPoint, c.ID())
+ }
+ var srcPath string
+ if resolvedSymlink != "" {
+ srcPath = filepath.Join(mountPoint, resolvedSymlink)
+ } else {
+ srcPath = filepath.Join(mountPoint, k)
+ }
+
if _, err := os.Stat(srcPath); os.IsNotExist(err) {
logrus.Infof("Volume image mount point %s does not exist in root FS, need to create it", k)
if err = os.MkdirAll(srcPath, 0755); err != nil {