aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-dcerpc-samr.c
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2016-06-15 15:35:51 -0400
committerMichael Mann <mmann78@netscape.net>2016-06-16 17:03:38 +0000
commit9a5e6a6884b2369527638fecd49c4c58d8c10378 (patch)
tree5bbb13655af400e3900482e5f965a40b50ecd63c /epan/dissectors/packet-dcerpc-samr.c
parent946b03798ad1948a9b863d00c3c1c13cbc8e0cb3 (diff)
DCE/RPC proto_tree_add_boolean -> proto_tree_add_bitmask_with_flags
Change-Id: I8891ec90244ffd9609d8443df631a7c8e6453b7e Reviewed-on: https://code.wireshark.org/review/15942 Petri-Dish: Michael Mann <mmann78@netscape.net> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Michael Mann <mmann78@netscape.net>
Diffstat (limited to 'epan/dissectors/packet-dcerpc-samr.c')
-rw-r--r--epan/dissectors/packet-dcerpc-samr.c721
1 files changed, 114 insertions, 607 deletions
diff --git a/epan/dissectors/packet-dcerpc-samr.c b/epan/dissectors/packet-dcerpc-samr.c
index 06513ca67a..abe981d4f8 100644
--- a/epan/dissectors/packet-dcerpc-samr.c
+++ b/epan/dissectors/packet-dcerpc-samr.c
@@ -2348,184 +2348,42 @@ samr_dissect_enum_RejectReason(tvbuff_t *tvb _U_, int offset _U_, packet_info *p
int
samr_dissect_bitmap_AcctFlags(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
{
- proto_item *item = NULL;
- proto_tree *tree = NULL;
-
+ proto_item *item;
+ static const int * samr_samr_AcctFlags_fields[] = {
+ &hf_samr_samr_AcctFlags_ACB_DISABLED,
+ &hf_samr_samr_AcctFlags_ACB_HOMDIRREQ,
+ &hf_samr_samr_AcctFlags_ACB_PWNOTREQ,
+ &hf_samr_samr_AcctFlags_ACB_TEMPDUP,
+ &hf_samr_samr_AcctFlags_ACB_NORMAL,
+ &hf_samr_samr_AcctFlags_ACB_MNS,
+ &hf_samr_samr_AcctFlags_ACB_DOMTRUST,
+ &hf_samr_samr_AcctFlags_ACB_WSTRUST,
+ &hf_samr_samr_AcctFlags_ACB_SVRTRUST,
+ &hf_samr_samr_AcctFlags_ACB_PWNOEXP,
+ &hf_samr_samr_AcctFlags_ACB_AUTOLOCK,
+ &hf_samr_samr_AcctFlags_ACB_ENC_TXT_PWD_ALLOWED,
+ &hf_samr_samr_AcctFlags_ACB_SMARTCARD_REQUIRED,
+ &hf_samr_samr_AcctFlags_ACB_TRUSTED_FOR_DELEGATION,
+ &hf_samr_samr_AcctFlags_ACB_NOT_DELEGATED,
+ &hf_samr_samr_AcctFlags_ACB_USE_DES_KEY_ONLY,
+ &hf_samr_samr_AcctFlags_ACB_DONT_REQUIRE_PREAUTH,
+ &hf_samr_samr_AcctFlags_ACB_PW_EXPIRED,
+ &hf_samr_samr_AcctFlags_ACB_TRUST_AUTH_DELEGAT,
+ &hf_samr_samr_AcctFlags_ACB_NO_AUTH_DATA_REQD,
+ };
guint32 flags;
ALIGN_TO_4_BYTES;
- if (parent_tree) {
- item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, DREP_ENC_INTEGER(drep));
- tree = proto_item_add_subtree(item,ett_samr_samr_AcctFlags);
- }
+ item = proto_tree_add_bitmask_with_flags(parent_tree, tvb, offset, hf_index,
+ ett_samr_samr_AcctFlags, samr_samr_AcctFlags_fields, DREP_ENC_INTEGER(drep), BMT_NO_FALSE);
- offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, -1, &flags);
- proto_item_append_text(item, ": ");
+ offset = dissect_ndr_uint32(tvb, offset, pinfo, parent_tree, di, drep, -1, &flags);
if (!flags)
- proto_item_append_text(item, "(No values set)");
-
- proto_tree_add_boolean(tree, hf_samr_samr_AcctFlags_ACB_DISABLED, tvb, offset-4, 4, flags);
- if (flags&( 0x00000001 )){
- proto_item_append_text(item, "ACB_DISABLED");
- if (flags & (~( 0x00000001 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000001 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_AcctFlags_ACB_HOMDIRREQ, tvb, offset-4, 4, flags);
- if (flags&( 0x00000002 )){
- proto_item_append_text(item, "ACB_HOMDIRREQ");
- if (flags & (~( 0x00000002 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000002 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_AcctFlags_ACB_PWNOTREQ, tvb, offset-4, 4, flags);
- if (flags&( 0x00000004 )){
- proto_item_append_text(item, "ACB_PWNOTREQ");
- if (flags & (~( 0x00000004 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000004 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_AcctFlags_ACB_TEMPDUP, tvb, offset-4, 4, flags);
- if (flags&( 0x00000008 )){
- proto_item_append_text(item, "ACB_TEMPDUP");
- if (flags & (~( 0x00000008 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000008 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_AcctFlags_ACB_NORMAL, tvb, offset-4, 4, flags);
- if (flags&( 0x00000010 )){
- proto_item_append_text(item, "ACB_NORMAL");
- if (flags & (~( 0x00000010 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000010 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_AcctFlags_ACB_MNS, tvb, offset-4, 4, flags);
- if (flags&( 0x00000020 )){
- proto_item_append_text(item, "ACB_MNS");
- if (flags & (~( 0x00000020 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000020 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_AcctFlags_ACB_DOMTRUST, tvb, offset-4, 4, flags);
- if (flags&( 0x00000040 )){
- proto_item_append_text(item, "ACB_DOMTRUST");
- if (flags & (~( 0x00000040 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000040 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_AcctFlags_ACB_WSTRUST, tvb, offset-4, 4, flags);
- if (flags&( 0x00000080 )){
- proto_item_append_text(item, "ACB_WSTRUST");
- if (flags & (~( 0x00000080 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000080 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_AcctFlags_ACB_SVRTRUST, tvb, offset-4, 4, flags);
- if (flags&( 0x00000100 )){
- proto_item_append_text(item, "ACB_SVRTRUST");
- if (flags & (~( 0x00000100 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000100 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_AcctFlags_ACB_PWNOEXP, tvb, offset-4, 4, flags);
- if (flags&( 0x00000200 )){
- proto_item_append_text(item, "ACB_PWNOEXP");
- if (flags & (~( 0x00000200 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000200 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_AcctFlags_ACB_AUTOLOCK, tvb, offset-4, 4, flags);
- if (flags&( 0x00000400 )){
- proto_item_append_text(item, "ACB_AUTOLOCK");
- if (flags & (~( 0x00000400 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000400 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_AcctFlags_ACB_ENC_TXT_PWD_ALLOWED, tvb, offset-4, 4, flags);
- if (flags&( 0x00000800 )){
- proto_item_append_text(item, "ACB_ENC_TXT_PWD_ALLOWED");
- if (flags & (~( 0x00000800 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000800 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_AcctFlags_ACB_SMARTCARD_REQUIRED, tvb, offset-4, 4, flags);
- if (flags&( 0x00001000 )){
- proto_item_append_text(item, "ACB_SMARTCARD_REQUIRED");
- if (flags & (~( 0x00001000 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00001000 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_AcctFlags_ACB_TRUSTED_FOR_DELEGATION, tvb, offset-4, 4, flags);
- if (flags&( 0x00002000 )){
- proto_item_append_text(item, "ACB_TRUSTED_FOR_DELEGATION");
- if (flags & (~( 0x00002000 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00002000 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_AcctFlags_ACB_NOT_DELEGATED, tvb, offset-4, 4, flags);
- if (flags&( 0x00004000 )){
- proto_item_append_text(item, "ACB_NOT_DELEGATED");
- if (flags & (~( 0x00004000 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00004000 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_AcctFlags_ACB_USE_DES_KEY_ONLY, tvb, offset-4, 4, flags);
- if (flags&( 0x00008000 )){
- proto_item_append_text(item, "ACB_USE_DES_KEY_ONLY");
- if (flags & (~( 0x00008000 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00008000 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_AcctFlags_ACB_DONT_REQUIRE_PREAUTH, tvb, offset-4, 4, flags);
- if (flags&( 0x00010000 )){
- proto_item_append_text(item, "ACB_DONT_REQUIRE_PREAUTH");
- if (flags & (~( 0x00010000 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00010000 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_AcctFlags_ACB_PW_EXPIRED, tvb, offset-4, 4, flags);
- if (flags&( 0x00020000 )){
- proto_item_append_text(item, "ACB_PW_EXPIRED");
- if (flags & (~( 0x00020000 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00020000 ));
+ proto_item_append_text(item, ": (No values set)");
- proto_tree_add_boolean(tree, hf_samr_samr_AcctFlags_ACB_TRUST_AUTH_DELEGAT, tvb, offset-4, 4, flags);
- if (flags&( 0x00040000 )){
- proto_item_append_text(item, "ACB_TRUST_AUTH_DELEGAT");
- if (flags & (~( 0x00040000 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00040000 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_AcctFlags_ACB_NO_AUTH_DATA_REQD, tvb, offset-4, 4, flags);
- if (flags&( 0x00080000 )){
- proto_item_append_text(item, "ACB_NO_AUTH_DATA_REQD");
- if (flags & (~( 0x00080000 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00080000 ));
-
- if (flags) {
+ if (flags & (~0x000fffff)) {
+ flags &= (~0x000fffff);
proto_item_append_text(item, "Unknown bitmap value 0x%x", flags);
}
@@ -2778,72 +2636,28 @@ samr_dissect_enum_Role(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_
int
samr_dissect_bitmap_PasswordProperties(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
{
- proto_item *item = NULL;
- proto_tree *tree = NULL;
-
+ proto_item *item;
+ static const int * samr_samr_PasswordProperties_fields[] = {
+ &hf_samr_samr_PasswordProperties_DOMAIN_PASSWORD_COMPLEX,
+ &hf_samr_samr_PasswordProperties_DOMAIN_PASSWORD_NO_ANON_CHANGE,
+ &hf_samr_samr_PasswordProperties_DOMAIN_PASSWORD_NO_CLEAR_CHANGE,
+ &hf_samr_samr_PasswordProperties_DOMAIN_PASSWORD_LOCKOUT_ADMINS,
+ &hf_samr_samr_PasswordProperties_DOMAIN_PASSWORD_STORE_CLEARTEXT,
+ &hf_samr_samr_PasswordProperties_DOMAIN_REFUSE_PASSWORD_CHANGE,
+ };
guint32 flags;
ALIGN_TO_4_BYTES;
- if (parent_tree) {
- item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, DREP_ENC_INTEGER(drep));
- tree = proto_item_add_subtree(item,ett_samr_samr_PasswordProperties);
- }
+ item = proto_tree_add_bitmask_with_flags(parent_tree, tvb, offset, hf_index,
+ ett_samr_samr_PasswordProperties, samr_samr_PasswordProperties_fields, DREP_ENC_INTEGER(drep), BMT_NO_FALSE);
- offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, -1, &flags);
- proto_item_append_text(item, ": ");
+ offset = dissect_ndr_uint32(tvb, offset, pinfo, parent_tree, di, drep, -1, &flags);
if (!flags)
- proto_item_append_text(item, "(No values set)");
-
- proto_tree_add_boolean(tree, hf_samr_samr_PasswordProperties_DOMAIN_PASSWORD_COMPLEX, tvb, offset-4, 4, flags);
- if (flags&( 0x00000001 )){
- proto_item_append_text(item, "DOMAIN_PASSWORD_COMPLEX");
- if (flags & (~( 0x00000001 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000001 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_PasswordProperties_DOMAIN_PASSWORD_NO_ANON_CHANGE, tvb, offset-4, 4, flags);
- if (flags&( 0x00000002 )){
- proto_item_append_text(item, "DOMAIN_PASSWORD_NO_ANON_CHANGE");
- if (flags & (~( 0x00000002 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000002 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_PasswordProperties_DOMAIN_PASSWORD_NO_CLEAR_CHANGE, tvb, offset-4, 4, flags);
- if (flags&( 0x00000004 )){
- proto_item_append_text(item, "DOMAIN_PASSWORD_NO_CLEAR_CHANGE");
- if (flags & (~( 0x00000004 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000004 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_PasswordProperties_DOMAIN_PASSWORD_LOCKOUT_ADMINS, tvb, offset-4, 4, flags);
- if (flags&( 0x00000008 )){
- proto_item_append_text(item, "DOMAIN_PASSWORD_LOCKOUT_ADMINS");
- if (flags & (~( 0x00000008 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000008 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_PasswordProperties_DOMAIN_PASSWORD_STORE_CLEARTEXT, tvb, offset-4, 4, flags);
- if (flags&( 0x00000010 )){
- proto_item_append_text(item, "DOMAIN_PASSWORD_STORE_CLEARTEXT");
- if (flags & (~( 0x00000010 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000010 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_PasswordProperties_DOMAIN_REFUSE_PASSWORD_CHANGE, tvb, offset-4, 4, flags);
- if (flags&( 0x00000020 )){
- proto_item_append_text(item, "DOMAIN_REFUSE_PASSWORD_CHANGE");
- if (flags & (~( 0x00000020 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000020 ));
+ proto_item_append_text(item, ": (No values set)");
- if (flags) {
+ if (flags & (~0x0000003f)) {
+ flags &= (~0x0000003f);
proto_item_append_text(item, "Unknown bitmap value 0x%x", flags);
}
@@ -3881,80 +3695,29 @@ samr_dissect_struct_Ids(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U
int
samr_dissect_bitmap_GroupAttrs(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
{
- proto_item *item = NULL;
- proto_tree *tree = NULL;
-
+ proto_item *item;
+ static const int * samr_samr_GroupAttrs_fields[] = {
+ &hf_samr_samr_GroupAttrs_SE_GROUP_MANDATORY,
+ &hf_samr_samr_GroupAttrs_SE_GROUP_ENABLED_BY_DEFAULT,
+ &hf_samr_samr_GroupAttrs_SE_GROUP_ENABLED,
+ &hf_samr_samr_GroupAttrs_SE_GROUP_OWNER,
+ &hf_samr_samr_GroupAttrs_SE_GROUP_USE_FOR_DENY_ONLY,
+ &hf_samr_samr_GroupAttrs_SE_GROUP_RESOURCE,
+ &hf_samr_samr_GroupAttrs_SE_GROUP_LOGON_ID,
+ };
guint32 flags;
ALIGN_TO_4_BYTES;
- if (parent_tree) {
- item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, DREP_ENC_INTEGER(drep));
- tree = proto_item_add_subtree(item,ett_samr_samr_GroupAttrs);
- }
+ item = proto_tree_add_bitmask_with_flags(parent_tree, tvb, offset, hf_index,
+ ett_samr_samr_GroupAttrs, samr_samr_GroupAttrs_fields, DREP_ENC_INTEGER(drep), BMT_NO_FALSE);
- offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, -1, &flags);
- proto_item_append_text(item, ": ");
+ offset = dissect_ndr_uint32(tvb, offset, pinfo, parent_tree, di, drep, -1, &flags);
if (!flags)
- proto_item_append_text(item, "(No values set)");
-
- proto_tree_add_boolean(tree, hf_samr_samr_GroupAttrs_SE_GROUP_MANDATORY, tvb, offset-4, 4, flags);
- if (flags&( 0x00000001 )){
- proto_item_append_text(item, "SE_GROUP_MANDATORY");
- if (flags & (~( 0x00000001 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000001 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_GroupAttrs_SE_GROUP_ENABLED_BY_DEFAULT, tvb, offset-4, 4, flags);
- if (flags&( 0x00000002 )){
- proto_item_append_text(item, "SE_GROUP_ENABLED_BY_DEFAULT");
- if (flags & (~( 0x00000002 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000002 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_GroupAttrs_SE_GROUP_ENABLED, tvb, offset-4, 4, flags);
- if (flags&( 0x00000004 )){
- proto_item_append_text(item, "SE_GROUP_ENABLED");
- if (flags & (~( 0x00000004 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000004 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_GroupAttrs_SE_GROUP_OWNER, tvb, offset-4, 4, flags);
- if (flags&( 0x00000008 )){
- proto_item_append_text(item, "SE_GROUP_OWNER");
- if (flags & (~( 0x00000008 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000008 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_GroupAttrs_SE_GROUP_USE_FOR_DENY_ONLY, tvb, offset-4, 4, flags);
- if (flags&( 0x00000010 )){
- proto_item_append_text(item, "SE_GROUP_USE_FOR_DENY_ONLY");
- if (flags & (~( 0x00000010 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000010 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_GroupAttrs_SE_GROUP_RESOURCE, tvb, offset-4, 4, flags);
- if (flags&( 0x20000000 )){
- proto_item_append_text(item, "SE_GROUP_RESOURCE");
- if (flags & (~( 0x20000000 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x20000000 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_GroupAttrs_SE_GROUP_LOGON_ID, tvb, offset-4, 4, flags);
- if (flags&( 0xC0000000 )){
- proto_item_append_text(item, "SE_GROUP_LOGON_ID");
- if (flags & (~( 0xC0000000 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0xC0000000 ));
+ proto_item_append_text(item, ": (No values set)");
- if (flags) {
+ if (flags & (~0xe000001f)) {
+ flags &= (~0xe000001f);
proto_item_append_text(item, "Unknown bitmap value 0x%x", flags);
}
@@ -5940,264 +5703,52 @@ samr_dissect_struct_UserInfo20(tvbuff_t *tvb _U_, int offset _U_, packet_info *p
int
samr_dissect_bitmap_FieldsPresent(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
{
- proto_item *item = NULL;
- proto_tree *tree = NULL;
-
+ proto_item *item;
+ static const int * samr_samr_FieldsPresent_fields[] = {
+ &hf_samr_samr_FieldsPresent_SAMR_FIELD_ACCOUNT_NAME,
+ &hf_samr_samr_FieldsPresent_SAMR_FIELD_FULL_NAME,
+ &hf_samr_samr_FieldsPresent_SAMR_FIELD_RID,
+ &hf_samr_samr_FieldsPresent_SAMR_FIELD_PRIMARY_GID,
+ &hf_samr_samr_FieldsPresent_SAMR_FIELD_DESCRIPTION,
+ &hf_samr_samr_FieldsPresent_SAMR_FIELD_COMMENT,
+ &hf_samr_samr_FieldsPresent_SAMR_FIELD_HOME_DIRECTORY,
+ &hf_samr_samr_FieldsPresent_SAMR_FIELD_HOME_DRIVE,
+ &hf_samr_samr_FieldsPresent_SAMR_FIELD_LOGON_SCRIPT,
+ &hf_samr_samr_FieldsPresent_SAMR_FIELD_PROFILE_PATH,
+ &hf_samr_samr_FieldsPresent_SAMR_FIELD_WORKSTATIONS,
+ &hf_samr_samr_FieldsPresent_SAMR_FIELD_LAST_LOGON,
+ &hf_samr_samr_FieldsPresent_SAMR_FIELD_LAST_LOGOFF,
+ &hf_samr_samr_FieldsPresent_SAMR_FIELD_LOGON_HOURS,
+ &hf_samr_samr_FieldsPresent_SAMR_FIELD_BAD_PWD_COUNT,
+ &hf_samr_samr_FieldsPresent_SAMR_FIELD_NUM_LOGONS,
+ &hf_samr_samr_FieldsPresent_SAMR_FIELD_ALLOW_PWD_CHANGE,
+ &hf_samr_samr_FieldsPresent_SAMR_FIELD_FORCE_PWD_CHANGE,
+ &hf_samr_samr_FieldsPresent_SAMR_FIELD_LAST_PWD_CHANGE,
+ &hf_samr_samr_FieldsPresent_SAMR_FIELD_ACCT_EXPIRY,
+ &hf_samr_samr_FieldsPresent_SAMR_FIELD_ACCT_FLAGS,
+ &hf_samr_samr_FieldsPresent_SAMR_FIELD_PARAMETERS,
+ &hf_samr_samr_FieldsPresent_SAMR_FIELD_COUNTRY_CODE,
+ &hf_samr_samr_FieldsPresent_SAMR_FIELD_CODE_PAGE,
+ &hf_samr_samr_FieldsPresent_SAMR_FIELD_NT_PASSWORD_PRESENT,
+ &hf_samr_samr_FieldsPresent_SAMR_FIELD_LM_PASSWORD_PRESENT,
+ &hf_samr_samr_FieldsPresent_SAMR_FIELD_PRIVATE_DATA,
+ &hf_samr_samr_FieldsPresent_SAMR_FIELD_EXPIRED_FLAG,
+ &hf_samr_samr_FieldsPresent_SAMR_FIELD_SEC_DESC,
+ &hf_samr_samr_FieldsPresent_SAMR_FIELD_OWF_PWD,
+ };
guint32 flags;
ALIGN_TO_4_BYTES;
- if (parent_tree) {
- item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, DREP_ENC_INTEGER(drep));
- tree = proto_item_add_subtree(item,ett_samr_samr_FieldsPresent);
- }
+ item = proto_tree_add_bitmask_with_flags(parent_tree, tvb, offset, hf_index,
+ ett_samr_samr_FieldsPresent, samr_samr_FieldsPresent_fields, DREP_ENC_INTEGER(drep), BMT_NO_FALSE);
- offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, -1, &flags);
- proto_item_append_text(item, ": ");
+ offset = dissect_ndr_uint32(tvb, offset, pinfo, parent_tree, di, drep, -1, &flags);
if (!flags)
- proto_item_append_text(item, "(No values set)");
-
- proto_tree_add_boolean(tree, hf_samr_samr_FieldsPresent_SAMR_FIELD_ACCOUNT_NAME, tvb, offset-4, 4, flags);
- if (flags&( 0x00000001 )){
- proto_item_append_text(item, "SAMR_FIELD_ACCOUNT_NAME");
- if (flags & (~( 0x00000001 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000001 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_FieldsPresent_SAMR_FIELD_FULL_NAME, tvb, offset-4, 4, flags);
- if (flags&( 0x00000002 )){
- proto_item_append_text(item, "SAMR_FIELD_FULL_NAME");
- if (flags & (~( 0x00000002 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000002 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_FieldsPresent_SAMR_FIELD_RID, tvb, offset-4, 4, flags);
- if (flags&( 0x00000004 )){
- proto_item_append_text(item, "SAMR_FIELD_RID");
- if (flags & (~( 0x00000004 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000004 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_FieldsPresent_SAMR_FIELD_PRIMARY_GID, tvb, offset-4, 4, flags);
- if (flags&( 0x00000008 )){
- proto_item_append_text(item, "SAMR_FIELD_PRIMARY_GID");
- if (flags & (~( 0x00000008 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000008 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_FieldsPresent_SAMR_FIELD_DESCRIPTION, tvb, offset-4, 4, flags);
- if (flags&( 0x00000010 )){
- proto_item_append_text(item, "SAMR_FIELD_DESCRIPTION");
- if (flags & (~( 0x00000010 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000010 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_FieldsPresent_SAMR_FIELD_COMMENT, tvb, offset-4, 4, flags);
- if (flags&( 0x00000020 )){
- proto_item_append_text(item, "SAMR_FIELD_COMMENT");
- if (flags & (~( 0x00000020 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000020 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_FieldsPresent_SAMR_FIELD_HOME_DIRECTORY, tvb, offset-4, 4, flags);
- if (flags&( 0x00000040 )){
- proto_item_append_text(item, "SAMR_FIELD_HOME_DIRECTORY");
- if (flags & (~( 0x00000040 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000040 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_FieldsPresent_SAMR_FIELD_HOME_DRIVE, tvb, offset-4, 4, flags);
- if (flags&( 0x00000080 )){
- proto_item_append_text(item, "SAMR_FIELD_HOME_DRIVE");
- if (flags & (~( 0x00000080 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000080 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_FieldsPresent_SAMR_FIELD_LOGON_SCRIPT, tvb, offset-4, 4, flags);
- if (flags&( 0x00000100 )){
- proto_item_append_text(item, "SAMR_FIELD_LOGON_SCRIPT");
- if (flags & (~( 0x00000100 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000100 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_FieldsPresent_SAMR_FIELD_PROFILE_PATH, tvb, offset-4, 4, flags);
- if (flags&( 0x00000200 )){
- proto_item_append_text(item, "SAMR_FIELD_PROFILE_PATH");
- if (flags & (~( 0x00000200 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000200 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_FieldsPresent_SAMR_FIELD_WORKSTATIONS, tvb, offset-4, 4, flags);
- if (flags&( 0x00000400 )){
- proto_item_append_text(item, "SAMR_FIELD_WORKSTATIONS");
- if (flags & (~( 0x00000400 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000400 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_FieldsPresent_SAMR_FIELD_LAST_LOGON, tvb, offset-4, 4, flags);
- if (flags&( 0x00000800 )){
- proto_item_append_text(item, "SAMR_FIELD_LAST_LOGON");
- if (flags & (~( 0x00000800 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000800 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_FieldsPresent_SAMR_FIELD_LAST_LOGOFF, tvb, offset-4, 4, flags);
- if (flags&( 0x00001000 )){
- proto_item_append_text(item, "SAMR_FIELD_LAST_LOGOFF");
- if (flags & (~( 0x00001000 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00001000 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_FieldsPresent_SAMR_FIELD_LOGON_HOURS, tvb, offset-4, 4, flags);
- if (flags&( 0x00002000 )){
- proto_item_append_text(item, "SAMR_FIELD_LOGON_HOURS");
- if (flags & (~( 0x00002000 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00002000 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_FieldsPresent_SAMR_FIELD_BAD_PWD_COUNT, tvb, offset-4, 4, flags);
- if (flags&( 0x00004000 )){
- proto_item_append_text(item, "SAMR_FIELD_BAD_PWD_COUNT");
- if (flags & (~( 0x00004000 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00004000 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_FieldsPresent_SAMR_FIELD_NUM_LOGONS, tvb, offset-4, 4, flags);
- if (flags&( 0x00008000 )){
- proto_item_append_text(item, "SAMR_FIELD_NUM_LOGONS");
- if (flags & (~( 0x00008000 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00008000 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_FieldsPresent_SAMR_FIELD_ALLOW_PWD_CHANGE, tvb, offset-4, 4, flags);
- if (flags&( 0x00010000 )){
- proto_item_append_text(item, "SAMR_FIELD_ALLOW_PWD_CHANGE");
- if (flags & (~( 0x00010000 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00010000 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_FieldsPresent_SAMR_FIELD_FORCE_PWD_CHANGE, tvb, offset-4, 4, flags);
- if (flags&( 0x00020000 )){
- proto_item_append_text(item, "SAMR_FIELD_FORCE_PWD_CHANGE");
- if (flags & (~( 0x00020000 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00020000 ));
+ proto_item_append_text(item, ": (No values set)");
- proto_tree_add_boolean(tree, hf_samr_samr_FieldsPresent_SAMR_FIELD_LAST_PWD_CHANGE, tvb, offset-4, 4, flags);
- if (flags&( 0x00040000 )){
- proto_item_append_text(item, "SAMR_FIELD_LAST_PWD_CHANGE");
- if (flags & (~( 0x00040000 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00040000 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_FieldsPresent_SAMR_FIELD_ACCT_EXPIRY, tvb, offset-4, 4, flags);
- if (flags&( 0x00080000 )){
- proto_item_append_text(item, "SAMR_FIELD_ACCT_EXPIRY");
- if (flags & (~( 0x00080000 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00080000 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_FieldsPresent_SAMR_FIELD_ACCT_FLAGS, tvb, offset-4, 4, flags);
- if (flags&( 0x00100000 )){
- proto_item_append_text(item, "SAMR_FIELD_ACCT_FLAGS");
- if (flags & (~( 0x00100000 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00100000 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_FieldsPresent_SAMR_FIELD_PARAMETERS, tvb, offset-4, 4, flags);
- if (flags&( 0x00200000 )){
- proto_item_append_text(item, "SAMR_FIELD_PARAMETERS");
- if (flags & (~( 0x00200000 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00200000 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_FieldsPresent_SAMR_FIELD_COUNTRY_CODE, tvb, offset-4, 4, flags);
- if (flags&( 0x00400000 )){
- proto_item_append_text(item, "SAMR_FIELD_COUNTRY_CODE");
- if (flags & (~( 0x00400000 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00400000 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_FieldsPresent_SAMR_FIELD_CODE_PAGE, tvb, offset-4, 4, flags);
- if (flags&( 0x00800000 )){
- proto_item_append_text(item, "SAMR_FIELD_CODE_PAGE");
- if (flags & (~( 0x00800000 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00800000 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_FieldsPresent_SAMR_FIELD_NT_PASSWORD_PRESENT, tvb, offset-4, 4, flags);
- if (flags&( 0x01000000 )){
- proto_item_append_text(item, "SAMR_FIELD_NT_PASSWORD_PRESENT");
- if (flags & (~( 0x01000000 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x01000000 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_FieldsPresent_SAMR_FIELD_LM_PASSWORD_PRESENT, tvb, offset-4, 4, flags);
- if (flags&( 0x02000000 )){
- proto_item_append_text(item, "SAMR_FIELD_LM_PASSWORD_PRESENT");
- if (flags & (~( 0x02000000 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x02000000 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_FieldsPresent_SAMR_FIELD_PRIVATE_DATA, tvb, offset-4, 4, flags);
- if (flags&( 0x04000000 )){
- proto_item_append_text(item, "SAMR_FIELD_PRIVATE_DATA");
- if (flags & (~( 0x04000000 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x04000000 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_FieldsPresent_SAMR_FIELD_EXPIRED_FLAG, tvb, offset-4, 4, flags);
- if (flags&( 0x08000000 )){
- proto_item_append_text(item, "SAMR_FIELD_EXPIRED_FLAG");
- if (flags & (~( 0x08000000 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x08000000 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_FieldsPresent_SAMR_FIELD_SEC_DESC, tvb, offset-4, 4, flags);
- if (flags&( 0x10000000 )){
- proto_item_append_text(item, "SAMR_FIELD_SEC_DESC");
- if (flags & (~( 0x10000000 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x10000000 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_FieldsPresent_SAMR_FIELD_OWF_PWD, tvb, offset-4, 4, flags);
- if (flags&( 0x20000000 )){
- proto_item_append_text(item, "SAMR_FIELD_OWF_PWD");
- if (flags & (~( 0x20000000 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x20000000 ));
-
- if (flags) {
+ if (flags & (~0x3fffffff)) {
+ flags &= (~0x3fffffff);
proto_item_append_text(item, "Unknown bitmap value 0x%x", flags);
}
@@ -8319,72 +7870,28 @@ samr_dissect_ConnectInfo(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _
int
samr_dissect_bitmap_ValidateFieldsPresent(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *parent_tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, int hf_index _U_, guint32 param _U_)
{
- proto_item *item = NULL;
- proto_tree *tree = NULL;
-
+ proto_item *item;
+ static const int * samr_samr_ValidateFieldsPresent_fields[] = {
+ &hf_samr_samr_ValidateFieldsPresent_SAMR_VALIDATE_FIELD_PASSWORD_LAST_SET,
+ &hf_samr_samr_ValidateFieldsPresent_SAMR_VALIDATE_FIELD_BAD_PASSWORD_TIME,
+ &hf_samr_samr_ValidateFieldsPresent_SAMR_VALIDATE_FIELD_LOCKOUT_TIME,
+ &hf_samr_samr_ValidateFieldsPresent_SAMR_VALIDATE_FIELD_BAD_PASSWORD_COUNT,
+ &hf_samr_samr_ValidateFieldsPresent_SAMR_VALIDATE_FIELD_PASSWORD_HISTORY_LENGTH,
+ &hf_samr_samr_ValidateFieldsPresent_SAMR_VALIDATE_FIELD_PASSWORD_HISTORY,
+ };
guint32 flags;
ALIGN_TO_4_BYTES;
- if (parent_tree) {
- item = proto_tree_add_item(parent_tree, hf_index, tvb, offset, 4, DREP_ENC_INTEGER(drep));
- tree = proto_item_add_subtree(item,ett_samr_samr_ValidateFieldsPresent);
- }
+ item = proto_tree_add_bitmask_with_flags(parent_tree, tvb, offset, hf_index,
+ ett_samr_samr_ValidateFieldsPresent, samr_samr_ValidateFieldsPresent_fields, DREP_ENC_INTEGER(drep), BMT_NO_FALSE);
- offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, di, drep, -1, &flags);
- proto_item_append_text(item, ": ");
+ offset = dissect_ndr_uint32(tvb, offset, pinfo, parent_tree, di, drep, -1, &flags);
if (!flags)
- proto_item_append_text(item, "(No values set)");
-
- proto_tree_add_boolean(tree, hf_samr_samr_ValidateFieldsPresent_SAMR_VALIDATE_FIELD_PASSWORD_LAST_SET, tvb, offset-4, 4, flags);
- if (flags&( 0x00000001 )){
- proto_item_append_text(item, "SAMR_VALIDATE_FIELD_PASSWORD_LAST_SET");
- if (flags & (~( 0x00000001 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000001 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_ValidateFieldsPresent_SAMR_VALIDATE_FIELD_BAD_PASSWORD_TIME, tvb, offset-4, 4, flags);
- if (flags&( 0x00000002 )){
- proto_item_append_text(item, "SAMR_VALIDATE_FIELD_BAD_PASSWORD_TIME");
- if (flags & (~( 0x00000002 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000002 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_ValidateFieldsPresent_SAMR_VALIDATE_FIELD_LOCKOUT_TIME, tvb, offset-4, 4, flags);
- if (flags&( 0x00000004 )){
- proto_item_append_text(item, "SAMR_VALIDATE_FIELD_LOCKOUT_TIME");
- if (flags & (~( 0x00000004 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000004 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_ValidateFieldsPresent_SAMR_VALIDATE_FIELD_BAD_PASSWORD_COUNT, tvb, offset-4, 4, flags);
- if (flags&( 0x00000008 )){
- proto_item_append_text(item, "SAMR_VALIDATE_FIELD_BAD_PASSWORD_COUNT");
- if (flags & (~( 0x00000008 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000008 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_ValidateFieldsPresent_SAMR_VALIDATE_FIELD_PASSWORD_HISTORY_LENGTH, tvb, offset-4, 4, flags);
- if (flags&( 0x00000010 )){
- proto_item_append_text(item, "SAMR_VALIDATE_FIELD_PASSWORD_HISTORY_LENGTH");
- if (flags & (~( 0x00000010 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000010 ));
-
- proto_tree_add_boolean(tree, hf_samr_samr_ValidateFieldsPresent_SAMR_VALIDATE_FIELD_PASSWORD_HISTORY, tvb, offset-4, 4, flags);
- if (flags&( 0x00000020 )){
- proto_item_append_text(item, "SAMR_VALIDATE_FIELD_PASSWORD_HISTORY");
- if (flags & (~( 0x00000020 )))
- proto_item_append_text(item, ", ");
- }
- flags&=(~( 0x00000020 ));
+ proto_item_append_text(item, ": (No values set)");
- if (flags) {
+ if (flags & (~0x0000003f)) {
+ flags &= (~0x0000003f);
proto_item_append_text(item, "Unknown bitmap value 0x%x", flags);
}