diff options
Diffstat (limited to 'src/backend/commands/user.c')
| -rw-r--r-- | src/backend/commands/user.c | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/src/backend/commands/user.c b/src/backend/commands/user.c index 6a9ba6f529a..33eb3c39b2f 100644 --- a/src/backend/commands/user.c +++ b/src/backend/commands/user.c @@ -6,7 +6,7 @@ * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/backend/commands/user.c,v 1.133 2004/01/26 22:35:32 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/commands/user.c,v 1.134 2004/02/02 00:17:21 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -139,7 +139,11 @@ write_group_file(Relation grel) bufsize = strlen(filename) + 12; tempname = (char *) palloc(bufsize); snprintf(tempname, bufsize, "%s.%d", filename, MyProcPid); - +#if defined(WIN32) || defined(CYGWIN) + filename = repalloc(filename, strlen(filename) + 1 + strlen(".new"); + strcat(filename, ".new"); +#endif + oumask = umask((mode_t) 077); fp = AllocateFile(tempname, "w"); umask(oumask); @@ -286,6 +290,10 @@ write_user_file(Relation urel) bufsize = strlen(filename) + 12; tempname = (char *) palloc(bufsize); snprintf(tempname, bufsize, "%s.%d", filename, MyProcPid); +#if defined(WIN32) || defined(CYGWIN) + filename = repalloc(filename, strlen(filename) + 1 + strlen(".new"); + strcat(filename, ".new"); +#endif oumask = umask((mode_t) 077); fp = AllocateFile(tempname, "w"); @@ -457,6 +465,18 @@ AtEOXact_UpdatePasswordFile(bool isCommit) user_file_update_needed = false; write_user_file(urel); heap_close(urel, NoLock); +#if defined(WIN32) || defined(CYGWIN) + { + /* Rename active file while not holding an exclusive lock */ + char *filename = user_getfilename(), *filename_new; + + filename_new = palloc(strlen(filename) + 1 + strlen(".new"))); + sprintf(filename_new, "%s.new", filename); + rename(filename_new, filename); + pfree(filename); + pfree(filename_new); + } +#endif } if (group_file_update_needed) @@ -464,6 +484,18 @@ AtEOXact_UpdatePasswordFile(bool isCommit) group_file_update_needed = false; write_group_file(grel); heap_close(grel, NoLock); +#if defined(WIN32) || defined(CYGWIN) + { + /* Rename active file while not holding an exclusive lock */ + char *filename = group_getfilename(), *filename_new; + + filename_new = palloc(strlen(filename) + 1 + strlen(".new"))); + sprintf(filename_new, "%s.new", filename); + rename(filename_new, filename); + pfree(filename); + pfree(filename_new); + } +#endif } /* |
