[PATCH] nfsd: better conform to setfacl's method for setting missing ACEs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Andreas pointed out that the way we're setting missing ACEs doesn't
quite conform to what setfacl does. Change it to better conform to
how setfacl does this.

Cc: Andreas Grünbacher <andreas.gruenbacher@xxxxxxxxx>
Signed-off-by: Jeff Layton <jlayton@xxxxxxxxxx>
---
 fs/nfsd/nfs4acl.c | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

Chuck, it might be best to fold this into the original patch, if it
looks ok.

diff --git a/fs/nfsd/nfs4acl.c b/fs/nfsd/nfs4acl.c
index 64e45551d1b6..9ec61bd0e11b 100644
--- a/fs/nfsd/nfs4acl.c
+++ b/fs/nfsd/nfs4acl.c
@@ -742,14 +742,15 @@ static int nfs4_acl_nfsv4_to_posix(struct nfs4_acl *acl,
 	 *  no owner, owning group, or others entry,  a  copy of  the  ACL
 	 *  owner, owning group, or others entry is added to the Default ACL."
 	 *
-	 * If none of the requisite ACEs were set, and some explicit user or group
-	 * ACEs were, copy the requisite entries from the effective set.
+	 * Copy any missing ACEs from the effective set.
 	 */
-	if (!default_acl_state.valid &&
-	    (default_acl_state.users->n || default_acl_state.groups->n)) {
-		default_acl_state.owner = effective_acl_state.owner;
-		default_acl_state.group = effective_acl_state.group;
-		default_acl_state.other = effective_acl_state.other;
+	if (default_acl_state.users->n || default_acl_state.groups->n) {
+		if (!(default_acl_state.valid & ACL_USER_OBJ))
+			default_acl_state.owner = effective_acl_state.owner;
+		if (!(default_acl_state.valid & ACL_GROUP_OBJ))
+			default_acl_state.group = effective_acl_state.group;
+		if (!(default_acl_state.valid & ACL_OTHER))
+			default_acl_state.other = effective_acl_state.other;
 	}
 
 	*pacl = posix_state_to_acl(&effective_acl_state, flags);
-- 
2.41.0




[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux