patches for easier mirroring, to eliminate a special copy, to make www.freebsd.org/security a full copy of security.freebsd.org and be eventually be the same. For now files are just sitting there. The symlinks are missing. Discussed on: www (repository location) Discussed with: simon (so)
72 lines
2.4 KiB
Diff
72 lines
2.4 KiB
Diff
Index: sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
|
|
===================================================================
|
|
--- sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c (revision 200583)
|
|
+++ sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c (working copy)
|
|
@@ -3981,21 +3981,33 @@ zfs_freebsd_access(ap)
|
|
struct thread *a_td;
|
|
} */ *ap;
|
|
{
|
|
+ accmode_t accmode;
|
|
+ int error = 0;
|
|
|
|
/*
|
|
- * ZFS itself only knowns about VREAD, VWRITE and VEXEC, the rest
|
|
- * we have to handle by calling vaccess().
|
|
+ * ZFS itself only knowns about VREAD, VWRITE, VEXEC and VAPPEND,
|
|
*/
|
|
- if ((ap->a_accmode & ~(VREAD|VWRITE|VEXEC)) != 0) {
|
|
- vnode_t *vp = ap->a_vp;
|
|
- znode_t *zp = VTOZ(vp);
|
|
- znode_phys_t *zphys = zp->z_phys;
|
|
+ accmode = ap->a_accmode & (VREAD|VWRITE|VEXEC|VAPPEND);
|
|
+ if (accmode != 0)
|
|
+ error = zfs_access(ap->a_vp, accmode, 0, ap->a_cred, NULL);
|
|
|
|
- return (vaccess(vp->v_type, zphys->zp_mode, zphys->zp_uid,
|
|
- zphys->zp_gid, ap->a_accmode, ap->a_cred, NULL));
|
|
+ /*
|
|
+ * VADMIN has to be handled by vaccess().
|
|
+ */
|
|
+ if (error == 0) {
|
|
+ accmode = ap->a_accmode & ~(VREAD|VWRITE|VEXEC|VAPPEND);
|
|
+ if (accmode != 0) {
|
|
+ vnode_t *vp = ap->a_vp;
|
|
+ znode_t *zp = VTOZ(vp);
|
|
+ znode_phys_t *zphys = zp->z_phys;
|
|
+
|
|
+ error = vaccess(vp->v_type, zphys->zp_mode,
|
|
+ zphys->zp_uid, zphys->zp_gid, accmode, ap->a_cred,
|
|
+ NULL);
|
|
+ }
|
|
}
|
|
|
|
- return (zfs_access(ap->a_vp, ap->a_accmode, 0, ap->a_cred, NULL));
|
|
+ return (error);
|
|
}
|
|
|
|
static int
|
|
Index: sys/cddl/contrib/opensolaris/uts/common/sys/vnode.h
|
|
===================================================================
|
|
--- sys/cddl/contrib/opensolaris/uts/common/sys/vnode.h (revision 200583)
|
|
+++ sys/cddl/contrib/opensolaris/uts/common/sys/vnode.h (working copy)
|
|
@@ -304,7 +304,6 @@ typedef struct xvattr {
|
|
* VOP_ACCESS flags
|
|
*/
|
|
#define V_ACE_MASK 0x1 /* mask represents NFSv4 ACE permissions */
|
|
-#define V_APPEND 0x2 /* want to do append only check */
|
|
|
|
/*
|
|
* Flags for vnode operations.
|
|
Index: sys/cddl/compat/opensolaris/sys/vnode.h
|
|
===================================================================
|
|
--- sys/cddl/compat/opensolaris/sys/vnode.h (revision 200583)
|
|
+++ sys/cddl/compat/opensolaris/sys/vnode.h (working copy)
|
|
@@ -57,6 +57,8 @@ typedef struct vop_vector vnodeops_t;
|
|
|
|
#define v_count v_usecount
|
|
|
|
+#define V_APPEND VAPPEND
|
|
+
|
|
static __inline int
|
|
vn_is_readonly(vnode_t *vp)
|
|
{
|