Date: Fri, 8 Oct 1999 01:20:01 -0700 (PDT) From: Stephane Legrand <Stephane.Legrand@bigfoot.com> To: freebsd-bugs@FreeBSD.org Subject: Re: kern/14201: setpassent() in libc does not function properly Message-ID: <199910080820.BAA15369@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/14201; it has been noted by GNATS. From: Stephane Legrand <Stephane.Legrand@bigfoot.com> To: robertw@wojo.com Cc: freebsd-gnats-submit@freebsd.org Subject: Re: kern/14201: setpassent() in libc does not function properly Date: Fri, 8 Oct 1999 10:11:15 +0200 (CEST) robertw@wojo.com writes: > > >Number: 14201 > >Category: kern > >Synopsis: setpassent() in libc does not function properly > >Confidential: no > >Severity: serious > >Priority: high > >Responsible: freebsd-bugs > >State: open > >Quarter: > >Keywords: > >Date-Required: > >Class: sw-bug > >Submitter-Id: current-users > >Arrival-Date: Thu Oct 7 23:00:00 PDT 1999 > >Closed-Date: > >Last-Modified: > >Originator: Robert S. Wojciechowski Jr. > >Release: FreeBSD 3.3-RELEASE i386 > >Organization: > >Environment: > FreeBSD max.millenniumworks.com 3.3-RELEASE FreeBSD 3.3-RELEASE #9: > Sun Oct 3 02:40:16 EDT 1999 > root@max.millenniumworks.com:/usr/src/sys/compile/MYKERNEL i386 > >Description: > (This was taken from another post, just reposting this bug on 3.3-RELEASE) > Yes, indeed :) . This is the same bug report than the kern/7781. > The manual page for the setpassent(int stayopen) function says : > > "The setpassent() function accomplishes two purposes. First, it > causes getpwent() to ``rewind'' to the beginning of the database. > Additionally, if stayopen is non-zero, file descriptors are left open, > significantly speeding up subsequent accesses for all of the routines. > (This latter functionality is unnecessary for getpwent() as it doesn't > close its file descriptors by default.)" > > The problem is that in the file getpwent.c which implements the > setpassent() function in the libc, the stayopen variable seems not > used. And then, code like setpassent(1) doesn't work as expected. > > This problem is particularly annoying with ProFTPD > (/usr/ports/net/proftpd) which uses a such code. > > >How-To-Repeat: > The problem is visible using ProFTPD (latest at the time of this bug report is 1.2.0pre8). > >Fix: > (Again taken from the previous post. It's a quick one line fix!!) > > A patch has been proposed by Adam Mackler > (mackler@barter.dewline.com). It adds a "if" to check the value of > "_pw_stayopen" BEFORE calling "endpwent()". > > > Adam Mackler writes: > > > Date: Thu, 6 Aug 1998 17:50:08 -0400 > > > From: Floody <flood@evcom.net> > > > Reply-To: proftpd-l@evcom.net > > > To: Karl Pielorz <kpielorz@tdx.co.uk> > > > Cc: proftpd-l@evcom.net > > > Subject: Re: [proftpd-l] New ProFTPd user - Security, Incoming and pwd.db? > > > > > > Ok. I put up a test FreeBSD 2.2.7 system. There appears to be a libc > > > problem with the setpassent() function, which doesn't work on FreeBSD as > > > documented in the man pages (or on any other BSD). This is the heart of > > > the problem. There is no workaround until libc is fixed. > > > > Hi: > > > > I think the following patch may fix the problem, but I'm afraid > > I don't know how to rebuild my c library. If you find out if this > > works can you let me know? Thanks. > > > > > > *** getpwent.c Wed Aug 19 02:00:13 1998 > > --- getpwent.c.dist Wed Aug 19 01:58:33 1998 > > *************** > > *** 194,201 **** > > if (rval && (_pw_passwd.pw_name[0] == '+'|| > > _pw_passwd.pw_name[0] == '-')) rval = 0; > > > > ! if (!_pw_stayopen) > > ! endpwent(); > > return(rval ? &_pw_passwd : (struct passwd *)NULL); > > } > > > > --- 194,200 ---- > > if (rval && (_pw_passwd.pw_name[0] == '+'|| > > _pw_passwd.pw_name[0] == '-')) rval = 0; > > > > ! endpwent(); > > return(rval ? &_pw_passwd : (struct passwd *)NULL); > > } > > > > > > -- > > Adam Mackler > > Dewline Communications, LLC > > 212-505-9149 > > > -- Stephane.Legrand@bigfoot.com FreeBSD Francophone : http://www.freebsd-fr.org/ To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199910080820.BAA15369>