Stop ignoring ErrorResponse during SCRAM auth

The server may send back an ErrorResponse during SCRAM auth, and these
messages may contain useful information that described why
authentication failed. For example, if the password was invalid.
This commit is contained in:
Rafi Shamim 2022-05-06 22:41:08 -04:00 committed by Jack Christensen
parent 0135721378
commit 1d398317ca

View File

@ -78,12 +78,14 @@ func (c *PgConn) rxSASLContinue() (*pgproto3.AuthenticationSASLContinue, error)
if err != nil { if err != nil {
return nil, err return nil, err
} }
saslContinue, ok := msg.(*pgproto3.AuthenticationSASLContinue) switch m := msg.(type) {
if ok { case *pgproto3.AuthenticationSASLContinue:
return saslContinue, nil return m, nil
case *pgproto3.ErrorResponse:
return nil, ErrorResponseToPgError(m)
} }
return nil, errors.New("expected AuthenticationSASLContinue message but received unexpected message") return nil, fmt.Errorf("expected AuthenticationSASLContinue message but received unexpected message %T", msg)
} }
func (c *PgConn) rxSASLFinal() (*pgproto3.AuthenticationSASLFinal, error) { func (c *PgConn) rxSASLFinal() (*pgproto3.AuthenticationSASLFinal, error) {
@ -91,12 +93,14 @@ func (c *PgConn) rxSASLFinal() (*pgproto3.AuthenticationSASLFinal, error) {
if err != nil { if err != nil {
return nil, err return nil, err
} }
saslFinal, ok := msg.(*pgproto3.AuthenticationSASLFinal) switch m := msg.(type) {
if ok { case *pgproto3.AuthenticationSASLFinal:
return saslFinal, nil return m, nil
case *pgproto3.ErrorResponse:
return nil, ErrorResponseToPgError(m)
} }
return nil, errors.New("expected AuthenticationSASLFinal message but received unexpected message") return nil, fmt.Errorf("expected AuthenticationSASLFinal message but received unexpected message %T", msg)
} }
type scramClient struct { type scramClient struct {