Skip to content
Snippets Groups Projects
Commit 4536e494 authored by Michael Paquier's avatar Michael Paquier
Browse files

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
parent 9dd74ba5
No related branches found
No related tags found
No related merge requests found
......@@ -26,10 +26,14 @@
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 */
#define MIN_PWD_LENGTH 8
extern void _PG_init(void);
extern void _PG_fini(void);
/*
* check_password
......@@ -62,6 +66,11 @@ check_password(const char *username,
bool pwd_has_letter,
pwd_has_nonletter;
if (prev_check_password_hook)
prev_check_password_hook(username, password,
password_type, validuntil_time,
validuntil_null);
switch (password_type)
{
case PASSWORD_TYPE_MD5:
......@@ -143,5 +152,16 @@ void
_PG_init(void)
{
/* activate password checks when the module is loaded */
prev_check_password_hook = check_password_hook;
check_password_hook = check_password;
}
/*
* Module unload function
*/
void
_PG_fini(void)
{
/* uninstall hook */
check_password_hook = prev_check_password_hook;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment