From a62674838eac383082766a4959d404d7d0f96795 Mon Sep 17 00:00:00 2001 From: nadoo <287492+nadoo@users.noreply.github.com> Date: Wed, 7 Jul 2021 19:05:26 +0800 Subject: [PATCH] ssh: handle error in init conn (#264) --- go.mod | 2 +- go.sum | 4 ++-- proxy/kcp/kcp.go | 12 ++++-------- proxy/smux/server.go | 12 ++++-------- proxy/ssh/ssh.go | 4 +++- proxy/tls/tls.go | 12 ++++-------- proxy/unix/server.go | 12 ++++-------- proxy/ws/server.go | 12 ++++-------- 8 files changed, 26 insertions(+), 44 deletions(-) diff --git a/go.mod b/go.mod index b199a7e..f86fec0 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/dgryski/go-rc2 v0.0.0-20150621095337-8a9021637152 github.com/ebfe/rc2 v0.0.0-20131011165748-24b9757f5521 // indirect github.com/insomniacslk/dhcp v0.0.0-20210621130208-1cac67f12b1e - github.com/klauspost/cpuid/v2 v2.0.7 // indirect + github.com/klauspost/cpuid/v2 v2.0.8 // indirect github.com/klauspost/reedsolomon v1.9.12 // indirect github.com/mdlayher/raw v0.0.0-20210412142147-51b895745faf // indirect github.com/nadoo/conflag v0.2.3 diff --git a/go.sum b/go.sum index eae6ad6..deb185e 100644 --- a/go.sum +++ b/go.sum @@ -50,8 +50,8 @@ github.com/klauspost/cpuid v1.2.4/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgo github.com/klauspost/cpuid v1.3.1 h1:5JNjFYYQrZeKRJ0734q51WCEEn2huer72Dc7K+R/b6s= github.com/klauspost/cpuid v1.3.1/go.mod h1:bYW4mA6ZgKPob1/Dlai2LviZJO7KGI3uoWLd42rAQw4= github.com/klauspost/cpuid/v2 v2.0.2/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.0.7 h1:U89pAFid7wpIWvTFJnMKgU+Sabb7DLEgHI7Xt8apo3Y= -github.com/klauspost/cpuid/v2 v2.0.7/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.0.8 h1:bhR2mgIlno/Sfk4oUbH4sPlc83z1yGrN9bvqiq3C33I= +github.com/klauspost/cpuid/v2 v2.0.8/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/reedsolomon v1.9.9/go.mod h1:O7yFFHiQwDR6b2t63KPUpccPtNdp5ADgh1gg4fd12wo= github.com/klauspost/reedsolomon v1.9.12 h1:EyOucRmcrLH+2hqKGdoA5SM8pwPKR6BJsf3r6zpYOA0= github.com/klauspost/reedsolomon v1.9.12/go.mod h1:nLvuzNvy1ZDNQW30IuMc2ZWCbiqrJgdLoUS2X8HAUVg= diff --git a/proxy/kcp/kcp.go b/proxy/kcp/kcp.go index 0fd7a73..0b84446 100644 --- a/proxy/kcp/kcp.go +++ b/proxy/kcp/kcp.go @@ -143,18 +143,14 @@ func NewKCPDialer(s string, d proxy.Dialer) (proxy.Dialer, error) { // NewKCPServer returns a kcp proxy server. func NewKCPServer(s string, p proxy.Proxy) (proxy.Server, error) { - server, chain := s, "" - if idx := strings.IndexByte(s, ','); idx != -1 { - server, chain = s[:idx], s[idx+1:] - } - - k, err := NewKCP(server, nil, p) + schemes := strings.SplitN(s, ",", 2) + k, err := NewKCP(schemes[0], nil, p) if err != nil { return nil, err } - if chain != "" { - k.server, err = proxy.ServerFromURL(chain, p) + if len(schemes) > 1 { + k.server, err = proxy.ServerFromURL(schemes[1], p) if err != nil { return nil, err } diff --git a/proxy/smux/server.go b/proxy/smux/server.go index 1bdeba2..96f7d28 100644 --- a/proxy/smux/server.go +++ b/proxy/smux/server.go @@ -24,12 +24,8 @@ func init() { // NewSmuxServer returns a smux transport layer before the real server. func NewSmuxServer(s string, p proxy.Proxy) (proxy.Server, error) { - server, chain := s, "" - if idx := strings.IndexByte(s, ','); idx != -1 { - server, chain = s[:idx], s[idx+1:] - } - - u, err := url.Parse(server) + schemes := strings.SplitN(s, ",", 2) + u, err := url.Parse(schemes[0]) if err != nil { log.F("[smux] parse url err: %s", err) return nil, err @@ -40,8 +36,8 @@ func NewSmuxServer(s string, p proxy.Proxy) (proxy.Server, error) { addr: u.Host, } - if chain != "" { - m.server, err = proxy.ServerFromURL(chain, p) + if len(schemes) > 1 { + m.server, err = proxy.ServerFromURL(schemes[1], p) if err != nil { return nil, err } diff --git a/proxy/ssh/ssh.go b/proxy/ssh/ssh.go index e08b147..419df38 100644 --- a/proxy/ssh/ssh.go +++ b/proxy/ssh/ssh.go @@ -116,7 +116,9 @@ func (s *SSH) Dial(network, addr string) (net.Conn, error) { return c, nil } s.sshConn.Close() - s.initConn() + if err := s.initConn(); err != nil { + return nil, err + } return ssh.NewClient(s.sshConn, s.sshChan, s.sshReq).Dial(network, addr) } diff --git a/proxy/tls/tls.go b/proxy/tls/tls.go index ecbd28d..471d2fc 100644 --- a/proxy/tls/tls.go +++ b/proxy/tls/tls.go @@ -81,12 +81,8 @@ func NewTLSDialer(s string, d proxy.Dialer) (proxy.Dialer, error) { // NewTLSServer returns a tls transport layer before the real server. func NewTLSServer(s string, p proxy.Proxy) (proxy.Server, error) { - server, chain := s, "" - if idx := strings.IndexByte(s, ','); idx != -1 { - server, chain = s[:idx], s[idx+1:] - } - - t, err := NewTLS(server, nil, p) + schemes := strings.SplitN(s, ",", 2) + t, err := NewTLS(schemes[0], nil, p) if err != nil { return nil, err } @@ -106,8 +102,8 @@ func NewTLSServer(s string, p proxy.Proxy) (proxy.Server, error) { MinVersion: stdtls.VersionTLS12, } - if chain != "" { - t.server, err = proxy.ServerFromURL(chain, p) + if len(schemes) > 1 { + t.server, err = proxy.ServerFromURL(schemes[1], p) if err != nil { return nil, err } diff --git a/proxy/unix/server.go b/proxy/unix/server.go index 337fb09..42d13e5 100644 --- a/proxy/unix/server.go +++ b/proxy/unix/server.go @@ -17,18 +17,14 @@ func init() { // NewUnixServer returns a unix domain socket server. func NewUnixServer(s string, p proxy.Proxy) (proxy.Server, error) { - server, chain := s, "" - if idx := strings.IndexByte(s, ','); idx != -1 { - server, chain = s[:idx], s[idx+1:] - } - - unix, err := NewUnix(server, nil, p) + schemes := strings.SplitN(s, ",", 2) + unix, err := NewUnix(schemes[0], nil, p) if err != nil { return nil, err } - if chain != "" { - unix.server, err = proxy.ServerFromURL(chain, p) + if len(schemes) > 1 { + unix.server, err = proxy.ServerFromURL(schemes[1], p) if err != nil { return nil, err } diff --git a/proxy/ws/server.go b/proxy/ws/server.go index 7e71f5a..0b8737e 100644 --- a/proxy/ws/server.go +++ b/proxy/ws/server.go @@ -18,18 +18,14 @@ func init() { // NewWSServer returns a ws transport server. func NewWSServer(s string, p proxy.Proxy) (proxy.Server, error) { - server, chain := s, "" - if idx := strings.IndexByte(s, ','); idx != -1 { - server, chain = s[:idx], s[idx+1:] - } - - w, err := NewWS(server, nil, p) + schemes := strings.SplitN(s, ",", 2) + w, err := NewWS(schemes[0], nil, p) if err != nil { return nil, err } - if chain != "" { - w.server, err = proxy.ServerFromURL(chain, p) + if len(schemes) > 1 { + w.server, err = proxy.ServerFromURL(schemes[1], p) if err != nil { return nil, err }