From 00e64813a27363418fa269fe9498a2d57bfa7d91 Mon Sep 17 00:00:00 2001 From: Alfred Perlstein Date: Wed, 23 Aug 2000 23:36:32 +0000 Subject: [PATCH] the code assumes that getgroups() always returns NGROUPS groups, however that is not true. Instead of looping NGROUPS times, get the return value from getgroups() and loop over the return that many times. Noticed by: David A. Holland --- usr.sbin/lpr/lpc/lpc.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/usr.sbin/lpr/lpc/lpc.c b/usr.sbin/lpr/lpc/lpc.c index 5bfa85920f5..866b8aca21d 100644 --- a/usr.sbin/lpr/lpc/lpc.c +++ b/usr.sbin/lpr/lpc/lpc.c @@ -334,6 +334,7 @@ ingroup(grname) char *grname; { static struct group *gptr=NULL; + static int ngroups = 0; static gid_t groups[NGROUPS]; register gid_t gid; register int i; @@ -343,11 +344,12 @@ ingroup(grname) warnx("warning: unknown group '%s'", grname); return(0); } - if (getgroups(NGROUPS, groups) < 0) + ngroups = getgroups(NGROUPS, groups); + if (ngroups < 0) err(1, "getgroups"); } gid = gptr->gr_gid; - for (i = 0; i < NGROUPS; i++) + for (i = 0; i < ngroups; i++) if (gid == groups[i]) return(1); return(0);