Skip site navigation (1)Skip section navigation (2)
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>