This commit is contained in:
Dennis Keitzel 2018-07-24 15:37:41 +00:00 committed by GitHub
commit ad9f649076
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -21,6 +21,12 @@ import (
"code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/setting"
) )
// environmentVariable will be used to parse environment variables from the SSH wire format.
type environmentVariable struct {
Name string
Value string
}
func cleanCommand(cmd string) string { func cleanCommand(cmd string) string {
i := strings.Index(cmd, "git") i := strings.Index(cmd, "git")
if i == -1 { if i == -1 {
@ -48,16 +54,14 @@ func handleServerConn(keyID string, chans <-chan ssh.NewChannel) {
payload := cleanCommand(string(req.Payload)) payload := cleanCommand(string(req.Payload))
switch req.Type { switch req.Type {
case "env": case "env":
args := strings.Split(strings.Replace(payload, "\x00", "", -1), "\v") env := environmentVariable{}
if len(args) != 2 { if err := ssh.Unmarshal(req.Payload, &env); err != nil {
log.Warn("SSH: Invalid env arguments: '%#v'", args) log.Warn("SSH: Unable to parse environment variable: %v", err)
continue continue
} }
args[0] = strings.TrimLeft(args[0], "\x04") if _, _, err = com.ExecCmdBytes("env", env.Name+"="+env.Value); err != nil {
_, _, err := com.ExecCmdBytes("env", args[0]+"="+args[1]) log.Warn("SSH: Unable to set environment variable %v=%v: %v", env.Name, env.Value, err)
if err != nil { continue
log.Error(3, "env: %v", err)
return
} }
case "exec": case "exec":
cmdName := strings.TrimLeft(payload, "'()") cmdName := strings.TrimLeft(payload, "'()")