diff options
-rw-r--r-- | cmd/podman/cp.go | 34 | ||||
-rw-r--r-- | cmd/podman/main.go | 1 | ||||
-rw-r--r-- | cmd/podman/pull.go | 9 | ||||
-rw-r--r-- | cmd/podman/runlabel.go | 4 |
4 files changed, 39 insertions, 9 deletions
diff --git a/cmd/podman/cp.go b/cmd/podman/cp.go index 89114fda1..d9f230b67 100644 --- a/cmd/podman/cp.go +++ b/cmd/podman/cp.go @@ -1,8 +1,10 @@ package main import ( + "io/ioutil" "os" "path/filepath" + "strconv" "strings" "github.com/containers/buildah/util" @@ -10,6 +12,7 @@ import ( "github.com/containers/libpod/cmd/podman/libpodruntime" "github.com/containers/libpod/libpod" "github.com/containers/libpod/pkg/chrootuser" + "github.com/containers/libpod/pkg/rootless" "github.com/containers/storage" "github.com/containers/storage/pkg/archive" "github.com/containers/storage/pkg/chrootarchive" @@ -48,6 +51,9 @@ func cpCmd(c *cliconfig.CpValues) error { if len(args) != 2 { return errors.Errorf("you must provide a source path and a destination path") } + if os.Geteuid() != 0 { + rootless.SetSkipStorageSetup(true) + } runtime, err := libpodruntime.GetRuntime(&c.PodmanCommand) if err != nil { @@ -76,6 +82,34 @@ func copyBetweenHostAndContainer(runtime *libpod.Runtime, src string, dest strin ctr = destCtr } + if os.Geteuid() != 0 { + s, err := ctr.State() + if err != nil { + return err + } + var became bool + var ret int + if s == libpod.ContainerStateRunning || s == libpod.ContainerStatePaused { + data, err := ioutil.ReadFile(ctr.Config().ConmonPidFile) + if err != nil { + return errors.Wrapf(err, "cannot read conmon PID file %q", ctr.Config().ConmonPidFile) + } + conmonPid, err := strconv.Atoi(string(data)) + if err != nil { + return errors.Wrapf(err, "cannot parse PID %q", data) + } + became, ret, err = rootless.JoinDirectUserAndMountNS(uint(conmonPid)) + } else { + became, ret, err = rootless.BecomeRootInUserNS() + } + if err != nil { + return err + } + if became { + os.Exit(ret) + } + } + mountPoint, err := ctr.Mount() if err != nil { return err diff --git a/cmd/podman/main.go b/cmd/podman/main.go index 990e55a8c..bb21f2f79 100644 --- a/cmd/podman/main.go +++ b/cmd/podman/main.go @@ -61,6 +61,7 @@ var cmdsNotRequiringRootless = map[*cobra.Command]bool{ _versionCommand: true, _createCommand: true, _execCommand: true, + _cpCommand: true, _exportCommand: true, //// `info` must be executed in an user namespace. //// If this change, please also update libpod.refreshRootless() diff --git a/cmd/podman/pull.go b/cmd/podman/pull.go index 0065e975a..476bccb0e 100644 --- a/cmd/podman/pull.go +++ b/cmd/podman/pull.go @@ -74,19 +74,16 @@ func pullCmd(c *cliconfig.PullValues) error { args := c.InputArgs if len(args) == 0 { - logrus.Errorf("an image name must be specified") - return nil + return errors.Errorf("an image name must be specified") } if len(args) > 1 { - logrus.Errorf("too many arguments. Requires exactly 1") - return nil + return errors.Errorf("too many arguments. Requires exactly 1") } arr := strings.SplitN(args[0], ":", 2) if len(arr) == 2 { if c.Bool("all-tags") { - logrus.Errorf("tag can't be used with --all-tags") - return nil + return errors.Errorf("tag can't be used with --all-tags") } } ctx := getContext() diff --git a/cmd/podman/runlabel.go b/cmd/podman/runlabel.go index 54f210e62..d466651f3 100644 --- a/cmd/podman/runlabel.go +++ b/cmd/podman/runlabel.go @@ -13,7 +13,6 @@ import ( "github.com/containers/libpod/libpod/image" "github.com/containers/libpod/utils" "github.com/pkg/errors" - "github.com/sirupsen/logrus" "github.com/spf13/cobra" ) @@ -87,8 +86,7 @@ func runlabelCmd(c *cliconfig.RunlabelValues) error { args := c.InputArgs if len(args) < 2 { - logrus.Errorf("the runlabel command requires at least 2 arguments: LABEL IMAGE") - return nil + return errors.Errorf("the runlabel command requires at least 2 arguments: LABEL IMAGE") } if c.Display && c.Quiet { return errors.Errorf("the display and quiet flags cannot be used together.") |