diff --git a/sftpd/scp.go b/sftpd/scp.go index 50e631e2..a3190384 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 6716283f..bbb236ed 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)