diff options
author | Ronnie Sahlberg <ronnie_sahlberg@ozemail.com.au> | 2006-08-16 09:02:15 +0000 |
---|---|---|
committer | Ronnie Sahlberg <ronnie_sahlberg@ozemail.com.au> | 2006-08-16 09:02:15 +0000 |
commit | 80e1ff0ee898a0e0c67b94025f1ec0cf5f066591 (patch) | |
tree | 38968027bbfe2fc43c84cd78be049e3da7d9f8b0 /epan/dissectors/packet-smb.c | |
parent | 3c6d1fcef8deced8475774ae32540f08e9e69114 (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.c | 75 |
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 }}, |