aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-smb.c
diff options
context:
space:
mode:
authorRonnie Sahlberg <ronnie_sahlberg@ozemail.com.au>2006-08-16 09:02:15 +0000
committerRonnie Sahlberg <ronnie_sahlberg@ozemail.com.au>2006-08-16 09:02:15 +0000
commit80e1ff0ee898a0e0c67b94025f1ec0cf5f066591 (patch)
tree38968027bbfe2fc43c84cd78be049e3da7d9f8b0 /epan/dissectors/packet-smb.c
parent3c6d1fcef8deced8475774ae32540f08e9e69114 (diff)
add dissection of DIRECTORY specific bits of the accessmask for SET_SECURITY_DESCRIPTOR
svn path=/trunk/; revision=18925
Diffstat (limited to 'epan/dissectors/packet-smb.c')
-rw-r--r--epan/dissectors/packet-smb.c75
1 files changed, 75 insertions, 0 deletions
diff --git a/epan/dissectors/packet-smb.c b/epan/dissectors/packet-smb.c
index 021a7dc9be..5953bdbb44 100644
--- a/epan/dissectors/packet-smb.c
+++ b/epan/dissectors/packet-smb.c
@@ -208,6 +208,15 @@ static int hf_smb_file_access_mask_write_ea = -1;
static int hf_smb_file_access_mask_execute = -1;
static int hf_smb_file_access_mask_read_attribute = -1;
static int hf_smb_file_access_mask_write_attribute = -1;
+static int hf_smb_dir_access_mask_list = -1;
+static int hf_smb_dir_access_mask_add_file = -1;
+static int hf_smb_dir_access_mask_add_subdir = -1;
+static int hf_smb_dir_access_mask_read_ea = -1;
+static int hf_smb_dir_access_mask_write_ea = -1;
+static int hf_smb_dir_access_mask_traverse = -1;
+static int hf_smb_dir_access_mask_delete_child = -1;
+static int hf_smb_dir_access_mask_read_attribute = -1;
+static int hf_smb_dir_access_mask_write_attribute = -1;
static int hf_smb_copy_flags_file = -1;
static int hf_smb_copy_flags_dir = -1;
static int hf_smb_copy_flags_dest_mode = -1;
@@ -1019,6 +1028,33 @@ struct access_mask_info smb_file_access_mask_info = {
};
+static void
+smb_dir_specific_rights(tvbuff_t *tvb, gint offset, proto_tree *tree, guint32 mask)
+{
+ mask&=0x0000ffff;
+ if(mask==0x000001ff){
+ proto_tree_add_text(tree, tvb, offset, 4, "[FULL CONTROL]");
+ }
+
+
+ proto_tree_add_boolean(tree, hf_smb_dir_access_mask_write_attribute, tvb, offset, 4, mask);
+ proto_tree_add_boolean(tree, hf_smb_dir_access_mask_read_attribute, tvb, offset, 4, mask);
+ proto_tree_add_boolean(tree, hf_smb_dir_access_mask_delete_child, tvb, offset, 4, mask);
+ proto_tree_add_boolean(tree, hf_smb_dir_access_mask_traverse, tvb, offset, 4, mask);
+ proto_tree_add_boolean(tree, hf_smb_dir_access_mask_write_ea, tvb, offset, 4, mask);
+ proto_tree_add_boolean(tree, hf_smb_dir_access_mask_read_ea, tvb, offset, 4, mask);
+ proto_tree_add_boolean(tree, hf_smb_dir_access_mask_add_subdir, tvb, offset, 4, mask);
+ proto_tree_add_boolean(tree, hf_smb_dir_access_mask_add_file, tvb, offset, 4, mask);
+ proto_tree_add_boolean(tree, hf_smb_dir_access_mask_list, tvb, offset, 4, mask);
+}
+struct access_mask_info smb_dir_access_mask_info = {
+ "DIR", /* Name of specific rights */
+ smb_dir_specific_rights, /* Dissection function */
+ NULL, /* Generic mapping table */
+ NULL /* Standard mapping table */
+};
+
+
static const value_string buffer_format_vals[] = {
{1, "Data Block"},
@@ -7739,6 +7775,9 @@ dissect_nt_trans_data_request(tvbuff_t *tvb, packet_info *pinfo, int offset, pro
case SMB_FID_TYPE_FILE:
ami= &smb_file_access_mask_info;
break;
+ case SMB_FID_TYPE_DIR:
+ ami= &smb_dir_access_mask_info;
+ break;
}
}
@@ -18087,6 +18126,42 @@ proto_register_smb(void)
{ "Write Attribute", "smb.file.accessmask.write_attribute", FT_BOOLEAN, 32,
TFS(&flags_set_truth), 0x00000100, "", HFILL }},
+ { &hf_smb_dir_access_mask_list,
+ { "List", "smb.dir.accessmask.list", FT_BOOLEAN, 32,
+ TFS(&flags_set_truth), 0x00000001, "", HFILL }},
+
+ { &hf_smb_dir_access_mask_add_file,
+ { "Add File", "smb.dir.accessmask.add_file", FT_BOOLEAN, 32,
+ TFS(&flags_set_truth), 0x00000002, "", HFILL }},
+
+ { &hf_smb_dir_access_mask_add_subdir,
+ { "Add Subdir", "smb.dir.accessmask.add_subdir", FT_BOOLEAN, 32,
+ TFS(&flags_set_truth), 0x00000004, "", HFILL }},
+
+ { &hf_smb_dir_access_mask_read_ea,
+ { "Read EA", "smb.dir.accessmask.read_ea", FT_BOOLEAN, 32,
+ TFS(&flags_set_truth), 0x00000008, "", HFILL }},
+
+ { &hf_smb_dir_access_mask_write_ea,
+ { "Write EA", "smb.dir.accessmask.write_ea", FT_BOOLEAN, 32,
+ TFS(&flags_set_truth), 0x00000010, "", HFILL }},
+
+ { &hf_smb_dir_access_mask_traverse,
+ { "Traverse", "smb.dir.accessmask.traverse", FT_BOOLEAN, 32,
+ TFS(&flags_set_truth), 0x00000020, "", HFILL }},
+
+ { &hf_smb_dir_access_mask_delete_child,
+ { "Delete Child", "smb.dir.accessmask.delete_child", FT_BOOLEAN, 32,
+ TFS(&flags_set_truth), 0x00000040, "", HFILL }},
+
+ { &hf_smb_dir_access_mask_read_attribute,
+ { "Read Attribute", "smb.dir.accessmask.read_attribute", FT_BOOLEAN, 32,
+ TFS(&flags_set_truth), 0x00000080, "", HFILL }},
+
+ { &hf_smb_dir_access_mask_write_attribute,
+ { "Write Attribute", "smb.dir.accessmask.write_attribute", FT_BOOLEAN, 32,
+ TFS(&flags_set_truth), 0x00000100, "", HFILL }},
+
{ &hf_smb_unix_file_size,
{ "File size", "smb.unix.file.size", FT_UINT64, BASE_DEC,
NULL, 0, "", HFILL }},