Module Name: src
Committed By: christos
Date: Tue Apr 17 19:15:16 UTC 2012
Modified Files:
src/sys/kern: vfs_syscalls.c
src/sys/ufs/chfs: chfs_vnops.c
src/sys/ufs/ext2fs: ext2fs_readwrite.c
src/sys/ufs/ufs: ufs_readwrite.c
Log Message:
don't error out when chowning/chgrping or writing to a setuid/setgid file
without being the setuid user or group. Just turn off the bit like we did
before.
To generate a diff of this commit:
cvs rdiff -u -r1.450 -r1.451 src/sys/kern/vfs_syscalls.c
cvs rdiff -u -r1.4 -r1.5 src/sys/ufs/chfs/chfs_vnops.c
cvs rdiff -u -r1.59 -r1.60 src/sys/ufs/ext2fs/ext2fs_readwrite.c
cvs rdiff -u -r1.102 -r1.103 src/sys/ufs/ufs/ufs_readwrite.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/kern/vfs_syscalls.c
diff -u src/sys/kern/vfs_syscalls.c:1.450 src/sys/kern/vfs_syscalls.c:1.451
--- src/sys/kern/vfs_syscalls.c:1.450 Tue Mar 13 14:40:56 2012
+++ src/sys/kern/vfs_syscalls.c Tue Apr 17 15:15:15 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: vfs_syscalls.c,v 1.450 2012/03/13 18:40:56 elad Exp $ */
+/* $NetBSD: vfs_syscalls.c,v 1.451 2012/04/17 19:15:15 christos Exp $ */
/*-
* Copyright (c) 2008, 2009 The NetBSD Foundation, Inc.
@@ -70,7 +70,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls.c,v 1.450 2012/03/13 18:40:56 elad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_syscalls.c,v 1.451 2012/04/17 19:15:15 christos Exp $");
#ifdef _KERNEL_OPT
#include "opt_fileassoc.h"
@@ -3360,15 +3360,13 @@ change_owner(struct vnode *vp, uid_t uid
* group-id settings intact in that case.
*/
if (vattr.va_mode & S_ISUID) {
- error = kauth_authorize_vnode(l->l_cred,
- KAUTH_VNODE_RETAIN_SUID, vp, NULL, EPERM);
- if (error)
+ if (kauth_authorize_vnode(l->l_cred,
+ KAUTH_VNODE_RETAIN_SUID, vp, NULL, EPERM) != 0)
newmode &= ~S_ISUID;
}
if (vattr.va_mode & S_ISGID) {
- error = kauth_authorize_vnode(l->l_cred,
- KAUTH_VNODE_RETAIN_SGID, vp, NULL, EPERM);
- if (error)
+ if (kauth_authorize_vnode(l->l_cred,
+ KAUTH_VNODE_RETAIN_SGID, vp, NULL, EPERM) != 0)
newmode &= ~S_ISGID;
}
} else {
Index: src/sys/ufs/chfs/chfs_vnops.c
diff -u src/sys/ufs/chfs/chfs_vnops.c:1.4 src/sys/ufs/chfs/chfs_vnops.c:1.5
--- src/sys/ufs/chfs/chfs_vnops.c:1.4 Thu Apr 12 11:31:01 2012
+++ src/sys/ufs/chfs/chfs_vnops.c Tue Apr 17 15:15:16 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: chfs_vnops.c,v 1.4 2012/04/12 15:31:01 ttoth Exp $ */
+/* $NetBSD: chfs_vnops.c,v 1.5 2012/04/17 19:15:16 christos Exp $ */
/*-
* Copyright (c) 2010 Department of Software Engineering,
@@ -969,16 +969,14 @@ out:
ip->iflag |= IN_CHANGE | IN_UPDATE;
if (resid > uio->uio_resid && ap->a_cred) {
if (ip->mode & ISUID) {
- error = kauth_authorize_vnode(ap->a_cred, KAUTH_VNODE_RETAIN_SUID, vp,
- NULL, EPERM);
- if (error)
+ if (kauth_authorize_vnode(ap->a_cred,
+ KAUTH_VNODE_RETAIN_SUID, vp, NULL, EPERM) != 0)
ip->mode &= ~ISUID;
}
if (ip->mode & ISGID) {
- error = kauth_authorize_vnode(ap->a_cred, KAUTH_VNODE_RETAIN_SGID, vp,
- NULL, EPERM);
- if (error)
+ if (kauth_authorize_vnode(ap->a_cred,
+ KAUTH_VNODE_RETAIN_SGID, vp, NULL, EPERM) != 0)
ip->mode &= ~ISGID;
}
}
Index: src/sys/ufs/ext2fs/ext2fs_readwrite.c
diff -u src/sys/ufs/ext2fs/ext2fs_readwrite.c:1.59 src/sys/ufs/ext2fs/ext2fs_readwrite.c:1.60
--- src/sys/ufs/ext2fs/ext2fs_readwrite.c:1.59 Tue Mar 13 14:41:03 2012
+++ src/sys/ufs/ext2fs/ext2fs_readwrite.c Tue Apr 17 15:15:16 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: ext2fs_readwrite.c,v 1.59 2012/03/13 18:41:03 elad Exp $ */
+/* $NetBSD: ext2fs_readwrite.c,v 1.60 2012/04/17 19:15:16 christos Exp $ */
/*-
* Copyright (c) 1993
@@ -60,7 +60,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ext2fs_readwrite.c,v 1.59 2012/03/13 18:41:03 elad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ext2fs_readwrite.c,v 1.60 2012/04/17 19:15:16 christos Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -378,16 +378,14 @@ out:
ip->i_flag |= IN_ACCESS;
if (resid > uio->uio_resid && ap->a_cred) {
if (ip->i_e2fs_mode & ISUID) {
- error = kauth_authorize_vnode(ap->a_cred, KAUTH_VNODE_RETAIN_SUID, vp,
- NULL, EPERM);
- if (error)
+ if (kauth_authorize_vnode(ap->a_cred,
+ KAUTH_VNODE_RETAIN_SUID, vp, NULL, EPERM) != 0)
ip->i_e2fs_mode &= ISUID;
}
if (ip->i_e2fs_mode & ISGID) {
- error = kauth_authorize_vnode(ap->a_cred, KAUTH_VNODE_RETAIN_SGID, vp,
- NULL, EPERM);
- if (error)
+ if (kauth_authorize_vnode(ap->a_cred,
+ KAUTH_VNODE_RETAIN_SGID, vp, NULL, EPERM) != 0)
ip->i_e2fs_mode &= ~ISGID;
}
}
Index: src/sys/ufs/ufs/ufs_readwrite.c
diff -u src/sys/ufs/ufs/ufs_readwrite.c:1.102 src/sys/ufs/ufs/ufs_readwrite.c:1.103
--- src/sys/ufs/ufs/ufs_readwrite.c:1.102 Tue Mar 13 14:41:14 2012
+++ src/sys/ufs/ufs/ufs_readwrite.c Tue Apr 17 15:15:16 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: ufs_readwrite.c,v 1.102 2012/03/13 18:41:14 elad Exp $ */
+/* $NetBSD: ufs_readwrite.c,v 1.103 2012/04/17 19:15:16 christos Exp $ */
/*-
* Copyright (c) 1993
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(1, "$NetBSD: ufs_readwrite.c,v 1.102 2012/03/13 18:41:14 elad Exp $");
+__KERNEL_RCSID(1, "$NetBSD: ufs_readwrite.c,v 1.103 2012/04/17 19:15:16 christos Exp $");
#ifdef LFS_READWRITE
#define FS struct lfs
@@ -512,18 +512,16 @@ out:
ip->i_flag |= IN_ACCESS;
if (resid > uio->uio_resid && ap->a_cred) {
if (ip->i_mode & ISUID) {
- error = kauth_authorize_vnode(ap->a_cred, KAUTH_VNODE_RETAIN_SUID, vp,
- NULL, EPERM);
- if (error) {
+ if (kauth_authorize_vnode(ap->a_cred,
+ KAUTH_VNODE_RETAIN_SUID, vp, NULL, EPERM) != 0) {
ip->i_mode &= ~ISUID;
DIP_ASSIGN(ip, mode, ip->i_mode);
}
}
if (ip->i_mode & ISGID) {
- error = kauth_authorize_vnode(ap->a_cred, KAUTH_VNODE_RETAIN_SGID, vp,
- NULL, EPERM);
- if (error) {
+ if (kauth_authorize_vnode(ap->a_cred,
+ KAUTH_VNODE_RETAIN_SGID, vp, NULL, EPERM) != 0) {
ip->i_mode &= ~ISGID;
DIP_ASSIGN(ip, mode, ip->i_mode);
}