Subject: implementation of getpwnam_r



On Sun, Mar 30, 2003 at 06:06:20PM -0600, David Leimbach wrote:

> It seems this already exists in src/contrib/bind/lib/getpwent_r.c
>
> int getpwnam_r(const char * login, struct passwd *pwptr, char * buf,
> size_t buflen,
> struct passwd ** result)
> {
>
> struct passwd *pw = getpwnam(login);
> int res;
>
> if (pw == NULL) {
> *result = NULL;
> return (0);
> }
>
> res = copy_passwd(pw,pwptr,buf,buflen);
> *result = res ? NULL : pwptr;
> return (res);
> }
>
> Is this sufficient? copy_passwd is also in the bind library?

There is a race between the getpwnam() call and when the data is
copied to the user-supplied buffer. In addition to this, I don't
think that getpwnam_r() is allowed to modify the static storage
used by getpwnam(). The current passwd code is truly awful, and
I think someone is working on a replacement for it. It might be
worth waiting to see what happens there before investing too much
energy in implementing the *_r() functions in the current code.


Tim
...



Privacy