From cb00b7faa5849d8460198f7ced1cfdd0a92cfe53 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Sun, 12 Dec 1999 05:57:36 +0000 Subject: [PATCH] I'm in TODO mood today ... MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Document/trigger/rule so changes to pg_shadow recreate pg_pwd I did it with a trigger and it seems to work like a charm. The function that already updates the file for create and alter user has been made a built-in "SQL" function and a trigger is created at initdb time. Comments around the pg_pwd updating function seem to be worried about this routine being called concurrently, but I really don't see a reason to worry about this. Verify for yourself. I guess we never had a system trigger before, so treat this with care, and feel free to adjust the nomenclature as well. -- Peter Eisentraut Sernanders väg 10:115 --- doc/TODO | 2 +- src/backend/commands/user.c | 13 +++++++++---- src/bin/initdb/initdb.sh | 6 +++++- src/include/catalog/pg_proc.h | 4 +++- 4 files changed, 18 insertions(+), 7 deletions(-) diff --git a/doc/TODO b/doc/TODO index 4971e43f9d..df3cc16fae 100644 --- a/doc/TODO +++ b/doc/TODO @@ -204,7 +204,7 @@ MISC * Do autocommit so always in a transaction block(?) * Show location of syntax error in query [yacc] * Redesign the function call interface to handle NULLs better [function] -* Document/trigger/rule so changes to pg_shadow recreate pg_pwd [pg_shadow] +* -Document/trigger/rule so changes to pg_shadow recreate pg_pwd [pg_shadow] * Missing optimizer selectivities for date, r-tree, etc. [optimizer] * -Overhaul mdmgr/smgr to fix double unlinking and double opens, cleanup * Overhaul bufmgr/lockmgr/transaction manager diff --git a/src/backend/commands/user.c b/src/backend/commands/user.c index 2360cc3bb8..1cf0732547 100644 --- a/src/backend/commands/user.c +++ b/src/backend/commands/user.c @@ -5,7 +5,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: user.c,v 1.40 1999/11/30 04:29:56 momjian Exp $ + * $Id: user.c,v 1.41 1999/12/12 05:57:28 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -43,8 +43,13 @@ static void CheckPgUserAclNotNull(void); * pg_shadow is the standard way to do that. *--------------------------------------------------------------------- */ -static void -UpdatePgPwdFile(void) + +/* This is the old name. Now uses a lower case name to be able to call this + from SQL. */ +#define UpdatePgPwdFile() update_pg_pwd() + +void +update_pg_pwd() { char *filename, *tempname; @@ -71,7 +76,7 @@ UpdatePgPwdFile(void) false, /* from */ false, /* pipe */ tempname, /* filename */ - CRYPT_PWD_FILE_SEPCHAR, /* delim */ + CRYPT_PWD_FILE_SEPSTR, /* delim */ 0077); /* fileumask */ /* * And rename the temp file to its final name, deleting the old pg_pwd. diff --git a/src/bin/initdb/initdb.sh b/src/bin/initdb/initdb.sh index 7c792c36c0..fd1ac65ecf 100644 --- a/src/bin/initdb/initdb.sh +++ b/src/bin/initdb/initdb.sh @@ -26,7 +26,7 @@ # # # IDENTIFICATION -# $Header: /cvsroot/pgsql/src/bin/initdb/Attic/initdb.sh,v 1.63 1999/12/09 04:36:57 momjian Exp $ +# $Header: /cvsroot/pgsql/src/bin/initdb/Attic/initdb.sh,v 1.64 1999/12/12 05:57:30 momjian Exp $ # #------------------------------------------------------------------------- @@ -412,6 +412,10 @@ echo PGSQL_OPT="-o /dev/null -O -F -Q -D$PGDATA" +# Create a trigger so that direct updates to pg_shadow will be written +# to the flat password file pg_pwd +echo "CREATE TRIGGER pg_sync_pg_pwd AFTER INSERT OR UPDATE OR DELETE ON pg_shadow FOR EACH ROW EXECUTE PROCEDURE update_pg_pwd()" | postgres $PGSQL_OPT template1 > /dev/null + # Create the initial pg_pwd (flat-file copy of pg_shadow) echo "COPY pg_shadow TO '$PGDATA/pg_pwd' USING DELIMITERS '\\t'" | \ postgres $PGSQL_OPT template1 > /dev/null diff --git a/src/include/catalog/pg_proc.h b/src/include/catalog/pg_proc.h index 9e9f01b3fd..05cdd7f6b3 100644 --- a/src/include/catalog/pg_proc.h +++ b/src/include/catalog/pg_proc.h @@ -6,7 +6,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: pg_proc.h,v 1.108 1999/12/01 18:03:26 momjian Exp $ + * $Id: pg_proc.h,v 1.109 1999/12/12 05:57:36 momjian Exp $ * * NOTES * The script catalog/genbki.sh reads this file and generates .bki @@ -93,6 +93,8 @@ typedef FormData_pg_proc *Form_pg_proc; /* keep the following ordered by OID so that later changes can be made easier */ /* OIDS 1 - 99 */ +DATA(insert OID = 12 ( update_pg_pwd PGUID 11 f t f 0 f 0 "" 100 0 0 100 update_pg_pwd - )); +DESCR("update pg_pwd file"); DATA(insert OID = 1242 ( boolin PGUID 11 f t t 1 f 16 "0" 100 0 0 100 boolin - )); DESCR("(internal)");