On Sun, Dec 29, 2013 at 03:19:08PM -0500, Ted Unangst wrote:
> On Sun, Dec 29, 2013 at 11:59, Loganaden Velvindron wrote:
> > Hi All,
> >
> > From NetBSD:
> > Close masterfd after reading from it. Found by cppcheck.
>
> This is wrong.
>
> Proper code using fdopen() with error checking should close(2) fildes in
> case of failure, and fclose(3) the resulting FILE * in case of success.
You're right ! I just checked the man page.
>
> >
> >
> > Index: src/usr.sbin/user/user.c
> > ===================================================================
> > RCS file: /cvs/src/usr.sbin/user/user.c,v
> > retrieving revision 1.98
> > diff -u -p -r1.98 user.c
> > --- src/usr.sbin/user/user.c 23 Nov 2013 17:14:05 -0000 1.98
> > +++ src/usr.sbin/user/user.c 29 Dec 2013 19:55:36 -0000
> > @@ -1014,6 +1014,7 @@ adduser(char *login_name, user_t *up)
> > pw_abort();
> > err(EXIT_FAILURE, "read error on %s", _PATH_MASTERPASSWD);
> > }
> > + (void)close(masterfd);
> > /* if no uid was specified, get next one in [low_uid..high_uid] range */
> > sync_uid_gid = (strcmp(up->u_primgrp, "=uid") == 0);
> > if (up->u_uid == UID_MAX) {