Re: thread-safety: getpwuid_r()

Peter Eisentraut <peter@eisentraut.org>

From: Peter Eisentraut <peter@eisentraut.org>
To: Heikki Linnakangas <hlinnaka@iki.fi>, pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2024-08-26T17:38:59Z
Lists: pgsql-hackers

Attachments

On 24.08.24 15:55, Heikki Linnakangas wrote:
> Come to think of it, the pg_get_user_name() function is just a thin 
> wrapper around getpwuid_r(). It doesn't provide a lot of value. Perhaps 
> we should remove pg_get_user_name() and pg_get_user_home_dir() 
> altogether and call getpwuid_r() directly.

Yeah, that seems better.  These functions are somewhat strangely 
designed and as you described have faulty error handling.  By calling 
getpwuid_r() directly, we can handle the errors better and the code 
becomes more transparent.  (There used to be a lot more interesting 
portability complications in that file, but those are long gone.)

I tried to be overly correct by using sysconf(_SC_GETPW_R_SIZE_MAX) to 
get the buffer size, but that doesn't work on FreeBSD.  All the OS where 
I could find the source code internally use 1024 as the suggested buffer 
size, so I just ended up hardcoding that.  This should be no worse than 
what the code is currently handling.

Commits

  1. More use of getpwuid_r() directly