Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 31 Mar 2003 17:15:12 -0600
From:      David Leimbach <leimy2k@mac.com>
To:        Tim Robbins <tjr@FreeBSD.ORG>
Cc:        freebsd-standards@FreeBSD.ORG
Subject:   Re: implementation of getpwnam_r
Message-ID:  <9F997B26-63CE-11D7-A778-0003937E39E0@mac.com>
In-Reply-To: <20030331234717.A5859@dilbert.robbins.dropbear.id.au>

next in thread | previous in thread | raw e-mail | index | archive | help

> 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.
>

Yeah... I was just thinking... in order for the above to be re-entrant 
the
actual implementation of getpwnam is going to have to be a lot cleaner
and with much less static state.

To replace the whole set of calls seems the correct way to do it now.

Someone did contact me a while back about working on this problem but
he doesn't appear to be subscribed to this list.

I remember asking this fellow to sync up with the other developers but 
I don't
know that he ever did.

Dave

>
> Tim



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?9F997B26-63CE-11D7-A778-0003937E39E0>