Wireshark-dev: [Wireshark-dev] [PATCH 6/8] SMB: Move non-generic NT/SMB/Windows access masks ou

From: Pali Rohár <pali@xxxxxxxxxx>
Date: Fri, 13 Sep 2024 22:58:32 +0200
SYSTEM_SECURITY_ACCESS and MAXIMUM_ALLOWED_ACCESS are not generic bits.
So move them into new "other" subtree.
---
 epan/dissectors/packet-windows-common.c | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/epan/dissectors/packet-windows-common.c b/epan/dissectors/packet-windows-common.c
index abe533361cf9..c5ce1a7fbc40 100644
--- a/epan/dissectors/packet-windows-common.c
+++ b/epan/dissectors/packet-windows-common.c
@@ -2195,6 +2195,7 @@ dissect_nt_conditional_ace(tvbuff_t *tvb, packet_info *pinfo, int offset, uint16
 */
 static int ett_nt_access_mask;
 static int ett_nt_access_mask_generic;
+static int ett_nt_access_mask_other;
 static int ett_nt_access_mask_standard;
 static int ett_nt_access_mask_specific;
 
@@ -2277,7 +2278,7 @@ dissect_nt_access_mask(tvbuff_t *tvb, int offset, packet_info *pinfo,
 		       struct access_mask_info *ami, uint32_t *perms)
 {
 	proto_item *item;
-	proto_tree *subtree, *generic_tree, *standard_tree, *specific_tree;
+	proto_tree *subtree, *generic_tree, *other_tree, *standard_tree, *specific_tree;
 	uint32_t access;
 
 	static int * const generic_access_flags[] = {
@@ -2285,6 +2286,10 @@ dissect_nt_access_mask(tvbuff_t *tvb, int offset, packet_info *pinfo,
 		&hf_access_generic_write,
 		&hf_access_generic_execute,
 		&hf_access_generic_all,
+		NULL
+	};
+
+	static int * const other_access_flags[] = {
 		&hf_access_maximum_allowed,
 		&hf_access_system_security,
 		NULL
@@ -2355,6 +2360,14 @@ dissect_nt_access_mask(tvbuff_t *tvb, int offset, packet_info *pinfo,
 
 	proto_tree_add_bitmask_list_value(generic_tree, tvb, offset - 4, 4, generic_access_flags, access);
 
+	/* Other access rights */
+
+	other_tree = proto_tree_add_subtree_format(subtree, tvb, offset - 4, 4,
+				   ett_nt_access_mask_other, NULL, "Other rights: 0x%08x",
+				   access & 0x0F000000);
+
+	proto_tree_add_bitmask_list_value(other_tree, tvb, offset - 4, 4, other_access_flags, access);
+
 	/* Standard access rights */
 
 	standard_tree = proto_tree_add_subtree_format(subtree, tvb, offset - 4, 4,
@@ -3677,6 +3690,7 @@ proto_do_register_windows_common(int proto_smb)
 		&ett_nt_ace_object_flags,
 		&ett_nt_access_mask,
 		&ett_nt_access_mask_generic,
+		&ett_nt_access_mask_other,
 		&ett_nt_access_mask_standard,
 		&ett_nt_access_mask_specific,
 		&ett_nt_security_information,
-- 
2.20.1