瀏覽代碼

sftpd: send exit-status message on close

this fix restic compatibility
Nicola Murino 6 年之前
父節點
當前提交
5be1d1be69
共有 2 個文件被更改,包括 10 次插入5 次删除
  1. 0 4
      sftpd/scp.go
  2. 10 1
      sftpd/server.go

+ 0 - 4
sftpd/scp.go

@@ -28,10 +28,6 @@ type execMsg struct {
 	Command string
 }
 
-type exitStatusMsg struct {
-	Status uint32
-}
-
 type scpCommand struct {
 	connection Connection
 	args       []string

+ 10 - 1
sftpd/server.go

@@ -30,6 +30,10 @@ const defaultPrivateKeyName = "id_rsa"
 
 var sftpExtensions = []string{"[email protected]"}
 
+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)