Deleted Added
full compact
devfs_vnops.c (163606) devfs_vnops.c (164033)
1/*-
2 * Copyright (c) 2000-2004
3 * Poul-Henning Kamp. All rights reserved.
4 * Copyright (c) 1989, 1992-1993, 1995
5 * The Regents of the University of California. All rights reserved.
6 *
7 * This code is derived from software donated to Berkeley by
8 * Jan-Simon Pendry.

--- 17 unchanged lines hidden (view full) ---

26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29 * SUCH DAMAGE.
30 *
31 * @(#)kernfs_vnops.c 8.15 (Berkeley) 5/21/95
32 * From: FreeBSD: src/sys/miscfs/kernfs/kernfs_vnops.c 1.43
33 *
1/*-
2 * Copyright (c) 2000-2004
3 * Poul-Henning Kamp. All rights reserved.
4 * Copyright (c) 1989, 1992-1993, 1995
5 * The Regents of the University of California. All rights reserved.
6 *
7 * This code is derived from software donated to Berkeley by
8 * Jan-Simon Pendry.

--- 17 unchanged lines hidden (view full) ---

26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29 * SUCH DAMAGE.
30 *
31 * @(#)kernfs_vnops.c 8.15 (Berkeley) 5/21/95
32 * From: FreeBSD: src/sys/miscfs/kernfs/kernfs_vnops.c 1.43
33 *
34 * $FreeBSD: head/sys/fs/devfs/devfs_vnops.c 163606 2006-10-22 11:52:19Z rwatson $
34 * $FreeBSD: head/sys/fs/devfs/devfs_vnops.c 164033 2006-11-06 13:42:10Z rwatson $
35 */
36
37/*
38 * TODO:
39 * remove empty directories
40 * mkdir: want it ?
41 */
42

--- 7 unchanged lines hidden (view full) ---

50#include <sys/file.h>
51#include <sys/filedesc.h>
52#include <sys/filio.h>
53#include <sys/kernel.h>
54#include <sys/lock.h>
55#include <sys/malloc.h>
56#include <sys/mount.h>
57#include <sys/namei.h>
35 */
36
37/*
38 * TODO:
39 * remove empty directories
40 * mkdir: want it ?
41 */
42

--- 7 unchanged lines hidden (view full) ---

50#include <sys/file.h>
51#include <sys/filedesc.h>
52#include <sys/filio.h>
53#include <sys/kernel.h>
54#include <sys/lock.h>
55#include <sys/malloc.h>
56#include <sys/mount.h>
57#include <sys/namei.h>
58#include <sys/priv.h>
58#include <sys/proc.h>
59#include <sys/stat.h>
60#include <sys/sx.h>
61#include <sys/time.h>
62#include <sys/ttycom.h>
63#include <sys/unistd.h>
64#include <sys/vnode.h>
65

--- 1074 unchanged lines hidden (view full) ---

