Date: Wed, 11 Feb 1998 20:35:42 +0100 From: Dirk Froemberg <ibex@physik.TU-Berlin.DE> To: freebsd-gnats-submit@FreeBSD.ORG, kmitch@cslab.vt.edu, wpaul@FreeBSD.ORG, freebsd-bugs@FreeBSD.ORG Subject: Re: bin/5610: getpwnam and getpwuid do not use the +@netgroup convention in /etc/passwd. Message-ID: <19980211203542.52477@physik.TU-Berlin.DE>
next in thread | raw e-mail | index | archive | help
[-- Attachment #1 --]
Keith Mitchell <kmitch@cslab.vt.edu> wrote:
> The getpwnam and getpwuid system calls do not correctly lookup netgroups
> int the passwd file via a +@netgroup entry. They do, however work with
> a +user entry. The getpwent system call does parse the netgroup
> imports.
Hello!
The problem seems to be _listmatch() in /usr/src/lib/libc/gen/getnetgrent.c:278.
It is used by innetgr(3).
If the first argument to _listmatch() is not a comma seperated list, ptr
increases "forever" in line 296/297.
The attached patch to getnetgrent.c solved the problem for me. Please have
a look at it and feel free to use it.
Best regards Dirk
--
e-mail: ibex@physik.tu-berlin.de
[-- Attachment #2 --]
*** getnetgrent.c.dist Wed Nov 19 22:41:42 1997
--- getnetgrent.c Wed Feb 11 19:46:02 1998
***************
*** 286,299 ****
while(isspace(*ptr))
ptr++;
! while (ptr < list + len) {
! cptr = ptr;
! while(*ptr != ',' && !isspace(*ptr))
! ptr++;
! if (strncmp(cptr, group, glen) == 0 && glen == (ptr - cptr))
return(1);
! while(*ptr == ',' || isspace(*ptr))
! ptr++;
}
return(0);
--- 286,305 ----
while(isspace(*ptr))
ptr++;
! if ((strchr(list, ',') == NULL)) {
! if (strncmp(ptr, group, glen) == 0) {
return(1);
! }
! } else {
! while (ptr < list + len) {
! cptr = ptr;
! while(*ptr != ',' && !isspace(*ptr))
! ptr++;
! if (strncmp(cptr, group, glen) == 0 && glen == (ptr - cptr))
! return(1);
! while(*ptr == ',' || isspace(*ptr))
! ptr++;
! }
}
return(0);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19980211203542.52477>
