mirror of
https://github.com/postgres/postgres.git
synced 2025-10-27 00:12:01 +03:00
Add PQencryptPasswordConn function to libpq, use it in psql and createuser.
The new function supports creating SCRAM verifiers, in addition to md5 hashes. The algorithm is chosen based on password_encryption, by default. This fixes the issue reported by Jeff Janes, that there was previously no way to create a SCRAM verifier with "\password". Michael Paquier and me Discussion: https://www.postgresql.org/message-id/CAMkU%3D1wfBgFPbfAMYZQE78p%3DVhZX7nN86aWkp0QcCp%3D%2BKxZ%3Dbg%40mail.gmail.com
This commit is contained in:
@@ -614,6 +614,41 @@ verify_server_signature(fe_scram_state *state)
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
* Build a new SCRAM verifier.
|
||||
*/
|
||||
char *
|
||||
pg_fe_scram_build_verifier(const char *password)
|
||||
{
|
||||
char *prep_password = NULL;
|
||||
pg_saslprep_rc rc;
|
||||
char saltbuf[SCRAM_DEFAULT_SALT_LEN];
|
||||
char *result;
|
||||
|
||||
/*
|
||||
* Normalize the password with SASLprep. If that doesn't work, because
|
||||
* the password isn't valid UTF-8 or contains prohibited characters, just
|
||||
* proceed with the original password. (See comments at top of file.)
|
||||
*/
|
||||
rc = pg_saslprep(password, &prep_password);
|
||||
if (rc == SASLPREP_OOM)
|
||||
return NULL;
|
||||
if (rc == SASLPREP_SUCCESS)
|
||||
password = (const char *) prep_password;
|
||||
|
||||
/* Generate a random salt */
|
||||
if (!pg_frontend_random(saltbuf, SCRAM_DEFAULT_SALT_LEN))
|
||||
return NULL;
|
||||
|
||||
result = scram_build_verifier(saltbuf, SCRAM_DEFAULT_SALT_LEN,
|
||||
SCRAM_DEFAULT_ITERATIONS, password);
|
||||
|
||||
if (prep_password)
|
||||
free(prep_password);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
* Random number generator.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user