aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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);
}