Subject: Re: NetBSD-3 NIS-compat getpwnam()/getpwuid iterate entire map [was Re: 3.0 YP lookup latency]
To: Brian Ginsbach <ginsbach@NetBSD.org>
From: Christos Zoulas <christos@zoulas.com>
List: tech-net
Date: 06/21/2006 17:36:35
On Jun 21, 9:00pm, ginsbach@NetBSD.org (Brian Ginsbach) wrote:
-- Subject: Re: NetBSD-3 NIS-compat getpwnam()/getpwuid iterate entire map [
| On Wed, Jun 21, 2006 at 04:19:34PM -0400, Christos Zoulas wrote:
| >
| > Something like this?
| >
| > Index: getpwent.c
| > ===================================================================
| > RCS file: /cvsroot/src/lib/libc/gen/getpwent.c,v
| > retrieving revision 1.71
| > diff -u -u -r1.71 getpwent.c
| > --- getpwent.c 19 Mar 2006 03:05:57 -0000 1.71
| > +++ getpwent.c 21 Jun 2006 20:15:23 -0000
| > @@ -1934,9 +1934,22 @@
| >
| > case COMPAT_FULL:
| > /* get next user */
| > - rv = _passwdcompat_pwscan(&cpw,
| > - cbuf, sizeof(cbuf),
| > - _PW_KEYBYNUM, NULL, 0);
| > + switch (search) {
| > + case _PW_KEYBYNUM:
| > + rv = _passwdcompat_pwscan(&cpw, cbuf,
| > + sizeof(cbuf), search, NULL, 0);
| > + break;
| > + case _PW_KEYBYNAME:
| > + rv = _passwdcompat_pwscan(&cpw, cbuf,
| > + sizeof(cbuf), search, name, 0);
| > + break;
| > + case _PW_KEYBYUID:
| > + rv = _passwdcompat_pwscan(&cpw, cbuf,
| > + sizeof(cbuf), search, NULL, uid);
| > + break;
| > + default:
| > + abort();
| > + }
| > if (rv != NS_SUCCESS)
| > state->mode = COMPAT_NONE;
| > break;
|
| There shouldn't be a need for the extra switch statement as
| _passwdcompat_pwscan() will do the right thing -- essentially you've
| just repeated the switch statement from _passwdcompat_pwscan()...
|
| diff -u -u -r1.71 getpwent.c
| --- getpwent.c 19 Mar 2006 03:05:57 -0000 1.71
| +++ getpwent.c 21 Jun 2006 20:15:23 -0000
| @@ -1936,7 +1936,7 @@
|
| /* get next user */
| rv = _passwdcompat_pwscan(&cpw,
| cbuf, sizeof(cbuf),
| - _PW_KEYBYNUM, NULL, 0);
| + search, name, uid);
Commit it then, if you have verified that it works :-)
christos