From eda93e6b727c99c0ebe37b57d71710d821fb95ea Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Thu, 27 Jan 2022 18:58:12 +0100 Subject: [PATCH] drsuapi_dissect_element_package_PrimaryKerberosKey*_value --- epan/dissectors/pidl/drsuapi/drsuapi.cnf | 54 ++++++++++++++++++++++++++++---- 1 file changed, 48 insertions(+), 6 deletions(-) diff --git a/epan/dissectors/pidl/drsuapi/drsuapi.cnf b/epan/dissectors/pidl/drsuapi/drsuapi.cnf index 554764f9d3..09dc72728e 100644 --- a/epan/dissectors/pidl/drsuapi/drsuapi.cnf +++ b/epan/dissectors/pidl/drsuapi/drsuapi.cnf @@ -5,16 +5,14 @@ MANUAL drsuapi_dissect_element_DsReplicaAttribute_attid MANUAL drsuapi_dissect_element_DsAttributeValue_blob_ MANUAL drsuapi_dissect_struct_DsReplicaAttribute MANUAL drsuapi_dissect_struct_DsReplicaObject -MANUAL drsuapi_dissect_element_package_PrimaryKerberosKey3_value -MANUAL drsuapi_dissect_element_package_PrimaryKerberosKey3_value_ -MANUAL drsuapi_dissect_element_package_PrimaryKerberosKey4_value -MANUAL drsuapi_dissect_element_package_PrimaryKerberosKey4_value_ MANUAL drsuapi_dissect_element_package_PrimaryKerberosCtr3_num_keys MANUAL drsuapi_dissect_element_package_PrimaryKerberosCtr3_num_old_keys MANUAL drsuapi_dissect_element_package_PrimaryKerberosCtr3_keys MANUAL drsuapi_dissect_element_package_PrimaryKerberosCtr3_keys_ MANUAL drsuapi_dissect_element_package_PrimaryKerberosCtr3_old_keys MANUAL drsuapi_dissect_element_package_PrimaryKerberosCtr3_old_keys_ +MANUAL drsuapi_dissect_element_package_PrimaryKerberosKey3_value +MANUAL drsuapi_dissect_element_package_PrimaryKerberosKey3_value_ MANUAL drsuapi_dissect_struct_package_PrimaryKerberosKey3 MANUAL drsuapi_dissect_element_package_PrimaryKerberosCtr4_num_keys MANUAL drsuapi_dissect_element_package_PrimaryKerberosCtr4_num_service_keys @@ -28,6 +26,8 @@ MANUAL drsuapi_dissect_element_package_PrimaryKerberosCtr4_old_keys MANUAL drsuapi_dissect_element_package_PrimaryKerberosCtr4_old_keys_ MANUAL drsuapi_dissect_element_package_PrimaryKerberosCtr4_older_keys MANUAL drsuapi_dissect_element_package_PrimaryKerberosCtr4_older_keys_ +MANUAL drsuapi_dissect_element_package_PrimaryKerberosKey4_value +MANUAL drsuapi_dissect_element_package_PrimaryKerberosKey4_value_ MANUAL drsuapi_dissect_struct_package_PrimaryKerberosKey4 MANUAL drsuapi_dissect_element_package_PrimaryKerberosBlob_version MANUAL drsuapi_dissect_element_supplementalCredentialsPackage_name_len @@ -169,6 +169,22 @@ drsuapi_dissect_element_package_PrimaryKerberosCtr3_old_keys_(tvbuff_t *tvb _U_, return offset; } +static int +drsuapi_dissect_element_package_PrimaryKerberosKey3_value(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, guint32 *value_len) +{ + return drsuapi_dissect_element_package_PrimaryKerberosKey3_value_(tvb, offset, pinfo, tree, di, drep, value_len); +} + +static int +drsuapi_dissect_element_package_PrimaryKerberosKey3_value_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, guint32 *value_len) +{ + tvbuff_t *subtvb = tvb_new_subset_length(tvb, offset, *value_len); + + offset += dissect_ndr_datablob(subtvb, 0, pinfo, tree, di, drep, hf_drsuapi_package_PrimaryKerberosKey3_value, 1); + + return offset; +} + int drsuapi_dissect_struct_package_PrimaryKerberosKey3(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_) { @@ -203,7 +219,9 @@ drsuapi_dissect_struct_package_PrimaryKerberosKey3(tvbuff_t *tvb _U_, int offset //offset = drsuapi_dissect_element_package_PrimaryKerberosKey3_value_ofs(tvb, offset, pinfo, tree, di, drep); offset = PIDL_dissect_uint32_val(tvb, offset, pinfo, tree, di, drep, hf_drsuapi_package_PrimaryKerberosKey3_value_ofs, 0, &value_ofs); - //offset = drsuapi_dissect_element_package_PrimaryKerberosKey3_value(tvb, offset, pinfo, tree, di, drep, &value_len); + if (value_ofs != 0 && tvb_bytes_exist(tvb, value_ofs, value_len)) { + drsuapi_dissect_element_package_PrimaryKerberosKey3_value(tvb, value_ofs, pinfo, tree, di, drep, &value_len); + } proto_item_set_len(item, offset-old_offset); @@ -319,6 +337,22 @@ drsuapi_dissect_element_package_PrimaryKerberosCtr4_older_keys_(tvbuff_t *tvb _U return offset; } +static int +drsuapi_dissect_element_package_PrimaryKerberosKey4_value(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, guint32 *value_len) +{ + return drsuapi_dissect_element_package_PrimaryKerberosKey4_value_(tvb, offset, pinfo, tree, di, drep, value_len); +} + +static int +drsuapi_dissect_element_package_PrimaryKerberosKey4_value_(tvbuff_t *tvb _U_, int offset _U_, packet_info *pinfo _U_, proto_tree *tree _U_, dcerpc_info* di _U_, guint8 *drep _U_, guint32 *value_len) +{ + tvbuff_t *subtvb = tvb_new_subset_length(tvb, offset, *value_len); + + offset += dissect_ndr_datablob(subtvb, 0, pinfo, tree, di, drep, hf_drsuapi_package_PrimaryKerberosKey4_value, 1); + + return offset; +} + int drsuapi_dissect_struct_package_PrimaryKerberosKey4(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_) { @@ -355,7 +389,15 @@ drsuapi_dissect_struct_package_PrimaryKerberosKey4(tvbuff_t *tvb _U_, int offset //offset = drsuapi_dissect_element_package_PrimaryKerberosKey4_value_ofs(tvb, offset, pinfo, tree, di, drep); offset = PIDL_dissect_uint32_val(tvb, offset, pinfo, tree, di, drep, hf_drsuapi_package_PrimaryKerberosKey4_value_ofs, 0, &value_ofs); - //offset = drsuapi_dissect_element_package_PrimaryKerberosKey4_value(tvb, offset, pinfo, tree, di, drep, &value_len); + if (value_ofs != 0 && tvb_bytes_exist(tvb, value_ofs, value_len)) { + drsuapi_dissect_element_package_PrimaryKerberosKey4_value(tvb, value_ofs, pinfo, tree, di, drep, &value_len); + } + + proto_item_set_len(item, offset-old_offset); + + if (di->call_data->flags & DCERPC_IS_NDR64) { + ALIGN_TO_4_BYTES; + } return offset; } -- 2.11.4.GIT