aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>1999-12-12 05:57:36 +0000
committerBruce Momjian <bruce@momjian.us>1999-12-12 05:57:36 +0000
commitcb00b7faa5849d8460198f7ced1cfdd0a92cfe53 (patch)
treed389b1907364124e8c6703af287ed0e593d06446 /src
parent11023eb1f5bd4fe6ddff652957848437b5d16f14 (diff)
downloadpostgresql-cb00b7faa5849d8460198f7ced1cfdd0a92cfe53.tar.gz
postgresql-cb00b7faa5849d8460198f7ced1cfdd0a92cfe53.zip
I'm in TODO mood today ...
* 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
Diffstat (limited to 'src')
-rw-r--r--src/backend/commands/user.c13
-rw-r--r--src/bin/initdb/initdb.sh6
-rw-r--r--src/include/catalog/pg_proc.h4
3 files changed, 17 insertions, 6 deletions
diff --git a/src/backend/commands/user.c b/src/backend/commands/user.c
index 2360cc3bb80..1cf07325473 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 7c792c36c0a..fd1ac65ecfb 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 9e9f01b3fd7..05cdd7f6b3e 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)");