Re: Re: patch for src/backend/main/main.c - Mailing list pgsql-patches

From Bruce Momjian
Subject Re: Re: patch for src/backend/main/main.c
Date
Msg-id 200101240350.WAA28050@candle.pha.pa.us
Whole thread Raw
In response to Re: Re: patch for src/backend/main/main.c  ("Michael C. Thornburgh" <zenomt@armory.com>)
List 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@armory.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@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026

pgsql-patches by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: docs: syntax.sgml patch
Next
From: Bruce Momjian
Date:
Subject: Re: update to contrib/pgcrypto