mirror of
https://github.com/postgres/postgres.git
synced 2025-04-20 00:42:27 +03:00
Fix handling of previous password hooks in passwordcheck
When piling up loading of modules using check_password_hook_type, loading passwordcheck would remove any trace of a previously-loaded hook. Unloading the module would also cause previous hooks to be entirely gone. Reported-by: Rafael Castro Author: Michael Paquier Reviewed-by: Daniel Gustafsson Discussion: https://postgr.es/m/15932-78f48f9ef166778c@postgresql.org Backpatch-through: 9.4
This commit is contained in:
parent
7615afa48e
commit
cb00744178
@ -26,10 +26,14 @@
|
|||||||
|
|
||||||
PG_MODULE_MAGIC;
|
PG_MODULE_MAGIC;
|
||||||
|
|
||||||
|
/* Saved hook value in case of unload */
|
||||||
|
static check_password_hook_type prev_check_password_hook = NULL;
|
||||||
|
|
||||||
/* passwords shorter than this will be rejected */
|
/* passwords shorter than this will be rejected */
|
||||||
#define MIN_PWD_LENGTH 8
|
#define MIN_PWD_LENGTH 8
|
||||||
|
|
||||||
extern void _PG_init(void);
|
extern void _PG_init(void);
|
||||||
|
extern void _PG_fini(void);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* check_password
|
* check_password
|
||||||
@ -55,6 +59,11 @@ check_password(const char *username,
|
|||||||
Datum validuntil_time,
|
Datum validuntil_time,
|
||||||
bool validuntil_null)
|
bool validuntil_null)
|
||||||
{
|
{
|
||||||
|
if (prev_check_password_hook)
|
||||||
|
prev_check_password_hook(username, shadow_pass,
|
||||||
|
password_type, validuntil_time,
|
||||||
|
validuntil_null);
|
||||||
|
|
||||||
if (password_type != PASSWORD_TYPE_PLAINTEXT)
|
if (password_type != PASSWORD_TYPE_PLAINTEXT)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@ -133,5 +142,16 @@ void
|
|||||||
_PG_init(void)
|
_PG_init(void)
|
||||||
{
|
{
|
||||||
/* activate password checks when the module is loaded */
|
/* activate password checks when the module is loaded */
|
||||||
|
prev_check_password_hook = check_password_hook;
|
||||||
check_password_hook = check_password;
|
check_password_hook = check_password;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Module unload function
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
_PG_fini(void)
|
||||||
|
{
|
||||||
|
/* uninstall hook */
|
||||||
|
check_password_hook = prev_check_password_hook;
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user