diff --git a/cmd/cgat/main.go b/cmd/cgat/main.go index 9342d2d40f71d66adb6c653dea3a38eca9fb164c..a2199353e02e642481697e32d83f0d5249010158 100644 --- a/cmd/cgat/main.go +++ b/cmd/cgat/main.go @@ -1,23 +1,17 @@ package main -import ( - "net" - - "pggat2/lib/backend/backends/v0" -) +import "pggat2/lib/frontend/frontends/v0" func main() { + frontend, err := frontends.NewFrontend() + if err != nil { + panic(err) + } + err = frontend.Run() + if err != nil { + panic(err) + } /* - frontend, err := frontends.NewFrontend() - if err != nil { - panic(err) - } - err = frontend.Run() - if err != nil { - panic(err) - } - */ - for i := 0; i < 1000; i++ { conn, err := net.Dial("tcp", "localhost:5432") if err != nil { panic(err) @@ -27,6 +21,5 @@ func main() { panic(err) } _ = server - _ = conn.Close() - } + _ = conn.Close()*/ } diff --git a/cmd/cgat/main_test.go b/cmd/cgat/main_test.go index 45fcc779c52e0897a5aec51698990eaf5e559911..4cfd70481d80c3dc257c0da3405698389ba84293 100644 --- a/cmd/cgat/main_test.go +++ b/cmd/cgat/main_test.go @@ -3,5 +3,7 @@ package main import "testing" func Test(t *testing.T) { - main() + for i := 0; i < 1000; i++ { + main() + } } diff --git a/lib/backend/backends/v0/server.go b/lib/backend/backends/v0/server.go index 1d7b7673d5bf6fb2c4651743d3d5a01ff1b230eb..9b86f6ef630939c475e45ebf5c8e45db4c67387e 100644 --- a/lib/backend/backends/v0/server.go +++ b/lib/backend/backends/v0/server.go @@ -135,22 +135,25 @@ func (T *Server) startup0(username, password string) (bool, error) { if err != nil { return false, err } - defer in.Done() switch in.Type() { case packet.ErrorResponse: + in.Done() return false, errors.New("received error response") case packet.Authentication: method, ok := in.Int32() if !ok { + in.Done() return false, ErrBadPacketFormat } // they have more authentication methods than there are pokemon switch method { case 0: // we're good to go, that was easy + in.Done() return true, nil case 2: + in.Done() return false, errors.New("kerberos v5 is not supported") case 3: in.Done() @@ -164,10 +167,13 @@ func (T *Server) startup0(username, password string) (bool, error) { in.Done() return false, T.authenticationMD5(salt, username, password) case 6: + in.Done() return false, errors.New("scm credential is not supported") case 7: + in.Done() return false, errors.New("gss is not supported") case 9: + in.Done() return false, errors.New("sspi is not supported") case 10: // read list of mechanisms @@ -186,12 +192,15 @@ func (T *Server) startup0(username, password string) (bool, error) { in.Done() return false, T.authenticationSASL(mechanisms, username, password) default: + in.Done() return false, errors.New("unknown authentication method") } case packet.NegotiateProtocolVersion: // we only support protocol 3.0 for now + in.Done() return false, errors.New("server wanted to negotiate protocol version") default: + in.Done() return false, ErrProtocolError } } diff --git a/lib/pnet/packet/in.go b/lib/pnet/packet/in.go index 5e97eeaeb9f831519ffd221d7a76a71dd764774a..9ba0758f93a1193d993eedcc9ec670dda847637f 100644 --- a/lib/pnet/packet/in.go +++ b/lib/pnet/packet/in.go @@ -140,7 +140,7 @@ func (T *In) Bytes(b []byte) bool { func (T *In) Done() { if T.done { - return + panic("Done called twice") } T.done = true T.finish(T.buf)