summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorgallatin <gallatin@FreeBSD.org>2000-10-26 15:53:00 +0000
committergallatin <gallatin@FreeBSD.org>2000-10-26 15:53:00 +0000
commita06184638c4235173f36b354b73d4b6975eb00bb (patch)
tree97faff301da1b91d1c6bf0fe014c0ea146a2ce08 /sys
parent7826865b469a96c8b888d211141fad8c12248c2e (diff)
downloadFreeBSD-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')
-rw-r--r--sys/alpha/osf1/osf1_misc.c21
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);
}
OpenPOWER on IntegriCloud