aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>2001-01-24 03:50:06 +0000
committerBruce Momjian <bruce@momjian.us>2001-01-24 03:50:06 +0000
commit843657b06656c66fdf5fb45588a1e0691d9a395d (patch)
tree489c3e9b9b3dbcd46b2855744b7dbe016b445339 /src
parentcb5427ee4770bb224a3f884a83614ceee85f36ab (diff)
downloadpostgresql-843657b06656c66fdf5fb45588a1e0691d9a395d.tar.gz
postgresql-843657b06656c66fdf5fb45588a1e0691d9a395d.zip
attached is take-2 of a patch which fixes a bug related
to the use of getpwuid when running in standalone mode. this patch allocates some persistent storage (using strdup) to store the username obtained with getpwuid in src/backend/main/main.c. this is necessary because later on, getpwuid is called again (in ValidateBinary). the man pages for getpwuid on SCO OpenServer, FreeBSD, and Darwin all have words to this effect (this is from the SCO OpenServer man page): Note ==== All information is contained in a static area, so it must be copied if it is to be saved. Otherwise, it may be overwritten on subsequent calls to these routines. in particular, on my platform, the storage used to hold the pw_name from the first call is overwritten such that it looks like an empty username. this causes a problem later on in SetSessionUserIdFromUserName. i'd assume this isn't a problem on most platforms because getpwuid is called with the same UID both times, and the same thing ends up happening to that static storage each time. however, that's not guaranteed, and is _not_ what happens on my platform (at least :). this is for the version of 7.1 available via anon cvs as of Tue Jan 23 15:14:00 2001 PST: .../src/backend/main/main.c,v 1.37 2000/12/31 18:04:35 tgl Exp -michael thornburgh, zenomt@armory.com
Diffstat (limited to 'src')
-rw-r--r--src/backend/main/main.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/backend/main/main.c b/src/backend/main/main.c
index bb2615cb9c7..630948ec0d7 100644
--- a/src/backend/main/main.c
+++ b/src/backend/main/main.c
@@ -13,7 +13,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/main/main.c,v 1.37 2000/12/31 18:04:35 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/main/main.c,v 1.38 2001/01/24 03:50:06 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -53,6 +53,7 @@ main(int argc, char *argv[])
{
int len;
struct passwd *pw;
+ char * pw_name_persist;
/*
* Place platform-specific startup hacks here. This is the right
@@ -158,6 +159,7 @@ main(int argc, char *argv[])
fprintf(stderr, "%s: invalid current euid", argv[0]);
exit(1);
}
+ pw_name_persist = strdup(pw->pw_name);
- exit(PostgresMain(argc, argv, argc, argv, pw->pw_name));
+ exit(PostgresMain(argc, argv, argc, argv, pw_name_persist));
}