diff -r -c -N postgresql-8.5.orig/src/backend/commands/user.c postgresql-8.5/src/backend/commands/user.c *** postgresql-8.5.orig/src/backend/commands/user.c 2009-09-30 15:10:36.000000000 +0200 --- postgresql-8.5/src/backend/commands/user.c 2009-10-01 14:42:03.000000000 +0200 *************** *** 33,38 **** --- 33,41 ---- #include "utils/tqual.h" + /* Hook for plugins to check passwords in CreateRole() and AlterRole() */ + PGDLLIMPORT check_password_hook_type check_password_hook = NULL; + extern bool Password_encryption; static List *roleNamesToIds(List *memberNames); *************** *** 297,302 **** --- 300,316 ---- stmt->role))); /* + * Call the password checking function if there is one defined + */ + if (check_password_hook) + { + if (! (*check_password_hook)(stmt->role, password)) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("password rejected as insecure"))); + } + + /* * Build a tuple to insert */ MemSet(new_record, 0, sizeof(new_record)); *************** *** 588,593 **** --- 602,618 ---- } /* + * Call the password checking function if there is one defined + */ + if (check_password_hook) + { + if (! (*check_password_hook)(stmt->role, password)) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("password rejected as insecure"))); + } + + /* * Build an updated tuple, perusing the information just obtained */ MemSet(new_record, 0, sizeof(new_record)); diff -r -c -N postgresql-8.5.orig/src/include/commands/user.h postgresql-8.5/src/include/commands/user.h *** postgresql-8.5.orig/src/include/commands/user.h 2009-09-30 15:10:41.000000000 +0200 --- postgresql-8.5/src/include/commands/user.h 2009-10-01 14:42:03.000000000 +0200 *************** *** 13,18 **** --- 13,21 ---- #include "nodes/parsenodes.h" + /* Hook for plugins to check passwords in CreateRole() and AlterRole() */ + typedef int(*check_password_hook_type)(char * const username, char * const password); + extern PGDLLIMPORT check_password_hook_type check_password_hook; extern void CreateRole(CreateRoleStmt *stmt); extern void AlterRole(AlterRoleStmt *stmt);