summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/pkg/sftp/server_standalone/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/pkg/sftp/server_standalone/main.go')
-rw-r--r--vendor/github.com/pkg/sftp/server_standalone/main.go52
1 files changed, 52 insertions, 0 deletions
diff --git a/vendor/github.com/pkg/sftp/server_standalone/main.go b/vendor/github.com/pkg/sftp/server_standalone/main.go
new file mode 100644
index 00000000..0b8e102a
--- /dev/null
+++ b/vendor/github.com/pkg/sftp/server_standalone/main.go
@@ -0,0 +1,52 @@
+package main
+
+// small wrapper around sftp server that allows it to be used as a separate process subsystem call by the ssh server.
+// in practice this will statically link; however this allows unit testing from the sftp client.
+
+import (
+ "flag"
+ "fmt"
+ "io"
+ "io/ioutil"
+ "os"
+
+ "github.com/pkg/sftp"
+)
+
+func main() {
+ var (
+ readOnly bool
+ debugStderr bool
+ debugLevel string
+ options []sftp.ServerOption
+ )
+
+ flag.BoolVar(&readOnly, "R", false, "read-only server")
+ flag.BoolVar(&debugStderr, "e", false, "debug to stderr")
+ flag.StringVar(&debugLevel, "l", "none", "debug level (ignored)")
+ flag.Parse()
+
+ debugStream := ioutil.Discard
+ if debugStderr {
+ debugStream = os.Stderr
+ }
+ options = append(options, sftp.WithDebug(debugStream))
+
+ if readOnly {
+ options = append(options, sftp.ReadOnly())
+ }
+
+ svr, _ := sftp.NewServer(
+ struct {
+ io.Reader
+ io.WriteCloser
+ }{os.Stdin,
+ os.Stdout,
+ },
+ options...,
+ )
+ if err := svr.Serve(); err != nil {
+ fmt.Fprintf(debugStream, "sftp server completed with error: %v", err)
+ os.Exit(1)
+ }
+}