diff options
| author | Andrew Gallatin <gallatin@FreeBSD.org> | 2000-10-26 15:53:00 +0000 |
|---|---|---|
| committer | Andrew Gallatin <gallatin@FreeBSD.org> | 2000-10-26 15:53:00 +0000 |
| commit | af06b8d8a593541f90fb8baf5fbeeb3672194546 (patch) | |
| tree | 5d2d565b86a1189db1964c208136a5955ff051a4 /sys/alpha | |
| parent | 810bfc8ea1e091668ceeacdbc2f089257eeab97b (diff) | |
Notes
Diffstat (limited to 'sys/alpha')
| -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 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); } |
