diff options
author | Richard Sharpe <sharpe@ns.aus.com> | 2002-11-08 19:25:42 +0000 |
---|---|---|
committer | Richard Sharpe <sharpe@ns.aus.com> | 2002-11-08 19:25:42 +0000 |
commit | d15a388dedf90986d71bc296b4b9619fe8dc48d0 (patch) | |
tree | 5cfbca8f424b42fa23c2c0bef581a3771092912c /packet-dcerpc-spoolss.c | |
parent | 9f9e93fe79ba5b2d7d5ba9c5026afeefea802fe5 (diff) |
Another patch from Jim McDonough.
svn path=/trunk/; revision=6586
Diffstat (limited to 'packet-dcerpc-spoolss.c')
-rw-r--r-- | packet-dcerpc-spoolss.c | 50 |
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) |