aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-dcerpc-spoolss.c
diff options
context:
space:
mode:
authorGünther Deschner <gd@samba.org>2016-09-23 01:42:28 +0200
committerAnders Broman <a.broman58@gmail.com>2019-12-20 07:26:01 +0000
commit1129114c55434e1c8eaa617ebc14cbedb5ea94d0 (patch)
treee8d590b7116b95ecbb185afcc4cdbd15383bf648 /epan/dissectors/packet-dcerpc-spoolss.c
parent641d193ca6478fade923efa2fd1bc4b06b85057a (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.c64
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,