[PATCH v1 00/17] Add NFSv4.2 POSIX ACL support

rick.macklem
2025-12-31T02:22:01Z

The Internet draft "POSIX Draft ACL support for
Network File System Version 4, Minor Version2"
https://datatracker.ietf.org/doc/draft-ietf-nfsv4-posix-acls/
describes an extension to NFSv4.2 so that POSIX
draft ACLs can get acquired and set directly,
without using the loosey NFSv4->POSIX draft mapping
algorith. It extends the protocol with four new
attributes.

This patch series implements the server side of
this extension for the knfsd. It is analogous
to the NFSACL protocol used as a sideband protocol
for NFSv3 and allows the ACLs to be acquired/set
be getfacl(1)/setfacl(1).

The current implementation does not support the
"per file" scope, where individual file objects
store/use either an NFSv4 ACL or POSIX draft ACL
and assumes POSIX draft ACLs are supported for an
entire file system, if support for POSIX draft ACLs
is indicated.

Rick Macklem (17):
Add definitions for the POSIX draft ACL attributes
Add a new function to acquire the POSIX draft ACLs
Add a function to set POSIX ACLs
Add support for encoding/decoding POSIX draft ACLs
Add a check for both POSIX and NFSv4 ACLs being set
Add na_dpaclerr and na_paclerr for file creation
Add support for POSIX draft ACLs for file creation
Add the arguments for decoding of POSIX ACLs
Fix a couple of bugs in POSIX ACL decoding
Improve correctness for the ACL_TRUEFORM attribute
Make sort_pacl_range() global
Call sort_pacl_range() for decoded POSIX draft ACLs
Fix handling of POSIX ACLs with zero ACEs
Fix handling of zero length ACLs for file creation
Do not allow (N)VERIFY to check POSIX ACL attributes
Set the POSIX ACL attributes supported
Change a bunch of function prefixes to nfsd42_

fs/nfsd/acl.h | 3 +
fs/nfsd/nfs4acl.c | 35 ++++-
fs/nfsd/nfs4proc.c | 126 +++++++++++++++--
fs/nfsd/nfs4xdr.c | 312 ++++++++++++++++++++++++++++++++++++++++++-
fs/nfsd/nfsd.h | 8 +-
fs/nfsd/vfs.c | 34 ++++-
fs/nfsd/vfs.h | 2 +
fs/nfsd/xdr4.h | 6 +
include/linux/nfs4.h | 37 +++++
9 files changed, 536 insertions(+), 27 deletions(-)

--
2.49.0