On Tuesday 14 June 2011 02:10, Tito wrote: > by looking closer at it I now see the bug.
So where is it? ... > Please take a look at the attached alternative patch that seems to work for > me: > > > id: fix for the case when the calling process is a member > of more than 64 supplementary groups. > > Signed-off-by: Tito Ragusa <[email protected]> > > --- coreutils/id.c.original 2011-06-14 01:18:56.000000000 +0200 > +++ coreutils/id.c 2011-06-14 01:58:06.000000000 +0200 > @@ -110,11 +110,10 @@ static int get_groups(const char *userna > //return m; > //commented out here, happens below anyway > } else { > - /* On error -1 is returned, which ends up in *n */ > - int nn = getgroups(*n, groups); > - /* 0: nn <= *n, groups[] was big enough; -1 otherwise */ > - m = - (nn > *n); > - *n = nn; > + if ((m = getgroups(*n, groups)) < 0 /* && errno == EINVAL */) > + *n = getgroups(0, groups); Running getgroups twice on a machine where user database is remote is a bad idea. -- vda _______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
