diff options
author | Andrew Shadura <andrew.shadura@collabora.co.uk> | 2017-10-04 22:13:39 +0200 |
---|---|---|
committer | Andrew Shadura <andrew.shadura@collabora.co.uk> | 2017-10-04 22:13:39 +0200 |
commit | cf1116bd3682f62b65a9aeea8473f4d42e31fab0 (patch) | |
tree | 1e998e75159ebab96d9434a494910445578ceed7 | |
parent | 01ec69b722f71d87ef86832c48e2e8fbc10594b6 (diff) | |
parent | c6c8c2108e23fae8ba5c0de6afd61f1feaacac6e (diff) |
Merge tag 'upstream/0.3.0'
Upstream version 0.3.0
-rw-r--r-- | proxy/logger.go | 11 | ||||
-rw-r--r-- | proxy/tcp_proxy.go | 20 | ||||
-rw-r--r-- | proxy/udp_proxy.go | 23 | ||||
-rw-r--r-- | tlsconfig/certpool_go17.go | 3 | ||||
-rw-r--r-- | tlsconfig/certpool_other.go | 2 | ||||
-rw-r--r-- | tlsconfig/config.go | 2 |
6 files changed, 39 insertions, 22 deletions
diff --git a/proxy/logger.go b/proxy/logger.go new file mode 100644 index 0000000..cd8b5fd --- /dev/null +++ b/proxy/logger.go @@ -0,0 +1,11 @@ +package proxy + +type logger interface { + Printf(format string, args ...interface{}) +} + +type noopLogger struct{} + +func (l *noopLogger) Printf(_ string, _ ...interface{}) { + // Do nothing :) +} diff --git a/proxy/tcp_proxy.go b/proxy/tcp_proxy.go index 3cd742a..8d97196 100644 --- a/proxy/tcp_proxy.go +++ b/proxy/tcp_proxy.go @@ -4,37 +4,43 @@ import ( "io" "net" "syscall" - - "github.com/Sirupsen/logrus" ) // TCPProxy is a proxy for TCP connections. It implements the Proxy interface to // handle TCP traffic forwarding between the frontend and backend addresses. type TCPProxy struct { + Logger logger listener *net.TCPListener frontendAddr *net.TCPAddr backendAddr *net.TCPAddr } // NewTCPProxy creates a new TCPProxy. -func NewTCPProxy(frontendAddr, backendAddr *net.TCPAddr) (*TCPProxy, error) { +func NewTCPProxy(frontendAddr, backendAddr *net.TCPAddr, ops ...func(*TCPProxy)) (*TCPProxy, error) { listener, err := net.ListenTCP("tcp", frontendAddr) if err != nil { return nil, err } // If the port in frontendAddr was 0 then ListenTCP will have a picked // a port to listen on, hence the call to Addr to get that actual port: - return &TCPProxy{ + proxy := &TCPProxy{ listener: listener, frontendAddr: listener.Addr().(*net.TCPAddr), backendAddr: backendAddr, - }, nil + Logger: &noopLogger{}, + } + + for _, op := range ops { + op(proxy) + } + + return proxy, nil } func (proxy *TCPProxy) clientLoop(client *net.TCPConn, quit chan bool) { backend, err := net.DialTCP("tcp", nil, proxy.backendAddr) if err != nil { - logrus.Printf("Can't forward traffic to backend tcp/%v: %s\n", proxy.backendAddr, err) + proxy.Logger.Printf("Can't forward traffic to backend tcp/%v: %s\n", proxy.backendAddr, err) client.Close() return } @@ -82,7 +88,7 @@ func (proxy *TCPProxy) Run() { for { client, err := proxy.listener.Accept() if err != nil { - logrus.Printf("Stopping proxy on tcp/%v for tcp/%v (%s)", proxy.frontendAddr, proxy.backendAddr, err) + proxy.Logger.Printf("Stopping proxy on tcp/%v for tcp/%v (%s)", proxy.frontendAddr, proxy.backendAddr, err) return } go proxy.clientLoop(client.(*net.TCPConn), quit) diff --git a/proxy/udp_proxy.go b/proxy/udp_proxy.go index b8375c3..71ddf12 100644 --- a/proxy/udp_proxy.go +++ b/proxy/udp_proxy.go @@ -7,8 +7,6 @@ import ( "sync" "syscall" "time" - - "github.com/Sirupsen/logrus" ) const ( @@ -47,6 +45,7 @@ type connTrackMap map[connTrackKey]*net.UDPConn // interface to handle UDP traffic forwarding between the frontend and backend // addresses. type UDPProxy struct { + Logger logger listener *net.UDPConn frontendAddr *net.UDPAddr backendAddr *net.UDPAddr @@ -55,17 +54,25 @@ type UDPProxy struct { } // NewUDPProxy creates a new UDPProxy. -func NewUDPProxy(frontendAddr, backendAddr *net.UDPAddr) (*UDPProxy, error) { +func NewUDPProxy(frontendAddr, backendAddr *net.UDPAddr, ops ...func(*UDPProxy)) (*UDPProxy, error) { listener, err := net.ListenUDP("udp", frontendAddr) if err != nil { return nil, err } - return &UDPProxy{ + + proxy := &UDPProxy{ listener: listener, frontendAddr: listener.LocalAddr().(*net.UDPAddr), backendAddr: backendAddr, connTrackTable: make(connTrackMap), - }, nil + Logger: &noopLogger{}, + } + + for _, op := range ops { + op(proxy) + } + + return proxy, nil } func (proxy *UDPProxy) replyLoop(proxyConn *net.UDPConn, clientAddr *net.UDPAddr, clientKey *connTrackKey) { @@ -112,7 +119,7 @@ func (proxy *UDPProxy) Run() { // ECONNREFUSED like Read do (see comment in // UDPProxy.replyLoop) if !isClosedError(err) { - logrus.Printf("Stopping proxy on udp/%v for udp/%v (%s)", proxy.frontendAddr, proxy.backendAddr, err) + proxy.Logger.Printf("Stopping proxy on udp/%v for udp/%v (%s)", proxy.frontendAddr, proxy.backendAddr, err) } break } @@ -123,7 +130,7 @@ func (proxy *UDPProxy) Run() { if !hit { proxyConn, err = net.DialUDP("udp", nil, proxy.backendAddr) if err != nil { - logrus.Printf("Can't proxy a datagram to udp/%s: %s\n", proxy.backendAddr, err) + proxy.Logger.Printf("Can't proxy a datagram to udp/%s: %s\n", proxy.backendAddr, err) proxy.connTrackLock.Unlock() continue } @@ -134,7 +141,7 @@ func (proxy *UDPProxy) Run() { for i := 0; i != read; { written, err := proxyConn.Write(readBuf[i:read]) if err != nil { - logrus.Printf("Can't proxy a datagram to udp/%s: %s\n", proxy.backendAddr, err) + proxy.Logger.Printf("Can't proxy a datagram to udp/%s: %s\n", proxy.backendAddr, err) break } i += written diff --git a/tlsconfig/certpool_go17.go b/tlsconfig/certpool_go17.go index 1d5fa4c..1ca0965 100644 --- a/tlsconfig/certpool_go17.go +++ b/tlsconfig/certpool_go17.go @@ -5,8 +5,6 @@ package tlsconfig import ( "crypto/x509" "runtime" - - "github.com/Sirupsen/logrus" ) // SystemCertPool returns a copy of the system cert pool, @@ -14,7 +12,6 @@ import ( func SystemCertPool() (*x509.CertPool, error) { certpool, err := x509.SystemCertPool() if err != nil && runtime.GOOS == "windows" { - logrus.Infof("Unable to use system certificate pool: %v", err) return x509.NewCertPool(), nil } return certpool, err diff --git a/tlsconfig/certpool_other.go b/tlsconfig/certpool_other.go index 262c95e..9ca9745 100644 --- a/tlsconfig/certpool_other.go +++ b/tlsconfig/certpool_other.go @@ -5,12 +5,10 @@ package tlsconfig import ( "crypto/x509" - "github.com/Sirupsen/logrus" ) // SystemCertPool returns an new empty cert pool, // accessing system cert pool is supported in go 1.7 func SystemCertPool() (*x509.CertPool, error) { - logrus.Warn("Unable to use system certificate pool: requires building with go 1.7 or later") return x509.NewCertPool(), nil } diff --git a/tlsconfig/config.go b/tlsconfig/config.go index ad4b112..1b31bbb 100644 --- a/tlsconfig/config.go +++ b/tlsconfig/config.go @@ -13,7 +13,6 @@ import ( "io/ioutil" "os" - "github.com/Sirupsen/logrus" "github.com/pkg/errors" ) @@ -106,7 +105,6 @@ func certPool(caFile string, exclusivePool bool) (*x509.CertPool, error) { if !certPool.AppendCertsFromPEM(pem) { return nil, fmt.Errorf("failed to append certificates from PEM file: %q", caFile) } - logrus.Debugf("Trusting %d certs", len(certPool.Subjects())) return certPool, nil } |