On 2011-03-17, Timo Sirainen wrote:
On Thu, 2011-03-17 at 14:16 +0100, Petter Urkedal wrote:
I think there is a better solution. It seems that getpwnam_r is POSIX and does the right thing.
Oh, weird. I knew about that function but I never realized it fixed the error handling problem. Also everything I saw discussing the getpwnam() error problems never bothered to mention getpwnam_r().
Yeah, that's odd. I don't have the POSIX standard, but my reading a few of the top Google matches for "getpwnam_r POSIX", suggests it returns 0 on "not found". My testing is for RHEL-6 using sssd.
The attached patch adds a feature-check for getpwnam_r and, if present, uses it in userdb-passwd.c in place of the problematic getpwnam. I've not some light testing on a non-production server.
I think I'll do a bit larger change here that replaces all getpwnam(), getpwuid() and maybe other calls. Dovecot doesn't need thread-safe getpw*() so I can do an easier to use wrapper function.
Sounds good.