In src/port, we have in threads.c:

/*
 * Wrapper around getpwuid() or getpwuid_r() to mimic POSIX getpwuid_r()
 * behaviour, if it is not available.
 */
int
pqGetpwuid(uid_t uid, struct passwd * resultbuf, char *buffer,
                   size_t buflen, struct passwd ** result)
{
#if defined(USE_THREADS) && defined(HAVE_GETPWUID_R)

        /*
         * broken (well early POSIX draft) getpwuid_r() which returns 
'struct
         * passwd *'
         */
        *result = getpwuid_r(uid, resultbuf, buffer, buflen);
#else
        /* no getpwuid_r() available, just use getpwuid() */
        *result = getpwuid(uid);
#endif
        return (*result == NULL) ? -1 : 0;
}


Which BREAKS if you have the correct getpwuid_r() like UnixWare does.

Can someone help me with the configure checks/macros I need?
$ grep getpwuid_r /usr/include/pwd.h
int getpwuid_r(uid_t, struct passwd *, char *, size_t, struct passwd **);
$




-- 
Larry Rosenman                     http://www.lerctr.org/~ler
Phone: +1 972-414-9812                 E-Mail: ler@lerctr.org
US Mail: 1905 Steamboat Springs Drive, Garland, TX 75044-6749


Thu, 07 Aug 2003 19:33:41 -0500
Larry Rosenman <ler@lerctr.org>
threads/UnixWare
Actually, your getpwuid_r is the old, pre-POSIX format.  The attached
email has the configure tests.  I was hoping we wouldn't need them, but
it seems we may.

---------------------------------------------------------------------------

Larry Rosenman wrote:
> In src/port, we have in threads.c:
> 
> /*
>  * Wrapper around getpwuid() or getpwuid_r() to mimic POSIX getpwuid_r()
>  * behaviour, if it is not available.
>  */
> int
> pqGetpwuid(uid_t uid, struct passwd * resultbuf, char *buffer,
>                    size_t buflen, struct passwd ** result)
> {
> #if defined(USE_THREADS) && defined(HAVE_GETPWUID_R)
> 
>         /*
>          * broken (well early POSIX draft) getpwuid_r() which returns 
> 'struct
>          * passwd *'
>          */
>         *result = getpwuid_r(uid, resultbuf, buffer, buflen);
> #else
>         /* no getpwuid_r() available, just use getpwuid() */
>         *result = getpwuid(uid);
> #endif
>         return (*result == NULL) ? -1 : 0;
> }
> 
> 
> Which BREAKS if you have the correct getpwuid_r() like UnixWare does.
> 
> Can someone help me with the configure checks/macros I need?
> $ grep getpwuid_r /usr/include/pwd.h
> int getpwuid_r(uid_t, struct passwd *, char *, size_t, struct passwd **);
> $
> 
> 
> 
> 
> -- 
> Larry Rosenman                     http://www.lerctr.org/~ler
> Phone: +1 972-414-9812                 E-Mail: ler@lerctr.org
> US Mail: 1905 Steamboat Springs Drive, Garland, TX 75044-6749
> 
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 8: explain analyze is your friend
> 

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
Fri, 8 Aug 2003 02:10:25 -0400 (EDT)
Bruce Momjian <pgman@candle.pha.pa.us>
Re: threads/UnixWare


--On Friday, August 08, 2003 02:10:25 -0400 Bruce Momjian 
<pgman@candle.pha.pa.us> wrote:

>
> Actually, your getpwuid_r is the old, pre-POSIX format.  The attached
> email has the configure tests.  I was hoping we wouldn't need them, but
> it seems we may.
Err, SCO claims SUSv2, the Single Unix Specification Version 2.  V3 
**JUST** came
out.

I'll look at Lee's stuff.





-- 
Larry Rosenman                     http://www.lerctr.org/~ler
Phone: +1 972-414-9812                 E-Mail: ler@lerctr.org
US Mail: 1905 Steamboat Springs Drive, Garland, TX 75044-6749


