> John Capo wrote: >> Quoting Ken Murchison (murch@xxxxxxxxxxxxxx): >>> John Capo wrote: >>>> On Thu, October 25, 2007 21:10, John Capo wrote: >>>>> Quoting Ken Murchison (murch@xxxxxxxxxxxxxx): >>>>> >>>>>> Simon Matter wrote: >>>>>> >>>>>>>> On the Linux box, all fresh compilations aside from the sasl >>>>>>>> 2.1.15 >>>>>>>> binaries: >>>>>>>> >>>>>>> I once posted to the list that 2.3.9 needs at least >>>>>>> cyrus-sasl-2.1.19. >>>>>>> As a package >>>>>>> maintainer I know that :) >>>>>> Did you ever figure out why? I'm not surprised that code in Cyrus >>>>>> somehow depends on >>>>>> a change in SASL, but I can't seem to find anything in the CVS logs >>>>>> or >>>>>> diffs that >>>>>> would be the cause. >>>>> This is what I had to do for cmd_login to work in 2.3.9. >>>>> >>>>> >>>>> /* authstate already created by mysasl_proxy_policy() */ >>>>> /* Not when using login and allowplaintext. imapd_authstate is NULL >>>>> TM >>>>> Login fix */ >>>>> if (imapd_authstate == NULL) >>>>> imapd_authstate = auth_newstate(imapd_userid); >>>>> >>>>> But 2.3.10 cores :-( >>>> Its coring in getgrouplist() probably because the 3rd argyument is >>>> NULL. >>>> >>>> /* get number of groups user is member of into ngroups */ >>>> getgrouplist(identifier, gid, NULL, &ngroups); >>>> >>>> BSD man page does not indicate that NULL args are OK. >>>> >>>> int >>>> getgrouplist(const char *name, int basegid, int *groups, int >>>> *ngroups); >>>> >>>> The resulting group list is returned in the integer array pointed to >>>> by >>>> groups. The caller specifies the size of the groups array in the >>>> integer >>>> pointed to by ngroups; the actual number of groups found is returned >>>> in >>>> ngroups. >>> >>> See if this fixes the getgrouplist() problem: >>> >> >> It does fix the core dump. Our IMAP users are not in any Unix group >> so I fully can't test that part. >> >> >>> --- 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)); > > Thanks for the update. Simon, since you're one of the original authors > of the getgrouplist() stuff, can you check the sanity of my changes? Ken, the only thing I did was a small modification to the getgrouplist() patch from Tomas Janousek who is the original author. Let's see what he has to say about it. Simon ---- 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