diff --git a/sftpd/scp.go b/sftpd/scp.go index 50e631e26a6bb1643f8b0355f2dbc17886b2842e..a31903845ca89bd7f2dcf8fa3cd331bd8845cf32 100644 --- a/sftpd/scp.go +++ b/sftpd/scp.go @@ -28,10 +28,6 @@ type execMsg struct { Command string } -type exitStatusMsg struct { - Status uint32 -} - type scpCommand struct { connection Connection args []string diff --git a/sftpd/server.go b/sftpd/server.go index 6716283f21f4f23d5cb95f2f04d6657aec11fc86..bbb236ed8380b688b2f14d680f98315ec09b0763 100644 --- a/sftpd/server.go +++ b/sftpd/server.go @@ -30,6 +30,10 @@ const defaultPrivateKeyName = "id_rsa" var sftpExtensions = []string{"posix-rename@openssh.com"} +type exitStatusMsg struct { + Status uint32 +} + // Configuration for the SFTP server type Configuration struct { // Identification string used by the server @@ -329,7 +333,12 @@ func (c Configuration) handleSftpConnection(channel ssh.Channel, connection Conn server := sftp.NewRequestServer(channel, handler) if err := server.Serve(); err == io.EOF { - connection.Log(logger.LevelDebug, logSender, "connection closed") + connection.Log(logger.LevelDebug, logSender, "connection closed, sending exit-status") + ex := exitStatusMsg{ + Status: 0, + } + _, err = channel.SendRequest("exit-status", false, ssh.Marshal(&ex)) + connection.Log(logger.LevelDebug, logSender, "send exit status error: %v", err) server.Close() } else if err != nil { connection.Log(logger.LevelWarn, logSender, "connection closed with error: %v", err)