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
- v2-0001-More-use-of-getpwuid_r-directly.patch (text/plain) patch v2-0001
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
-
More use of getpwuid_r() directly
- 4d5111b3f1a1 18.0 landed