Module Name:    src
Committed By:   elad
Date:           Wed Apr 29 22:33:33 UTC 2009

Modified Files:
        src/sys/fs/ntfs: ntfs_vnops.c

Log Message:
Replace open-coded vaccess() in ntfs_access() with a call to vaccess().

Similarly to msdosfs, always add the exec bit to keep the current
behavior.

Mailing list reference:

    http://mail-index.netbsd.org/tech-kern/2009/04/21/msg004881.html


To generate a diff of this commit:
cvs rdiff -u -r1.42 -r1.43 src/sys/fs/ntfs/ntfs_vnops.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/fs/ntfs/ntfs_vnops.c
diff -u src/sys/fs/ntfs/ntfs_vnops.c:1.42 src/sys/fs/ntfs/ntfs_vnops.c:1.43
--- src/sys/fs/ntfs/ntfs_vnops.c:1.42	Wed Dec 17 20:51:35 2008
+++ src/sys/fs/ntfs/ntfs_vnops.c	Wed Apr 29 22:33:33 2009
@@ -1,4 +1,4 @@
-/*	$NetBSD: ntfs_vnops.c,v 1.42 2008/12/17 20:51:35 cegger Exp $	*/
+/*	$NetBSD: ntfs_vnops.c,v 1.43 2009/04/29 22:33:33 elad Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -36,7 +36,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ntfs_vnops.c,v 1.42 2008/12/17 20:51:35 cegger Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ntfs_vnops.c,v 1.43 2009/04/29 22:33:33 elad Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -405,11 +405,7 @@
 	} */ *ap = v;
 	struct vnode *vp = ap->a_vp;
 	struct ntnode *ip = VTONT(vp);
-	kauth_cred_t cred = ap->a_cred;
-	mode_t mask, mode = ap->a_mode;
-	gid_t grp;
-	int i;
-	uint16_t ngroups;
+	mode_t file_mode, mode = ap->a_mode;
 
 	dprintf(("ntfs_access: %llu\n", (unsigned long long)ip->i_number));
 
@@ -429,46 +425,10 @@
 		}
 	}
 
-	/* Otherwise, user id 0 always gets access. */
-	if (kauth_authorize_generic(cred, KAUTH_GENERIC_ISSUSER, NULL) == 0)
-		return (0);
-
-	mask = 0;
-
-	/* Otherwise, check the owner. */
-	if (kauth_cred_geteuid(cred) == ip->i_mp->ntm_uid) {
-		if (mode & VEXEC)
-			mask |= S_IXUSR;
-		if (mode & VREAD)
-			mask |= S_IRUSR;
-		if (mode & VWRITE)
-			mask |= S_IWUSR;
-		return ((ip->i_mp->ntm_mode & mask) == mask ? 0 : EACCES);
-	}
-
-	/* Otherwise, check the groups. */
-	ngroups = kauth_cred_ngroups(cred);
-	for (i = 0; i < ngroups; i++) {
-		grp = kauth_cred_group(cred, i);
-		if (ip->i_mp->ntm_gid == grp) {
-			if (mode & VEXEC)
-				mask |= S_IXGRP;
-			if (mode & VREAD)
-				mask |= S_IRGRP;
-			if (mode & VWRITE)
-				mask |= S_IWGRP;
-			return ((ip->i_mp->ntm_mode&mask) == mask ? 0 : EACCES);
-		}
-	}
+	file_mode = ip->i_mp->ntm_mode | (S_IXUSR|S_IXGRP|S_IXOTH);
 
-	/* Otherwise, check everyone else. */
-	if (mode & VEXEC)
-		mask |= S_IXOTH;
-	if (mode & VREAD)
-		mask |= S_IROTH;
-	if (mode & VWRITE)
-		mask |= S_IWOTH;
-	return ((ip->i_mp->ntm_mode & mask) == mask ? 0 : EACCES);
+	return (vaccess(vp->v_type, file_mode, ip->i_mp->ntm_uid,
+	    ip->i_mp->ntm_gid, mode, ap->a_cred));
 }
 
 /*

Reply via email to