manpages - Bring VOP_ACCESS(9) up to date
authorAntonio Huete Jimenez <tuxillo@quantumachine.net>
Wed, 8 Oct 2014 20:36:24 +0000 (22:36 +0200)
committerAntonio Huete Jimenez <tuxillo@quantumachine.net>
Fri, 10 Oct 2014 08:57:16 +0000 (10:57 +0200)
share/man/man9/VOP_ACCESS.9

index 09f1810..b30f4bd 100644 (file)
@@ -26,7 +26,7 @@
 .\"
 .\" $FreeBSD: src/share/man/man9/VOP_ACCESS.9,v 1.7.2.4 2001/12/17 11:30:18 ru Exp $
 .\"
-.Dd July 24, 1996
+.Dd October 8, 2014
 .Dt VOP_ACCESS 9
 .Os
 .Sh NAME
@@ -36,7 +36,7 @@
 .In sys/param.h
 .In sys/vnode.h
 .Ft int
-.Fn VOP_ACCESS "struct vnode *vp" "int mode" "struct ucred *cred" "struct proc *p"
+.Fn VOP_ACCESS "struct vnode *vp" "int mode" "struct ucred *cred"
 .Sh DESCRIPTION
 This entry point checks the access permissions of the file against the
 given credentials.
@@ -49,8 +49,6 @@ the vnode of the file to check
 the type of access required
 .It Ar cred
 the user credentials to check
-.It Ar p
-the process which is checking
 .El
 .Pp
 The
@@ -61,77 +59,10 @@ is a mask which can contain
 or
 .Dv VEXEC .
 .Sh LOCKS
-The vnode will be locked on entry and should remain locked on return.
+No requirements.
 .Sh RETURN VALUES
 If the file is accessible in the specified way, then zero is returned,
 otherwise an appropriate error code is returned.
-.Sh PSEUDOCODE
-.Bd -literal
-int
-vop_access(struct vnode *vp, int mode, struct ucred *cred, struct proc *p)
-{
-    int error;
-
-    /*
-     * Disallow write attempts on read-only file systems;
-     * unless the file is a socket, fifo, or a block or
-     * character device resident on the file system.
-     */
-    if (mode & VWRITE) {
-       switch (vp->v_type) {
-       case VDIR:
-       case VLNK:
-       case VREG:
-           if (vp->v_mount->mnt_flag & MNT_RDONLY)
-               return EROFS;
-
-           break;
-       }
-    }
-
-    /* If immutable bit set, nobody gets to write it. */
-    if ((mode & VWRITE) && vp has immutable bit set)
-       return EPERM;
-
-    /* Otherwise, user id 0 always gets access. */
-    if (cred->cr_uid == 0)
-       return 0;
-
-    mask = 0;
-
-    /* Otherwise, check the owner. */
-    if (cred->cr_uid == owner of vp) {
-       if (mode & VEXEC)
-           mask |= S_IXUSR;
-       if (mode & VREAD)
-           mask |= S_IRUSR;
-       if (mode & VWRITE)
-           mask |= S_IWUSR;
-       return (((mode of vp) & mask) == mask ? 0 : EACCES);
-    }
-
-    /* Otherwise, check the groups. */
-    for (i = 0, gp = cred->cr_groups; i < cred->cr_ngroups; i++, gp++)
-       if (group of vp == *gp) {
-           if (mode & VEXEC)
-               mask |= S_IXGRP;
-           if (mode & VREAD)
-               mask |= S_IRGRP;
-           if (mode & VWRITE)
-               mask |= S_IWGRP;
-           return (((mode of vp) & mask) == mask ? 0 : EACCES);
-       }
-
-    /* Otherwise, check everyone else. */
-    if (mode & VEXEC)
-       mask |= S_IXOTH;
-    if (mode & VREAD)
-       mask |= S_IROTH;
-    if (mode & VWRITE)
-       mask |= S_IWOTH;
-    return (((mode of vp) & mask) == mask ? 0 : EACCES);
-}
-.Ed
 .Sh ERRORS
 .Bl -tag -width Er
 .It Bq Er EPERM