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)
 | |
|  {
 |