Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-patches by date

Next:From: Tom LaneDate: 2001-01-24 04:41:10
Subject: Re: [PATCHES] Small patch to replace 'idle' by 'trans' if transactionis still open
Previous:From: Bruce MomjianDate: 2001-01-24 03:46:51
Subject: Re: [PATCHES] Small patch to replace 'idle' by 'trans' if transactionis still open

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group