mirror of
				https://github.com/containers/podman.git
				synced 2025-10-28 20:03:38 +08:00 
			
		
		
		
	 ffce869daa
			
		
	
	ffce869daa
	
	
	
		
			
			This reverts commit d3d97a25e8c87cf741b2e24ac01ef84962137106. This does not resolve the issues we expected it would, and has some unexpected side effects with the upcoming exec rework. Signed-off-by: Matthew Heon <matthew.heon@pm.me>
		
			
				
	
	
		
			51 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package define
 | |
| 
 | |
| import (
 | |
| 	"strings"
 | |
| 
 | |
| 	"github.com/pkg/errors"
 | |
| 	"github.com/sirupsen/logrus"
 | |
| )
 | |
| 
 | |
| const (
 | |
| 	// ExecErrorCodeGeneric is the default error code to return from an exec session if libpod failed
 | |
| 	// prior to calling the runtime
 | |
| 	ExecErrorCodeGeneric = 125
 | |
| 	// ExecErrorCodeCannotInvoke is the error code to return when the runtime fails to invoke a command
 | |
| 	// an example of this can be found by trying to execute a directory:
 | |
| 	// `podman exec -l /etc`
 | |
| 	ExecErrorCodeCannotInvoke = 126
 | |
| 	// ExecErrorCodeNotFound is the error code to return when a command cannot be found
 | |
| 	ExecErrorCodeNotFound = 127
 | |
| )
 | |
| 
 | |
| // TranslateExecErrorToExitCode takes an error and checks whether it
 | |
| // has a predefined exit code associated. If so, it returns that, otherwise it returns
 | |
| // the exit code originally stated in libpod.Exec()
 | |
| func TranslateExecErrorToExitCode(originalEC int, err error) int {
 | |
| 	if errors.Cause(err) == ErrOCIRuntimePermissionDenied {
 | |
| 		return ExecErrorCodeCannotInvoke
 | |
| 	}
 | |
| 	if errors.Cause(err) == ErrOCIRuntimeNotFound {
 | |
| 		return ExecErrorCodeNotFound
 | |
| 	}
 | |
| 	return originalEC
 | |
| }
 | |
| 
 | |
| // ExitCode reads the error message when failing to executing container process
 | |
| // and then returns 0 if no error, ExecErrorCodeNotFound if command does not exist, or ExecErrorCodeCannotInvoke for
 | |
| // all other errors
 | |
| func ExitCode(err error) int {
 | |
| 	if err == nil {
 | |
| 		return 0
 | |
| 	}
 | |
| 	e := strings.ToLower(err.Error())
 | |
| 	logrus.Debugf("ExitCode msg: %q", e)
 | |
| 	if strings.Contains(e, "not found") ||
 | |
| 		strings.Contains(e, "no such file") {
 | |
| 		return ExecErrorCodeNotFound
 | |
| 	}
 | |
| 
 | |
| 	return ExecErrorCodeCannotInvoke
 | |
| }
 |