From owner-freebsd-bugs Mon Dec 30 7: 0:15 2002 Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id C8E5237B401 for ; Mon, 30 Dec 2002 07:00:12 -0800 (PST) Received: from freefall.freebsd.org (freefall.freebsd.org [216.136.204.21]) by mx1.FreeBSD.org (Postfix) with ESMTP id 8C88243ED1 for ; Mon, 30 Dec 2002 07:00:11 -0800 (PST) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.12.6/8.12.6) with ESMTP id gBUF0BNS000583 for ; Mon, 30 Dec 2002 07:00:11 -0800 (PST) (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.12.6/8.12.6/Submit) id gBUF0BZf000582; Mon, 30 Dec 2002 07:00:11 -0800 (PST) Date: Mon, 30 Dec 2002 07:00:11 -0800 (PST) Message-Id: <200212301500.gBUF0BZf000582@freefall.freebsd.org> To: freebsd-bugs@FreeBSD.org Cc: From: "Peter Edwards" Subject: Re: kern/46515: NFSv3 client denies O_APPEND open on existing file Reply-To: "Peter Edwards" Sender: owner-freebsd-bugs@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.org The following reply was made to PR kern/46515; it has been noted by GNATS. From: "Peter Edwards" To: freebsd-gnats-submit@FreeBSD.org, thomas@freebsd.org Cc: dillon@freebsd.org Subject: Re: kern/46515: NFSv3 client denies O_APPEND open on existing file Date: Mon, 30 Dec 2002 14:58:20 +0000 Hm. It would seem more natural to have the NFS client code just use "vaccess", like other filesystems, thus avoiding having to teach NFS about file access modes it knows nothing about... Index: nfs_vnops.c =================================================================== RCS file: /pub/FreeBSD/development/FreeBSD-CVS/src/sys/nfsclient/nfs_vnops.c,v retrieving revision 1.190 diff -u -r1.190 nfs_vnops.c --- nfs_vnops.c 23 Dec 2002 06:20:41 -0000 1.190 +++ nfs_vnops.c 30 Dec 2002 14:41:17 -0000 @@ -2979,12 +2979,10 @@ nfsspec_access(struct vop_access_args *ap) { struct vattr *vap; - gid_t *gp; struct ucred *cred = ap->a_cred; struct vnode *vp = ap->a_vp; mode_t mode = ap->a_mode; struct vattr vattr; - int i; int error; /* @@ -3002,33 +3000,12 @@ break; } } - /* - * If you're the super-user, - * you always get access. - */ - if (cred->cr_uid == 0) - return (0); vap = &vattr; error = VOP_GETATTR(vp, vap, cred, ap->a_td); if (error) return (error); - /* - * Access check is based on only one of owner, group, public. - * If not owner, then check group. If not a member of the - * group, then check public access. - */ - if (cred->cr_uid != vap->va_uid) { - mode >>= 3; - gp = cred->cr_groups; - for (i = 0; i < cred->cr_ngroups; i++, gp++) - if (vap->va_gid == *gp) - goto found; - mode >>= 3; -found: - ; - } - error = (vap->va_mode & mode) == mode ? 0 : EACCES; - return (error); + return (vaccess(vp->v_type, vap->va_mode, vap->va_uid, vap->va_gid, + mode, cred, NULL)); } /* -- Peter Edwards. To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message