diff --git a/sftpd/sftpd.go b/sftpd/sftpd.go index c562d03d..5a744997 100644 --- a/sftpd/sftpd.go +++ b/sftpd/sftpd.go @@ -424,7 +424,7 @@ func executeAction(operation, username, path, target, sshCmd string) error { if _, err = os.Stat(actions.Command); err == nil { command := exec.Command(actions.Command, operation, username, path, target, sshCmd) err = command.Start() - logger.Debug(logSender, "", "start command %#v with arguments: %v, %v, %v, %v %v, error: %v", + logger.Debug(logSender, "", "start command %#v with arguments: %#v, %#v, %#v, %#v, %#v, error: %v", actions.Command, operation, username, path, target, sshCmd, err) if err == nil { // we are in a goroutine but we don't want to block here, this way we can send the diff --git a/sftpd/ssh_cmd.go b/sftpd/ssh_cmd.go index fc373555..a51a9eec 100644 --- a/sftpd/ssh_cmd.go +++ b/sftpd/ssh_cmd.go @@ -174,8 +174,7 @@ func (c *sshCommand) executeSystemCommand(command systemCommand) error { c.connection.channel.Close() } var once sync.Once - var wg sync.WaitGroup - wg.Add(2) + commandResponse := make(chan bool) go func() { defer stdin.Close() @@ -207,7 +206,6 @@ func (c *sshCommand) executeSystemCommand(command systemCommand) error { if e != nil { once.Do(closeCmdOnError) } - wg.Done() }() go func() { @@ -235,7 +233,7 @@ func (c *sshCommand) executeSystemCommand(command systemCommand) error { if e != nil { once.Do(closeCmdOnError) } - wg.Done() + commandResponse <- true }() go func() { @@ -265,7 +263,7 @@ func (c *sshCommand) executeSystemCommand(command systemCommand) error { } }() - wg.Wait() + <-commandResponse err = command.cmd.Wait() c.sendExitStatus(err) c.rescanHomeDir() @@ -290,7 +288,7 @@ func (c *sshCommand) getSystemCommand() (systemCommand, error) { args = args[:len(args)-1] args = append(args, path) } - c.connection.Log(logger.LevelDebug, logSenderSSH, "new system command: %v, with args: %v path: %v", c.command, args, path) + c.connection.Log(logger.LevelDebug, logSenderSSH, "new system command %#v, with args: %v path: %v", c.command, args, path) cmd := exec.Command(c.command, args...) uid := c.connection.User.GetUID() gid := c.connection.User.GetGID()