diff options
Diffstat (limited to 'epan/dissectors/packet-dcerpc-netlogon.c')
-rw-r--r-- | epan/dissectors/packet-dcerpc-netlogon.c | 473 |
1 files changed, 150 insertions, 323 deletions
diff --git a/epan/dissectors/packet-dcerpc-netlogon.c b/epan/dissectors/packet-dcerpc-netlogon.c index bfc11c92fe..fe8fc3d54a 100644 --- a/epan/dissectors/packet-dcerpc-netlogon.c +++ b/epan/dissectors/packet-dcerpc-netlogon.c @@ -612,8 +612,13 @@ netlogon_dissect_EXTRA_FLAGS(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *parent_tree, dcerpc_info *di, guint8 *drep) { guint32 mask; - proto_item *item = NULL; - proto_tree *tree = NULL; + static const int * extraflags[] = { + &hf_netlogon_extra_flags_root_forest, + &hf_netlogon_trust_flags_dc_firsthop, + &hf_netlogon_trust_flags_rodc_to_dc, + &hf_netlogon_trust_flags_rodc_ntlm, + NULL + }; if(di->conformant_run){ /*just a run to handle conformant arrays, nothing to dissect */ @@ -621,23 +626,9 @@ netlogon_dissect_EXTRA_FLAGS(tvbuff_t *tvb, int offset, } offset=dissect_ndr_uint32(tvb, offset, pinfo, NULL, di, drep, - hf_netlogon_extraflags, &mask); - - if(parent_tree){ - item = proto_tree_add_uint(parent_tree, hf_netlogon_extraflags, - tvb, offset-4, 4, mask); - tree = proto_item_add_subtree(item, ett_trust_flags); - } - - proto_tree_add_boolean(tree, hf_netlogon_extra_flags_root_forest, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_trust_flags_dc_firsthop, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_trust_flags_rodc_to_dc, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_trust_flags_rodc_ntlm, - tvb, offset-4, 4, mask); + -1, &mask); + proto_tree_add_bitmask_value_with_flags(parent_tree, tvb, offset-4, hf_netlogon_extraflags, ett_trust_flags, extraflags, mask, BMT_NO_APPEND); return offset; } static int @@ -702,8 +693,26 @@ netlogon_dissect_USER_ACCOUNT_CONTROL(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *parent_tree, dcerpc_info *di, guint8 *drep) { guint32 mask; - proto_item *item = NULL; - proto_tree *tree = NULL; + static const int * uac[] = { + &hf_netlogon_user_account_control_dont_require_preauth, + &hf_netlogon_user_account_control_use_des_key_only, + &hf_netlogon_user_account_control_not_delegated, + &hf_netlogon_user_account_control_trusted_for_delegation, + &hf_netlogon_user_account_control_smartcard_required, + &hf_netlogon_user_account_control_encrypted_text_password_allowed, + &hf_netlogon_user_account_control_account_auto_locked, + &hf_netlogon_user_account_control_dont_expire_password, + &hf_netlogon_user_account_control_server_trust_account, + &hf_netlogon_user_account_control_workstation_trust_account, + &hf_netlogon_user_account_control_interdomain_trust_account, + &hf_netlogon_user_account_control_mns_logon_account, + &hf_netlogon_user_account_control_normal_account, + &hf_netlogon_user_account_control_temp_duplicate_account, + &hf_netlogon_user_account_control_password_not_required, + &hf_netlogon_user_account_control_home_directory_required, + &hf_netlogon_user_account_control_account_disabled, + NULL + }; if(di->conformant_run){ /*just a run to handle conformant arrays, nothing to dissect */ @@ -711,48 +720,10 @@ netlogon_dissect_USER_ACCOUNT_CONTROL(tvbuff_t *tvb, int offset, } offset=dissect_ndr_uint32(tvb, offset, pinfo, NULL, di, drep, - hf_netlogon_user_account_control, &mask); + -1, &mask); - if(parent_tree){ - item = proto_tree_add_uint(parent_tree, hf_netlogon_user_account_control, - tvb, offset-4, 4, mask); - tree = proto_item_add_subtree(item, ett_user_account_control); - } + proto_tree_add_bitmask_value_with_flags(parent_tree, tvb, offset-4, hf_netlogon_user_account_control, ett_user_account_control, uac, mask, BMT_NO_APPEND); - proto_tree_add_boolean(tree, hf_netlogon_user_account_control_dont_require_preauth, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_user_account_control_use_des_key_only, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_user_account_control_not_delegated, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_user_account_control_trusted_for_delegation, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_user_account_control_smartcard_required, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_user_account_control_encrypted_text_password_allowed, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_user_account_control_account_auto_locked, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_user_account_control_dont_expire_password, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_user_account_control_server_trust_account, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_user_account_control_workstation_trust_account, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_user_account_control_interdomain_trust_account, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_user_account_control_mns_logon_account, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_user_account_control_normal_account, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_user_account_control_temp_duplicate_account, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_user_account_control_password_not_required, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_user_account_control_home_directory_required, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_user_account_control_account_disabled, - tvb, offset-4, 4, mask); return offset; } @@ -1408,8 +1379,12 @@ netlogon_dissect_GROUP_MEMBERSHIP_ATTRIBUTES(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *parent_tree, dcerpc_info *di, guint8 *drep) { guint32 mask; - proto_item *item = NULL; - proto_tree *tree = NULL; + static const int * attr[] = { + &hf_netlogon_group_attrs_enabled, + &hf_netlogon_group_attrs_enabled_by_default, + &hf_netlogon_group_attrs_mandatory, + NULL + }; if(di->conformant_run){ /*just a run to handle conformant arrays, nothing to dissect */ @@ -1417,21 +1392,9 @@ netlogon_dissect_GROUP_MEMBERSHIP_ATTRIBUTES(tvbuff_t *tvb, int offset, } offset=dissect_ndr_uint32(tvb, offset, pinfo, NULL, di, drep, - hf_netlogon_attrs, &mask); - - if(parent_tree){ - item = proto_tree_add_uint(parent_tree, hf_netlogon_attrs, - tvb, offset-4, 4, mask); - tree = proto_item_add_subtree(item, ett_group_attrs); - } - - proto_tree_add_boolean(tree, hf_netlogon_group_attrs_enabled, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_group_attrs_enabled_by_default, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_group_attrs_mandatory, - tvb, offset-4, 4, mask); + -1, &mask); + proto_tree_add_bitmask_value_with_flags(parent_tree, tvb, offset-4, hf_netlogon_attrs, ett_group_attrs, attr, mask, BMT_NO_APPEND); return offset; } @@ -1511,8 +1474,11 @@ netlogon_dissect_USER_FLAGS(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *parent_tree, dcerpc_info *di, guint8 *drep) { guint32 mask; - proto_item *item = NULL; - proto_tree *tree = NULL; + static const int * flags[] = { + &hf_netlogon_user_flags_resource_groups, + &hf_netlogon_user_flags_extra_sids, + NULL + }; if(di->conformant_run){ /*just a run to handle conformant arrays, nothing to dissect */ @@ -1520,19 +1486,9 @@ netlogon_dissect_USER_FLAGS(tvbuff_t *tvb, int offset, } offset=dissect_ndr_uint32(tvb, offset, pinfo, NULL, di, drep, - hf_netlogon_user_flags, &mask); - - if(parent_tree){ - item = proto_tree_add_uint(parent_tree, hf_netlogon_user_flags, - tvb, offset-4, 4, mask); - tree = proto_item_add_subtree(item, ett_user_flags); - } - - proto_tree_add_boolean(tree, hf_netlogon_user_flags_resource_groups, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_user_flags_extra_sids, - tvb, offset-4, 4, mask); + -1, &mask); + proto_tree_add_bitmask_value_with_flags(parent_tree, tvb, offset-4, hf_netlogon_user_flags, ett_user_flags, flags, mask, BMT_NO_APPEND); return offset; } @@ -5143,8 +5099,15 @@ netlogon_dissect_DOMAIN_TRUST_FLAGS(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *parent_tree, dcerpc_info *di, guint8 *drep) { guint32 mask; - proto_item *item = NULL; - proto_tree *tree = NULL; + static const int * flags[] = { + &hf_netlogon_trust_flags_inbound, + &hf_netlogon_trust_flags_native_mode, + &hf_netlogon_trust_flags_primary, + &hf_netlogon_trust_flags_tree_root, + &hf_netlogon_trust_flags_outbound, + &hf_netlogon_trust_flags_in_forest, + NULL + }; if(di->conformant_run){ /*just a run to handle conformant arrays, nothing to dissect */ @@ -5152,27 +5115,9 @@ netlogon_dissect_DOMAIN_TRUST_FLAGS(tvbuff_t *tvb, int offset, } offset=dissect_ndr_uint32(tvb, offset, pinfo, NULL, di, drep, - hf_netlogon_trust_flags, &mask); - - if(parent_tree){ - item = proto_tree_add_uint(parent_tree, hf_netlogon_trust_flags, - tvb, offset-4, 4, mask); - tree = proto_item_add_subtree(item, ett_trust_flags); - } - - proto_tree_add_boolean(tree, hf_netlogon_trust_flags_inbound, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_trust_flags_native_mode, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_trust_flags_primary, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_trust_flags_tree_root, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_trust_flags_outbound, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_trust_flags_in_forest, - tvb, offset-4, 4, mask); + -1, &mask); + proto_tree_add_bitmask_value_with_flags(parent_tree, tvb, offset-4, hf_netlogon_trust_flags, ett_trust_flags, flags, mask, BMT_NO_APPEND); return offset; } @@ -5212,8 +5157,16 @@ netlogon_dissect_DOMAIN_TRUST_ATTRIBS(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *parent_tree, dcerpc_info *di, guint8 *drep) { guint32 mask; - proto_item *item = NULL; - proto_tree *tree = NULL; + static const int * attr[] = { + &hf_netlogon_trust_attribs_treat_as_external, + &hf_netlogon_trust_attribs_within_forest, + &hf_netlogon_trust_attribs_cross_organization, + &hf_netlogon_trust_attribs_forest_transitive, + &hf_netlogon_trust_attribs_quarantined_domain, + &hf_netlogon_trust_attribs_uplevel_only, + &hf_netlogon_trust_attribs_non_transitive, + NULL + }; if(di->conformant_run){ /*just a run to handle conformant arrays, nothing to dissect */ @@ -5221,30 +5174,9 @@ netlogon_dissect_DOMAIN_TRUST_ATTRIBS(tvbuff_t *tvb, int offset, } offset = dissect_ndr_uint32(tvb, offset, pinfo, NULL, di, drep, - hf_netlogon_trust_attribs, &mask); - - if(parent_tree){ - item = proto_tree_add_uint(parent_tree, hf_netlogon_trust_attribs, - tvb, offset-4, 4, mask); - tree = proto_item_add_subtree(item, ett_trust_attribs); - } - - proto_tree_add_boolean(tree, hf_netlogon_trust_attribs_treat_as_external, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_trust_attribs_within_forest, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_trust_attribs_cross_organization, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_trust_attribs_forest_transitive, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_trust_attribs_quarantined_domain, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_trust_attribs_uplevel_only, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_trust_attribs_non_transitive, - tvb, offset-4, 4, mask); - + -1, &mask); + proto_tree_add_bitmask_value_with_flags(parent_tree, tvb, offset-4, hf_netlogon_trust_attribs, ett_trust_attribs, attr, mask, BMT_NO_APPEND); return offset; } @@ -5340,58 +5272,35 @@ netlogon_dissect_GET_DCNAME_REQUEST_FLAGS(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *parent_tree, dcerpc_info *di, guint8 *drep) { guint32 mask; - proto_item *item = NULL; - proto_tree *tree = NULL; + static const int * flags[] = { + &hf_netlogon_get_dcname_request_flags_return_flat_name, + &hf_netlogon_get_dcname_request_flags_return_dns_name, + &hf_netlogon_get_dcname_request_flags_is_flat_name, + &hf_netlogon_get_dcname_request_flags_is_dns_name, + &hf_netlogon_get_dcname_request_flags_only_ldap_needed, + &hf_netlogon_get_dcname_request_flags_avoid_self, + &hf_netlogon_get_dcname_request_flags_good_timeserv_preferred, + &hf_netlogon_get_dcname_request_flags_writable_required, + &hf_netlogon_get_dcname_request_flags_timeserv_required, + &hf_netlogon_get_dcname_request_flags_kdc_required, + &hf_netlogon_get_dcname_request_flags_ip_required, + &hf_netlogon_get_dcname_request_flags_background_only, + &hf_netlogon_get_dcname_request_flags_pdc_required, + &hf_netlogon_get_dcname_request_flags_gc_server_required, + &hf_netlogon_get_dcname_request_flags_directory_service_preferred, + &hf_netlogon_get_dcname_request_flags_directory_service_required, + &hf_netlogon_get_dcname_request_flags_force_rediscovery, + NULL + }; if(di->conformant_run){ /*just a run to handle conformant arrays, nothing to dissect */ return offset; } - offset=dissect_ndr_uint32(tvb, offset, pinfo, NULL, di, drep, - hf_netlogon_get_dcname_request_flags, &mask); - - if(parent_tree){ - item = proto_tree_add_uint(parent_tree, hf_netlogon_get_dcname_request_flags, - tvb, offset-4, 4, mask); - tree = proto_item_add_subtree(item, ett_get_dcname_request_flags); - } - - proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_return_flat_name, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_return_dns_name, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_is_flat_name, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_is_dns_name, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_only_ldap_needed, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_avoid_self, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_good_timeserv_preferred, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_writable_required, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_timeserv_required, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_kdc_required, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_ip_required, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_background_only, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_pdc_required, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_gc_server_required, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_directory_service_preferred, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_directory_service_required, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_get_dcname_request_flags_force_rediscovery, - tvb, offset-4, 4, mask); + offset=dissect_ndr_uint32(tvb, offset, pinfo, NULL, di, drep, -1, &mask); + proto_tree_add_bitmask_value_with_flags(parent_tree, tvb, offset-4, hf_netlogon_get_dcname_request_flags, ett_get_dcname_request_flags, flags, mask, BMT_NO_APPEND); return offset; } @@ -5468,49 +5377,34 @@ netlogon_dissect_DC_FLAGS(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_tree *parent_tree, dcerpc_info *di, guint8 *drep) { guint32 mask; - proto_item *item = NULL; - proto_tree *tree = NULL; + proto_item *item; + static const int * flags[] = { + &hf_netlogon_dc_flags_dns_forest_flag, + &hf_netlogon_dc_flags_dns_domain_flag, + &hf_netlogon_dc_flags_dns_controller_flag, + &hf_netlogon_dc_flags_ndnc_flag, + &hf_netlogon_dc_flags_good_timeserv_flag, + &hf_netlogon_dc_flags_writable_flag, + &hf_netlogon_dc_flags_closest_flag, + &hf_netlogon_dc_flags_timeserv_flag, + &hf_netlogon_dc_flags_kdc_flag, + &hf_netlogon_dc_flags_ds_flag, + &hf_netlogon_dc_flags_ldap_flag, + &hf_netlogon_dc_flags_gc_flag, + &hf_netlogon_dc_flags_pdc_flag, + NULL + }; if(di->conformant_run){ /*just a run to handle conformant arrays, nothing to dissect */ return offset; } - offset=dissect_ndr_uint32(tvb, offset, pinfo, NULL, di, drep, - hf_netlogon_dc_flags, &mask); - - if(parent_tree){ - item = proto_tree_add_uint_format_value(parent_tree, hf_netlogon_dc_flags, - tvb, offset-4, 4, mask, "0x%08x%s", mask, (mask==0x0000ffff)?" PING (mask==0x0000ffff)":""); - tree = proto_item_add_subtree(item, ett_dc_flags); - } + offset=dissect_ndr_uint32(tvb, offset, pinfo, NULL, di, drep, -1, &mask); - proto_tree_add_boolean(tree, hf_netlogon_dc_flags_dns_forest_flag, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_dc_flags_dns_domain_flag, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_dc_flags_dns_controller_flag, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_dc_flags_ndnc_flag, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_dc_flags_good_timeserv_flag, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_dc_flags_writable_flag, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_dc_flags_closest_flag, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_dc_flags_timeserv_flag, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_dc_flags_kdc_flag, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_dc_flags_ds_flag, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_dc_flags_ldap_flag, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_dc_flags_gc_flag, - tvb, offset-4, 4, mask); - proto_tree_add_boolean(tree, hf_netlogon_dc_flags_pdc_flag, - tvb, offset-4, 4, mask); + item = proto_tree_add_bitmask_value_with_flags(parent_tree, tvb, offset-4, hf_netlogon_dc_flags, ett_dc_flags, flags, mask, BMT_NO_APPEND); + if (mask==0x0000ffff) + proto_item_append_text(item, " PING (mask==0x0000ffff)"); return offset; } @@ -6537,115 +6431,48 @@ netlogon_dissect_netrlogoncomputeclientdigest_reply(tvbuff_t *tvb, int offset, } static int netlogon_dissect_neg_options(tvbuff_t *tvb,proto_tree *tree,guint32 flags,int offset) { - if (tree) { - proto_tree *negotiate_flags_tree = NULL; - proto_item *tf = NULL; - tf = proto_tree_add_uint (tree, - hf_netlogon_neg_flags, - tvb, offset, 4,flags); - negotiate_flags_tree = proto_item_add_subtree (tf,ett_authenticate_flags); - + static const int * hf_flags[] = { #if 0 - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_80000000, - tvb, offset, 4, flags); + &hf_netlogon_neg_flags_80000000, #endif - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_40000000, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_20000000, - tvb, offset, 4, flags); + &hf_netlogon_neg_flags_40000000, + &hf_netlogon_neg_flags_20000000, #if 0 - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_10000000, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_8000000, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_4000000, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_2000000, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_800000, - tvb, offset, 4, flags); + &hf_netlogon_neg_flags_10000000, + &hf_netlogon_neg_flags_8000000, + &hf_netlogon_neg_flags_4000000, + &hf_netlogon_neg_flags_2000000, + &hf_netlogon_neg_flags_800000, #endif - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_1000000, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_400000, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_200000, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_100000, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_80000, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_40000, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_20000, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_10000, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_8000, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_4000, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_2000, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_1000, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_800, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_400, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_200, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_100, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_80, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_40, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_20, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_10, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_8, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_4, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_2, - tvb, offset, 4, flags); - proto_tree_add_boolean (negotiate_flags_tree, - hf_netlogon_neg_flags_1, - tvb, offset, 4, flags); - } + &hf_netlogon_neg_flags_1000000, + &hf_netlogon_neg_flags_400000, + &hf_netlogon_neg_flags_200000, + &hf_netlogon_neg_flags_100000, + &hf_netlogon_neg_flags_80000, + &hf_netlogon_neg_flags_40000, + &hf_netlogon_neg_flags_20000, + &hf_netlogon_neg_flags_10000, + &hf_netlogon_neg_flags_8000, + &hf_netlogon_neg_flags_4000, + &hf_netlogon_neg_flags_2000, + &hf_netlogon_neg_flags_1000, + &hf_netlogon_neg_flags_800, + &hf_netlogon_neg_flags_400, + &hf_netlogon_neg_flags_200, + &hf_netlogon_neg_flags_100, + &hf_netlogon_neg_flags_80, + &hf_netlogon_neg_flags_40, + &hf_netlogon_neg_flags_20, + &hf_netlogon_neg_flags_10, + &hf_netlogon_neg_flags_8, + &hf_netlogon_neg_flags_4, + &hf_netlogon_neg_flags_2, + &hf_netlogon_neg_flags_1, + NULL + }; + + proto_tree_add_bitmask_value_with_flags(tree, tvb, offset, hf_netlogon_neg_flags, ett_authenticate_flags, hf_flags, flags, BMT_NO_APPEND); + return 0; } |