Merge d7ca1f5bfd
into d0fef4395f
This commit is contained in:
commit
ad9f649076
|
@ -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, "'()")
|
||||||
|
|
Loading…
Reference in New Issue
Block a user