mirror of
				https://github.com/k3s-io/kubernetes.git
				synced 2025-10-31 05:40:42 +00:00 
			
		
		
		
	Merge pull request #76227 from sawlanipradeep/window-plugin-fix
Replace syscall.Execve with exec.Command.
This commit is contained in:
		| @@ -22,6 +22,7 @@ import ( | ||||
| 	"io" | ||||
| 	"os" | ||||
| 	"os/exec" | ||||
| 	"runtime" | ||||
| 	"strings" | ||||
| 	"syscall" | ||||
|  | ||||
| @@ -364,7 +365,24 @@ func (h *DefaultPluginHandler) Lookup(filename string) (string, bool) { | ||||
|  | ||||
| // Execute implements PluginHandler | ||||
| func (h *DefaultPluginHandler) Execute(executablePath string, cmdArgs, environment []string) error { | ||||
| 	return syscall.Exec(executablePath, cmdArgs, environment) | ||||
|  | ||||
| 	// Windows does not support exec syscall. | ||||
| 	if runtime.GOOS == "windows" { | ||||
| 		cmd := exec.Command(executablePath, cmdArgs...) | ||||
| 		cmd.Stdout = os.Stdout | ||||
| 		cmd.Stderr = os.Stderr | ||||
| 		cmd.Stdin = os.Stdin | ||||
| 		cmd.Env = environment | ||||
| 		err := cmd.Run() | ||||
| 		if err == nil { | ||||
| 			os.Exit(0) | ||||
| 		} | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| 	// invoke cmd binary relaying the environment and args given | ||||
| 	// append executablePath to cmdArgs, as execve will make first argument the "binary name". | ||||
| 	return syscall.Exec(executablePath, append([]string{executablePath}, cmdArgs...), environment) | ||||
| } | ||||
|  | ||||
| // HandlePluginCommand receives a pluginHandler and command-line arguments and attempts to find | ||||
| @@ -398,9 +416,7 @@ func HandlePluginCommand(pluginHandler PluginHandler, cmdArgs []string) error { | ||||
| 	} | ||||
|  | ||||
| 	// invoke cmd binary relaying the current environment and args given | ||||
| 	// remainingArgs will always have at least one element. | ||||
| 	// execve will make remainingArgs[0] the "binary name". | ||||
| 	if err := pluginHandler.Execute(foundBinaryPath, append([]string{foundBinaryPath}, cmdArgs[len(remainingArgs):]...), os.Environ()); err != nil { | ||||
| 	if err := pluginHandler.Execute(foundBinaryPath, cmdArgs[len(remainingArgs):], os.Environ()); err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user