Cyrus IMAPd 2.3.10 Released

Hajimu UMEMOTO ume at mahoroba.org
Fri Oct 26 15:04:28 EDT 2007


Hi,

>>>>> Sat, 27 Oct 2007 02:31:32 +0900,
>>>>> Hajimu UMEMOTO <ume at mahoroba.org> said:

ume> The code is suspicious to me.  Isn't the test of `ret != -1' is
ume> opposite?
ume> Further, it seems that the test of `ngroups == newstate->ngroups'
ume> assumes that newstate->ngroups holds the actual number of groups
ume> found, by calling getgrouplist() in the first place.
ume> Perhaps, it should be:

ume>     do {
ume> 	groupids = (gid_t *)xrealloc((gid_t *)groupids,
ume> 				     ngroups * sizeof(gid_t));

ume> 	newstate->ngroups = ngroups; /* copy of ngroups for comparision */
ume> 	ret = getgrouplist(identifier, gid, groupids, &ngroups);
ume> 	/*
ume> 	 * This is tricky. We do this as long as getgrouplist tells us to
ume> 	 * realloc _and_ the number of groups changes. It tells us to realloc
ume> 	 * also in the case of failure...
ume> 	 */
ume>     } while (ret == -1 && ngroups == newstate->ngroups);
ume>              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

ume> I'm not sure that we can expect `ngroups == newstate->ngroups',
ume> though.

Oops, I forgot to increase ngroups for next attempt.

Sincerely,

--
Hajimu UMEMOTO @ Internet Mutual Aid Society Yokohama, Japan
ume at mahoroba.org  ume@{,jp.}FreeBSD.org
http://www.imasy.org/~ume/


More information about the Info-cyrus mailing list