diff options
author | gallatin <gallatin@FreeBSD.org> | 2000-10-26 15:53:00 +0000 |
---|---|---|
committer | gallatin <gallatin@FreeBSD.org> | 2000-10-26 15:53:00 +0000 |
commit | a06184638c4235173f36b354b73d4b6975eb00bb (patch) | |
tree | 97faff301da1b91d1c6bf0fe014c0ea146a2ce08 /sys/alpha/osf1 | |
parent | 7826865b469a96c8b888d211141fad8c12248c2e (diff) | |
download | FreeBSD-src-a06184638c4235173f36b354b73d4b6975eb00bb.zip FreeBSD-src-a06184638c4235173f36b354b73d4b6975eb00bb.tar.gz |
Update osf1_setuid() and osf1_setgid() to use the new change_euid() and
change_ruid() in kern_prot.c. This fixes an incorrect use
of chgproccnt().
Update both osf1_setuid() and osf1_setgid() to use setsugid() instead
of just frobbing the flag.
(mostly) submitted by: truckman
Diffstat (limited to 'sys/alpha/osf1')
-rw-r--r-- | sys/alpha/osf1/osf1_misc.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/sys/alpha/osf1/osf1_misc.c b/sys/alpha/osf1/osf1_misc.c index 4e2fdeb..7a7eaf0 100644 --- a/sys/alpha/osf1/osf1_misc.c +++ b/sys/alpha/osf1/osf1_misc.c @@ -1070,15 +1070,20 @@ osf1_setuid(p, uap) uid != pc->p_ruid && uid != pc->p_svuid) return (error); - pc->pc_ucred = crcopy(pc->pc_ucred); - pc->pc_ucred->cr_uid = uid; if (error == 0) { - (void)chgproccnt(pc->p_ruid, -1, 0); - (void)chgproccnt(uid, 1, 0); - pc->p_ruid = uid; - pc->p_svuid = uid; + if (uid != pc->p_ruid) { + change_ruid(p, uid); + setsugid(p); + } + if (pc->p_svuid != uid) { + pc->p_svuid = uid; + setsugid(p); + } + } + if (pc->pc_ucred->cr_uid != uid) { + change_euid(p, uid); + setsugid(p); } - p->p_flag |= P_SUGID; return (0); } @@ -1112,7 +1117,7 @@ osf1_setgid(p, uap) pc->p_rgid = gid; pc->p_svgid = gid; } - p->p_flag |= P_SUGID; + setsugid(p); return (0); } |