Dan Nelson writes: > In the last episode (Jul 15), Jens Rehsack said: >> Hi all, >> >> I detected an issue with getpwent on my FreeBSD test box: >> >> perl -MData::Dumper -e 'my @e = getpwent(); print Dumper(\...@e); >> endpwent(); @e = getpwent(); print Dumper(\...@e); endpwent(); @e = >> getpwent(); print Dumper(\...@e); endpwent();' >> $VAR1 = [ 'root', '', 0, 0, 0, '', 'Charlie &', '/root', '/bin/csh', 0 ]; >> $VAR1 = [ 'toor', '*', 0, 0, 0, '', 'Bourne-again Superuser', '/root', '', 0 >> ]; >> $VAR1 = [ 'daemon', '*', 1, 1, 0, '', 'Owner of many system processes', >> '/root', '/usr/sbin/nologin', 0 ]; >> >> I'm using FreeBSD waldorf.muppets.liwing.de 7.3-PRERELEASE FreeBSD >> 7.3-PRERELEASE #0: Fri Mar 12 11:31:18 UTC 2010 >> r...@waldorf.muppets.liwing.de:/usr/obj/usr/src/sys/WALDORF amd64
> The above output looks perfect, and should match the top three lines in your > /etc/passwd files. Well, OP is also invoking 'endpwent()' after every 'getpwent()' invocation which according to GNU/Linux's glibc and NetBSD's libc (as OP mentioned) should rewind the position in passwd database to the beginning. To me it definitely looks like a bug in FreeBSD's getpw*() family of functions. As tested using sysutils/lsof, in the following program in FreeBSD, the descriptor corresponding to '/etc/pwd.db' is closed on endpwent(3) but position in database is never rewinded as shown in the output. #v+ #include <pwd.h> #include <stdio.h> int main() { struct passwd* pw; int i; char ch; for(i = 0; i < 3; i++) { printf("Doing getpwent(). Press any key to continue..."); while(getchar() != '\n'); pw = getpwent(); printf("%s:%d:%d\n", pw->pw_name, pw->pw_uid, pw->pw_gid); endpwent(); } } #v- Output on FreeBSD 8.1-RC2: #v+ %./pwent Doing getpwent(). Press any key to continue... root:0:0 Doing getpwent(). Press any key to continue... toor:0:0 Doing getpwent(). Press any key to continue... daemon:1:1 #v- Output on GNU/Linux: #v+ % ./pwent Doing getpwent(). Press any key to continue... root:0:0 Doing getpwent(). Press any key to continue... root:0:0 Doing getpwent(). Press any key to continue... root:0:0 #v- HTH -- Ashish SHUKLA | GPG: F682 CDCC 39DC 0FEA E116 20B6 C746 CFA9 E74F A4B0 freebsd.org!ashish | http://people.freebsd.org/~ashish/ “How can I possibly put a new idea into your heads, if I do not first remove your delusions?” (Robert A. Heinlein, "Life-Line", 1939)
pgpSNaH90CVKQ.pgp
Description: PGP signature