improve: shell escaping, allow for whitespace and single quotes (#108)

This commit is contained in:
Damian Kaczmarek 2018-02-27 00:48:38 -06:00 committed by Bo-Yi Wu
parent f92f762c9d
commit 7f4cb1c1d0
2 changed files with 6 additions and 3 deletions

View File

@ -43,6 +43,10 @@ type (
}
)
func escapeArg(arg string) string {
return "'" + strings.Replace(arg, "'", `'\''`, -1) + "'"
}
func (p Plugin) exec(host string, wg *sync.WaitGroup, errChannel chan error) {
// Create MakeConfig instance with remote username, server address and path to private key.
ssh := &easyssh.MakeConfig{
@ -72,8 +76,7 @@ func (p Plugin) exec(host string, wg *sync.WaitGroup, errChannel chan error) {
for _, key := range p.Config.Envs {
key = strings.ToUpper(key)
val := os.Getenv(key)
val = strings.Replace(val, " ", "", -1)
env = append(env, key+"='"+val+"'")
env = append(env, key+"="+escapeArg(val))
}
p.Config.Script = append(env, p.Config.Script...)

View File

@ -232,7 +232,7 @@ func TestSSHCommandExitCodeError(t *testing.T) {
}
func TestSetENV(t *testing.T) {
os.Setenv("FOO", "1)")
os.Setenv("FOO", `' 1) '`)
plugin := Plugin{
Config: Config{
Host: []string{"localhost"},