From 7d06bc766cb1bb316be260d3af2b9dcab0323bfd Mon Sep 17 00:00:00 2001 From: sawka Date: Mon, 22 Aug 2022 16:24:53 -0700 Subject: [PATCH] rename env to env0. add envcomplete bool --- pkg/packet/packet.go | 25 +++++++++++++------------ pkg/shexec/shexec.go | 17 ++++++++++------- 2 files changed, 23 insertions(+), 19 deletions(-) diff --git a/pkg/packet/packet.go b/pkg/packet/packet.go index 380fce05..985b89b9 100644 --- a/pkg/packet/packet.go +++ b/pkg/packet/packet.go @@ -438,7 +438,7 @@ type InitPacketType struct { MShellHomeDir string `json:"mshellhomedir,omitempty"` HomeDir string `json:"homedir,omitempty"` Cwd string `json:"cwd,omitempty"` - Env []byte `json:"env,omitempty"` // "env -0" format + Env0 []byte `json:"env0,omitempty"` // "env -0" format User string `json:"user,omitempty"` HostName string `json:"hostname,omitempty"` NotFound bool `json:"notfound,omitempty"` @@ -532,17 +532,18 @@ type RunDataType struct { } type RunPacketType struct { - Type string `json:"type"` - ReqId string `json:"reqid"` - CK base.CommandKey `json:"ck"` - Command string `json:"command"` - Cwd string `json:"cwd,omitempty"` - Env map[string]string `json:"env,omitempty"` - UsePty bool `json:"usepty,omitempty"` - TermOpts *TermOpts `json:"termopts,omitempty"` - Fds []RemoteFd `json:"fds,omitempty"` - RunData []RunDataType `json:"rundata,omitempty"` - Detached bool `json:"detached,omitempty"` + Type string `json:"type"` + ReqId string `json:"reqid"` + CK base.CommandKey `json:"ck"` + Command string `json:"command"` + Cwd string `json:"cwd,omitempty"` + Env0 []byte `json:"env0,omitempty"` // in "env -0" format + EnvComplete bool `json:"envcomplete,omitempty"` // set to true if env0 is complete (the default env should not be set) + UsePty bool `json:"usepty,omitempty"` + TermOpts *TermOpts `json:"termopts,omitempty"` + Fds []RemoteFd `json:"fds,omitempty"` + RunData []RunDataType `json:"rundata,omitempty"` + Detached bool `json:"detached,omitempty"` } func (*RunPacketType) GetType() string { diff --git a/pkg/shexec/shexec.go b/pkg/shexec/shexec.go index 5cb7fb68..1fa381a0 100644 --- a/pkg/shexec/shexec.go +++ b/pkg/shexec/shexec.go @@ -159,9 +159,6 @@ func UpdateCmdEnv(cmd *exec.Cmd, envVars map[string]string) { if len(envVars) == 0 { return } - if cmd.Env == nil { - cmd.Env = os.Environ() - } found := make(map[string]bool) var newEnv []string for _, envStr := range cmd.Env { @@ -201,7 +198,10 @@ func MakeSimpleStaticWriterPipe(data []byte) (*os.File, error) { func MakeDetachedExecCmd(pk *packet.RunPacketType, cmdTty *os.File) (*exec.Cmd, error) { ecmd := exec.Command("bash", "-c", pk.Command) - UpdateCmdEnv(ecmd, pk.Env) + if !pk.EnvComplete { + ecmd.Env = os.Environ() + } + UpdateCmdEnv(ecmd, parseEnv0(pk.Env0)) UpdateCmdEnv(ecmd, map[string]string{"TERM": getTermType(pk)}) if pk.Cwd != "" { ecmd.Dir = base.ExpandHomeDir(pk.Cwd) @@ -828,7 +828,10 @@ func getTermType(pk *packet.RunPacketType) string { func RunCommandSimple(pk *packet.RunPacketType, sender *packet.PacketSender) (*ShExecType, error) { cmd := MakeShExec(pk.CK, nil) cmd.Cmd = exec.Command("bash", "-c", pk.Command) - UpdateCmdEnv(cmd.Cmd, pk.Env) + if !pk.EnvComplete { + cmd.Cmd.Env = os.Environ() + } + UpdateCmdEnv(cmd.Cmd, parseEnv0(pk.Env0)) if pk.Cwd != "" { cmd.Cmd.Dir = base.ExpandHomeDir(pk.Cwd) } @@ -1104,7 +1107,7 @@ func MakeServerInitPacket() (*packet.InitPacketType, error) { return nil, err } initPacket.Cwd = cwd - initPacket.Env = env + initPacket.Env0 = env initPacket.RemoteId, err = base.GetRemoteId() if err != nil { return nil, err @@ -1112,7 +1115,7 @@ func MakeServerInitPacket() (*packet.InitPacketType, error) { return initPacket, nil } -func parseEnv(env []byte) map[string]string { +func parseEnv0(env []byte) map[string]string { envLines := bytes.Split(env, []byte{0}) rtn := make(map[string]string) for _, envLine := range envLines {