package client import ( "os" "context" "github.com/problame/go-netssh" "log" "path" "github.com/zrepl/zrepl/config" "errors" ) func RunStdinserver(config *config.Config, args []string) error { // NOTE: the netssh proxying protocol requires exiting with non-zero status if anything goes wrong defer os.Exit(1) log := log.New(os.Stderr, "", log.LUTC|log.Ldate|log.Ltime) if len(args) != 1 || args[0] == "" { err := errors.New("must specify client_identity as positional argument") return err } identity := args[0] unixaddr := path.Join(config.Global.Serve.StdinServer.SockDir, identity) log.Printf("proxying client identity '%s' to zrepl daemon '%s'", identity, unixaddr) ctx := netssh.ContextWithLog(context.TODO(), log) err := netssh.Proxy(ctx, unixaddr) if err == nil { log.Print("proxying finished successfully, exiting with status 0") os.Exit(0) } log.Printf("error proxying: %s", err) return nil }