aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/libpq/auth-scram.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/src/backend/libpq/auth-scram.c b/src/backend/libpq/auth-scram.c
index 6e7a1405826..0610deece2c 100644
--- a/src/backend/libpq/auth-scram.c
+++ b/src/backend/libpq/auth-scram.c
@@ -343,6 +343,13 @@ pg_be_scram_exchange(void *opaq, char *input, int inputlen,
* If we performed a "mock" authentication that we knew would fail
* from the get go, this is where we fail.
*
+ * The SCRAM specification includes an error code,
+ * "invalid-proof", for authentication failure, but it also allows
+ * erroring out in an application-specific way. We choose to do
+ * the latter, so that the error message for invalid password is
+ * the same for all authentication methods. The caller will call
+ * ereport(), when we return SASL_EXCHANGE_FAILURE with no output.
+ *
* NB: the order of these checks is intentional. We calculate the
* client proof even in a mock authentication, even though it's
* bound to fail, to thwart timing attacks to determine if a role
@@ -350,14 +357,6 @@ pg_be_scram_exchange(void *opaq, char *input, int inputlen,
*/
if (!verify_client_proof(state) || state->doomed)
{
- /*
- * Signal invalid-proof, although the real reason might also
- * be e.g. that the password has expired, or the user doesn't
- * exist. "e=other-error" might be more correct, but
- * "e=invalid-proof" is more likely to give a nice error
- * message to the user.
- */
- *output = psprintf("e=invalid-proof");
result = SASL_EXCHANGE_FAILURE;
break;
}