Fri, 08 Aug 2003 01:23:47 -0500
Larry Rosenman <ler@lerctr.org>
Re: threads/UnixWare
Bruce Momjian writes:

> Actually, your getpwuid_r is the old, pre-POSIX format.

No, his is the right POSIX/SUS variant.

-- 
Peter Eisentraut   peter_e@gmx.net

Fri, 8 Aug 2003 09:54:58 +0200 (CEST)
Peter Eisentraut <peter_e@gmx.net>
Re: threads/UnixWare
I've not been keeping up with the thread re who has what version of
getpwuid_r... But just to clarify things the "right" version is:

 int getpwuid_r(uid_t uid, struct passwd *pwd, char *buffer,
                size_t bufsize, struct passwd **result); 

documented at:

 http://www.opengroup.org/onlinepubs/007904975/functions/getpwuid.html

My email to Bruce which he tacked onto his reply is a good summary of
the current problems with the thread stuff.

L.

Larry Rosenman writes:
 > 
 > 
 > --On Friday, August 08, 2003 02:10:25 -0400 Bruce Momjian 
 > <pgman@candle.pha.pa.us> wrote:
 > 
 > >
 > > Actually, your getpwuid_r is the old, pre-POSIX format.  The attached
 > > email has the configure tests.  I was hoping we wouldn't need them, but
 > > it seems we may.
 > Err, SCO claims SUSv2, the Single Unix Specification Version 2.  V3 
 > **JUST** came
 > out.
 > 
 > I'll look at Lee's stuff.
 > 
 > 
 > 
 > 
 > 
 > -- 
 > Larry Rosenman                     http://www.lerctr.org/~ler
 > Phone: +1 972-414-9812                 E-Mail: ler@lerctr.org
 > US Mail: 1905 Steamboat Springs Drive, Garland, TX 75044-6749
 > 

Fri, 8 Aug 2003 11:53:34 +0100
Lee Kindness <lkindness@csl.co.uk>
Re: threads/UnixWare


--On Friday, August 08, 2003 11:53:34 +0100 Lee Kindness 
<lkindness@csl.co.uk> wrote:

> I've not been keeping up with the thread re who has what version of
> getpwuid_r... But just to clarify things the "right" version is:
>
>  int getpwuid_r(uid_t uid, struct passwd *pwd, char *buffer,
>                 size_t bufsize, struct passwd **result);
>
> documented at:
>
>  http://www.opengroup.org/onlinepubs/007904975/functions/getpwuid.html
>
> My email to Bruce which he tacked onto his reply is a good summary of
> the current problems with the thread stuff.
Ok.  Lee: Did you see the patch I posted?   Can you help on the configure 
test(s)
needed to set HAVE_POSIX_GETPWUID_R?

I **THINK** I did the patch right to handle it if it's set.  I forced it 
for UnixWare
and it seems to work.

LER

>
> L.
>
> Larry Rosenman writes:
>  >
>  >
>  > --On Friday, August 08, 2003 02:10:25 -0400 Bruce Momjian
>  > <pgman@candle.pha.pa.us> wrote:
>  >
>  > >
>  > > Actually, your getpwuid_r is the old, pre-POSIX format.  The attached
>  > > email has the configure tests.  I was hoping we wouldn't need them,
> but  > > it seems we may.
>  > Err, SCO claims SUSv2, the Single Unix Specification Version 2.  V3
>  > **JUST** came
>  > out.
>  >
>  > I'll look at Lee's stuff.
>  >
>  >
>  >
>  >
>  >
>  > --
>  > Larry Rosenman                     http://www.lerctr.org/~ler
>  > Phone: +1 972-414-9812                 E-Mail: ler@lerctr.org
>  > US Mail: 1905 Steamboat Springs Drive, Garland, TX 75044-6749
>  >



-- 
Larry Rosenman                     http://www.lerctr.org/~ler
Phone: +1 972-414-9812                 E-Mail: ler@lerctr.org
US Mail: 1905 Steamboat Springs Drive, Garland, TX 75044-6749


