Subject: Re: CVS commit: src/sys
To: Bill Stouder-Studenmund <wrstuden@netbsd.org>
From: David Laight <david@l8s.co.uk>
List: source-changes
Date: 06/24/2007 20:43:30
On Sun, Jun 24, 2007 at 11:30:10AM -0700, Bill Stouder-Studenmund wrote:
>
> Setting groups:
How about:
@@ -131,6 +131,28 @@ kauth_cred_alloc(void)
return (cred);
}
+kauth_cred_t
+kauth_cred_alloc1(int ngroups, gid_t **grbuf)
+{
+ kauth_cred_t cred;
+
+ if (ngroups < 0 || ngroups > NGROUPS)
+ return NULL;
+
+ cred = kauth_cred_alloc();
+ cred->cr_ngroups = ngroups;
+ if (grbuf != NULL)
+ *grbuf = cred->cr_groups;
+
+ return cred;
+}
+
+void
+kauth_cred_alloc_finalise_grouplist(kauth_cred_t cred)
+{
+ KASSERT(cred->cr_refcnt == 1);
+}
+
@@ -567,19 +567,17 @@ sys_setgroups(struct lwp *l, void *v, re
int error;
gid_t *grbuf;
- ncred = kauth_cred_alloc();
+ ncred = kauth_cred_alloc1(SCARG(uap, gidsetsize), &grbuf);
+ if (ncred == NULL)
+ return EINVAL;
- grbuf = kauth_cred_setngroups(ncred, SCARG(uap, gidsetsize));
- if (grbuf == NULL)
- error = EINVAL;
- else {
- error = copyin(SCARG(uap, gidset), grbuf,
- SCARG(uap, gidsetsize) * sizeof(gid_t));
- }
+ error = copyin(SCARG(uap, gidset), grbuf,
+ SCARG(uap, gidsetsize) * sizeof(gid_t));
if (error != 0) {
kauth_cred_free(ncred);
return error;
}
+ kauth_cred_alloc_finalise_grouplist(ncred);
return kauth_proc_setgroups(l, ncred);
}
David
--
David Laight: david@l8s.co.uk