summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
authorcdoern <cbdoer23@g.holycross.edu>2021-11-08 11:25:47 -0500
committercdoern <cbdoer23@g.holycross.edu>2021-11-11 20:14:38 -0500
commitac38eca3fdaa723a6c96fd2bcfa882d1ab2a09fb (patch)
tree506d9007dea782dbb5805046abd3f38c9ea61523 /cmd
parentffa5ed0e0e00f79a1f3b6a88bf9efce3dbb19207 (diff)
downloadpodman-ac38eca3fdaa723a6c96fd2bcfa882d1ab2a09fb.tar.gz
podman-ac38eca3fdaa723a6c96fd2bcfa882d1ab2a09fb.tar.bz2
podman-ac38eca3fdaa723a6c96fd2bcfa882d1ab2a09fb.zip
Podman Image SCP transfer patch
Fixed syntax so that podman image scp transfer works with no user specified. This command can only be executed as root so to obtain the default user, I searched for the SUDO_USER environmental variable. If that is not found, we error out and inform the user to set this variable and make sure they are running as root Signed-off-by: cdoern <cdoern@redhat.com> Signed-off-by: cdoern <cbdoer23@g.holycross.edu>
Diffstat (limited to 'cmd')
-rw-r--r--cmd/podman/images/scp.go28
1 files changed, 22 insertions, 6 deletions
diff --git a/cmd/podman/images/scp.go b/cmd/podman/images/scp.go
index 8402d9a10..a7d5c5058 100644
--- a/cmd/podman/images/scp.go
+++ b/cmd/podman/images/scp.go
@@ -137,9 +137,15 @@ func scp(cmd *cobra.Command, args []string) (finalErr error) {
scpOpts.Save.Format = "oci-archive"
abiErr := abiEng.Save(context.Background(), scpOpts.SourceImageName, []string{}, scpOpts.Save) // save the image locally before loading it on remote, local, or ssh
if abiErr != nil {
- errors.Wrapf(abiErr, "could not save image as specified")
+ return errors.Wrapf(abiErr, "could not save image as specified")
}
if !rootless.IsRootless() && scpOpts.Rootless {
+ if scpOpts.User == "" {
+ scpOpts.User = os.Getenv("SUDO_USER")
+ if scpOpts.User == "" {
+ return errors.New("could not obtain root user, make sure the environmental variable SUDO_USER is set, and that this command is being run as root")
+ }
+ }
err := abiEng.Transfer(context.Background(), scpOpts)
if err != nil {
return err
@@ -274,7 +280,13 @@ func parseArgs(args []string, cfg *config.Config) (map[string]config.Destination
cliConnections := []string{}
switch len(args) {
case 1:
- if strings.Contains(args[0], "::") {
+ if strings.Contains(args[0], "localhost") {
+ if strings.Split(args[0], "@")[0] != "root" {
+ return nil, errors.Wrapf(define.ErrInvalidArg, "cannot transfer images from any user besides root using sudo")
+ }
+ scpOpts.Rootless = true
+ scpOpts.SourceImageName = strings.Split(args[0], "::")[1]
+ } else if strings.Contains(args[0], "::") {
scpOpts.FromRemote = true
cliConnections = append(cliConnections, args[0])
} else {
@@ -286,11 +298,15 @@ func parseArgs(args []string, cfg *config.Config) (map[string]config.Destination
}
case 2:
if strings.Contains(args[0], "localhost") || strings.Contains(args[1], "localhost") { // only supporting root to local using sudo at the moment
- scpOpts.Rootless = true
- scpOpts.User = strings.Split(args[1], "@")[0]
- scpOpts.SourceImageName = strings.Split(args[0], "::")[1]
if strings.Split(args[0], "@")[0] != "root" {
- return nil, errors.Wrapf(define.ErrInvalidArg, "cannot transfer images from any user besides root using sudo")
+ return nil, errors.Wrapf(define.ErrInvalidArg, "currently, transferring images to a user account is not supported")
+ }
+ if len(strings.Split(args[0], "::")) > 1 {
+ scpOpts.Rootless = true
+ scpOpts.User = strings.Split(args[1], "@")[0]
+ scpOpts.SourceImageName = strings.Split(args[0], "::")[1]
+ } else {
+ return nil, errors.Wrapf(define.ErrInvalidArg, "currently, you cannot rename images during the transfer or transfer them to a user account")
}
} else if strings.Contains(args[0], "::") {
if !(strings.Contains(args[1], "::")) && remoteArgLength(args[0], 1) == 0 { // if an image is specified, this mean we are loading to our client