aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Potter <tpot@samba.org>2002-05-01 05:28:56 +0000
committerTim Potter <tpot@samba.org>2002-05-01 05:28:56 +0000
commitf7965cfaabc720d391c133ebe9c657c03534aa45 (patch)
treed00f58c725de2532244093c9fa158b1d53ab83a3
parent573530d0e2bdd6b2f808b6baf6cca8a2be7fe0aa (diff)
Start of support for setprinter calls. Currently on setprinter level 3 is
decoded properly. Add printer name to COL_INFO field in ClosePrinter request. svn path=/trunk/; revision=5322
-rw-r--r--packet-dcerpc-spoolss.c77
1 files changed, 69 insertions, 8 deletions
diff --git a/packet-dcerpc-spoolss.c b/packet-dcerpc-spoolss.c
index 9588f57626..c1dab8bdae 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.23 2002/04/30 23:48:15 guy Exp $
+ * $Id: packet-dcerpc-spoolss.c,v 1.24 2002/05/01 05:28:56 tpot Exp $
*
* Ethereal - Network traffic analyzer
* By Gerald Combs <gerald@ethereal.com>
@@ -244,6 +244,7 @@ static int SpoolssClosePrinter_q(tvbuff_t *tvb, int offset,
dcerpc_info *di = (dcerpc_info *)pinfo->private_data;
dcerpc_call_value *dcv = (dcerpc_call_value *)di->call_data;
const guint8 *policy_hnd;
+ char *pol_name;
if (dcv->rep_frame != 0)
proto_tree_add_text(tree, tvb, offset, 0,
@@ -252,6 +253,12 @@ static int SpoolssClosePrinter_q(tvbuff_t *tvb, int offset,
offset = prs_policy_hnd(tvb, offset, pinfo, NULL, &policy_hnd);
+ dcerpc_smb_fetch_pol(policy_hnd, &pol_name, 0, 0);
+
+ if (check_col(pinfo->cinfo, COL_INFO) && pol_name)
+ col_append_fstr(pinfo->cinfo, COL_INFO, ", %s",
+ pol_name);
+
dcerpc_smb_store_pol(policy_hnd, NULL, 0, pinfo->fd->num);
display_pol(tree, tvb, offset - 20, policy_hnd);
@@ -1669,6 +1676,34 @@ static int SpoolssGetPrinter_r(tvbuff_t *tvb, int offset, packet_info *pinfo,
}
/*
+ * SEC_DESC_BUF
+ */
+
+static gint ett_SEC_DESC_BUF = -1;
+
+static int prs_SEC_DESC_BUF(tvbuff_t *tvb, int offset, packet_info *pinfo,
+ proto_tree *tree, GList **dp_list, void **Data)
+{
+ proto_item *item;
+ proto_tree *subtree;
+ guint32 len;
+
+ item = proto_tree_add_text(tree, tvb, offset, 0, "SEC_DESC_BUF");
+
+ subtree = proto_item_add_subtree(item, ett_SEC_DESC_BUF);
+
+ offset = prs_uint32(tvb, offset, pinfo, subtree, &len, "Max length");
+ offset = prs_uint32(tvb, offset, pinfo, subtree, NULL, "Undocumented");
+ offset = prs_uint32(tvb, offset, pinfo, subtree, NULL, "Length");
+
+ dissect_nt_sec_desc(tvb, pinfo, offset, subtree, len);
+
+ offset += len;
+
+ return offset;
+}
+
+/*
* SPOOL_PRINTER_INFO_LEVEL
*/
@@ -1689,11 +1724,41 @@ static int prs_SPOOL_PRINTER_INFO_LEVEL(tvbuff_t *tvb, int offset,
offset = prs_uint32(tvb, offset, pinfo, subtree, &level, "Level");
- /* ptr */
-
switch(level) {
+ case 3: {
+ guint32 ptr;
+
+ offset = prs_ptr(tvb, offset, pinfo, subtree, &ptr,
+ "Devicemode container");
+
+ if (ptr)
+ defer_ptr(dp_list, prs_DEVMODE_CTR, subtree);
+
+ offset = prs_ptr(tvb, offset, pinfo, subtree, &ptr,
+ "Security descriptor");
+
+ if (ptr)
+ defer_ptr(dp_list, prs_SEC_DESC_BUF, subtree);
+
+ break;
}
+ case 2: {
+ guint32 ptr;
+
+ offset = prs_ptr(tvb, offset, pinfo, subtree, &ptr, "Info");
+ if (ptr)
+ defer_ptr(dp_list, prs_PRINTER_INFO_2, subtree);
+
+ break;
+ }
+ default:
+ proto_tree_add_text(subtree, tvb, offset, 0,
+ "[Unknown info level %d]", level);
+ break;
+ }
+
+done:
return offset;
}
@@ -1724,15 +1789,10 @@ static int SpoolssSetPrinter_q(tvbuff_t *tvb, int offset, packet_info *pinfo,
if (check_col(pinfo->cinfo, COL_INFO))
col_append_fstr(pinfo->cinfo, COL_INFO, ", level %d", level);
- /* printer_info_level */
-
offset = prs_struct_and_referents(tvb, offset, pinfo, tree,
prs_SPOOL_PRINTER_INFO_LEVEL,
NULL, NULL);
- /* devmode_ctr */
-
-
offset = prs_uint32(tvb, offset, pinfo, tree, NULL, "Command");
dcerpc_smb_check_long_frame(tvb, offset, pinfo, tree);
@@ -3016,6 +3076,7 @@ proto_register_dcerpc_spoolss(void)
&ett_FORM_1,
&ett_JOB_INFO_1,
&ett_JOB_INFO_2,
+ &ett_SEC_DESC_BUF,
};
proto_dcerpc_spoolss = proto_register_protocol(