diff options
| -rw-r--r-- | .gitignore | 3 | ||||
| -rw-r--r-- | Makefile | 16 | ||||
| -rw-r--r-- | OVERSSH | 10 | ||||
| -rw-r--r-- | PLAN | 2 | ||||
| -rw-r--r-- | TODO | 2 | ||||
| -rw-r--r-- | cmd/tunnel/Makefile | 1 | ||||
| -rw-r--r-- | cmd/tunnel/main.go | 12 | ||||
| -rw-r--r-- | cmd/tunneld/Makefile | 1 | ||||
| -rw-r--r-- | cmd/tunneld/main.go | 21 | ||||
| -rw-r--r-- | pkg/server/cmds.go | 6 | ||||
| -rw-r--r-- | pkg/server/echo.go | 2 | ||||
| -rw-r--r-- | pkg/server/env.go | 12 | ||||
| -rw-r--r-- | pkg/server/env/env.go | 5 | ||||
| -rw-r--r-- | pkg/server/exit.go | 2 | ||||
| -rw-r--r-- | pkg/server/help.go | 8 | ||||
| -rw-r--r-- | pkg/server/server.go | 13 | ||||
| -rw-r--r-- | pkg/server/sleep.go | 2 | ||||
| -rw-r--r-- | pkg/server/status.go | 3 | ||||
| -rw-r--r-- | pkg/server/tunnel.go | 14 | ||||
| -rw-r--r-- | scripts/build.mk | 16 |
20 files changed, 85 insertions, 66 deletions
@@ -1,2 +1 @@ -cmd/tunnel/tunnel -cmd/tunneld/tunneld +bin/ @@ -1,12 +1,10 @@ -SUBDIRS := cmd/tunnel cmd/tunneld -TARGETS := build clean install +COMMIT = $(shell git describe --always --long --dirt) +TIME = $(shell date +'%Y-%m-%d/%H:%M:%S') +VERSION = $(COMMIT) at $(TIME) +LDFLAGS = -ldflags "-X 'main.BuildVersion=$(VERSION)'" -.PHONY: default -default: build - -$(TARGETS): $(SUBDIRS) -$(SUBDIRS): - @$(MAKE) -C $@ $(MAKECMDGOALS) +build: + go build $(LDFLAGS) -v -o bin/ ./... fmt: go fmt tunnel/... @@ -14,4 +12,4 @@ fmt: test: go test tunnel/pkg/test -.PHONY: $(TARGETS) $(SUBDIRS) test +.PHONY: build fmt test @@ -0,0 +1,10 @@ +- make original.addr and original.port variables + +add name dirent + listen,addr=-:606,redirect \ + proxy,addr=@[original] \ + proxy,addr=@[original.addr]:22 \ + dial,addr=@over + +add sslh to host +add local tunneld: add name proxy listen,addr=-:604 proxy @@ -1,2 +1,4 @@ - conn multiplexing - udp tunnel socket + +- tcpmux proto @@ -12,3 +12,5 @@ - docs - tproxy usage +- readonly env +- secrets file for auth diff --git a/cmd/tunnel/Makefile b/cmd/tunnel/Makefile deleted file mode 100644 index 946951c..0000000 --- a/cmd/tunnel/Makefile +++ /dev/null @@ -1 +0,0 @@ -include ../../scripts/build.mk diff --git a/cmd/tunnel/main.go b/cmd/tunnel/main.go index b6a4ee4..864dd9b 100644 --- a/cmd/tunnel/main.go +++ b/cmd/tunnel/main.go @@ -13,10 +13,13 @@ import ( ) var ( - systemFlag = flag.Bool("system", false, "use system instance") - socketFlag = flag.String("S", "", "path to control socket") + systemFlag = flag.Bool("system", false, "use system instance") + socketFlag = flag.String("S", "", "path to control socket") + versionFlag = flag.Bool("version", false, "print version and exit") ) +var BuildVersion string + func init() { log.SetFlags(0) } @@ -40,6 +43,11 @@ func getSystemSocketPath() string { func main() { flag.Parse() + if *versionFlag { + fmt.Fprintln(os.Stderr, BuildVersion) + os.Exit(1) + } + if flag.NArg() < 1 { log.Fatalf("Usage: %s command [arguments], try help", os.Args[0]) } diff --git a/cmd/tunneld/Makefile b/cmd/tunneld/Makefile deleted file mode 100644 index 946951c..0000000 --- a/cmd/tunneld/Makefile +++ /dev/null @@ -1 +0,0 @@ -include ../../scripts/build.mk diff --git a/cmd/tunneld/main.go b/cmd/tunneld/main.go index c808aab..40d60d8 100644 --- a/cmd/tunneld/main.go +++ b/cmd/tunneld/main.go @@ -22,13 +22,16 @@ import ( ) var ( - debugFlag = flag.Bool("d", false, "debug: print time and source info") - forceFlag = flag.Bool("f", false, "try start with force") - syslogFlag = flag.Bool("s", false, "write log to syslog instead of stdout") - configFlag = flag.String("c", "", "path to configuration file") - socketFlag = flag.String("S", "", "path to control socket") + debugFlag = flag.Bool("d", false, "debug: print time and source info") + forceFlag = flag.Bool("f", false, "try start with force") + syslogFlag = flag.Bool("s", false, "write log to syslog instead of stdout") + configFlag = flag.String("c", "", "path to configuration file") + socketFlag = flag.String("S", "", "path to control socket") + versionFlag = flag.Bool("version", false, "print version and exit") ) +var BuildVersion string + const trimSize = 32 func initLog() { @@ -312,6 +315,12 @@ func deconfigure(s *server.Server) error { func main() { flag.Parse() + + if *versionFlag { + fmt.Fprintln(os.Stderr, BuildVersion) + os.Exit(1) + } + initLog() socket := getSocketPath() @@ -323,7 +332,7 @@ func main() { } } - s, err := server.New(socket) + s, err := server.New(socket, BuildVersion) if err != nil { log.Fatal(err) } diff --git a/pkg/server/cmds.go b/pkg/server/cmds.go index febda6b..34aeaa8 100644 --- a/pkg/server/cmds.go +++ b/pkg/server/cmds.go @@ -191,11 +191,11 @@ func (c *cmd) parseFuncSignature(i interface{}) error { return nil } -func newCmd(where string, f interface{}, args string) { +func handle(where string, f interface{}, args string) { c := &cmd{name: where, args: args} if err := c.parseFuncSignature(f); err != nil { - log.Panicf("newCmd: %s", err) + log.Panicf("handle: %s", err) } path := strings.Fields(where) @@ -298,5 +298,5 @@ func help(r *request, args []string) { } func init() { - newCmd("help", help, "[path]") + handle("help", help, "[path]") } diff --git a/pkg/server/echo.go b/pkg/server/echo.go index ee0537b..696b19d 100644 --- a/pkg/server/echo.go +++ b/pkg/server/echo.go @@ -20,5 +20,5 @@ func echo(r *request, args ...string) { } func init() { - newCmd("echo", echo, "[args]") + handle("echo", echo, "[args]") } diff --git a/pkg/server/env.go b/pkg/server/env.go index aa0ed40..35d6b4f 100644 --- a/pkg/server/env.go +++ b/pkg/server/env.go @@ -46,10 +46,10 @@ func varClear(r *request) { } func init() { - newCmd("get", varGet, "name") - newCmd("set", varSet, "name value") - newCmd("push", varPush, "name value") - newCmd("unset", varUnset, "name") - newCmd("env", varShow, "name") - newCmd("clear", varClear, "") + handle("get", varGet, "name") + handle("set", varSet, "name value") + handle("push", varPush, "name value") + handle("unset", varUnset, "name") + handle("env", varShow, "name") + handle("clear", varClear, "") } diff --git a/pkg/server/env/env.go b/pkg/server/env/env.go index 7aa93d2..a826db3 100644 --- a/pkg/server/env/env.go +++ b/pkg/server/env/env.go @@ -8,6 +8,11 @@ import ( "sync" ) +type box interface { + Get() string + Set(value string) bool +} + type env struct { // vars m map[string]string diff --git a/pkg/server/exit.go b/pkg/server/exit.go index e767403..fbcc246 100644 --- a/pkg/server/exit.go +++ b/pkg/server/exit.go @@ -5,5 +5,5 @@ func exit(r *request) { } func init() { - newCmd("exit", exit, "") + handle("exit", exit, "") } diff --git a/pkg/server/help.go b/pkg/server/help.go index 16f2776..be04632 100644 --- a/pkg/server/help.go +++ b/pkg/server/help.go @@ -69,9 +69,9 @@ func showSocketHelp(r *request, name string) { } func init() { - newCmd("hook list", showHookList, "") - newCmd("hook help", showHookHelp, "hook-name") + handle("hook list", showHookList, "") + handle("hook help", showHookHelp, "hook-name") - newCmd("socket list", showSocketList, "") - newCmd("socket help", showSocketHelp, "socket-name") + handle("socket list", showSocketList, "") + handle("socket help", showSocketHelp, "socket-name") } diff --git a/pkg/server/server.go b/pkg/server/server.go index 43cd542..524b6af 100644 --- a/pkg/server/server.go +++ b/pkg/server/server.go @@ -18,6 +18,8 @@ type Server struct { listen net.Listener since time.Time + version string + wg sync.WaitGroup mu sync.Mutex @@ -97,7 +99,7 @@ func (s *Server) isDone() bool { } } -func New(path string) (*Server, error) { +func New(path string, version string) (*Server, error) { listen, err := net.Listen("unix", path) if err != nil { return nil, err @@ -111,6 +113,7 @@ func New(path string) (*Server, error) { since: time.Now(), done: make(chan struct{}), tunnels: make(automap), + version: version, } return s, nil @@ -142,7 +145,7 @@ func (s *Server) Serve() { s.wg.Add(1) - go c.handle() + go c.reader() } s.wg.Wait() @@ -196,14 +199,14 @@ func (c *client) newRequest() *request { return r } -func (c *client) handle() { +func (c *client) reader() { defer c.close() for { req, er := c.r.Decode() if er != nil { if !errors.Is(er, io.EOF) { - log.Println(c, "handle:", er) + log.Println(c, "reader:", er) } break } @@ -220,7 +223,7 @@ func (c *client) handle() { ew := c.w.Encode(r.out.String()) if ew != nil { - log.Println(c, "handle:", ew) + log.Println(c, "reader:", ew) break } } diff --git a/pkg/server/sleep.go b/pkg/server/sleep.go index 33038f1..8d7eef4 100644 --- a/pkg/server/sleep.go +++ b/pkg/server/sleep.go @@ -15,5 +15,5 @@ func sleep(r *request, tout uint) { } func init() { - newCmd("sleep", sleep, "tout") + handle("sleep", sleep, "tout") } diff --git a/pkg/server/status.go b/pkg/server/status.go index d8f01c6..923580c 100644 --- a/pkg/server/status.go +++ b/pkg/server/status.go @@ -5,9 +5,10 @@ import ( ) func status(r *request) { + r.Println("version", r.c.s.version) r.Printf("since %s", r.c.s.since.Format(config.TimeFormat)) } func init() { - newCmd("status", status, "") + handle("status", status, "") } diff --git a/pkg/server/tunnel.go b/pkg/server/tunnel.go index afa0f31..e1ae092 100644 --- a/pkg/server/tunnel.go +++ b/pkg/server/tunnel.go @@ -610,15 +610,15 @@ func showRecent(r *request) { } func init() { - newCmd("add", tunnelAdd, "[name id] [limit N] [single] socket [hook ...] socket") - newCmd("del", tunnelDel, "tunnel-id") + handle("add", tunnelAdd, "[name id] [limit N] [single] socket [hook ...] socket") + handle("del", tunnelDel, "tunnel-id") - newCmd("kick", streamKick, "tunnel-id stream-id") + handle("kick", streamKick, "tunnel-id stream-id") - newCmd("rename", tunnelRename, "tunnel-old-id tunnel-new-id") + handle("rename", tunnelRename, "tunnel-old-id tunnel-new-id") - newCmd("show", showTunnels, "") + handle("show", showTunnels, "") - newCmd("active", showActive, "") - newCmd("recent", showRecent, "") + handle("active", showActive, "") + handle("recent", showRecent, "") } diff --git a/scripts/build.mk b/scripts/build.mk deleted file mode 100644 index 06363c0..0000000 --- a/scripts/build.mk +++ /dev/null @@ -1,16 +0,0 @@ -BIN=$(shell pwd | xargs basename) - -.PHONY: default -default: build - -.PHONY: build -build: - go build - -.PHONY: clean -clean: - go clean - -.PHONY: install -install: - install $(BIN) /usr/local/bin |
