aboutsummaryrefslogtreecommitdiff
path: root/sys/alpha
diff options
context:
space:
mode:
authorAndrew Gallatin <gallatin@FreeBSD.org>2000-10-26 15:53:00 +0000
committerAndrew Gallatin <gallatin@FreeBSD.org>2000-10-26 15:53:00 +0000
commitaf06b8d8a593541f90fb8baf5fbeeb3672194546 (patch)
tree5d2d565b86a1189db1964c208136a5955ff051a4 /sys/alpha
parent810bfc8ea1e091668ceeacdbc2f089257eeab97b (diff)
Notes
Diffstat (limited to 'sys/alpha')
-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 4e2fdebb82ec5..7a7eaf08adb4a 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);
}