The following pull request was submitted through Github.
It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/6879

This e-mail was sent by the LXC bot, direct replies will not reach the author
unless they happen to be subscribed to this list.

=== Description (from pull-request) ===

From 17356bee9218a311688299cac52bd8f6adb4fc77 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Thu, 13 Feb 2020 16:13:37 -0500
Subject: [PATCH 1/2] shared/util: Tweak HostPathFollow to use readlink
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
---
 shared/util.go | 16 +++++++++-------
 1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/shared/util.go b/shared/util.go
index 0db130129f..aae5defc6f 100644
--- a/shared/util.go
+++ b/shared/util.go
@@ -109,20 +109,22 @@ func IsUnixSocket(path string) bool {
 // HostPathFollow takes a valid path (from HostPath) and resolves it
 // all the way to its target or to the last which can be resolved.
 func HostPathFollow(path string) string {
-       // Check if the path is already snap-aware
-       for _, prefix := range []string{"/dev", "/snap", "/var/snap", 
"/var/lib/snapd"} {
-               if path == prefix || strings.HasPrefix(path, fmt.Sprintf("%s/", 
prefix)) {
-                       return path
-               }
+       // Check if we're running in a snap package.
+       _, inSnap := os.LookupEnv("SNAP")
+       snapName := os.Getenv("SNAP_NAME")
+       if !inSnap || snapName != "lxd" {
+               return path
        }
 
+       // Rely on "readlink -m" to do the right thing.
        for {
-               target, err := os.Readlink(path)
+               target, err := RunCommand("readlink", "-m", path)
                if err != nil {
                        return path
                }
+               target = strings.TrimSpace(target)
 
-               if target == path {
+               if path == HostPath(target) {
                        return path
                }
 

From 47ec76da72533100a019b0f14cf3dd4efe3433c2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?St=C3=A9phane=20Graber?= <stgra...@ubuntu.com>
Date: Thu, 13 Feb 2020 16:13:40 -0500
Subject: [PATCH 2/2] lxc/file: Expand complex symlink chains
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Closes #6874

Signed-off-by: Stéphane Graber <stgra...@ubuntu.com>
---
 lxc/file.go | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/lxc/file.go b/lxc/file.go
index aa7167a84b..82c8fe26b3 100644
--- a/lxc/file.go
+++ b/lxc/file.go
@@ -235,7 +235,7 @@ func (c *cmdFilePull) Run(cmd *cobra.Command, args 
[]string) error {
        }
 
        // Determine the target
-       target := shared.HostPath(filepath.Clean(args[len(args)-1]))
+       target := shared.HostPathFollow(filepath.Clean(args[len(args)-1]))
        targetIsDir := false
        sb, err := os.Stat(target)
        if err != nil && !os.IsNotExist(err) {
@@ -457,7 +457,7 @@ func (c *cmdFilePush) Run(cmd *cobra.Command, args 
[]string) error {
        // Make a list of paths to transfer
        sourcefilenames := []string{}
        for _, fname := range args[:len(args)-1] {
-               sourcefilenames = append(sourcefilenames, 
shared.HostPath(filepath.Clean(fname)))
+               sourcefilenames = append(sourcefilenames, 
shared.HostPathFollow(filepath.Clean(fname)))
        }
 
        // Determine the target mode
@@ -483,7 +483,7 @@ func (c *cmdFilePush) Run(cmd *cobra.Command, args 
[]string) error {
 
                // Create needed paths if requested
                if c.file.flagMkdir {
-                       f, err := os.Open(args[0])
+                       f, err := os.Open(sourcefilenames[0])
                        if err != nil {
                                return err
                        }
@@ -535,9 +535,6 @@ func (c *cmdFilePush) Run(cmd *cobra.Command, args 
[]string) error {
                if f == "-" {
                        file = os.Stdin
                } else {
-                       // Follow symlinks within the snap environment.
-                       f = shared.HostPathFollow(f)
-
                        file, err = os.Open(f)
                        if err != nil {
                                return err
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to