diff options
-rw-r--r-- | src/binder.go | 32 |
1 files changed, 16 insertions, 16 deletions
diff --git a/src/binder.go b/src/binder.go index b115c52..69b5e1b 100644 --- a/src/binder.go +++ b/src/binder.go @@ -1,8 +1,8 @@ package binder import ( - "io" "fmt" + "io" "net" "os" "os/user" @@ -57,6 +57,15 @@ func isRunningAsRoot() bool { return os.Geteuid() == 0 } +func dropRoot() { + if isRunningAsRoot() { + dropPrivileges(_USER) + if isRunningAsRoot() { + panic("Failed to drop privileges") + } + } +} + func parseArgs(args []string) _CLIArgs { if len(args) != 3 { fmt.Fprintf( @@ -79,21 +88,12 @@ func listen(fromAddr string) net.Listener { return listener } -func dropRoot() { - if isRunningAsRoot() { - dropPrivileges(_USER) - if isRunningAsRoot() { - panic("Failed to drop privileges") - } - } -} - -func copyData(c chan struct{}, from io.Reader, to io.WriteCloser) { +func copyData(c chan struct {}, from io.Reader, to io.WriteCloser) { io.Copy(to, from) - c <- struct{}{} + c <- struct {} {} } -func Start(toAddr string, listener net.Listener) { +func start(toAddr string, listener net.Listener) { for { connFrom, err := listener.Accept() if err != nil { @@ -114,12 +114,11 @@ func Start(toAddr string, listener net.Listener) { "dial-connection-error", "err", err, ) - connFrom.Close() continue } defer connTo.Close() - c := make(chan struct{}) + c := make(chan struct {}) go copyData(c, connFrom, connTo) go copyData(c, connTo, connFrom) go func() { @@ -130,10 +129,11 @@ func Start(toAddr string, listener net.Listener) { } + func Main() { g.Init() args := parseArgs(os.Args) listener := listen(args.fromAddr) dropRoot() - Start(args.toAddr, listener) + start(args.toAddr, listener) } |