<dec f='src/src/sys/nfs/nfs_var.h' l='163' type='int nfsrv_access(struct vnode * , int , kauth_cred_t , int , struct lwp * , int )'/>
<use f='src/src/sys/nfs/nfs_serv.c' l='190' u='c' c='nfsrv3_access'/>
<use f='src/src/sys/nfs/nfs_serv.c' l='195' u='c' c='nfsrv3_access'/>
<use f='src/src/sys/nfs/nfs_serv.c' l='198' u='c' c='nfsrv3_access'/>
<use f='src/src/sys/nfs/nfs_serv.c' l='204' u='c' c='nfsrv3_access'/>
<use f='src/src/sys/nfs/nfs_serv.c' l='207' u='c' c='nfsrv3_access'/>
<use f='src/src/sys/nfs/nfs_serv.c' l='365' u='c' c='nfsrv_setattr'/>
<use f='src/src/sys/nfs/nfs_serv.c' l='666' u='c' c='nfsrv_read'/>
<use f='src/src/sys/nfs/nfs_serv.c' l='667' u='c' c='nfsrv_read'/>
<use f='src/src/sys/nfs/nfs_serv.c' l='937' u='c' c='nfsrv_write'/>
<use f='src/src/sys/nfs/nfs_serv.c' l='1233' u='c' c='nfsrv_writegather'/>
<use f='src/src/sys/nfs/nfs_serv.c' l='1568' u='c' c='nfsrv_create'/>
<use f='src/src/sys/nfs/nfs_serv.c' l='2749' u='c' c='nfsrv_readdir'/>
<use f='src/src/sys/nfs/nfs_serv.c' l='3006' u='c' c='nfsrv_readdirplus'/>
<def f='src/src/sys/nfs/nfs_serv.c' l='3577' ll='3618' type='int nfsrv_access(struct vnode * vp, int flags, kauth_cred_t cred, int rdonly, struct lwp * lwp, int override)'/>
<doc f='src/src/sys/nfs/nfs_serv.c' l='3563'>/*
 * Perform access checking for vnodes obtained from file handles that would
 * refer to files already opened by a Unix client. You cannot just use
 * vn_writechk() and VOP_ACCESS() for two reasons.
 * 1 - You must check for exported rdonly as well as MNT_RDONLY for the write case
 * 2 - The owner is to be given access irrespective of mode bits for some
 *     operations, so that processes that chmod after opening a file don&apos;t
 *     break. I don&apos;t like this because it opens a security hole, but since
 *     the nfs server opens a security hole the size of a barn door anyhow,
 *     what the heck.
 *
 * The exception to rule 2 is EPERM. If a file is IMMUTABLE, VOP_ACCESS()
 * will return EPERM instead of EACCES. EPERM is always an error.
 */</doc>
