Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 31 Mar 2003 23:47:17 +1000
From:      Tim Robbins <tjr@FreeBSD.ORG>
To:        David Leimbach <leimy2k@mac.com>
Cc:        freebsd-standards@freebsd.org
Subject:   Re: implementation of getpwnam_r
Message-ID:  <20030331234717.A5859@dilbert.robbins.dropbear.id.au>
In-Reply-To: <99FC4F88-630C-11D7-8739-0003937E39E0@mac.com>; from leimy2k@mac.com on Sun, Mar 30, 2003 at 06:06:20PM -0600
References:  <99FC4F88-630C-11D7-8739-0003937E39E0@mac.com>

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.


Tim



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030331234717.A5859>