diff options
author | Günther Deschner <gd@samba.org> | 2016-09-23 01:42:28 +0200 |
---|---|---|
committer | Anders Broman <a.broman58@gmail.com> | 2019-12-20 07:26:01 +0000 |
commit | 1129114c55434e1c8eaa617ebc14cbedb5ea94d0 (patch) | |
tree | e8d590b7116b95ecbb185afcc4cdbd15383bf648 /epan/dissectors/packet-dcerpc-spoolss.c | |
parent | 641d193ca6478fade923efa2fd1bc4b06b85057a (diff) |
DCERPC: implement GetPrinterDriverPackagePath in DCE/RPC spoolss dissector
Guenther
Change-Id: I62392e0df5aa2ce8cc7e16d0318d1d1288df2599
Signed-off-by: Guenther Deschner <gd@samba.org>
Reviewed-on: https://code.wireshark.org/review/35486
Reviewed-by: Alexis La Goutte <alexis.lagoutte@gmail.com>
Petri-Dish: Alexis La Goutte <alexis.lagoutte@gmail.com>
Petri-Dish: Anders Broman <a.broman58@gmail.com>
Tested-by: Petri Dish Buildbot
Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-dcerpc-spoolss.c')
-rw-r--r-- | epan/dissectors/packet-dcerpc-spoolss.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/epan/dissectors/packet-dcerpc-spoolss.c b/epan/dissectors/packet-dcerpc-spoolss.c index 711b4cf6ef..cb2304d631 100644 --- a/epan/dissectors/packet-dcerpc-spoolss.c +++ b/epan/dissectors/packet-dcerpc-spoolss.c @@ -108,6 +108,8 @@ static int hf_core_driver_size = -1; static int hf_driver_version = -1; static int hf_core_printer_driver_count = -1; static int hf_package_id = -1; +static int hf_language = -1; +static int hf_driver_package_cab_size = -1; /* Printer information */ @@ -6640,6 +6642,58 @@ SpoolssGetCorePrinterDrivers_r(tvbuff_t *tvb, int offset, return offset; } +static int +SpoolssGetPrinterDriverPackagePath_q(tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + /* Parse packet */ + + offset = dissect_ndr_str_pointer_item( + tvb, offset, pinfo, tree, di, drep, NDR_POINTER_UNIQUE, + "Name", hf_servername, 0); + + offset = dissect_ndr_str_pointer_item( + tvb, offset, pinfo, tree, di, drep, NDR_POINTER_REF, + "Environment", hf_environment, 0); + + offset = dissect_ndr_str_pointer_item( + tvb, offset, pinfo, tree, di, drep, NDR_POINTER_UNIQUE, + "Language", hf_language, 0); + + offset = dissect_ndr_str_pointer_item( + tvb, offset, pinfo, tree, di, drep, NDR_POINTER_REF, + "PackageId", hf_package_id, 0); + + offset = dissect_spoolss_buffer( + tvb, offset, pinfo, tree, di, drep, NULL); + + offset = dissect_ndr_uint32( + tvb, offset, pinfo, tree, di, drep, + hf_driver_package_cab_size, NULL); + + return offset; +} + +static int +SpoolssGetPrinterDriverPackagePath_r(tvbuff_t *tvb, int offset, + packet_info *pinfo, proto_tree *tree, + dcerpc_info *di, guint8 *drep) +{ + /* Parse packet */ + + offset = dissect_spoolss_string_parm( + tvb, offset, pinfo, tree, di, drep, "DriverPackageCab"); + + offset = dissect_ndr_uint32( + tvb, offset, pinfo, tree, di, drep, hf_needed, NULL); + + offset = dissect_hresult( + tvb, offset, pinfo, tree, di, drep, hf_hresult, NULL); + + return offset; +} + /* * List of subdissectors for this pipe. */ @@ -6809,6 +6863,8 @@ static dcerpc_sub_dissector dcerpc_spoolss_dissectors[] = { NULL, SpoolssGeneric_r }, { SPOOLSS_GETCOREPRINTERDRIVERS, "GetCorePrinterDrivers", SpoolssGetCorePrinterDrivers_q, SpoolssGetCorePrinterDrivers_r }, + { SPOOLSS_GETPRINTERDRIVERPACKAGEPATH, "GetPrinterDriverPackagePath", + SpoolssGetPrinterDriverPackagePath_q, SpoolssGetPrinterDriverPackagePath_r }, { 0, NULL, NULL, NULL }, }; @@ -7133,6 +7189,14 @@ proto_register_dcerpc_spoolss(void) { "PackageId", "spoolss.package_id", FT_STRING, BASE_NONE, NULL, 0, NULL, HFILL }}, + { &hf_language, + { "Language name", "spoolss.language", FT_STRING, + BASE_NONE, NULL, 0, NULL, HFILL }}, + + { &hf_driver_package_cab_size, + { "Driver Package Cabinet Size", "spoolss.driver_package_cab_size", FT_UINT32, + BASE_DEC, NULL, 0, NULL, HFILL }}, + /* Printer data */ { &hf_printerdata, |