diff options
Diffstat (limited to 'epan/dissectors/packet-dcerpc-netlogon.c')
-rw-r--r-- | epan/dissectors/packet-dcerpc-netlogon.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/epan/dissectors/packet-dcerpc-netlogon.c b/epan/dissectors/packet-dcerpc-netlogon.c index 667304bf9e..abbe759d1f 100644 --- a/epan/dissectors/packet-dcerpc-netlogon.c +++ b/epan/dissectors/packet-dcerpc-netlogon.c @@ -1519,7 +1519,45 @@ netlogon_dissect_PAC_LOGON_INFO(tvbuff_t *tvb, int offset, return offset; } +static int +netlogon_dissect_CONSTRAINED_DELEGATION_name(tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + guint8 *drep) +{ + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_unknown_string, 0); + + return offset; +} + +static int +netlogon_dissect_CONSTRAINED_DELEGATION_array(tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + guint8 *drep) +{ + offset = dissect_ndr_ucarray(tvb, offset, pinfo, tree, drep, + netlogon_dissect_CONSTRAINED_DELEGATION_name); + + return offset; +} + +int +netlogon_dissect_PAC_CONSTRAINED_DELEGATION(tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + guint8 *drep) +{ + offset = dissect_ndr_counted_string(tvb, offset, pinfo, tree, drep, + hf_netlogon_unknown_string, 0); + + offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, + hf_netlogon_unknown_long, NULL); + offset = dissect_ndr_pointer(tvb, offset, pinfo, tree, drep, + netlogon_dissect_CONSTRAINED_DELEGATION_array, NDR_POINTER_UNIQUE, + "names:", -1); + + return offset; +} static int netlogon_dissect_PAC(tvbuff_t *tvb, int offset, |