Give nicer error message when connecting to a v10 server requiring SCRAM.

This is just to give the user a hint that they need to upgrade, if they try
to connect to a v10 server that uses SCRAM authentication, with an older
client.

Commit to all stable branches, but not master.

Discussion: https://www.postgresql.org/message-id/bbf45d92-3896-eeb7-7399-2111d517261b@pivotal.io
This commit is contained in:
Heikki Linnakangas 2017-05-05 11:24:02 +03:00
parent 071d13395c
commit bd05ad8b05
2 changed files with 15 additions and 0 deletions

View File

@ -172,6 +172,8 @@ extern bool Db_user_namespace;
#define AUTH_REQ_GSS 7 /* GSSAPI without wrap() */
#define AUTH_REQ_GSS_CONT 8 /* Continue GSS exchanges */
#define AUTH_REQ_SSPI 9 /* SSPI negotiate without wrap() */
#define AUTH_REQ_SASL 10 /* SASL authentication. Not supported before
* libpq version 10. */
typedef uint32 AuthRequest;

View File

@ -703,6 +703,19 @@ pg_fe_sendauth(AuthRequest areq, PGconn *conn)
return STATUS_ERROR;
break;
/*
* SASL authentication was introduced in version 10. Older
* versions recognize the request only to give a nicer error
* message. We call it "SCRAM authentication" in the error, rather
* than SASL, because SCRAM is more familiar to users, and it's
* the only SASL authentication mechanism that has been
* implemented as of this writing, anyway.
*/
case AUTH_REQ_SASL:
printfPQExpBuffer(&conn->errorMessage,
libpq_gettext("SCRAM authentication requires libpq version 10 or above\n"));
return STATUS_ERROR;
default:
printfPQExpBuffer(&conn->errorMessage,
libpq_gettext("authentication method %u not supported\n"), areq);