Tomas Janousek wrote: > Hello, > > On Fri, Oct 26, 2007 at 04:50:02PM +0200, Simon Matter wrote: >>>>> --- auth_unix.c.~1.46.~ 2007-09-27 16:02:45.000000000 -0400 >>>>> +++ auth_unix.c 2007-10-25 23:02:15.000000000 -0400 >>>>> @@ -225,7 +225,7 @@ >>>>> struct group *grp; >>>>> #ifdef HAVE_GETGROUPLIST >>>>> gid_t gid, *groupids = NULL; >>>>> - int ret, ngroups = 0; >>>>> + int ret, ngroups = 10; >>>>> #else >>>>> char **mem; >>>>> #endif >>>>> @@ -248,10 +248,7 @@ >>>>> #ifdef HAVE_GETGROUPLIST >>>>> gid = pwd ? pwd->pw_gid : (gid_t) -1; >>>>> >>>>> - /* get number of groups user is member of into ngroups */ >>>>> - getgrouplist(identifier, gid, NULL, &ngroups); >>>>> - >>>>> - /* get the actual group ids */ >>>>> + /* get the group ids */ >>>>> do { >>>>> groupids = (gid_t *)xrealloc((gid_t *)groupids, >>>>> ngroups * sizeof(gid_t)); > > This should not change behaviour nor cause additional problems, I think. > > The gnu manpage of getgrouplist does not mention the NULL case either, though > it works. If it segfaults, I'd consider that a libc failure, since when > ngroups == 0, the pointer shouldn't be used at all (it should point to the > first element of the array but array of 0 elements has no first element). > > If it really is a wrong code of mine, then sorry for not testing on anything > other than Linux. Its not a problem. Since we might have to realloc() the grouplist anyways, it really doesn't make much sense to just get the count first. -- Kenneth Murchison Systems Programmer Project Cyrus Developer/Maintainer Carnegie Mellon University ---- Cyrus Home Page: http://cyrusimap.web.cmu.edu/ Cyrus Wiki/FAQ: http://cyrusimap.web.cmu.edu/twiki List Archives/Info: http://asg.web.cmu.edu/cyrus/mailing-list.html