Fri, 08 Aug 2003 06:29:49 -0500
Larry Rosenman <ler@lerctr.org>
Re: threads/UnixWare
Larry, haven't managed to look at that patch... But stuffed for time
just now - just about to head off for the weekend. I'm hoping to spend
a bit of time on this on Tuesday! So, i'll see how things have
progressed then.

L.

Larry Rosenman writes:
 > --On Friday, August 08, 2003 11:53:34 +0100 Lee Kindness 
 > > I've not been keeping up with the thread re who has what version of
 > > getpwuid_r... But just to clarify things the "right" version is:
 > >
 > >  int getpwuid_r(uid_t uid, struct passwd *pwd, char *buffer,
 > >                 size_t bufsize, struct passwd **result);
 > >
 > > documented at:
 > >
 > >  http://www.opengroup.org/onlinepubs/007904975/functions/getpwuid.html
 > >
 > > My email to Bruce which he tacked onto his reply is a good summary of
 > > the current problems with the thread stuff.
 > Ok.  Lee: Did you see the patch I posted?   Can you help on the configure 
 > test(s)
 > needed to set HAVE_POSIX_GETPWUID_R?
 > 
 > I **THINK** I did the patch right to handle it if it's set.  I forced it 
 > for UnixWare
 > and it seems to work.
 > > Larry Rosenman writes:
 > >  > --On Friday, August 08, 2003 02:10:25 -0400 Bruce Momjian
 > >  > <pgman@candle.pha.pa.us> wrote:
 > >  > > Actually, your getpwuid_r is the old, pre-POSIX format.  The attached
 > >  > > email has the configure tests.  I was hoping we wouldn't need them,
 > > but  > > it seems we may.
 > >  > Err, SCO claims SUSv2, the Single Unix Specification Version 2.  V3
 > >  > **JUST** came
 > >  > out.
 > >  >
 > >  > I'll look at Lee's stuff.

Fri, 8 Aug 2003 12:54:16 +0100
Lee Kindness <lkindness@csl.co.uk>
Re: threads/UnixWare

Of course, I was wrong.  In fact, the patch below actually said it was
the pre-POSIX version of getpwuid_r().

---------------------------------------------------------------------------

Bruce Momjian wrote:
> 
> Actually, your getpwuid_r is the old, pre-POSIX format.  The attached
> email has the configure tests.  I was hoping we wouldn't need them, but
> it seems we may.
> 
> ---------------------------------------------------------------------------
> 
> Larry Rosenman wrote:
> > In src/port, we have in threads.c:
> > 
> > /*
> >  * Wrapper around getpwuid() or getpwuid_r() to mimic POSIX getpwuid_r()
> >  * behaviour, if it is not available.
> >  */
> > int
> > pqGetpwuid(uid_t uid, struct passwd * resultbuf, char *buffer,
> >                    size_t buflen, struct passwd ** result)
> > {
> > #if defined(USE_THREADS) && defined(HAVE_GETPWUID_R)
> > 
> >         /*
> >          * broken (well early POSIX draft) getpwuid_r() which returns 
> > 'struct
> >          * passwd *'
> >          */
> >         *result = getpwuid_r(uid, resultbuf, buffer, buflen);
> > #else
> >         /* no getpwuid_r() available, just use getpwuid() */
> >         *result = getpwuid(uid);
> > #endif
> >         return (*result == NULL) ? -1 : 0;
> > }
> > 
> > 
> > Which BREAKS if you have the correct getpwuid_r() like UnixWare does.
> > 
> > Can someone help me with the configure checks/macros I need?
> > $ grep getpwuid_r /usr/include/pwd.h
> > int getpwuid_r(uid_t, struct passwd *, char *, size_t, struct passwd **);
> > $
> > 
> > 
> > 
> > 
> > -- 
> > Larry Rosenman                     http://www.lerctr.org/~ler
> > Phone: +1 972-414-9812                 E-Mail: ler@lerctr.org
> > US Mail: 1905 Steamboat Springs Drive, Garland, TX 75044-6749
> > 
> > 
> > ---------------------------(end of broadcast)---------------------------
> > TIP 8: explain analyze is your friend
> > 
> 
> -- 
>   Bruce Momjian                        |  http://candle.pha.pa.us
>   pgman@candle.pha.pa.us               |  (610) 359-1001
>   +  If your life is a hard drive,     |  13 Roberts Road
>   +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

