aboutsummaryrefslogtreecommitdiffstats
path: root/packet-dcerpc-spoolss.c
diff options
context:
space:
mode:
authorRichard Sharpe <sharpe@ns.aus.com>2002-11-08 19:25:42 +0000
committerRichard Sharpe <sharpe@ns.aus.com>2002-11-08 19:25:42 +0000
commitd15a388dedf90986d71bc296b4b9619fe8dc48d0 (patch)
tree5cfbca8f424b42fa23c2c0bef581a3771092912c /packet-dcerpc-spoolss.c
parent9f9e93fe79ba5b2d7d5ba9c5026afeefea802fe5 (diff)
Another patch from Jim McDonough.
svn path=/trunk/; revision=6586
Diffstat (limited to 'packet-dcerpc-spoolss.c')
-rw-r--r--packet-dcerpc-spoolss.c50
1 files changed, 26 insertions, 24 deletions
diff --git a/packet-dcerpc-spoolss.c b/packet-dcerpc-spoolss.c
index 7616983c82..1a921f9594 100644
--- a/packet-dcerpc-spoolss.c
+++ b/packet-dcerpc-spoolss.c
@@ -2,7 +2,7 @@
* Routines for SMB \PIPE\spoolss packet disassembly
* Copyright 2001-2002, Tim Potter <tpot@samba.org>
*
- * $Id: packet-dcerpc-spoolss.c,v 1.54 2002/11/07 17:45:30 sharpe Exp $
+ * $Id: packet-dcerpc-spoolss.c,v 1.55 2002/11/08 19:25:42 sharpe Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@@ -584,29 +584,6 @@ dissect_spoolss_buffer(tvbuff_t *tvb, gint offset, packet_info *pinfo,
return offset;
}
-static int
-dissect_spoolss_keybuffer(tvbuff_t *tvb, int offset, packet_info *pinfo,
- proto_tree *tree, char *drep)
-{
- dcerpc_info *di = pinfo->private_data;
- guint32 size;
-
- if (di->conformant_run)
- return offset;
-
- /* Dissect size and data */
-
- offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
- hf_spoolss_keybuffer_size, &size);
-
- if (size)
- offset = dissect_ndr_uint16s(tvb, offset, pinfo, tree, drep,
- hf_spoolss_keybuffer_data, size,
- NULL);
-
- return offset;
-}
-
/*
* New system for handling pointers and buffers. We act more like the NDR
* specification and have a list of deferred pointers which are processed
@@ -5792,6 +5769,31 @@ static int SpoolssRouterReplyPrinter_r(tvbuff_t *tvb, int offset, packet_info *p
return offset;
}
+static int
+dissect_spoolss_keybuffer(tvbuff_t *tvb, int offset, packet_info *pinfo,
+ proto_tree *tree, char *drep)
+{
+ dcerpc_info *di = pinfo->private_data;
+ guint32 size, key_start;
+
+ if (di->conformant_run)
+ return offset;
+
+ /* Dissect size and data */
+
+ offset = dissect_ndr_uint32(tvb, offset, pinfo, tree, drep,
+ hf_spoolss_keybuffer_size, &size);
+
+ key_start = offset;
+ while (key_start + (size*2) > offset) {
+ offset = prs_uint16uni(tvb, offset, pinfo, tree,
+ NULL, "Key");
+ }
+
+ return offset;
+}
+
+
static int SpoolssEnumPrinterKey_q(tvbuff_t *tvb, int offset,
packet_info *pinfo, proto_tree *tree,
char *drep)