mirror of
https://github.com/drakkan/sftpgo.git
synced 2024-11-22 07:30:25 +00:00
ssh system commands: wait on write from command out to network
we only need to wait for the write from the local command to the ssh channel. There is no need to wait for the write from ssh channel to the local command stdin
This commit is contained in:
parent
7de0fe467a
commit
bc844105b2
2 changed files with 5 additions and 7 deletions
|
@ -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
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Reference in a new issue