2019-07-30 18:51:29 +00:00
|
|
|
// Package sftpd implements the SSH File Transfer Protocol as described in https://tools.ietf.org/html/draft-ietf-secsh-filexfer-02.
|
|
|
|
// It uses pkg/sftp library:
|
|
|
|
// https://github.com/pkg/sftp
|
2019-07-20 10:26:52 +00:00
|
|
|
package sftpd
|
|
|
|
|
|
|
|
import (
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
2020-07-24 21:39:38 +00:00
|
|
|
logSender = "sftpd"
|
|
|
|
handshakeTimeout = 2 * time.Minute
|
2019-10-09 15:33:30 +00:00
|
|
|
)
|
|
|
|
|
2019-07-20 10:26:52 +00:00
|
|
|
var (
|
2020-07-24 21:39:38 +00:00
|
|
|
supportedSSHCommands = []string{"scp", "md5sum", "sha1sum", "sha256sum", "sha384sum", "sha512sum", "cd", "pwd",
|
2020-06-13 20:48:51 +00:00
|
|
|
"git-receive-pack", "git-upload-pack", "git-upload-archive", "rsync", "sftpgo-copy", "sftpgo-remove"}
|
2020-07-24 21:39:38 +00:00
|
|
|
defaultSSHCommands = []string{"md5sum", "sha1sum", "cd", "pwd", "scp"}
|
|
|
|
sshHashCommands = []string{"md5sum", "sha1sum", "sha256sum", "sha384sum", "sha512sum"}
|
|
|
|
systemCommands = []string{"git-receive-pack", "git-upload-pack", "git-upload-archive", "rsync"}
|
2019-07-20 10:26:52 +00:00
|
|
|
)
|
|
|
|
|
2019-11-15 11:15:07 +00:00
|
|
|
type sshSubsystemExitStatus struct {
|
|
|
|
Status uint32
|
|
|
|
}
|
|
|
|
|
2019-11-18 22:30:37 +00:00
|
|
|
type sshSubsystemExecMsg struct {
|
|
|
|
Command string
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetDefaultSSHCommands returns the SSH commands enabled as default
|
|
|
|
func GetDefaultSSHCommands() []string {
|
|
|
|
result := make([]string, len(defaultSSHCommands))
|
|
|
|
copy(result, defaultSSHCommands)
|
|
|
|
return result
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetSupportedSSHCommands returns the supported SSH commands
|
|
|
|
func GetSupportedSSHCommands() []string {
|
|
|
|
result := make([]string, len(supportedSSHCommands))
|
|
|
|
copy(result, supportedSSHCommands)
|
|
|
|
return result
|
|
|
|
}
|