summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikhail Osipov <mike.osipov@gmail.com>2021-08-27 20:05:06 +0300
committerMikhail Osipov <mike.osipov@gmail.com>2021-08-27 20:05:06 +0300
commit3015840d9835717762de52e091adb58f1e2e3b63 (patch)
tree5bdaf042d539725b7b630f34679762bb07996255
parent5e64643ca8444321845b4839fa62875c32b0b51a (diff)
add version to client and daemon
-rw-r--r--.gitignore3
-rw-r--r--Makefile16
-rw-r--r--OVERSSH10
-rw-r--r--PLAN2
-rw-r--r--TODO2
-rw-r--r--cmd/tunnel/Makefile1
-rw-r--r--cmd/tunnel/main.go12
-rw-r--r--cmd/tunneld/Makefile1
-rw-r--r--cmd/tunneld/main.go21
-rw-r--r--pkg/server/cmds.go6
-rw-r--r--pkg/server/echo.go2
-rw-r--r--pkg/server/env.go12
-rw-r--r--pkg/server/env/env.go5
-rw-r--r--pkg/server/exit.go2
-rw-r--r--pkg/server/help.go8
-rw-r--r--pkg/server/server.go13
-rw-r--r--pkg/server/sleep.go2
-rw-r--r--pkg/server/status.go3
-rw-r--r--pkg/server/tunnel.go14
-rw-r--r--scripts/build.mk16
20 files changed, 85 insertions, 66 deletions
diff --git a/.gitignore b/.gitignore
index 7546617..e660fd9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1 @@
-cmd/tunnel/tunnel
-cmd/tunneld/tunneld
+bin/
diff --git a/Makefile b/Makefile
index a80916b..d11c945 100644
--- a/Makefile
+++ b/Makefile
@@ -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
diff --git a/OVERSSH b/OVERSSH
new file mode 100644
index 0000000..2300147
--- /dev/null
+++ b/OVERSSH
@@ -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
diff --git a/PLAN b/PLAN
index 1d02d7f..3344e6c 100644
--- a/PLAN
+++ b/PLAN
@@ -1,2 +1,4 @@
- conn multiplexing
- udp tunnel socket
+
+- tcpmux proto
diff --git a/TODO b/TODO
index 2191e8f..fd429d0 100644
--- a/TODO
+++ b/TODO
@@ -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