diff options
Diffstat (limited to 'cmd/podman/system')
-rw-r--r-- | cmd/podman/system/migrate.go | 5 | ||||
-rw-r--r-- | cmd/podman/system/renumber.go | 5 | ||||
-rw-r--r-- | cmd/podman/system/reset.go | 5 | ||||
-rw-r--r-- | cmd/podman/system/unshare.go | 21 |
4 files changed, 29 insertions, 7 deletions
diff --git a/cmd/podman/system/migrate.go b/cmd/podman/system/migrate.go index b9dc272d7..d78ac7286 100644 --- a/cmd/podman/system/migrate.go +++ b/cmd/podman/system/migrate.go @@ -9,6 +9,7 @@ import ( "github.com/containers/common/pkg/completion" "github.com/containers/podman/v3/cmd/podman/registry" "github.com/containers/podman/v3/cmd/podman/validate" + "github.com/containers/podman/v3/libpod/define" "github.com/containers/podman/v3/pkg/domain/entities" "github.com/containers/podman/v3/pkg/domain/infra" "github.com/spf13/cobra" @@ -60,14 +61,14 @@ func migrate(cmd *cobra.Command, args []string) { engine, err := infra.NewSystemEngine(entities.MigrateMode, registry.PodmanConfig()) if err != nil { fmt.Println(err) - os.Exit(125) + os.Exit(define.ExecErrorCodeGeneric) } defer engine.Shutdown(registry.Context()) err = engine.Migrate(registry.Context(), cmd.Flags(), registry.PodmanConfig(), migrateOptions) if err != nil { fmt.Println(err) - os.Exit(125) + os.Exit(define.ExecErrorCodeGeneric) } os.Exit(0) } diff --git a/cmd/podman/system/renumber.go b/cmd/podman/system/renumber.go index 83a873c2a..f27abf570 100644 --- a/cmd/podman/system/renumber.go +++ b/cmd/podman/system/renumber.go @@ -9,6 +9,7 @@ import ( "github.com/containers/common/pkg/completion" "github.com/containers/podman/v3/cmd/podman/registry" "github.com/containers/podman/v3/cmd/podman/validate" + "github.com/containers/podman/v3/libpod/define" "github.com/containers/podman/v3/pkg/domain/entities" "github.com/containers/podman/v3/pkg/domain/infra" "github.com/spf13/cobra" @@ -47,14 +48,14 @@ func renumber(cmd *cobra.Command, args []string) { engine, err := infra.NewSystemEngine(entities.RenumberMode, registry.PodmanConfig()) if err != nil { fmt.Println(err) - os.Exit(125) + os.Exit(define.ExecErrorCodeGeneric) } defer engine.Shutdown(registry.Context()) err = engine.Renumber(registry.Context(), cmd.Flags(), registry.PodmanConfig()) if err != nil { fmt.Println(err) - os.Exit(125) + os.Exit(define.ExecErrorCodeGeneric) } os.Exit(0) } diff --git a/cmd/podman/system/reset.go b/cmd/podman/system/reset.go index c64d09ed2..8a05bb09f 100644 --- a/cmd/podman/system/reset.go +++ b/cmd/podman/system/reset.go @@ -11,6 +11,7 @@ import ( "github.com/containers/common/pkg/completion" "github.com/containers/podman/v3/cmd/podman/registry" "github.com/containers/podman/v3/cmd/podman/validate" + "github.com/containers/podman/v3/libpod/define" "github.com/containers/podman/v3/pkg/domain/entities" "github.com/containers/podman/v3/pkg/domain/infra" "github.com/sirupsen/logrus" @@ -87,13 +88,13 @@ WARNING! This will remove: engine, err := infra.NewSystemEngine(entities.ResetMode, registry.PodmanConfig()) if err != nil { logrus.Error(err) - os.Exit(125) + os.Exit(define.ExecErrorCodeGeneric) } defer engine.Shutdown(registry.Context()) if err := engine.Reset(registry.Context()); err != nil { logrus.Error(err) - os.Exit(125) + os.Exit(define.ExecErrorCodeGeneric) } os.Exit(0) } diff --git a/cmd/podman/system/unshare.go b/cmd/podman/system/unshare.go index f930d8b62..50230609e 100644 --- a/cmd/podman/system/unshare.go +++ b/cmd/podman/system/unshare.go @@ -2,6 +2,7 @@ package system import ( "os" + "os/exec" "github.com/containers/common/pkg/completion" "github.com/containers/podman/v3/cmd/podman/registry" @@ -50,5 +51,23 @@ func unshare(cmd *cobra.Command, args []string) error { args = []string{shell} } - return registry.ContainerEngine().Unshare(registry.Context(), args, unshareOptions) + err := registry.ContainerEngine().Unshare(registry.Context(), args, unshareOptions) + if err != nil { + if exitError, ok := err.(*exec.ExitError); ok { + // the user command inside the unshare env has failed + // we set the exit code, do not return the error to the user + // otherwise "exit status X" will be printed + registry.SetExitCode(exitError.ExitCode()) + return nil + } + // cmd.Run() can return fs.ErrNotExist, fs.ErrPermission or exec.ErrNotFound + // follow podman run/exec standard with the exit codes + if errors.Is(err, os.ErrNotExist) || errors.Is(err, exec.ErrNotFound) { + registry.SetExitCode(127) + } else if errors.Is(err, os.ErrPermission) { + registry.SetExitCode(126) + } + return err + } + return nil } |