diff options
Diffstat (limited to 'asn1/ldap/packet-ldap-template.c')
-rw-r--r-- | asn1/ldap/packet-ldap-template.c | 127 |
1 files changed, 35 insertions, 92 deletions
diff --git a/asn1/ldap/packet-ldap-template.c b/asn1/ldap/packet-ldap-template.c index c168f93839..df5b5db347 100644 --- a/asn1/ldap/packet-ldap-template.c +++ b/asn1/ldap/packet-ldap-template.c @@ -529,52 +529,22 @@ attribute_types_initialize_cb(void) /* MS-ADTS specification, section 7.3.1.1, NETLOGON_NT_VERSION Options Bits */ static int dissect_mscldap_ntver_flags(proto_tree *parent_tree, tvbuff_t *tvb, int offset) { - guint32 flags; - proto_item *item; - proto_tree *tree=NULL; - guint *field; - header_field_info *hfi; - gboolean one_bit_set = FALSE; - guint fields[11]; - fields[0] = hf_mscldap_ntver_flags_v1; - fields[1] = hf_mscldap_ntver_flags_v5; - fields[2] = hf_mscldap_ntver_flags_v5ex; - fields[3] = hf_mscldap_ntver_flags_v5ep; - fields[4] = hf_mscldap_ntver_flags_vcs; - fields[5] = hf_mscldap_ntver_flags_vnt4; - fields[6] = hf_mscldap_ntver_flags_vpdc; - fields[7] = hf_mscldap_ntver_flags_vip; - fields[8] = hf_mscldap_ntver_flags_vl; - fields[9] = hf_mscldap_ntver_flags_vgc; - fields[10] = 0; - - - flags=tvb_get_letohl(tvb, offset); - item=proto_tree_add_item(parent_tree, hf_mscldap_ntver_flags, tvb, offset, 4, ENC_LITTLE_ENDIAN); - if(parent_tree){ - tree = proto_item_add_subtree(item, ett_mscldap_ntver_flags); - } - - proto_item_append_text(item, " ("); - - for(field = fields; *field; field++) { - proto_tree_add_boolean(tree, *field, tvb, offset, 4, flags); - hfi = proto_registrar_get_nth(*field); - - if(flags & hfi->bitmask) { - - if(one_bit_set) - proto_item_append_text(item, ", "); - else - one_bit_set = TRUE; - - proto_item_append_text(item, "%s", hfi->name); - - } - } - - proto_item_append_text(item, ")"); + static const int * flags[] = { + &hf_mscldap_ntver_flags_v1, + &hf_mscldap_ntver_flags_v5, + &hf_mscldap_ntver_flags_v5ex, + &hf_mscldap_ntver_flags_v5ep, + &hf_mscldap_ntver_flags_vcs, + &hf_mscldap_ntver_flags_vnt4, + &hf_mscldap_ntver_flags_vpdc, + &hf_mscldap_ntver_flags_vip, + &hf_mscldap_ntver_flags_vl, + &hf_mscldap_ntver_flags_vgc, + NULL + }; + proto_tree_add_bitmask_with_flags(parent_tree, tvb, offset, hf_mscldap_ntver_flags, + ett_mscldap_ntver_flags, flags, ENC_LITTLE_ENDIAN, BMT_NO_FALSE); offset += 4; return offset; @@ -1359,54 +1329,27 @@ static const true_false_string tfs_ads_fnc = { }; static int dissect_mscldap_netlogon_flags(proto_tree *parent_tree, tvbuff_t *tvb, int offset) { - guint32 flags; - proto_item *item; - proto_tree *tree; - guint *field; - header_field_info *hfi; - gboolean one_bit_set = FALSE; - guint fields[16]; - fields[0] = hf_mscldap_netlogon_flags_fnc; - fields[1] = hf_mscldap_netlogon_flags_dnc; - fields[2] = hf_mscldap_netlogon_flags_dns; - fields[3] = hf_mscldap_netlogon_flags_wdc; - fields[4] = hf_mscldap_netlogon_flags_rodc; - fields[5] = hf_mscldap_netlogon_flags_ndnc; - fields[6] = hf_mscldap_netlogon_flags_good_timeserv; - fields[7] = hf_mscldap_netlogon_flags_writable; - fields[8] = hf_mscldap_netlogon_flags_closest; - fields[9] = hf_mscldap_netlogon_flags_timeserv; - fields[10] = hf_mscldap_netlogon_flags_kdc; - fields[11] = hf_mscldap_netlogon_flags_ds; - fields[12] = hf_mscldap_netlogon_flags_ldap; - fields[13] = hf_mscldap_netlogon_flags_gc; - fields[14] = hf_mscldap_netlogon_flags_pdc; - fields[15] = 0; - - flags=tvb_get_letohl(tvb, offset); - item=proto_tree_add_item(parent_tree, hf_mscldap_netlogon_flags, tvb, offset, 4, ENC_LITTLE_ENDIAN); - tree = proto_item_add_subtree(item, ett_mscldap_netlogon_flags); - - proto_item_append_text(item, " ("); - - for(field = fields; *field; field++) { - proto_tree_add_boolean(tree, *field, tvb, offset, 4, flags); - hfi = proto_registrar_get_nth(*field); - - if(flags & hfi->bitmask) { - - if(one_bit_set) - proto_item_append_text(item, ", "); - else - one_bit_set = TRUE; - - proto_item_append_text(item, "%s", hfi->name); - - } - } - - proto_item_append_text(item, ")"); + static const int * flags[] = { + &hf_mscldap_netlogon_flags_fnc, + &hf_mscldap_netlogon_flags_dnc, + &hf_mscldap_netlogon_flags_dns, + &hf_mscldap_netlogon_flags_wdc, + &hf_mscldap_netlogon_flags_rodc, + &hf_mscldap_netlogon_flags_ndnc, + &hf_mscldap_netlogon_flags_good_timeserv, + &hf_mscldap_netlogon_flags_writable, + &hf_mscldap_netlogon_flags_closest, + &hf_mscldap_netlogon_flags_timeserv, + &hf_mscldap_netlogon_flags_kdc, + &hf_mscldap_netlogon_flags_ds, + &hf_mscldap_netlogon_flags_ldap, + &hf_mscldap_netlogon_flags_gc, + &hf_mscldap_netlogon_flags_pdc, + NULL + }; + proto_tree_add_bitmask_with_flags(parent_tree, tvb, offset, hf_mscldap_netlogon_flags, + ett_mscldap_netlogon_flags, flags, ENC_LITTLE_ENDIAN, BMT_NO_FALSE); offset += 4; return offset; |