1140 uid = de->de_uid;
1141 else
1142 uid = vap->va_uid;
1143 if (vap->va_gid == (gid_t)VNOVAL)
1144 gid = de->de_gid;
1145 else
1146 gid = vap->va_gid;
1147 if (uid != de->de_uid || gid != de->de_gid) {
59#include <sys/proc.h>
60#include <sys/stat.h>
61#include <sys/sx.h>
62#include <sys/time.h>
63#include <sys/ttycom.h>
64#include <sys/unistd.h>
65#include <sys/vnode.h>
66

--- 1074 unchanged lines hidden (view full) ---

1141 uid = de->de_uid;
1142 else
1143 uid = vap->va_uid;
1144 if (vap->va_gid == (gid_t)VNOVAL)
1145 gid = de->de_gid;
1146 else
1147 gid = vap->va_gid;
1148 if (uid != de->de_uid || gid != de->de_gid) {
1148 if (((ap->a_cred->cr_uid != de->de_uid) || uid != de->de_uid ||
1149 (gid != de->de_gid && !groupmember(gid, ap->a_cred))) &&
1150 (error = suser_cred(ap->a_td->td_ucred, SUSER_ALLOWJAIL)) != 0)
1151 return (error);
1149 if ((ap->a_cred->cr_uid != de->de_uid) || uid != de->de_uid ||
1150 (gid != de->de_gid && !groupmember(gid, ap->a_cred))) {
1151 error = priv_check_cred(ap->a_td->td_ucred,
1152 PRIV_VFS_CHOWN, SUSER_ALLOWJAIL);
1153 if (error)
1154 return (error);
1155 }
1152 de->de_uid = uid;
1153 de->de_gid = gid;
1154 c = 1;
1155 }
1156
1157 if (vap->va_mode != (mode_t)VNOVAL) {
1156 de->de_uid = uid;
1157 de->de_gid = gid;
1158 c = 1;
1159 }
1160
1161 if (vap->va_mode != (mode_t)VNOVAL) {
1158 if ((ap->a_cred->cr_uid != de->de_uid) &&
1159 (error = suser_cred(ap->a_td->td_ucred, SUSER_ALLOWJAIL)))
1160 return (error);
1162 if (ap->a_cred->cr_uid != de->de_uid) {
1163 error = priv_check_cred(ap->a_td->td_ucred,
1164 PRIV_VFS_ADMIN, SUSER_ALLOWJAIL);
1165 if (error)
1166 return (error);
1167 }
1161 de->de_mode = vap->va_mode;
1162 c = 1;
1163 }
1164
1165 if (vap->va_atime.tv_sec != VNOVAL || vap->va_mtime.tv_sec != VNOVAL) {
1166 /* See the comment in ufs_vnops::ufs_setattr(). */
1167 if ((error = VOP_ACCESS(vp, VADMIN, ap->a_cred, ap->a_td)) &&
1168 ((vap->va_vaflags & VA_UTIMES_NULL) == 0 ||

--- 53 unchanged lines hidden (view full) ---

1222 int i, error;
1223 struct devfs_dirent *dd;
1224 struct devfs_dirent *de;
1225 struct devfs_mount *dmp;
1226 struct thread *td;
1227
1228 td = ap->a_cnp->cn_thread;
1229 KASSERT(td == curthread, ("devfs_symlink: td != curthread"));
1168 de->de_mode = vap->va_mode;
1169 c = 1;
1170 }
1171
1172 if (vap->va_atime.tv_sec != VNOVAL || vap->va_mtime.tv_sec != VNOVAL) {
1173 /* See the comment in ufs_vnops::ufs_setattr(). */
1174 if ((error = VOP_ACCESS(vp, VADMIN, ap->a_cred, ap->a_td)) &&
1175 ((vap->va_vaflags & VA_UTIMES_NULL) == 0 ||

--- 53 unchanged lines hidden (view full) ---

1229 int i, error;
1230 struct devfs_dirent *dd;
1231 struct devfs_dirent *de;
1232 struct devfs_mount *dmp;
1233 struct thread *td;
1234
1235 td = ap->a_cnp->cn_thread;
1236 KASSERT(td == curthread, ("devfs_symlink: td != curthread"));
1230 error = suser(td);
1237
1238 error = priv_check(td, PRIV_DEVFS_SYMLINK);
1231 if (error)
1232 return(error);
1233 dmp = VFSTODEVFS(ap->a_dvp->v_mount);
1234 dd = ap->a_dvp->v_data;
1235 de = devfs_newdirent(ap->a_cnp->cn_nameptr, ap->a_cnp->cn_namelen);
1236 de->de_uid = 0;
1237 de->de_gid = 0;
1238 de->de_mode = 0755;

--- 134 unchanged lines hidden ---
1239 if (error)
1240 return(error);
1241 dmp = VFSTODEVFS(ap->a_dvp->v_mount);
1242 dd = ap->a_dvp->v_data;
1243 de = devfs_newdirent(ap->a_cnp->cn_nameptr, ap->a_cnp->cn_namelen);
1244 de->de_uid = 0;
1245 de->de_gid = 0;
1246 de->de_mode = 0755;

--- 134 unchanged lines hidden ---