version 1.24, 2011/05/19 03:11:56 |
version 1.24.4.3, 2013/01/16 05:33:38 |
Line 73 efs_lookup(void *v) |
|
Line 73 efs_lookup(void *v) |
|
if (err) |
if (err) |
return (err); |
return (err); |
|
|
err = cache_lookup(ap->a_dvp, ap->a_vpp, cnp); |
if (cache_lookup(ap->a_dvp, cnp->cn_nameptr, cnp->cn_namelen, |
if (err != -1) |
cnp->cn_nameiop, cnp->cn_flags, NULL, ap->a_vpp)) { |
return (err); |
return *ap->a_vpp == NULLVP ? ENOENT : 0; |
|
} |
|
|
/* |
/* |
* Handle the three lookup types: '.', '..', and everything else. |
* Handle the three lookup types: '.', '..', and everything else. |
Line 102 efs_lookup(void *v) |
|
Line 103 efs_lookup(void *v) |
|
err = efs_inode_lookup(VFSTOEFS(ap->a_dvp->v_mount), |
err = efs_inode_lookup(VFSTOEFS(ap->a_dvp->v_mount), |
EFS_VTOI(ap->a_dvp), ap->a_cnp, &ino); |
EFS_VTOI(ap->a_dvp), ap->a_cnp, &ino); |
if (err) { |
if (err) { |
if (err == ENOENT && (cnp->cn_flags & MAKEENTRY) && |
if (err == ENOENT && nameiop != CREATE) |
nameiop != CREATE) |
cache_enter(ap->a_dvp, NULL, cnp->cn_nameptr, |
cache_enter(ap->a_dvp, NULL, cnp); |
cnp->cn_namelen, cnp->cn_flags); |
if (err == ENOENT && (nameiop == CREATE || |
if (err == ENOENT && (nameiop == CREATE || |
nameiop == RENAME)) { |
nameiop == RENAME)) { |
err = VOP_ACCESS(ap->a_dvp, VWRITE, |
err = VOP_ACCESS(ap->a_dvp, VWRITE, |
Line 121 efs_lookup(void *v) |
|
Line 122 efs_lookup(void *v) |
|
*ap->a_vpp = vp; |
*ap->a_vpp = vp; |
} |
} |
|
|
if (cnp->cn_flags & MAKEENTRY) |
cache_enter(ap->a_dvp, *ap->a_vpp, cnp->cn_nameptr, cnp->cn_namelen, |
cache_enter(ap->a_dvp, *ap->a_vpp, cnp); |
cnp->cn_flags); |
|
|
return (0); |
return 0; |
} |
} |
|
|
static int |
static int |
Line 148 efs_check_permitted(struct vnode *vp, st |
|
Line 149 efs_check_permitted(struct vnode *vp, st |
|
kauth_cred_t cred) |
kauth_cred_t cred) |
{ |
{ |
|
|
return genfs_can_access(vp->v_type, eip->ei_mode, eip->ei_uid, |
return kauth_authorize_vnode(cred, kauth_access_action(mode, |
eip->ei_gid, mode, cred); |
vp->v_type, eip->ei_mode), vp, NULL, genfs_can_access(vp->v_type, |
|
eip->ei_mode, eip->ei_uid, eip->ei_gid, mode, cred)); |
} |
} |
|
|
static int |
static int |