From: | Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us> |
---|---|
To: | "Michael C(dot) Thornburgh" <zenomt(at)armory(dot)com> |
Cc: | pgsql-patches(at)postgresql(dot)org |
Subject: | Re: Re: patch for src/backend/main/main.c |
Date: | 2001-01-24 03:50:07 |
Message-ID: | 200101240350.WAA28050@candle.pha.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-patches |
Thanks. Applied.
>
> > We already use strdup a lot. Want to send a new patch?
>
>
>
> 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(at)armory(dot)com
>
>
>
> *** src/backend/main/main.c.orig Mon Jan 22 17:09:50 2001
> --- src/backend/main/main.c Tue Jan 23 17:00:07 2001
> ***************
> *** 53,58 ****
> --- 53,59 ----
> {
> int len;
> struct passwd *pw;
> + char * pw_name_persist;
>
> /*
> * Place platform-specific startup hacks here. This is the right
> ***************
> *** 158,163 ****
> fprintf(stderr, "%s: invalid current euid", argv[0]);
> exit(1);
> }
>
> ! exit(PostgresMain(argc, argv, argc, argv, pw->pw_name));
> }
> --- 159,165 ----
> fprintf(stderr, "%s: invalid current euid", argv[0]);
> exit(1);
> }
> + pw_name_persist = strdup(pw->pw_name);
>
> ! exit(PostgresMain(argc, argv, argc, argv, pw_name_persist));
> }
>
--
Bruce Momjian | http://candle.pha.pa.us
pgman(at)candle(dot)pha(dot)pa(dot)us | (610) 853-3000
+ If your life is a hard drive, | 830 Blythe Avenue
+ Christ can be your backup. | Drexel Hill, Pennsylvania 19026
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2001-01-24 04:41:10 | Re: [PATCHES] Small patch to replace 'idle' by 'trans' if transactionis still open |
Previous Message | Bruce Momjian | 2001-01-24 03:46:51 | Re: [PATCHES] Small patch to replace 'idle' by 'trans' if transactionis still open |