Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 13 Sep 2019 01:07:19 +0000 (UTC)
From:      Rick Macklem <rmacklem@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r352270 - projects/nfsv42/sys/fs/nfsserver
Message-ID:  <201909130107.x8D17JUS036503@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: rmacklem
Date: Fri Sep 13 01:07:19 2019
New Revision: 352270
URL: https://svnweb.freebsd.org/changeset/base/352270

Log:
  Add support for the Extended Attribute Access bits.
  
  RFC-8276 defines three additional bits for the Access operation.
  This patch adds support to the NFSv4.2 server for these.
  The client does not use these bits.

Modified:
  projects/nfsv42/sys/fs/nfsserver/nfs_nfsdserv.c

Modified: projects/nfsv42/sys/fs/nfsserver/nfs_nfsdserv.c
==============================================================================
--- projects/nfsv42/sys/fs/nfsserver/nfs_nfsdserv.c	Fri Sep 13 01:03:54 2019	(r352269)
+++ projects/nfsv42/sys/fs/nfsserver/nfs_nfsdserv.c	Fri Sep 13 01:07:19 2019	(r352270)
@@ -124,7 +124,8 @@ nfsrvd_access(struct nfsrv_descript *nd, __unused int 
 	if ((nd->nd_flag & ND_NFSV4) &&
 	    (nfsmode & ~(NFSACCESS_READ | NFSACCESS_LOOKUP |
 	     NFSACCESS_MODIFY | NFSACCESS_EXTEND | NFSACCESS_DELETE |
-	     NFSACCESS_EXECUTE))) {
+	     NFSACCESS_EXECUTE | NFSACCESS_XAREAD | NFSACCESS_XAWRITE |
+	     NFSACCESS_XALIST))) {
 		nd->nd_repstat = NFSERR_INVAL;
 		vput(vp);
 		goto out;
@@ -146,6 +147,24 @@ nfsrvd_access(struct nfsrv_descript *nd, __unused int 
 		if (nfsvno_accchk(vp, VWRITE | VAPPEND, nd->nd_cred, exp, p,
 		    NFSACCCHK_NOOVERRIDE, NFSACCCHK_VPISLOCKED, &supported))
 			nfsmode &= ~NFSACCESS_EXTEND;
+	}
+	if (nfsmode & NFSACCESS_XAREAD) {
+		supported |= NFSACCESS_XAREAD;
+		if (nfsvno_accchk(vp, VREAD, nd->nd_cred, exp, p,
+		    NFSACCCHK_NOOVERRIDE, NFSACCCHK_VPISLOCKED, &supported))
+			nfsmode &= ~NFSACCESS_XAREAD;
+	}
+	if (nfsmode & NFSACCESS_XAWRITE) {
+		supported |= NFSACCESS_XAWRITE;
+		if (nfsvno_accchk(vp, VWRITE, nd->nd_cred, exp, p,
+		    NFSACCCHK_NOOVERRIDE, NFSACCCHK_VPISLOCKED, &supported))
+			nfsmode &= ~NFSACCESS_XAWRITE;
+	}
+	if (nfsmode & NFSACCESS_XALIST) {
+		supported |= NFSACCESS_XALIST;
+		if (nfsvno_accchk(vp, VREAD, nd->nd_cred, exp, p,
+		    NFSACCCHK_NOOVERRIDE, NFSACCCHK_VPISLOCKED, &supported))
+			nfsmode &= ~NFSACCESS_XALIST;
 	}
 	if (nfsmode & NFSACCESS_DELETE) {
 		supported |= NFSACCESS_DELETE;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201909130107.x8D17JUS036503>