Ethereal-dev: [Ethereal-dev] [DCE RPC] Updates to SAMR and LSA dissectors
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Jean-Baptiste Marchand <Jean-Baptiste.Marchand@xxxxxx>
Date: Fri, 4 Jun 2004 19:50:58 +0200
Hello, attached are two patches for packet-dcerpc-samr.c and packet-dcerpc-lsa.c. These two patches: - fix the incorrect dissection (in ACL) of SAMR permissions as LSA permissions in the SamrQuerySecurityObject and SamrSetSecurityObject operations - dissect the permission mask in SamrOpenUser operation as a SAM_USER object permission mask - fix a problem in dissection of the LSA policy object permissions (the POLICY_AUDIT_LOG_ADMIN was present in packet-dcerpc-lsa.h but not in packet-dcerpc-lsa.c so the permission mask dissection is currently slightly wrong) - give more accurate names for LSA policy object permissions Jean-Baptiste Marchand -- Jean-Baptiste.Marchand@xxxxxx HSC - http://www.hsc.fr/
Index: packet-dcerpc-lsa.c =================================================================== RCS file: /cvsroot/ethereal/packet-dcerpc-lsa.c,v retrieving revision 1.94 diff -u -r1.94 packet-dcerpc-lsa.c --- packet-dcerpc-lsa.c 19 May 2004 04:52:31 -0000 1.94 +++ packet-dcerpc-lsa.c 4 Jun 2004 17:34:11 -0000 @@ -315,6 +315,7 @@ static gint hf_create_priv = -1; static gint hf_set_default_quota_limits = -1; static gint hf_set_audit_requirements = -1; +static gint hf_audit_log_admin = -1; static gint hf_server_admin = -1; static gint hf_lookup_names = -1; @@ -329,6 +330,9 @@ tree, hf_server_admin, tvb, offset, 4, access); proto_tree_add_boolean( + tree, hf_audit_log_admin, tvb, offset, 4, access); + + proto_tree_add_boolean( tree, hf_set_audit_requirements, tvb, offset, 4, access); proto_tree_add_boolean( @@ -4403,39 +4407,39 @@ NULL, 0x0, "Flag whether all rights should be removed or only the specified ones", HFILL }}, { &hf_view_local_info, - { "View local info", "lsa.access_mask.view_local_info", + { "View non-sensitive policy information", "lsa.access_mask.view_local_info", FT_BOOLEAN, 32, TFS(&flags_set_truth), POLICY_VIEW_LOCAL_INFORMATION, - "View local info", HFILL }}, + "View non-sensitive policy information", HFILL }}, { &hf_view_audit_info, - { "View audit info", "lsa.access_mask.view_audit_info", + { "View system audit requirements", "lsa.access_mask.view_audit_info", FT_BOOLEAN, 32, TFS(&flags_set_truth), POLICY_VIEW_AUDIT_INFORMATION, - "View audit info", HFILL }}, + "View system audit requirements", HFILL }}, { &hf_get_private_info, - { "Get private info", "lsa.access_mask.get_privateinfo", + { "Get sensitive policy information", "lsa.access_mask.get_privateinfo", FT_BOOLEAN, 32, TFS(&flags_set_truth), POLICY_GET_PRIVATE_INFORMATION, - "Get private info", HFILL }}, + "Get sensitive policy information", HFILL }}, { &hf_trust_admin, - { "Trust admin", "lsa.access_mask.trust_admin", + { "Modify domain trust relationships", "lsa.access_mask.trust_admin", FT_BOOLEAN, 32, TFS(&flags_set_truth), POLICY_TRUST_ADMIN, - "Trust admin", HFILL }}, + "Modify domain trust relationships", HFILL }}, { &hf_create_account, - { "Create account", "lsa.access_mask.create_account", + { "Create special accounts (for assignment of user rights)", "lsa.access_mask.create_account", FT_BOOLEAN, 32, TFS(&flags_set_truth), POLICY_CREATE_ACCOUNT, - "Create account", HFILL }}, + "Create special accounts (for assignment of user rights)", HFILL }}, { &hf_create_secret, - { "Create secret", "lsa.access_mask.create_secret", + { "Create a secret object", "lsa.access_mask.create_secret", FT_BOOLEAN, 32, TFS(&flags_set_truth), POLICY_CREATE_SECRET, - "Create secret", HFILL }}, + "Create a secret object", HFILL }}, { &hf_create_priv, - { "Create privilege", "lsa.access_mask.create_priv", + { "Create a privilege", "lsa.access_mask.create_priv", FT_BOOLEAN, 32, TFS(&flags_set_truth), POLICY_CREATE_PRIVILEGE, - "Create privilege", HFILL }}, + "Create a privilege", HFILL }}, { &hf_set_default_quota_limits, { "Set default quota limits", "lsa.access_mask.set_default_quota_limits", @@ -4443,19 +4447,24 @@ "Set default quota limits", HFILL }}, { &hf_set_audit_requirements, - { "Set audit requirements", "lsa.access_mask.set_audit_requirements", + { "Change system audit requirements", "lsa.access_mask.set_audit_requirements", FT_BOOLEAN, 32, TFS(&flags_set_truth), POLICY_SET_AUDIT_REQUIREMENTS, - "Set audit requirements", HFILL }}, + "Change system audit requirements", HFILL }}, + + { &hf_audit_log_admin, + { "Administer audit log attributes", "lsa.access_mask.audit_log_admin", + FT_BOOLEAN, 32, TFS(&flags_set_truth), POLICY_AUDIT_LOG_ADMIN, + "Administer audit log attributes", HFILL }}, { &hf_server_admin, - { "Server admin", "lsa.access_mask.server_admin", + { "Enable/Disable LSA", "lsa.access_mask.server_admin", FT_BOOLEAN, 32, TFS(&flags_set_truth), POLICY_SERVER_ADMIN, - "Server admin", HFILL }}, + "Enable/Disable LSA", HFILL }}, { &hf_lookup_names, - { "Lookup names", "lsa.access_mask.lookup_names", + { "Lookup Names/SIDs", "lsa.access_mask.lookup_names", FT_BOOLEAN, 32, TFS(&flags_set_truth), POLICY_LOOKUP_NAMES, - "Lookup names", HFILL }} + "Lookup Names/SIDs", HFILL }} }; static gint *ett[] = {
Index: packet-dcerpc-samr.c =================================================================== RCS file: /cvsroot/ethereal/packet-dcerpc-samr.c,v retrieving revision 1.107 diff -u -r1.107 packet-dcerpc-samr.c --- packet-dcerpc-samr.c 19 May 2004 04:52:30 -0000 1.107 +++ packet-dcerpc-samr.c 4 Jun 2004 17:33:52 -0000 @@ -57,6 +57,7 @@ static int hf_samr_rc = -1; static int hf_samr_index = -1; static int hf_samr_count = -1; +static int hf_samr_sd_size = -1; static int hf_samr_level = -1; static int hf_samr_start_idx = -1; @@ -127,6 +128,7 @@ static int hf_samr_unknown_time = -1; static gint ett_dcerpc_samr = -1; +static gint ett_SAM_SECURITY_DESCRIPTOR = -1; static gint ett_samr_user_dispinfo_1 = -1; static gint ett_samr_user_dispinfo_1_array = -1; static gint ett_samr_user_dispinfo_2 = -1; @@ -230,6 +232,58 @@ NULL /* Standard rights mapping */ }; + +int +sam_dissect_SAM_SECURITY_DESCRIPTOR_data(tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + guint8 *drep) +{ + guint32 len; + dcerpc_info *di; + + di=pinfo->private_data; + if(di->conformant_run){ + /*just a run to handle conformant arrays, nothing to dissect */ + return offset; + } + + offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, + hf_samr_sd_size, &len); + + dissect_nt_sec_desc( + tvb, offset, pinfo, tree, drep, len, &samr_connect_access_mask_info); + + offset += len; + + return offset; +} +int +sam_dissect_SAM_SECURITY_DESCRIPTOR(tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *parent_tree, + guint8 *drep) +{ + proto_item *item=NULL; + proto_tree *tree=NULL; + int old_offset=offset; + + if(parent_tree){ + item = proto_tree_add_text(parent_tree, tvb, offset, -1, + "SAM_SECURITY_DESCRIPTOR:"); + tree = proto_item_add_subtree(item, ett_SAM_SECURITY_DESCRIPTOR); + } + + offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, + hf_samr_sd_size, NULL); + + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + sam_dissect_SAM_SECURITY_DESCRIPTOR_data, NDR_POINTER_UNIQUE, + "SAM SECURITY DESCRIPTOR data:", -1); + + proto_item_set_len(item, offset-old_offset); + return offset; +} + + /* Dissect domain specific access rights */ static gint hf_access_domain_lookup_info1 = -1; @@ -473,8 +527,9 @@ offset = dissect_nt_policy_hnd(tvb, offset, pinfo, tree, drep, hf_samr_hnd, NULL, NULL, FALSE, FALSE); - offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, - hf_samr_access, NULL); + offset = dissect_nt_access_mask( + tvb, offset, pinfo, tree, drep, hf_samr_access, + &samr_user_access_mask_info, NULL); offset = dissect_ndr_uint32 (tvb, offset, pinfo, tree, drep, hf_samr_rid, &rid); @@ -3735,8 +3790,8 @@ pinfo->cinfo, COL_INFO, ", info type %d", info_type); offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - lsa_dissect_LSA_SECURITY_DESCRIPTOR, NDR_POINTER_REF, - "LSA_SECURITY_DESCRIPTOR pointer: ", -1); + sam_dissect_SAM_SECURITY_DESCRIPTOR, NDR_POINTER_REF, + "SAM_SECURITY_DESCRIPTOR pointer: ", -1); return offset; } @@ -3778,8 +3833,8 @@ guint8 *drep) { offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, - lsa_dissect_LSA_SECURITY_DESCRIPTOR, NDR_POINTER_UNIQUE, - "LSA_SECURITY_DESCRIPTOR pointer: ", -1); + sam_dissect_SAM_SECURITY_DESCRIPTOR, NDR_POINTER_UNIQUE, + "SAM_SECURITY_DESCRIPTOR pointer: ", -1); offset = dissect_ntstatus(tvb, offset, pinfo, tree, drep, hf_samr_rc, NULL); @@ -5224,12 +5279,18 @@ { &hf_access_connect_open_domain, { "Open domain", "samr_access_mask.connect_open_domain", FT_BOOLEAN, 32, TFS(&flags_set_truth), - SAMR_ACCESS_OPEN_DOMAIN, "Open domain", HFILL }} + SAMR_ACCESS_OPEN_DOMAIN, "Open domain", HFILL }}, + + { &hf_samr_sd_size, + { "Size", "sam.sd_size", FT_UINT32, BASE_DEC, + NULL, 0x0, "Size of SAM security descriptor", HFILL }} + }; static gint *ett[] = { &ett_dcerpc_samr, + &ett_SAM_SECURITY_DESCRIPTOR, &ett_samr_user_dispinfo_1, &ett_samr_user_dispinfo_1_array, &ett_samr_user_dispinfo_2,
- Follow-Ups:
- Re: [Ethereal-dev] [DCE RPC] Updates to SAMR and LSA dissectors
- From: Ronnie Sahlberg
- Re: [Ethereal-dev] [DCE RPC] Updates to SAMR and LSA dissectors
- Prev by Date: Re: [Ethereal-dev] How to use the doxygen stuff
- Next by Date: [Ethereal-dev] Understanding different time representations
- Previous by thread: Re: [Ethereal-dev] Re: [PATCH] packet-pktc.c: PKTC MTA FQDN dissector
- Next by thread: Re: [Ethereal-dev] [DCE RPC] Updates to SAMR and LSA dissectors
- Index(es):