#ifndef _SYS_BUF_H_
#include <sys/buf.h> /* buf_cmd_t */
#endif
+#ifndef _SYS_FCNTL_H_
+#include <sys/fcntl.h> /* AT_EACCESS */
+#endif
struct syslink_desc;
struct vnode;
vop_close(*(vp)->v_ops, vp, fflag)
#define VOP_ACCESS(vp, mode, cred) \
vop_access(*(vp)->v_ops, vp, mode, 0, cred)
+#define VOP_EACCESS(vp, mode, cred) \
+ vop_access(*(vp)->v_ops, vp, mode, AT_EACCESS, cred)
#define VOP_ACCESS_FLAGS(vp, mode, flags, cred) \
vop_access(*(vp)->v_ops, vp, mode, flags, cred)
#define VOP_GETATTR(vp, vap) \
* Access for write is interpreted as allowing
* creation of files in the directory.
*/
- if ((error = VOP_ACCESS(vdp, VWRITE, cred)) != 0)
+ if ((error = VOP_EACCESS(vdp, VWRITE, cred)) != 0)
return (error);
/*
* Return an indication of where the new directory
/*
* Write access to directory required to delete files.
*/
- if ((error = VOP_ACCESS(vdp, VWRITE, cred)) != 0)
+ if ((error = VOP_EACCESS(vdp, VWRITE, cred)) != 0)
return (error);
/*
* Return pointer to current entry in dp->i_offset,
* regular file, or empty directory.
*/
if (nameiop == NAMEI_RENAME && wantparent) {
- if ((error = VOP_ACCESS(vdp, VWRITE, cred)) != 0)
+ if ((error = VOP_EACCESS(vdp, VWRITE, cred)) != 0)
return (error);
/*
* Careful about locking second inode.
*/
if (cred->cr_uid != 0) {
vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY);
- error = VOP_ACCESS(devvp, VREAD | VWRITE, cred);
+ error = VOP_EACCESS(devvp, VREAD | VWRITE, cred);
if (error) {
vn_unlock(devvp);
return (error);
if ((mp->mnt_flag & MNT_RDONLY) == 0)
accessmode |= VWRITE;
vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY);
- if ((error = VOP_ACCESS(devvp, accessmode, cred)) != 0) {
+ if ((error = VOP_EACCESS(devvp, accessmode, cred)) != 0) {
vput(devvp);
return (error);
}
* to namei, as the parent directory is unlocked by the
* call to checkpath().
*/
- error = VOP_ACCESS(fvp, VWRITE, tcnp->cn_cred);
+ error = VOP_EACCESS(fvp, VWRITE, tcnp->cn_cred);
vn_unlock(fvp);
/*
if (cred->cr_uid != ip->i_uid &&
(error = priv_check_cred(cred, PRIV_VFS_SETATTR, 0)) &&
((vap->va_vaflags & VA_UTIMES_NULL) == 0 ||
- (error = VOP_ACCESS(vp, VWRITE, cred))))
+ (error = VOP_EACCESS(vp, VWRITE, cred))))
return (error);
if (vap->va_atime.tv_sec != VNOVAL)
ip->i_flag |= IN_ACCESS;
if (cred->cr_uid != hp->h_uid &&
(error = priv_check_cred(cred, PRIV_VFS_SETATTR, 0)) &&
((vap->va_vaflags & VA_UTIMES_NULL) == 0 ||
- (error = VOP_ACCESS(vp, VWRITE, cred))))
+ (error = VOP_EACCESS(vp, VWRITE, cred))))
return (error);
if (vap->va_atime.tv_sec != VNOVAL)
hp->h_atime = vap->va_atime.tv_sec;
return (EOPNOTSUPP);
}
- error = VOP_ACCESS(dvp, VEXEC, cred);
+ error = VOP_EACCESS(dvp, VEXEC, cred);
if(error)
return (error);
dep->de_fnode, dep->de_cpid));
if (nameiop == NAMEI_DELETE) {
- error = VOP_ACCESS(dvp, VWRITE, cred);
+ error = VOP_EACCESS(dvp, VWRITE, cred);
if (error) {
brelse(bp);
return (error);
*/
accessmode = VREAD;
vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY);
- error = VOP_ACCESS(devvp, accessmode, cred);
+ error = VOP_EACCESS(devvp, accessmode, cred);
if (error)
error = priv_check_cred(cred, PRIV_ROOT, 0);
if (error) {
* Access for write is interpreted as allowing
* creation of files in the directory.
*/
- error = VOP_ACCESS(vdp, VWRITE, cnp->cn_cred);
+ error = VOP_EACCESS(vdp, VWRITE, cnp->cn_cred);
if (error)
return (error);
/*
/*
* Write access to directory required to delete files.
*/
- error = VOP_ACCESS(vdp, VWRITE, cnp->cn_cred);
+ error = VOP_EACCESS(vdp, VWRITE, cnp->cn_cred);
if (error)
return (error);
if (blkoff == MSDOSFSROOT_OFS)
return EROFS; /* really? XXX */
- error = VOP_ACCESS(vdp, VWRITE, cnp->cn_cred);
+ error = VOP_EACCESS(vdp, VWRITE, cnp->cn_cred);
if (error)
return (error);
devvp = pmp->pm_devvp;
vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY);
if (cred->cr_uid != 0) {
- error = VOP_ACCESS(devvp, VREAD | VWRITE, cred);
+ error = VOP_EACCESS(devvp, VREAD | VWRITE, cred);
if (error) {
vn_unlock(devvp);
return (error);
if ((mp->mnt_flag & MNT_RDONLY) == 0)
accessmode |= VWRITE;
vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY);
- error = VOP_ACCESS(devvp, accessmode, cred);
+ error = VOP_EACCESS(devvp, accessmode, cred);
if (error) {
vput(devvp);
return (error);
if (cred->cr_uid != pmp->pm_uid &&
(error = priv_check_cred(cred, PRIV_VFS_SETATTR, 0)) &&
((vap->va_vaflags & VA_UTIMES_NULL) == 0 ||
- (error = VOP_ACCESS(ap->a_vp, VWRITE, cred))))
+ (error = VOP_EACCESS(ap->a_vp, VWRITE, cred))))
return (error);
if (vp->v_type != VDIR) {
if ((pmp->pm_flags & MSDOSFSMNT_NOWIN95) == 0 &&
* to namei, as the parent directory is unlocked by the
* call to doscheckpath().
*/
- error = VOP_ACCESS(fvp, VWRITE, tcnp->cn_cred);
+ error = VOP_EACCESS(fvp, VWRITE, tcnp->cn_cred);
vn_unlock(fvp);
if (VTODE(fdvp)->de_StartCluster != VTODE(tdvp)->de_StartCluster)
newparent = 1;
error = VOP_GETATTR(vp, &vattr);
if (error)
return (error);
- error = VOP_ACCESS(vp, flags, cred);
+ error = VOP_ACCESS(vp, flags, cred); /* XXX ruid/rgid vs uid/gid */
/*
* Allow certain operations for the owner (reads and writes
* on files that are already open).
*(int*)data = hp->nh_id;
break;
case NWFSIOC_GETEINFO:
- if ((error = VOP_ACCESS(vp, VEXEC, cred))) break;
+ if ((error = VOP_EACCESS(vp, VEXEC, cred))) break;
fap = data;
error = ncp_obtain_info(nmp, np->n_fid.f_id, 0, NULL, fap,
td, ap->a_cred);
fap->nameLen = np->n_nmlen;
break;
case NWFSIOC_GETNS:
- if ((error = VOP_ACCESS(vp, VEXEC, cred))) break;
+ if ((error = VOP_EACCESS(vp, VEXEC, cred))) break;
*(int*)data = nmp->name_space;
break;
default:
if ((mp->mnt_flag & MNT_RDONLY) && nameiop != NAMEI_LOOKUP)
return (EROFS);
- if ((error = VOP_ACCESS(dvp, VEXEC, cnp->cn_cred)))
+ if ((error = VOP_EACCESS(dvp, VEXEC, cnp->cn_cred)))
return (error);
lockparent = flags & CNP_LOCKPARENT;
wantparent = flags & (CNP_LOCKPARENT | CNP_WANTPARENT);
}*/
/* handle DELETE case ... */
if (nameiop == NAMEI_DELETE) { /* delete last component */
- error = VOP_ACCESS(dvp, VWRITE, cnp->cn_cred);
+ error = VOP_EACCESS(dvp, VWRITE, cnp->cn_cred);
if (error) return (error);
if (NWCMPF(&dnp->n_fid, &fid)) { /* we found ourselfs */
vref(dvp);
return (0);
}
if (nameiop == NAMEI_RENAME && wantparent) {
- error = VOP_ACCESS(dvp, VWRITE, cnp->cn_cred);
+ error = VOP_EACCESS(dvp, VWRITE, cnp->cn_cred);
if (error) return (error);
if (NWCMPF(&dnp->n_fid, &fid)) return EISDIR;
error = nwfs_nget(mp, fid, fap, dvp, &vp);
if (ap->a_cred->cr_uid != VTOSMBFS(vp)->sm_args.uid &&
(error = priv_check_cred(ap->a_cred, PRIV_VFS_SETATTR, 0)) &&
((vap->va_vaflags & VA_UTIMES_NULL) == 0 ||
- (error = VOP_ACCESS(vp, VWRITE, ap->a_cred))))
+ (error = VOP_EACCESS(vp, VWRITE, ap->a_cred))))
return (error);
#if 0
if (mtime == NULL)
char buf[10];
int i, attr, error;
- error = VOP_ACCESS(vp, VREAD, cred);
+ error = VOP_EACCESS(vp, VREAD, cred);
if (error)
return error;
error = VOP_GETATTR(vp, &vattr);
#endif
if ((mp->mnt_flag & MNT_RDONLY) && nameiop != NAMEI_LOOKUP)
return EROFS;
- if ((error = VOP_ACCESS(dvp, VEXEC, cnp->cn_cred)) != 0)
+ if ((error = VOP_EACCESS(dvp, VEXEC, cnp->cn_cred)) != 0)
return error;
lockparent = flags & CNP_LOCKPARENT;
wantparent = flags & (CNP_LOCKPARENT | CNP_WANTPARENT);
* Handle RENAME or CREATE case...
*/
if ((nameiop == NAMEI_CREATE || nameiop == NAMEI_RENAME) && wantparent) {
- error = VOP_ACCESS(dvp, VWRITE, cnp->cn_cred);
+ error = VOP_EACCESS(dvp, VWRITE, cnp->cn_cred);
if (error)
return error;
if (!lockparent) {
* handle DELETE case ...
*/
if (nameiop == NAMEI_DELETE) { /* delete last component */
- error = VOP_ACCESS(dvp, VWRITE, cnp->cn_cred);
+ error = VOP_EACCESS(dvp, VWRITE, cnp->cn_cred);
if (error)
return error;
if (isdot) {
return 0;
}
if (nameiop == NAMEI_RENAME && wantparent) {
- error = VOP_ACCESS(dvp, VWRITE, cnp->cn_cred);
+ error = VOP_EACCESS(dvp, VWRITE, cnp->cn_cred);
if (error)
return error;
if (isdot)
/* Check the access rights on the mount device */
vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY);
- error = VOP_ACCESS(devvp, VREAD, cred);
+ error = VOP_EACCESS(devvp, VREAD, cred);
if (error)
error = priv_check_cred(cred, PRIV_ROOT, 0);
if (error) {
*/
if (cred->cr_uid != 0) {
vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY);
- if ((error = VOP_ACCESS(devvp, VREAD | VWRITE,
+ if ((error = VOP_EACCESS(devvp, VREAD | VWRITE,
cred)) != 0) {
vn_unlock(devvp);
return (error);
if ((mp->mnt_flag & MNT_RDONLY) == 0)
accessmode |= VWRITE;
vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY);
- if ((error = VOP_ACCESS(devvp, accessmode, cred)) != 0) {
+ if ((error = VOP_EACCESS(devvp, accessmode, cred)) != 0) {
vput(devvp);
return (error);
}
* Access for write is interpreted as allowing
* creation of files in the directory.
*/
- error = VOP_ACCESS(vdp, VWRITE, cred);
+ error = VOP_EACCESS(vdp, VWRITE, cred);
if (error)
return (error);
/*
/*
* Write access to directory required to delete files.
*/
- error = VOP_ACCESS(vdp, VWRITE, cred);
+ error = VOP_EACCESS(vdp, VWRITE, cred);
if (error)
return (error);
/*
* regular file, or empty directory.
*/
if (nameiop == NAMEI_RENAME && wantparent) {
- if ((error = VOP_ACCESS(vdp, VWRITE, cred)) != 0)
+ if ((error = VOP_EACCESS(vdp, VWRITE, cred)) != 0)
return (error);
/*
* Careful about locking second inode.
if (cred->cr_uid != ip->i_uid &&
(error = priv_check_cred(cred, PRIV_VFS_SETATTR, 0)) &&
((vap->va_vaflags & VA_UTIMES_NULL) == 0 ||
- (error = VOP_ACCESS(vp, VWRITE, cred))))
+ (error = VOP_EACCESS(vp, VWRITE, cred))))
return (error);
if (vap->va_atime.tv_sec != VNOVAL)
ip->i_flag |= IN_ACCESS;
* to namei, as the parent directory is unlocked by the
* call to checkpath().
*/
- error = VOP_ACCESS(fvp, VWRITE, tcnp->cn_cred);
+ error = VOP_EACCESS(fvp, VWRITE, tcnp->cn_cred);
vn_unlock(fvp);
/*
* be copied to upper layer.
*/
vn_lock(un->un_lowervp, LK_EXCLUSIVE | LK_RETRY);
- error = VOP_ACCESS(un->un_lowervp, VREAD, cred);
+ error = VOP_EACCESS(un->un_lowervp, VREAD, cred);
vn_unlock(un->un_lowervp);
if (error)
return (error);