Re: Re: patch for src/backend/main/main.c

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

In response to

Browse pgsql-patches by date

  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