mirror of
https://github.com/drakkan/sftpgo.git
synced 2025-12-07 23:00:55 +03: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:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user