Date: Sun, 15 Sep 2002 05:01:57 +0200 From: Pawel Jakub Dawidek <nick@garage.freebsd.pl> To: freebsd-hackers@freebsd.org Subject: Changing process informations. Message-ID: <20020915030157.GP68652@garage.freebsd.pl>
next in thread | raw e-mail | index | archive | help
[-- Attachment #1 --]
Hello hackers...
When I want change process real or effective uid in kld module
I got functions change_ruid() and change_euid().
I need change many others informations about process.
Correct me if I'm wrong:
void
change_svuid(struct proc *p, uid_t svuid)
{
struct pcred *pc = p->p_cred;
if (pc->p_svuid != svuid) {
pc->p_svuid = svuid;
setsugid(p);
}
}
void
change_rgid(struct proc *p, gid_t rgid)
{
struct pcred *pc = p->p_cred;
if (pc->p_rgid != rgid) {
pc->p_rgid = rgid;
setsugid(p);
}
}
void
change_egid(struct proc *p, gid_t egid)
{
struct pcred *pc = p->p_cred;
if (pc->pc_ucred->cr_groups[0] != egid) {
pc->pc_ucred = crcopy(pc->pc_ucred);
pc->pc_ucred->cr_groups[0] = egid;
setsugid(p);
}
}
void
change_rgid(struct proc *p, gid_t svgid)
{
struct pcred *pc = p->p_cred;
if (pc->p_svgid != svgid) {
pc->p_svgid = svgid;
setsugid(p);
}
}
void
addgroup(struct proc *p, gid_t gid)
{
struct pcred *pc = p->p_cred;
if (groupmember(gid, pc->pc_ucred))
return;
if (pc->pc_ucred->cr_ngroups >= NGROUPS)
return;
pc->pc_ucred = crcopy(pc->pc_ucred); /* XXX: Have to be here? */
pc->pc_ucred->cr_groups[pc->pc_ucred->cr_ngroups] = gid;
pc->pc_ucred->cr_ngroups++;
setsugid(p); /* XXX: Have to be here? */
}
void
delgroup(struct proc *p, gid_t gid)
{
struct pcred *pc = p->p_cred;
u_int i;
if (!groupmember(gid, pc->pc_ucred))
return;
for (i = 0; pc->pc_ucred->cr_groups[i] != gid; ++i)
;
pc->pc_ucred = crcopy(pc->pc_ucred); /* XXX: Have to be here? */
for (; i < pc->pc_ucred->cr_ngroups; ++i) {
/* Yes, some copy operation could be a bit faster, but... */
pc->pc_ucred->cr_groups[i] = pc->pc_ucred->cr_groups[i + 1];
}
pc->pc_ucred->cr_ngroups--;
setsugid(p); /* XXX: Have to be here? */
}
That's all for now.
--
Pawel Jakub Dawidek
UNIX Systems Administrator
http://garage.freebsd.pl
Am I Evil? Yes, I Am.
--
Pawel Jakub Dawidek
UNIX Systems Administrator
http://garage.freebsd.pl
Am I Evil? Yes, I Am.
[-- Attachment #2 --]
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.7 (FreeBSD)
iQCVAwUBPYP4JT/PhmMH/Mf1AQFqBAP+ICPhoqadqgDeGbqp6iOrdY1hQaiquCvp
NmK5tkX74wgsXHzy1ch1LNH8k1zAku8zh3+JyRGDxPygujZxkuzrEXSOgq0AEQjl
ZMdw2lmvd0Jpm7kml3FXFdYW+fMzLd8hCB4WfpJQThaQ11rQ04OXQI+RMxM1ZptN
G0jVdyH15GE=
=/ZQR
-----END PGP SIGNATURE-----
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020915030157.GP68652>
