mirror of
https://github.com/postgres/postgres.git
synced 2025-11-04 20:11:56 +03:00
Replace isMD5() with a more future-proof way to check if pw is encrypted.
The rule is that if pg_authid.rolpassword begins with "md5" and has the right length, it's an MD5 hash, otherwise it's a plaintext password. The idiom has been to use isMD5() to check for that, but that gets awkward, when we add new kinds of verifiers, like the verifiers for SCRAM authentication in the pending SCRAM patch set. Replace isMD5() with a new get_password_type() function, so that when new verifier types are added, we don't need to remember to modify every place that currently calls isMD5(), to also recognize the new kinds of verifiers. Also, use the new plain_crypt_verify function in passwordcheck, so that it doesn't need to know about MD5, or in the future, about other kinds of hashes or password verifiers. Reviewed by Michael Paquier and Peter Eisentraut. Discussion: https://www.postgresql.org/message-id/2d07165c-1793-e243-a2a9-e45b624c7580@iki.fi
This commit is contained in:
@@ -15,7 +15,24 @@
|
||||
|
||||
#include "datatype/timestamp.h"
|
||||
|
||||
extern int get_role_password(const char *role, char **shadow_pass, char **logdetail);
|
||||
/*
|
||||
* Types of password hashes or verifiers that can be stored in
|
||||
* pg_authid.rolpassword.
|
||||
*
|
||||
* This is also used for the password_encryption GUC.
|
||||
*/
|
||||
typedef enum PasswordType
|
||||
{
|
||||
PASSWORD_TYPE_PLAINTEXT = 0,
|
||||
PASSWORD_TYPE_MD5
|
||||
} PasswordType;
|
||||
|
||||
extern PasswordType get_password_type(const char *shadow_pass);
|
||||
extern char *encrypt_password(PasswordType target_type, const char *role,
|
||||
const char *password);
|
||||
|
||||
extern int get_role_password(const char *role, char **shadow_pass,
|
||||
char **logdetail);
|
||||
|
||||
extern int md5_crypt_verify(const char *role, const char *shadow_pass,
|
||||
const char *client_pass, const char *md5_salt,
|
||||
|
||||
Reference in New Issue
Block a user