From b440c2b981d7b0619006d6616a2ce2966653b38e Mon Sep 17 00:00:00 2001 From: Kirk McKusick Date: Mon, 16 Oct 1989 17:18:01 -0800 Subject: [PATCH] delete change in 7.16, only clear setuid and setgid bits if euid != 0; only clear setuid if owner changes and only clear setgid when group changes SCCS-vsn: sys/ufs/ffs/ffs_vnops.c 7.18 SCCS-vsn: sys/ufs/ffs/ufs_vnops.c 7.18 SCCS-vsn: sys/ufs/lfs/lfs_vnops.c 7.18 SCCS-vsn: sys/ufs/ufs/ufs_vnops.c 7.18 --- usr/src/sys/ufs/ffs/ffs_vnops.c | 7 +++++-- usr/src/sys/ufs/ffs/ufs_vnops.c | 7 +++++-- usr/src/sys/ufs/lfs/lfs_vnops.c | 7 +++++-- usr/src/sys/ufs/ufs/ufs_vnops.c | 7 +++++-- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/usr/src/sys/ufs/ffs/ffs_vnops.c b/usr/src/sys/ufs/ffs/ffs_vnops.c index f87631e790..f7bbac01c3 100644 --- a/usr/src/sys/ufs/ffs/ffs_vnops.c +++ b/usr/src/sys/ufs/ffs/ffs_vnops.c @@ -14,7 +14,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * @(#)ffs_vnops.c 7.17 (Berkeley) %G% + * @(#)ffs_vnops.c 7.18 (Berkeley) %G% */ #include "param.h" @@ -371,10 +371,13 @@ chown1(vp, uid, gid, cred) (void) chkiq(ip->i_dev, ip, ip->i_uid, 1); dqrele(ip->i_dquot); #endif + if (ip->i_uid != uid && cred->cr_uid != 0) + ip->i_mode &= ~ISUID; + if (ip->i_gid != gid && cred->cr_uid != 0) + ip->i_mode &= ~ISGID; ip->i_uid = uid; ip->i_gid = gid; ip->i_flag |= ICHG; - ip->i_mode &= ~(ISUID|ISGID); #ifdef QUOTA ip->i_dquot = inoquota(ip); (void) chkdq(ip, change, 1); diff --git a/usr/src/sys/ufs/ffs/ufs_vnops.c b/usr/src/sys/ufs/ffs/ufs_vnops.c index af796806c3..5fe9680683 100644 --- a/usr/src/sys/ufs/ffs/ufs_vnops.c +++ b/usr/src/sys/ufs/ffs/ufs_vnops.c @@ -14,7 +14,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * @(#)ufs_vnops.c 7.17 (Berkeley) %G% + * @(#)ufs_vnops.c 7.18 (Berkeley) %G% */ #include "param.h" @@ -371,10 +371,13 @@ chown1(vp, uid, gid, cred) (void) chkiq(ip->i_dev, ip, ip->i_uid, 1); dqrele(ip->i_dquot); #endif + if (ip->i_uid != uid && cred->cr_uid != 0) + ip->i_mode &= ~ISUID; + if (ip->i_gid != gid && cred->cr_uid != 0) + ip->i_mode &= ~ISGID; ip->i_uid = uid; ip->i_gid = gid; ip->i_flag |= ICHG; - ip->i_mode &= ~(ISUID|ISGID); #ifdef QUOTA ip->i_dquot = inoquota(ip); (void) chkdq(ip, change, 1); diff --git a/usr/src/sys/ufs/lfs/lfs_vnops.c b/usr/src/sys/ufs/lfs/lfs_vnops.c index 277fed6696..3b716b9c4e 100644 --- a/usr/src/sys/ufs/lfs/lfs_vnops.c +++ b/usr/src/sys/ufs/lfs/lfs_vnops.c @@ -14,7 +14,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * @(#)lfs_vnops.c 7.17 (Berkeley) %G% + * @(#)lfs_vnops.c 7.18 (Berkeley) %G% */ #include "param.h" @@ -371,10 +371,13 @@ chown1(vp, uid, gid, cred) (void) chkiq(ip->i_dev, ip, ip->i_uid, 1); dqrele(ip->i_dquot); #endif + if (ip->i_uid != uid && cred->cr_uid != 0) + ip->i_mode &= ~ISUID; + if (ip->i_gid != gid && cred->cr_uid != 0) + ip->i_mode &= ~ISGID; ip->i_uid = uid; ip->i_gid = gid; ip->i_flag |= ICHG; - ip->i_mode &= ~(ISUID|ISGID); #ifdef QUOTA ip->i_dquot = inoquota(ip); (void) chkdq(ip, change, 1); diff --git a/usr/src/sys/ufs/ufs/ufs_vnops.c b/usr/src/sys/ufs/ufs/ufs_vnops.c index af796806c3..5fe9680683 100644 --- a/usr/src/sys/ufs/ufs/ufs_vnops.c +++ b/usr/src/sys/ufs/ufs/ufs_vnops.c @@ -14,7 +14,7 @@ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. * - * @(#)ufs_vnops.c 7.17 (Berkeley) %G% + * @(#)ufs_vnops.c 7.18 (Berkeley) %G% */ #include "param.h" @@ -371,10 +371,13 @@ chown1(vp, uid, gid, cred) (void) chkiq(ip->i_dev, ip, ip->i_uid, 1); dqrele(ip->i_dquot); #endif + if (ip->i_uid != uid && cred->cr_uid != 0) + ip->i_mode &= ~ISUID; + if (ip->i_gid != gid && cred->cr_uid != 0) + ip->i_mode &= ~ISGID; ip->i_uid = uid; ip->i_gid = gid; ip->i_flag |= ICHG; - ip->i_mode &= ~(ISUID|ISGID); #ifdef QUOTA ip->i_dquot = inoquota(ip); (void) chkdq(ip, change, 1); -- 2.20.1