From: Chuck Lever <cel@kernel.org>
To: <linux-nfs@vger.kernel.org>
Cc: Calum Mackay <calum.mackay@oracle.com>,
aurelien.couderc2002@gmail.com,
Chuck Lever <chuck.lever@oracle.com>
Subject: [PATCH v2 7/9] Add verify_mode_and_acl() helper to nfs4acl modules
Date: Tue, 25 Nov 2025 14:49:32 -0500 [thread overview]
Message-ID: <20251125194936.770792-8-cel@kernel.org> (raw)
In-Reply-To: <20251125194936.770792-1-cel@kernel.org>
From: Chuck Lever <chuck.lever@oracle.com>
I'm about to add new tests that set a test ACL and mode bits
simultaneously. This is common code for the new tests, so introduce
a utility function to verify the ACL and mode bits.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
nfs4.0/nfs4acl.py | 39 +++++++++++++++++++++++++++++++++++++++
1 file changed, 39 insertions(+)
diff --git a/nfs4.0/nfs4acl.py b/nfs4.0/nfs4acl.py
index 5197b1238ea8..f33fdb0752bc 100644
--- a/nfs4.0/nfs4acl.py
+++ b/nfs4.0/nfs4acl.py
@@ -349,6 +349,45 @@ def verify_acl(returned_acl, expected_acl):
access_mask_to_str(returned_ace.access_mask),
access_mask_to_str(missing)))
+def verify_mode_and_acl(attrs_dict, expected_acl, operation="operation"):
+ """Verify that MODE and ACL attributes match expectations
+
+ This helper encapsulates the common pattern of verifying both ACL
+ and mode derivation per RFC 8881 Section 6.3.2.
+
+ Args:
+ attrs_dict: Dictionary of attributes (must contain FATTR4_ACL and FATTR4_MODE)
+ expected_acl: The ACL that should be present
+ operation: Name of operation for error messages (default: "operation")
+
+ Returns:
+ tuple: (returned_mode, expected_mode) - both as integers with low 9 bits
+
+ Raises:
+ AssertionError: If verification fails
+ """
+ # Check that both attributes are present
+ if FATTR4_ACL not in attrs_dict:
+ raise AssertionError(
+ "ACL attribute not returned after %s" % operation)
+ if FATTR4_MODE not in attrs_dict:
+ raise AssertionError(
+ "MODE attribute not returned after %s" % operation)
+
+ # Verify ACL matches expected
+ verify_acl(attrs_dict[FATTR4_ACL], expected_acl)
+
+ # Verify mode matches RFC 8881 derivation from ACL
+ returned_mode = attrs_dict[FATTR4_MODE] & 0o777
+ expected_mode = acl2mode_rfc8881(attrs_dict[FATTR4_ACL])
+
+ if returned_mode != expected_mode:
+ raise AssertionError(
+ "MODE (0%o) does not match RFC 8881 §6.3.2 derivation "
+ "from ACL (expected 0%o)" % (returned_mode, expected_mode))
+
+ return returned_mode, expected_mode
+
def printableacl(acl):
type_str = ["ACCESS", "DENY"]
out = ""
--
2.51.1
next prev parent reply other threads:[~2025-11-25 19:49 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-25 19:49 [PATCH v2 0/9] pynfs tests for setting ACL+MODE Chuck Lever
2025-11-25 19:49 ` [PATCH v2 1/9] Add helper to report unsupported protocol features Chuck Lever
2025-11-25 19:49 ` [PATCH v2 2/9] Add helper to format attribute bitmaps Chuck Lever
2025-11-25 19:49 ` [PATCH v2 3/9] Add a helper to compute POSIX mode bits from NFSv4 ACLs Chuck Lever
2025-11-25 19:49 ` [PATCH v2 4/9] Add access_mask_to_str() helper to nfs4.0/nfs4acl.py Chuck Lever
2025-11-25 19:49 ` [PATCH v2 5/9] Add make_test_acl() helper to nfs4acl modules Chuck Lever
2025-11-25 19:49 ` [PATCH v2 6/9] Add verify_acl() " Chuck Lever
2025-11-25 19:49 ` Chuck Lever [this message]
2025-11-25 19:49 ` [PATCH v2 8/9] Add tests for SETATTR with MODE and ACL Chuck Lever
2025-11-25 19:49 ` [PATCH v2 9/9] Add tests for OPEN(create) with ACLs Chuck Lever
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20251125194936.770792-8-cel@kernel.org \
--to=cel@kernel.org \
--cc=aurelien.couderc2002@gmail.com \
--cc=calum.mackay@oracle.com \
--cc=chuck.lever@oracle.com \
--cc=linux-nfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.