diff options
| author | Mikhail Osipov <mike.osipov@gmail.com> | 2020-09-02 22:20:13 +0300 |
|---|---|---|
| committer | Mikhail Osipov <mike.osipov@gmail.com> | 2020-09-03 01:24:44 +0300 |
| commit | 9cd014c3d6872582854e36a4df6c0a4633f3eb57 (patch) | |
| tree | c86d21965bc623a1e8693bb638e7ba39fc46f153 /pkg/server/socket | |
| parent | 144f66574706c9e251c964b694e80406206cb10b (diff) | |
fix data steal by proxy
Diffstat (limited to 'pkg/server/socket')
| -rw-r--r-- | pkg/server/socket/listen.go | 4 | ||||
| -rw-r--r-- | pkg/server/socket/proxy.go | 9 |
2 files changed, 9 insertions, 4 deletions
diff --git a/pkg/server/socket/listen.go b/pkg/server/socket/listen.go index 94fb85c..910e5de 100644 --- a/pkg/server/socket/listen.go +++ b/pkg/server/socket/listen.go @@ -80,12 +80,12 @@ func (s *listenSocket) Open(env env.Env) (Conn, error) { conn.Close() return nil, err } else { - env.Set("original.addr", original) + env.Set("original", original) } } if s.tproxy { - env.Set("original.addr", la.String()) + env.Set("original", la.String()) } if original == "" { diff --git a/pkg/server/socket/proxy.go b/pkg/server/socket/proxy.go index ef14f48..47f86c9 100644 --- a/pkg/server/socket/proxy.go +++ b/pkg/server/socket/proxy.go @@ -1,6 +1,7 @@ package socket import ( + "bufio" "bytes" "errors" "fmt" @@ -94,12 +95,16 @@ func (s *proxyServer) initConn(addr string) error { } func (s *proxyServer) Recv(rq queue.Q) error { - req, err := http.ParseRequest(rq.Reader()) + r := bufio.NewReader(rq.Reader()) + + req, err := http.ParseRequest(r) if err != nil { s.wait <- status{400, "Bad Request"} return err } + // TODO check if extra data is available in reader + if req.Method != "CONNECT" { s.wait <- status{400, "Bad Request"} return errors.New("bad method") @@ -122,7 +127,7 @@ func (s *proxyServer) Recv(rq queue.Q) error { s.wait <- status{200, "Connection established"} - return s.conn.Recv(rq) + return queue.IoCopy(r, s.conn.(*conn)) } func (s *proxyServer) Close() (err error) { |
