From 2ada4eb33d3cb4d37fa95ed8eee83ab07d694dd6 Mon Sep 17 00:00:00 2001 From: Ruben Pollan Date: Fri, 6 Sep 2019 19:57:28 +0200 Subject: Improve error login Propagating more errors into the logs instead of silently ignoring them. --- modes/transparent_tcp/transparent_tcp.go | 25 ++++++++++------------ modes/transparent_udp/transparent_udp.go | 2 +- shapeshifter-dispatcher/shapeshifter-dispatcher.go | 20 ++++++++--------- 3 files changed, 22 insertions(+), 25 deletions(-) diff --git a/modes/transparent_tcp/transparent_tcp.go b/modes/transparent_tcp/transparent_tcp.go index faffa15..9f9fc18 100644 --- a/modes/transparent_tcp/transparent_tcp.go +++ b/modes/transparent_tcp/transparent_tcp.go @@ -30,7 +30,6 @@ package transparent_tcp import ( - "fmt" "github.com/OperatorFoundation/shapeshifter-dispatcher/common/pt_extras" "github.com/OperatorFoundation/shapeshifter-transports/transports/Dust" "github.com/OperatorFoundation/shapeshifter-transports/transports/meeklite" @@ -71,14 +70,16 @@ func ClientSetup(termMon *termmon.TermMonitor, socksAddr string, target string, return } -func clientAcceptLoop(target string, termMon *termmon.TermMonitor, name string, options string, ln net.Listener, proxyURI *url.URL) error { +func clientAcceptLoop(target string, termMon *termmon.TermMonitor, name string, options string, ln net.Listener, proxyURI *url.URL) { defer ln.Close() for { conn, err := ln.Accept() if err != nil { if e, ok := err.(net.Error); ok && !e.Temporary() { - return err + log.Errorf("Fatal listener error: %s", err.Error()) + return } + log.Warnf("Failed to accept connection: %s", err.Error()) continue } go clientHandler(target, termMon, name, options, conn, proxyURI) @@ -128,7 +129,7 @@ func clientHandler(target string, termMon *termmon.TermMonitor, name string, opt // return // } if err != nil { - fmt.Errorf("outgoing connection failed %q %q", f, target) + log.Errorf("outgoing connection failed %q", target) return } @@ -139,12 +140,8 @@ func clientHandler(target string, termMon *termmon.TermMonitor, name string, opt } else { log.Infof("%s(%s) - closed connection", name, target) } - - return } - - func ServerSetup(termMon *termmon.TermMonitor, bindaddrString string, ptServerInfo pt.ServerInfo, statedir string, options string) (launched bool, listeners []net.Listener) { // Launch each of the server listeners. for _, bindaddr := range ptServerInfo.Bindaddrs { @@ -253,13 +250,13 @@ func getServerBindaddrs(serverBindaddr string) ([]pt.Bindaddr, error) { parts := strings.SplitN(spec, "-", 2) if len(parts) != 2 { - fmt.Errorf("TOR_PT_SERVER_BINDADDR: doesn't contain \"-\" %q", spec) + log.Errorf("TOR_PT_SERVER_BINDADDR: doesn't contain \"-\" %q", spec) return nil, nil } bindaddr.MethodName = parts[0] addr, err := pt.ResolveAddr(parts[1]) if err != nil { - fmt.Errorf("TOR_PT_SERVER_BINDADDR: %q %q", spec, err.Error()) + log.Errorf("TOR_PT_SERVER_BINDADDR: %q %q", spec, err.Error()) return nil, nil } bindaddr.Addr = addr @@ -270,14 +267,16 @@ func getServerBindaddrs(serverBindaddr string) ([]pt.Bindaddr, error) { return result, nil } -func serverAcceptLoop(termMon *termmon.TermMonitor, name string, ln net.Listener, info *pt.ServerInfo) error { +func serverAcceptLoop(termMon *termmon.TermMonitor, name string, ln net.Listener, info *pt.ServerInfo) { defer ln.Close() for { conn, err := ln.Accept() if err != nil { if e, ok := err.(net.Error); ok && !e.Temporary() { - return err + log.Errorf("Fatal listener error: %s", err.Error()) + return } + log.Warnf("Failed to accept connection: %s", err.Error()) continue } go serverHandler(termMon, name, conn, info) @@ -301,8 +300,6 @@ func serverHandler(termMon *termmon.TermMonitor, name string, remote net.Conn, i } else { log.Infof("%s - closed connection", name) } - - return } func copyLoop(a net.Conn, b net.Conn) error { diff --git a/modes/transparent_udp/transparent_udp.go b/modes/transparent_udp/transparent_udp.go index 3352228..62d0689 100644 --- a/modes/transparent_udp/transparent_udp.go +++ b/modes/transparent_udp/transparent_udp.go @@ -83,7 +83,7 @@ func ClientSetup(termMon *termmon.TermMonitor, socksAddr string, target string, go clientHandler(target, termMon, name, options, ln, ptClientProxy) - log.Infof("%s - registered listener: %s", name, ln) + log.Infof("%s - registered listener", name) } return true diff --git a/shapeshifter-dispatcher/shapeshifter-dispatcher.go b/shapeshifter-dispatcher/shapeshifter-dispatcher.go index 4995b4e..72f2efb 100644 --- a/shapeshifter-dispatcher/shapeshifter-dispatcher.go +++ b/shapeshifter-dispatcher/shapeshifter-dispatcher.go @@ -182,7 +182,7 @@ func main() { } else { log.Infof("%s - initializing server transport listeners", execName) if *bindAddr == "" { - fmt.Errorf("%s - transparent mode requires a bindaddr", execName) + log.Errorf("%s - transparent mode requires a bindaddr", execName) } else { // launched = transparent_udp.ServerSetup(termMon, *bindAddr, *target) @@ -204,7 +204,7 @@ func main() { } else { log.Infof("%s - initializing server transport listeners", execName) if *bindAddr == "" { - fmt.Errorf("%s - transparent mode requires a bindaddr", execName) + log.Errorf("%s - transparent mode requires a bindaddr", execName) } else { ptServerInfo := getServerInfo(ptversion, bindAddr, options, transportsList, orport, extorport, authcookie) launched, serverListeners = transparent_tcp.ServerSetup(termMon, *bindAddr, ptServerInfo, *statePath, *options) @@ -226,7 +226,7 @@ func main() { } else { log.Infof("%s - initializing server transport listeners", execName) if *bindAddr == "" { - fmt.Errorf("%s - STUN mode requires a bindaddr", execName) + log.Errorf("%s - STUN mode requires a bindaddr", execName) } else { ptServerInfo := getServerInfo(ptversion, bindAddr, options, transportsList, orport, extorport, authcookie) launched, serverListeners = stun_udp.ServerSetup(termMon, *bindAddr, ptServerInfo, *options) @@ -310,7 +310,7 @@ func getClientNames(ptversion *string, transportsList *string, proxy *string) (c // FIXME - instead of this, goptlib should be modified to accept command line flag override of EITHER ptversion or transports (or both) if ptversion == nil || transportsList == nil { - log.Infof("Falling back to environment variables for ptversion/transports %q %q", ptversion, transportsList) + log.Infof("Falling back to environment variables for ptversion/transports %q %q", *ptversion, *transportsList) ptClientInfo, err = pt.ClientSetup(transports.Transports()) if err != nil { // FIXME - print a more useful error, specifying --ptversion and --transports flags @@ -341,14 +341,14 @@ func getServerInfo(ptversion *string, bindaddrList *string, options *string, tra bindaddrs, err = getServerBindaddrs(bindaddrList, options, transportList) if err != nil { - fmt.Errorf("Error parsing bindaddrs %q %q %q", *bindaddrList, *options, *transportList) + log.Errorf("Error parsing bindaddrs %q %q %q", *bindaddrList, *options, *transportList) return ptServerInfo } ptServerInfo = pt.ServerInfo{Bindaddrs: bindaddrs} ptServerInfo.OrAddr, err = pt.ResolveAddr(*orport) if err != nil { - fmt.Errorf("Error resolving OR address %q %q", orport, err) + log.Errorf("Error resolving OR address %q %q", *orport, err) return ptServerInfo } @@ -361,13 +361,13 @@ func getServerInfo(ptversion *string, bindaddrList *string, options *string, tra if extorport != nil && *extorport != "" { ptServerInfo.ExtendedOrAddr, err = pt.ResolveAddr(*extorport) if err != nil { - fmt.Errorf("Error resolving Extended OR address %q %q", *extorport, err) + log.Errorf("Error resolving Extended OR address %q %q", *extorport, err) return ptServerInfo } } else { ptServerInfo.ExtendedOrAddr, err = pt.ResolveAddr(pt.Getenv("TOR_PT_EXTENDED_SERVER_PORT")) if err != nil { - fmt.Errorf("Error resolving Extended OR address %q %q", err) + log.Errorf("Error resolving Extended OR address %q", err) return ptServerInfo } } @@ -392,7 +392,7 @@ func getServerBindaddrs(bindaddrList *string, options *string, transports *strin if serverTransportOptions != "" { optionsMap, err = pt.ParseServerTransportOptions(serverTransportOptions) if err != nil { - fmt.Errorf("Error parsing options map %q %q", serverTransportOptions, err) + log.Errorf("Error parsing options map %q %q", serverTransportOptions, err) return nil, errors.New(fmt.Sprintf("TOR_PT_SERVER_TRANSPORT_OPTIONS: %q: %s", serverTransportOptions, err.Error())) } } @@ -401,7 +401,7 @@ func getServerBindaddrs(bindaddrList *string, options *string, transports *strin if serverTransportOptions != "" { optionsMap, err = pt.ParsePT2ServerParameters(serverTransportOptions) if err != nil { - fmt.Errorf("Error parsing options map %q %q", serverTransportOptions, err) + log.Errorf("Error parsing options map %q %q", serverTransportOptions, err) return nil, errors.New(fmt.Sprintf("TOR_PT_SERVER_TRANSPORT_OPTIONS: %q: %s", serverTransportOptions, err.Error())) } } -- cgit v1.2.3