summaryrefslogtreecommitdiffstats
path: root/sys/miscfs/kernfs
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2000-08-20 08:36:26 +0000
committerphk <phk@FreeBSD.org>2000-08-20 08:36:26 +0000
commit3d2aecdc81ed97cfbe436b52fc98b64db180e3ba (patch)
tree55c272da20b4e053d7634d0f42eb73a594cf619e /sys/miscfs/kernfs
parent936d03c5051b75e93717f207de0e6a3764c41cd7 (diff)
downloadFreeBSD-src-3d2aecdc81ed97cfbe436b52fc98b64db180e3ba.zip
FreeBSD-src-3d2aecdc81ed97cfbe436b52fc98b64db180e3ba.tar.gz
Centralize the canonical vop_access user/group/other check in vaccess().
Discussed with: bde
Diffstat (limited to 'sys/miscfs/kernfs')
-rw-r--r--sys/miscfs/kernfs/kernfs_vnops.c29
1 files changed, 1 insertions, 28 deletions
diff --git a/sys/miscfs/kernfs/kernfs_vnops.c b/sys/miscfs/kernfs/kernfs_vnops.c
index f457541..283167a 100644
--- a/sys/miscfs/kernfs/kernfs_vnops.c
+++ b/sys/miscfs/kernfs/kernfs_vnops.c
@@ -305,42 +305,15 @@ kernfs_access(ap)
} */ *ap;
{
register struct vnode *vp = ap->a_vp;
- register struct ucred *cred = ap->a_cred;
mode_t amode = ap->a_mode;
mode_t fmode =
(vp->v_flag & VROOT) ? DIR_MODE : VTOKERN(vp)->kf_kt->kt_mode;
- mode_t mask = 0;
- register gid_t *gp;
- int i;
/* Some files are simply not modifiable. */
if ((amode & VWRITE) && (fmode & (S_IWUSR|S_IWGRP|S_IWOTH)) == 0)
return (EPERM);
- /* Root can do anything else. */
- if (cred->cr_uid == 0)
- return (0);
-
- /* Check for group 0 (wheel) permissions. */
- for (i = 0, gp = cred->cr_groups; i < cred->cr_ngroups; i++, gp++)
- if (*gp == 0) {
- if (amode & VEXEC)
- mask |= S_IXGRP;
- if (amode & VREAD)
- mask |= S_IRGRP;
- if (amode & VWRITE)
- mask |= S_IWGRP;
- return ((fmode & mask) == mask ? 0 : EACCES);
- }
-
- /* Otherwise, check everyone else. */
- if (amode & VEXEC)
- mask |= S_IXOTH;
- if (amode & VREAD)
- mask |= S_IROTH;
- if (amode & VWRITE)
- mask |= S_IWOTH;
- return ((fmode & mask) == mask ? 0 : EACCES);
+ return (vaccess(vp->v_tag, fmode, 0, 0, ap->a_mode, ap->a_cred));
}
static int
OpenPOWER on IntegriCloud