diff --git a/lib/backend/backends/v0/server.go b/lib/backend/backends/v0/server.go index a9a57af2beffb73b1cd099990ed3f975d9f89f1c..7db35173290156fa1ce02c8135a65580744601f3 100644 --- a/lib/backend/backends/v0/server.go +++ b/lib/backend/backends/v0/server.go @@ -1,7 +1,7 @@ package backends import ( - "log" + "errors" "net" "pggat2/lib/backend" @@ -47,7 +47,40 @@ func (T *Server) accept() error { return err } - log.Printf("%#v", auth) + reader := packet.MakeReader(auth) + switch reader.Type() { + case packet.Authentication: + method, ok := reader.Int32() + if !ok { + return errors.New("expected authentication method") + } + // they have more authentication methods than there are pokemon + switch method { + case 0: + // we're good to go, that was easy + case 2: + return errors.New("kerberos v5 is not supported") + case 3: + return errors.New("cleartext is not supported") + case 5: + return errors.New("md5 password is not supported") + case 6: + return errors.New("scm credential is not supported") + case 7: + return errors.New("gss is not supported") + case 9: + return errors.New("sspi is not supported") + case 10: + return errors.New("sasl is not supported") + default: + return errors.New("unknown authentication method") + } + case packet.ErrorResponse: + return errors.New("backend errored") + case packet.NegotiateProtocolVersion: + // we only support 3.0 as of now + return errors.New("unsupported protocol version") + } return nil }