When a user is in more than 16 groups the call to authunix_create() will

result in abort() beeing called. This is because there is a limit of
the number of groups in the RPC which is 16. When the actual number of
groups is too large it results in xdr_array() returning an error which,
in turn, authunix_create() handles by just calling abort().

Fix this by passing only the first 16 groups to authunix_create().
This commit is contained in:
harti 2005-11-17 12:19:19 +00:00
parent 03dcfc1488
commit 1e3942d92f

View File

@ -231,12 +231,17 @@ set_auth(cl, xucred)
CLIENT *cl;
struct xucred *xucred;
{
int ngroups;
ngroups = xucred->cr_ngroups - 1;
if (ngroups > NGRPS)
ngroups = NGRPS;
if (cl->cl_auth != NULL)
cl->cl_auth->ah_ops->ah_destroy(cl->cl_auth);
cl->cl_auth = authunix_create(hostname,
xucred->cr_uid,
xucred->cr_groups[0],
xucred->cr_ngroups - 1,
ngroups,
&xucred->cr_groups[1]);
}