> >From lkind@csl.co.uk Tue Aug  5 06:13:10 2003
> Return-path: <lkind@csl.co.uk>
> Received: from internet.csl.co.uk (internet.csl.co.uk [194.130.52.3])
> 	by candle.pha.pa.us (8.11.6/8.11.6) with ESMTP id h75AD8r29374
> 	for <pgman@candle.pha.pa.us>; Tue, 5 Aug 2003 06:13:09 -0400 (EDT)
> Received: from euphrates.csl.co.uk (host-194-67.csl.co.uk [194.130.52.67])
> 	by internet.csl.co.uk (8.12.8/8.12.8) with ESMTP id h75AD284032695;
> 	Tue, 5 Aug 2003 11:13:02 +0100
> Received: from kelvin.csl.co.uk by euphrates.csl.co.uk (8.9.3/ConceptI 2.4)
> 	id LAA21628; Tue, 5 Aug 2003 11:13:00 +0100 (BST)
> Received: from kelvin.csl.co.uk (localhost.localdomain [127.0.0.1])
> 	by kelvin.csl.co.uk (8.12.8/8.12.8) with ESMTP id h75ACxU1028659;
> 	Tue, 5 Aug 2003 11:12:59 +0100
> Received: (from lkind@localhost)
> 	by kelvin.csl.co.uk (8.12.8/8.12.8/Submit) id h75ACsBW028655;
> 	Tue, 5 Aug 2003 11:12:54 +0100
> From: Lee Kindness <lkindness@csl.co.uk>
> MIME-Version: 1.0
> Content-Type: text/plain; charset=us-ascii
> Content-Transfer-Encoding: 7bit
> Message-ID: <16175.33574.361948.57279@kelvin.csl.co.uk>
> Date: Tue, 5 Aug 2003 11:12:54 +0100
> To: Bruce Momjian <pgman@candle.pha.pa.us>
> Subject: --enable-thread-safety broken + patch regressions
> X-Mailer: VM 7.07 under 21.4 (patch 12) "Portable Code" XEmacs Lucid
> cc: Lee Kindness <lkindness@csl.co.uk>, pgsql-hackers@postgresql.org
> Status: OR
> 
> Bruce, the changes you made yesterday to configure for
> --enable-thread-safety have broken the build, at least for Linux on
> Redhat 9.
> 
> Also, I took the opportunity to look at port/threads.c. It is missing
> important functionality compaired to the patch I originally
> submitted. For getpwuid_r, gethostbyname_r and strerror_r there are
> three possible scenarios:
> 
> 1. The OS doesn't have it (but the non _r function can still be thread
> safe (i.e. HPUX 11)).
> 
> 2. The OS has it, but the implmentation doesn't match the POSIX spec.
> 
> 3. The OS has it, and the implmentation matches the POSIX spec.
> 
> Case 3 is not being considered. In my original patch this was handled
> by the pqGetpwuid etc functions simply being defined to getpwuid_r
> (except for pqStrerror).
> 
> I remember discussing with you that the implementation of pqStrerror
> didn't really need the distinction between the two _r
> versions. However I think the others do, and the native/correct _r
> calls should be #defined in if they match the POSIX spec.
> 
> It's also worth considering that when the _r function is available AND
> the normal function is also thread-safe then the _r version should
> still be used since it has a clean API which removes unneeded locking
> within the old function.
> 
> I've still got the latest (and earlier with some configure work)
> patches I submitted up at:
> 
>  http://services.csl.co.uk/postgresql/
> 
> Thanks, Lee.
> 

> 
> ---------------------------(end of broadcast)---------------------------
> TIP 7: don't forget to increase your free space map settings

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

Mon, 11 Aug 2003 23:20:49 -0400 (EDT)
Bruce Momjian <pgman@candle.pha.pa.us>
Re: threads/UnixWare