summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Shadura <andrew.shadura@collabora.co.uk>2017-10-04 22:13:39 +0200
committerAndrew Shadura <andrew.shadura@collabora.co.uk>2017-10-04 22:13:39 +0200
commitcf1116bd3682f62b65a9aeea8473f4d42e31fab0 (patch)
tree1e998e75159ebab96d9434a494910445578ceed7
parent01ec69b722f71d87ef86832c48e2e8fbc10594b6 (diff)
parentc6c8c2108e23fae8ba5c0de6afd61f1feaacac6e (diff)
Merge tag 'upstream/0.3.0'
Upstream version 0.3.0
-rw-r--r--proxy/logger.go11
-rw-r--r--proxy/tcp_proxy.go20
-rw-r--r--proxy/udp_proxy.go23
-rw-r--r--tlsconfig/certpool_go17.go3
-rw-r--r--tlsconfig/certpool_other.go2
-rw-r--r--tlsconfig/config.go2
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
}