diff options
Diffstat (limited to 'cmd')
| -rw-r--r-- | cmd/tunnel/main.go | 44 | ||||
| -rw-r--r-- | cmd/tunneld/main.go | 28 |
2 files changed, 61 insertions, 11 deletions
diff --git a/cmd/tunnel/main.go b/cmd/tunnel/main.go index 302b60e..5c6029e 100644 --- a/cmd/tunnel/main.go +++ b/cmd/tunnel/main.go @@ -1,31 +1,63 @@ package main import ( + "errors" + "flag" "fmt" "log" "os" "strings" + "syscall" "tunnel/pkg/client" + "tunnel/pkg/config" ) +var systemSocketVar bool + func init() { log.SetFlags(0) + + flag.BoolVar(&systemSocketVar, "system", false, "use system instance") +} + +func getSocketPath() string { + if systemSocketVar { + return getSystemSocketPath() + } + + s, err := config.GetSocketPath() + if err != nil { + log.Fatal(err) + } + return s +} + +func getSystemSocketPath() string { + s, err := config.GetSystemSocketPath() + if err != nil { + log.Fatal(err) + } + return s } func main() { - var args = os.Args + flag.Parse() - if len(args) < 2 { - fmt.Fprintln(os.Stderr, "bad usage") - os.Exit(1) + if flag.NArg() < 1 { + log.Fatalf("Usage: %s command [arguments], try help", os.Args[0]) } - c, err := client.New() + user, system := getSocketPath(), getSystemSocketPath() + + c, err := client.New(user) if err != nil { + if user != system && errors.Is(err, syscall.ENOENT) { + c, err = client.New(system) + } log.Fatal(err) } - reply, err := c.Send(args[1:]) + reply, err := c.Send(flag.Args()) if err != nil { c.Close() log.Fatal(err) diff --git a/cmd/tunneld/main.go b/cmd/tunneld/main.go index 1ffb99e..cd8afda 100644 --- a/cmd/tunneld/main.go +++ b/cmd/tunneld/main.go @@ -1,11 +1,14 @@ package main import ( + "errors" "flag" "log" "os" "os/signal" + "path" "syscall" + "tunnel/pkg/config" "tunnel/pkg/server" ) @@ -39,19 +42,34 @@ func sighandler(c chan os.Signal, s *server.Server) { } } +func getSocketPath() string { + s, err := config.GetSocketPath() + if err != nil { + log.Fatal(err) + } + + if err := os.Mkdir(path.Dir(s), 0700); err != nil { + if !errors.Is(err, syscall.EEXIST) { + log.Fatal(err) + } + } + + return s +} + func main() { flag.Parse() initLog() - var c = make(chan os.Signal) - - signal.Notify(c, syscall.SIGINT, syscall.SIGTERM) - - s, err := server.New() + s, err := server.New(getSocketPath()) if err != nil { log.Fatal(err) } + var c = make(chan os.Signal) + + signal.Notify(c, syscall.SIGINT, syscall.SIGTERM) + go sighandler(c, s) log.Print("ready") |
