summaryrefslogtreecommitdiffstats
path: root/source/rpc_parse/parse_spoolss.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/rpc_parse/parse_spoolss.c')
-rw-r--r--source/rpc_parse/parse_spoolss.c907
1 files changed, 188 insertions, 719 deletions
diff --git a/source/rpc_parse/parse_spoolss.c b/source/rpc_parse/parse_spoolss.c
index 783dd97ebf5..2b865c7f3cb 100644
--- a/source/rpc_parse/parse_spoolss.c
+++ b/source/rpc_parse/parse_spoolss.c
@@ -24,9 +24,6 @@
#include "includes.h"
-#undef DBGC_CLASS
-#define DBGC_CLASS DBGC_RPC_PARSE
-
/*******************************************************************
return the length of a UNISTR string.
********************************************************************/
@@ -48,7 +45,7 @@ static uint32 str_len_uni(UNISTR *source)
This should be moved in a more generic lib.
********************************************************************/
-BOOL spoolss_io_system_time(char *desc, prs_struct *ps, int depth, SYSTEMTIME *systime)
+static BOOL spoolss_io_system_time(char *desc, prs_struct *ps, int depth, SYSTEMTIME *systime)
{
if(!prs_uint16("year", ps, depth, &systime->year))
return False;
@@ -322,74 +319,55 @@ reads or writes an NOTIFY INFO DATA structure.
static BOOL smb_io_notify_info_data(char *desc,SPOOL_NOTIFY_INFO_DATA *data, prs_struct *ps, int depth)
{
- uint32 useless_ptr=0x0FF0ADDE;
+ uint32 useless_ptr=0xADDE0FF0;
+ uint32 how_many_words;
+ BOOL isvalue;
+ uint32 x;
+
prs_debug(ps, depth, desc, "smb_io_notify_info_data");
depth++;
+ how_many_words=data->size;
+ if (how_many_words==POINTER) {
+ how_many_words=TWO_VALUE;
+ }
+
+ isvalue=data->enc_type;
+
if(!prs_align(ps))
return False;
if(!prs_uint16("type", ps, depth, &data->type))
return False;
if(!prs_uint16("field", ps, depth, &data->field))
return False;
+ /*prs_align(ps);*/
- if(!prs_uint32("how many words", ps, depth, &data->size))
+ if(!prs_uint32("how many words", ps, depth, &how_many_words))
return False;
if(!prs_uint32("id", ps, depth, &data->id))
return False;
- if(!prs_uint32("how many words", ps, depth, &data->size))
+ if(!prs_uint32("how many words", ps, depth, &how_many_words))
return False;
- switch (data->enc_type) {
-
- /* One and two value data has two uint32 values */
- case NOTIFY_ONE_VALUE:
- case NOTIFY_TWO_VALUE:
+ /*prs_align(ps);*/
+ if (isvalue==True) {
if(!prs_uint32("value[0]", ps, depth, &data->notify_data.value[0]))
return False;
if(!prs_uint32("value[1]", ps, depth, &data->notify_data.value[1]))
return False;
- break;
-
- /* Pointers and strings have a string length and a
- pointer. For a string the length is expressed as
- the number of uint16 characters plus a trailing
- \0\0. */
-
- case NOTIFY_POINTER:
-
- if(!prs_uint32("string length", ps, depth, &data->notify_data.data.length ))
- return False;
- if(!prs_uint32("pointer", ps, depth, &useless_ptr))
- return False;
-
- break;
-
- case NOTIFY_STRING:
-
- if(!prs_uint32("string length", ps, depth, &data->notify_data.data.length))
+ /*prs_align(ps);*/
+ } else {
+ /* it's a string */
+ /* length in ascii including \0 */
+ x=2*(data->notify_data.data.length+1);
+ if(!prs_uint32("string length", ps, depth, &x ))
return False;
-
if(!prs_uint32("pointer", ps, depth, &useless_ptr))
return False;
-
- break;
-
- case NOTIFY_SECDESC:
- if( !prs_uint32( "sd size", ps, depth, &data->notify_data.sd.size ) )
- return False;
- if( !prs_uint32( "pointer", ps, depth, &useless_ptr ) )
- return False;
-
- break;
-
- default:
- DEBUG(3, ("invalid enc_type %d for smb_io_notify_info_data\n",
- data->enc_type));
- break;
+ /*prs_align(ps);*/
}
return True;
@@ -402,86 +380,22 @@ reads or writes an NOTIFY INFO DATA structure.
BOOL smb_io_notify_info_data_strings(char *desc,SPOOL_NOTIFY_INFO_DATA *data,
prs_struct *ps, int depth)
{
+ uint32 x;
+ BOOL isvalue;
+
prs_debug(ps, depth, desc, "smb_io_notify_info_data_strings");
depth++;
if(!prs_align(ps))
return False;
- switch(data->enc_type) {
-
- /* No data for values */
-
- case NOTIFY_ONE_VALUE:
- case NOTIFY_TWO_VALUE:
-
- break;
-
- /* Strings start with a length in uint16s */
-
- case NOTIFY_STRING:
-
- if (UNMARSHALLING(ps)) {
- data->notify_data.data.string =
- (uint16 *)prs_alloc_mem(ps, data->notify_data.data.length);
-
- if (!data->notify_data.data.string)
- return False;
- }
-
- if (MARSHALLING(ps))
- data->notify_data.data.length /= 2;
-
- if(!prs_uint32("string length", ps, depth, &data->notify_data.data.length))
- return False;
-
- if (!prs_uint16uni(True, "string", ps, depth, data->notify_data.data.string,
- data->notify_data.data.length))
- return False;
-
- if (MARSHALLING(ps))
- data->notify_data.data.length *= 2;
-
- break;
-
- case NOTIFY_POINTER:
-
- if (UNMARSHALLING(ps)) {
- data->notify_data.data.string =
- (uint16 *)prs_alloc_mem(ps, data->notify_data.data.length);
-
- if (!data->notify_data.data.string)
- return False;
- }
-
- if(!prs_uint8s(True,"buffer",ps,depth,(uint8*)data->notify_data.data.string,data->notify_data.data.length))
- return False;
-
- break;
-
- case NOTIFY_SECDESC:
- if( !prs_uint32("secdesc size ", ps, depth, &data->notify_data.sd.size ) )
- return False;
- if ( !sec_io_desc( "sec_desc", &data->notify_data.sd.desc, ps, depth ) )
- return False;
- break;
-
- default:
- DEBUG(3, ("invalid enc_type %d for smb_io_notify_info_data_strings\n",
- data->enc_type));
- break;
- }
+ isvalue=data->enc_type;
-#if 0
if (isvalue==False) {
-
/* length of string in unicode include \0 */
x=data->notify_data.data.length+1;
-
- if (data->field != 16)
if(!prs_uint32("string length", ps, depth, &x ))
return False;
-
if (MARSHALLING(ps)) {
/* These are already in little endian format. Don't byte swap. */
if (x == 1) {
@@ -495,10 +409,6 @@ BOOL smb_io_notify_info_data_strings(char *desc,SPOOL_NOTIFY_INFO_DATA *data,
if(!prs_uint8s(True,"string",ps,depth, (uint8 *)&data->notify_data.data.length,x*2))
return False;
} else {
-
- if (data->field == 16)
- x /= 2;
-
if(!prs_uint16uni(True,"string",ps,depth,data->notify_data.data.string,x))
return False;
}
@@ -514,9 +424,6 @@ BOOL smb_io_notify_info_data_strings(char *desc,SPOOL_NOTIFY_INFO_DATA *data,
return False;
}
}
-
-#endif
-
#if 0 /* JERRY */
/* Win2k does not seem to put this parse align here */
if(!prs_align(ps))
@@ -659,7 +566,7 @@ BOOL spoolss_io_devmode(char *desc, prs_struct *ps, int depth, DEVICEMODE *devmo
{ "panningheight", NULL }
};
- /* assign at run time to keep non-gcc compilers happy */
+ /* assign at run time to keep non-gcc vompilers happy */
opt_fields[0].field = &devmode->icmmethod;
opt_fields[1].field = &devmode->icmintent;
@@ -684,17 +591,15 @@ BOOL spoolss_io_devmode(char *desc, prs_struct *ps, int depth, DEVICEMODE *devmo
return False;
if (!prs_uint16("specversion", ps, depth, &devmode->specversion))
- return False;
+ return False;
/* Sanity Check - look for unknown specversions, but don't fail if we see one.
Let the size determine that */
switch (devmode->specversion) {
- /* list of observed spec version's */
case 0x0320:
case 0x0400:
case 0x0401:
- case 0x040d:
break;
default:
@@ -777,13 +682,13 @@ BOOL spoolss_io_devmode(char *desc, prs_struct *ps, int depth, DEVICEMODE *devmo
DEBUG(0,("spoolss_io_devmode: please report to samba-technical@samba.org!\n"));
return False;
}
-
+
/*
* Conditional parsing. Assume that the DeviceMode has been
* zero'd by the caller.
*/
-
- while ((available_space > 0) && (i < DM_NUM_OPTIONAL_FIELDS))
+
+ while ((available_space > 0) && (i < DM_NUM_OPTIONAL_FIELDS))
{
DEBUG(10, ("spoolss_io_devmode: [%d] bytes left to parse in devmode\n", available_space));
if (!prs_uint32(opt_fields[i].name, ps, depth, opt_fields[i].field))
@@ -794,7 +699,7 @@ BOOL spoolss_io_devmode(char *desc, prs_struct *ps, int depth, DEVICEMODE *devmo
/* Sanity Check - we should no available space at this point unless
MS changes the device mode structure */
-
+
if (available_space) {
DEBUG(0,("spoolss_io_devmode: I've parsed all I know and there is still stuff left|\n"));
DEBUG(0,("spoolss_io_devmode: available_space = [%d], devmode_size = [%d]!\n",
@@ -802,7 +707,7 @@ BOOL spoolss_io_devmode(char *desc, prs_struct *ps, int depth, DEVICEMODE *devmo
DEBUG(0,("spoolss_io_devmode: please report to samba-technical@samba.org!\n"));
return False;
}
-
+
if (devmode->driverextra!=0) {
if (UNMARSHALLING(ps)) {
@@ -1097,11 +1002,11 @@ BOOL spoolss_io_r_open_printer(char *desc, SPOOL_R_OPEN_PRINTER *r_u, prs_struct
return False;
if (!smb_io_pol_hnd("printer handle",&(r_u->handle),ps,depth))
- return False;
+ return False;
if (!prs_werror("status code", ps, depth, &(r_u->status)))
return False;
-
+
return True;
}
@@ -1132,12 +1037,12 @@ BOOL spoolss_io_q_open_printer_ex(char *desc, SPOOL_Q_OPEN_PRINTER_EX *q_u, prs_
if (!spoolss_io_printer_default("", &q_u->printer_default, ps, depth))
return False;
-
+
if (!prs_uint32("user_switch", ps, depth, &q_u->user_switch))
return False;
if (!spool_io_user_level("", &q_u->user_ctr, ps, depth))
return False;
-
+
return True;
}
@@ -1197,35 +1102,15 @@ BOOL make_spoolss_q_deleteprinterdriver(
********************************************************************/
BOOL make_spoolss_q_getprinterdata(SPOOL_Q_GETPRINTERDATA *q_u,
- const POLICY_HND *handle,
- char *valuename, uint32 size)
+ const POLICY_HND *handle,
+ UNISTR2 *valuename, uint32 size)
{
if (q_u == NULL) return False;
DEBUG(5,("make_spoolss_q_getprinterdata\n"));
q_u->handle = *handle;
- init_unistr2(&q_u->valuename, valuename, strlen(valuename) + 1);
- q_u->size = size;
-
- return True;
-}
-
-/*******************************************************************
- * make a structure.
- ********************************************************************/
-
-BOOL make_spoolss_q_getprinterdataex(SPOOL_Q_GETPRINTERDATAEX *q_u,
- const POLICY_HND *handle,
- char *keyname, char *valuename, uint32 size)
-{
- if (q_u == NULL) return False;
-
- DEBUG(5,("make_spoolss_q_getprinterdataex\n"));
-
- q_u->handle = *handle;
- init_unistr2(&q_u->valuename, valuename, strlen(valuename) + 1);
- init_unistr2(&q_u->keyname, keyname, strlen(keyname) + 1);
+ copy_unistr2(&q_u->valuename, valuename);
q_u->size = size;
return True;
@@ -1301,48 +1186,6 @@ BOOL spoolss_io_r_deleteprinterdata(char *desc, SPOOL_R_DELETEPRINTERDATA *r_u,
}
/*******************************************************************
- * read a structure.
- * called from spoolss_q_deleteprinterdataex (srv_spoolss.c)
- ********************************************************************/
-
-BOOL spoolss_io_q_deleteprinterdataex(char *desc, SPOOL_Q_DELETEPRINTERDATAEX *q_u, prs_struct *ps, int depth)
-{
- if (q_u == NULL)
- return False;
-
- prs_debug(ps, depth, desc, "spoolss_io_q_deleteprinterdataex");
- depth++;
-
- if (!prs_align(ps))
- return False;
- if (!smb_io_pol_hnd("printer handle", &q_u->handle, ps, depth))
- return False;
-
- if (!smb_io_unistr2("keyname ", &q_u->keyname, True, ps, depth))
- return False;
- if (!smb_io_unistr2("valuename", &q_u->valuename, True, ps, depth))
- return False;
-
- return True;
-}
-
-/*******************************************************************
- * write a structure.
- * called from spoolss_r_deleteprinterdataex (srv_spoolss.c)
- ********************************************************************/
-
-BOOL spoolss_io_r_deleteprinterdataex(char *desc, SPOOL_R_DELETEPRINTERDATAEX *r_u, prs_struct *ps, int depth)
-{
- prs_debug(ps, depth, desc, "spoolss_io_r_deleteprinterdataex");
- depth++;
-
- if(!prs_werror("status", ps, depth, &r_u->status))
- return False;
-
- return True;
-}
-
-/*******************************************************************
* write a structure.
* called from spoolss_r_getprinterdata (srv_spoolss.c)
********************************************************************/
@@ -1362,12 +1205,6 @@ BOOL spoolss_io_r_getprinterdata(char *desc, SPOOL_R_GETPRINTERDATA *r_u, prs_st
if (!prs_uint32("size", ps, depth, &r_u->size))
return False;
- if (UNMARSHALLING(ps) && r_u->size) {
- r_u->data = prs_alloc_mem(ps, r_u->size);
- if(!r_u->data)
- return False;
- }
-
if (!prs_uint8s(False,"data", ps, depth, r_u->data, r_u->size))
return False;
@@ -1529,64 +1366,6 @@ BOOL spoolss_io_r_deleteprinterdriver(char *desc, SPOOL_R_DELETEPRINTERDRIVER *r
}
-/*******************************************************************
- * read a structure.
- * called from api_spoolss_deleteprinterdriver (srv_spoolss.c)
- * called from spoolss_deleteprinterdriver (cli_spoolss.c)
- ********************************************************************/
-
-BOOL spoolss_io_q_deleteprinterdriverex(char *desc, SPOOL_Q_DELETEPRINTERDRIVEREX *q_u, prs_struct *ps, int depth)
-{
- if (q_u == NULL) return False;
-
- prs_debug(ps, depth, desc, "spoolss_io_q_deleteprinterdriverex");
- depth++;
-
- if (!prs_align(ps))
- return False;
-
- if(!prs_uint32("server_ptr", ps, depth, &q_u->server_ptr))
- return False;
- if(!smb_io_unistr2("server", &q_u->server, q_u->server_ptr, ps, depth))
- return False;
- if(!smb_io_unistr2("arch", &q_u->arch, True, ps, depth))
- return False;
- if(!smb_io_unistr2("driver", &q_u->driver, True, ps, depth))
- return False;
-
- if (!prs_align(ps))
- return False;
-
- if(!prs_uint32("delete_flags ", ps, depth, &q_u->delete_flags))
- return False;
- if(!prs_uint32("version ", ps, depth, &q_u->version))
- return False;
-
-
- return True;
-}
-
-
-/*******************************************************************
- * write a structure.
- ********************************************************************/
-BOOL spoolss_io_r_deleteprinterdriverex(char *desc, SPOOL_R_DELETEPRINTERDRIVEREX *r_u, prs_struct *ps, int depth)
-{
- if (r_u == NULL) return False;
-
- prs_debug(ps, depth, desc, "spoolss_io_r_deleteprinterdriverex");
- depth++;
-
- if (!prs_align(ps))
- return False;
-
- if (!prs_werror("status", ps, depth, &r_u->status))
- return False;
-
- return True;
-}
-
-
/*******************************************************************
* read a structure.
@@ -2503,8 +2282,8 @@ BOOL smb_io_printer_info_2(char *desc, NEW_BUFFER *buffer, PRINTER_INFO_2 *info,
{
prs_struct *ps=&buffer->prs;
uint32 dm_offset, sd_offset, current_offset;
- uint32 dummy_value = 0, has_secdesc = 0;
-
+ uint32 dummy_value = 0;
+
prs_debug(ps, depth, desc, "smb_io_printer_info_2");
depth++;
@@ -2529,7 +2308,7 @@ BOOL smb_io_printer_info_2(char *desc, NEW_BUFFER *buffer, PRINTER_INFO_2 *info,
dm_offset = prs_offset(ps);
if (!prs_uint32("devmode", ps, depth, &dummy_value))
return False;
-
+
if (!smb_io_relstr("sepfile", buffer, depth, &info->sepfile))
return False;
if (!smb_io_relstr("printprocessor", buffer, depth, &info->printprocessor))
@@ -2541,7 +2320,7 @@ BOOL smb_io_printer_info_2(char *desc, NEW_BUFFER *buffer, PRINTER_INFO_2 *info,
/* save current offset for the sec_desc */
sd_offset = prs_offset(ps);
- if (!prs_uint32("sec_desc", ps, depth, &has_secdesc))
+ if (!prs_uint32("sec_desc", ps, depth, &dummy_value))
return False;
@@ -2555,13 +2334,11 @@ BOOL smb_io_printer_info_2(char *desc, NEW_BUFFER *buffer, PRINTER_INFO_2 *info,
return False;
/* parse the sec_desc */
- if (has_secdesc) {
- if (!prs_set_offset(ps, sd_offset))
- return False;
- if (!smb_io_relsecdesc("secdesc", buffer, depth, &info->secdesc))
- return False;
- }
-
+ if (!prs_set_offset(ps, sd_offset))
+ return False;
+ if (!smb_io_relsecdesc("secdesc", buffer, depth, &info->secdesc))
+ return False;
+
/* pick up where we left off */
if (!prs_set_offset(ps, current_offset))
return False;
@@ -2583,6 +2360,13 @@ BOOL smb_io_printer_info_2(char *desc, NEW_BUFFER *buffer, PRINTER_INFO_2 *info,
if (!prs_uint32("averageppm", ps, depth, &info->averageppm))
return False;
+#if 0 /* JFMTEST */
+ if (!prs_uint32_post("secdesc_ptr", ps, depth, NULL, sec_offset, info->secdesc ? prs_offset(ps)-buffer->struct_start : 0 ))
+ return False;
+
+ if (!sec_io_desc("secdesc", &info->secdesc, ps, depth))
+ return False;
+#endif
return True;
}
@@ -3331,7 +3115,7 @@ return the size required by a struct in the stream
uint32 spoolss_size_printer_info_2(PRINTER_INFO_2 *info)
{
- uint32 size=0;
+ uint32 size=0;
size += 4;
@@ -3368,8 +3152,7 @@ uint32 spoolss_size_printer_info_2(PRINTER_INFO_2 *info)
* it is easier to maintain the calculation here and
* not place the burden on the caller to remember. --jerry
*/
- if ((size % 4) != 0)
- size += 4 - (size % 4);
+ size += size % 4;
return size;
}
@@ -3840,7 +3623,7 @@ BOOL spoolss_io_r_getprinterdriver2(char *desc, SPOOL_R_GETPRINTERDRIVER2 *r_u,
BOOL make_spoolss_q_enumprinters(
SPOOL_Q_ENUMPRINTERS *q_u,
uint32 flags,
- char *servername,
+ fstring servername,
uint32 level,
NEW_BUFFER *buffer,
uint32 offered
@@ -4158,7 +3941,7 @@ BOOL spoolss_io_q_setprinter(char *desc, SPOOL_Q_SETPRINTER *q_u, prs_struct *ps
if (!prs_uint32("size", ps, depth + 1, &dummy))
return False;
if (!prs_uint32("ptr", ps, depth + 1, &dummy)) return
- False;
+ False;
}
if(!prs_uint32("command", ps, depth, &q_u->command))
@@ -5078,56 +4861,60 @@ BOOL spool_io_printer_driver_info_level_6(char *desc, SPOOL_PRINTER_DRIVER_INFO_
if(!prs_align(ps))
return False;
- /*
- * I know this seems weird, but I have no other explanation.
- * This is observed behavior on both NT4 and 2K servers.
- * --jerry
- */
-
- if (!prs_align_uint64(ps))
- return False;
/* parse the main elements the packet */
- if(!prs_uint32("cversion ", ps, depth, &il->version))
- return False;
- if(!prs_uint32("name ", ps, depth, &il->name_ptr))
+ if(!prs_uint32("version", ps, depth, &il->version))
return False;
- if(!prs_uint32("environment ", ps, depth, &il->environment_ptr))
+
+ if(!prs_uint32("name_ptr", ps, depth, &il->name_ptr))
+ return False;
+ /*
+ * If name_ptr is NULL then the next 4 bytes are the name_ptr. A driver
+ * with a NULL name just isn't a driver For example: "HP LaserJet 4si"
+ * from W2K CDROM (which uses unidriver). JohnR 010205
+ */
+ if (!il->name_ptr) {
+ DEBUG(5,("spool_io_printer_driver_info_level_6: name_ptr is NULL! Get next value\n"));
+ if(!prs_uint32("name_ptr", ps, depth, &il->name_ptr))
+ return False;
+ }
+
+ if(!prs_uint32("environment_ptr", ps, depth, &il->environment_ptr))
return False;
- if(!prs_uint32("driverpath ", ps, depth, &il->driverpath_ptr))
+ if(!prs_uint32("driverpath_ptr", ps, depth, &il->driverpath_ptr))
return False;
- if(!prs_uint32("datafile ", ps, depth, &il->datafile_ptr))
+ if(!prs_uint32("datafile_ptr", ps, depth, &il->datafile_ptr))
return False;
- if(!prs_uint32("configfile ", ps, depth, &il->configfile_ptr))
+ if(!prs_uint32("configfile_ptr", ps, depth, &il->configfile_ptr))
return False;
- if(!prs_uint32("helpfile ", ps, depth, &il->helpfile_ptr))
+ if(!prs_uint32("helpfile_ptr", ps, depth, &il->helpfile_ptr))
return False;
- if(!prs_uint32("monitorname ", ps, depth, &il->monitorname_ptr))
+ if(!prs_uint32("monitorname_ptr", ps, depth, &il->monitorname_ptr))
return False;
- if(!prs_uint32("defaultdatatype", ps, depth, &il->defaultdatatype_ptr))
+ if(!prs_uint32("defaultdatatype_ptr", ps, depth, &il->defaultdatatype_ptr))
return False;
- if(!prs_uint32("dependentfiles ", ps, depth, &il->dependentfiles_len))
+ if(!prs_uint32("dependentfiles_len", ps, depth, &il->dependentfiles_len))
return False;
- if(!prs_uint32("dependentfiles ", ps, depth, &il->dependentfiles_ptr))
+ if(!prs_uint32("dependentfiles_ptr", ps, depth, &il->dependentfiles_ptr))
return False;
- if(!prs_uint32("previousnames ", ps, depth, &il->previousnames_len))
+ if(!prs_uint32("previousnames_len", ps, depth, &il->previousnames_len))
return False;
- if(!prs_uint32("previousnames ", ps, depth, &il->previousnames_ptr))
+ if(!prs_uint32("previousnames_ptr", ps, depth, &il->previousnames_ptr))
return False;
- if(!smb_io_time("driverdate ", &il->driverdate, ps, depth))
+ if(!smb_io_time("driverdate", &il->driverdate, ps, depth))
return False;
- if(!prs_uint32("dummy4 ", ps, depth, &il->dummy4))
+ if(!prs_uint32("dummy4", ps, depth, &il->dummy4))
return False;
- if(!prs_uint64("driverversion ", ps, depth, &il->driverversion))
+ if(!prs_uint64("driverversion", ps, depth, &il->driverversion))
return False;
- if(!prs_uint32("mfgname ", ps, depth, &il->mfgname_ptr))
+ if(!prs_uint32("mfgname_ptr", ps, depth, &il->mfgname_ptr))
return False;
- if(!prs_uint32("oemurl ", ps, depth, &il->oemurl_ptr))
+ if(!prs_uint32("oemurl_ptr", ps, depth, &il->oemurl_ptr))
return False;
- if(!prs_uint32("hardwareid ", ps, depth, &il->hardwareid_ptr))
+ if(!prs_uint32("hardwareid_ptr", ps, depth, &il->hardwareid_ptr))
return False;
- if(!prs_uint32("provider ", ps, depth, &il->provider_ptr))
+ if(!prs_uint32("provider_ptr", ps, depth, &il->provider_ptr))
return False;
/* parse the structures in the packet */
@@ -5223,7 +5010,7 @@ static BOOL uniarray_2_dosarray(BUFFER5 *buf5, fstring **ar)
*ar = NULL;
while (src < ((char *)buf5->buffer) + buf5->buf_len*2) {
- rpcstr_pull(f, src, sizeof(f)-1, -1, STR_TERMINATE);
+ unistr_to_dos(f, src, sizeof(f)-1);
src = skip_unibuf(src, 2*buf5->buf_len - PTR_DIFF(src,buf5->buffer));
tar = (fstring *)Realloc(*ar, sizeof(fstring)*(n+2));
if (!tar)
@@ -5320,7 +5107,7 @@ BOOL make_spoolss_q_addprinterdriver(TALLOC_CTX *mem_ctx,
case 3 :
make_spoolss_driver_info_3(mem_ctx, &q_u->info.info_3, info->info3);
break;
-
+
default:
DEBUG(0,("make_spoolss_q_addprinterdriver: Unknown info level [%d]\n", level));
break;
@@ -5330,7 +5117,7 @@ BOOL make_spoolss_q_addprinterdriver(TALLOC_CTX *mem_ctx,
}
BOOL make_spoolss_driver_info_3(TALLOC_CTX *mem_ctx,
- SPOOL_PRINTER_DRIVER_INFO_LEVEL_3 **spool_drv_info,
+ SPOOL_PRINTER_DRIVER_INFO_LEVEL_3 **spool_drv_info,
DRIVER_INFO_3 *info3)
{
uint32 len = 0;
@@ -5454,53 +5241,6 @@ BOOL spoolss_io_r_addprinterdriver(char *desc, SPOOL_R_ADDPRINTERDRIVER *q_u, pr
}
/*******************************************************************
- fill in the prs_struct for a ADDPRINTERDRIVER request PDU
- ********************************************************************/
-
-BOOL spoolss_io_q_addprinterdriverex(char *desc, SPOOL_Q_ADDPRINTERDRIVEREX *q_u, prs_struct *ps, int depth)
-{
- prs_debug(ps, depth, desc, "spoolss_io_q_addprinterdriverex");
- depth++;
-
- if(!prs_align(ps))
- return False;
-
- if(!prs_uint32("server_name_ptr", ps, depth, &q_u->server_name_ptr))
- return False;
- if(!smb_io_unistr2("server_name", &q_u->server_name, q_u->server_name_ptr, ps, depth))
- return False;
-
- if(!prs_align(ps))
- return False;
- if(!prs_uint32("info_level", ps, depth, &q_u->level))
- return False;
-
- if(!spool_io_printer_driver_info_level("", &q_u->info, ps, depth))
- return False;
-
- if(!prs_align(ps))
- return False;
- if(!prs_uint32("copy flags", ps, depth, &q_u->copy_flags))
- return False;
-
- return True;
-}
-
-/*******************************************************************
-********************************************************************/
-
-BOOL spoolss_io_r_addprinterdriverex(char *desc, SPOOL_R_ADDPRINTERDRIVEREX *q_u, prs_struct *ps, int depth)
-{
- prs_debug(ps, depth, desc, "spoolss_io_r_addprinterdriverex");
- depth++;
-
- if(!prs_werror("status", ps, depth, &q_u->status))
- return False;
-
- return True;
-}
-
-/*******************************************************************
********************************************************************/
BOOL uni_2_asc_printer_driver_3(SPOOL_PRINTER_DRIVER_INFO_LEVEL_3 *uni,
@@ -5522,14 +5262,14 @@ BOOL uni_2_asc_printer_driver_3(SPOOL_PRINTER_DRIVER_INFO_LEVEL_3 *uni,
d->cversion=uni->cversion;
- unistr2_to_ascii(d->name, &uni->name, sizeof(d->name)-1);
- unistr2_to_ascii(d->environment, &uni->environment, sizeof(d->environment)-1);
- unistr2_to_ascii(d->driverpath, &uni->driverpath, sizeof(d->driverpath)-1);
- unistr2_to_ascii(d->datafile, &uni->datafile, sizeof(d->datafile)-1);
- unistr2_to_ascii(d->configfile, &uni->configfile, sizeof(d->configfile)-1);
- unistr2_to_ascii(d->helpfile, &uni->helpfile, sizeof(d->helpfile)-1);
- unistr2_to_ascii(d->monitorname, &uni->monitorname, sizeof(d->monitorname)-1);
- unistr2_to_ascii(d->defaultdatatype, &uni->defaultdatatype, sizeof(d->defaultdatatype)-1);
+ unistr2_to_dos(d->name, &uni->name, sizeof(d->name)-1);
+ unistr2_to_dos(d->environment, &uni->environment, sizeof(d->environment)-1);
+ unistr2_to_dos(d->driverpath, &uni->driverpath, sizeof(d->driverpath)-1);
+ unistr2_to_dos(d->datafile, &uni->datafile, sizeof(d->datafile)-1);
+ unistr2_to_dos(d->configfile, &uni->configfile, sizeof(d->configfile)-1);
+ unistr2_to_dos(d->helpfile, &uni->helpfile, sizeof(d->helpfile)-1);
+ unistr2_to_dos(d->monitorname, &uni->monitorname, sizeof(d->monitorname)-1);
+ unistr2_to_dos(d->defaultdatatype, &uni->defaultdatatype, sizeof(d->defaultdatatype)-1);
DEBUGADD(8,( "version: %d\n", d->cversion));
DEBUGADD(8,( "name: %s\n", d->name));
@@ -5569,14 +5309,14 @@ BOOL uni_2_asc_printer_driver_6(SPOOL_PRINTER_DRIVER_INFO_LEVEL_6 *uni,
d->version=uni->version;
- unistr2_to_ascii(d->name, &uni->name, sizeof(d->name)-1);
- unistr2_to_ascii(d->environment, &uni->environment, sizeof(d->environment)-1);
- unistr2_to_ascii(d->driverpath, &uni->driverpath, sizeof(d->driverpath)-1);
- unistr2_to_ascii(d->datafile, &uni->datafile, sizeof(d->datafile)-1);
- unistr2_to_ascii(d->configfile, &uni->configfile, sizeof(d->configfile)-1);
- unistr2_to_ascii(d->helpfile, &uni->helpfile, sizeof(d->helpfile)-1);
- unistr2_to_ascii(d->monitorname, &uni->monitorname, sizeof(d->monitorname)-1);
- unistr2_to_ascii(d->defaultdatatype, &uni->defaultdatatype, sizeof(d->defaultdatatype)-1);
+ unistr2_to_dos(d->name, &uni->name, sizeof(d->name)-1);
+ unistr2_to_dos(d->environment, &uni->environment, sizeof(d->environment)-1);
+ unistr2_to_dos(d->driverpath, &uni->driverpath, sizeof(d->driverpath)-1);
+ unistr2_to_dos(d->datafile, &uni->datafile, sizeof(d->datafile)-1);
+ unistr2_to_dos(d->configfile, &uni->configfile, sizeof(d->configfile)-1);
+ unistr2_to_dos(d->helpfile, &uni->helpfile, sizeof(d->helpfile)-1);
+ unistr2_to_dos(d->monitorname, &uni->monitorname, sizeof(d->monitorname)-1);
+ unistr2_to_dos(d->defaultdatatype, &uni->defaultdatatype, sizeof(d->defaultdatatype)-1);
DEBUGADD(8,( "version: %d\n", d->version));
DEBUGADD(8,( "name: %s\n", d->name));
@@ -5621,7 +5361,6 @@ BOOL uni_2_asc_printer_info_2(const SPOOL_PRINTER_INFO_LEVEL_2 *uni,
* addprinter(ex) so we can do one time stuff here.
*/
(*asc)->setuptime=time_unix;
-
}
DEBUGADD(8,("start converting\n"));
@@ -5635,17 +5374,17 @@ BOOL uni_2_asc_printer_info_2(const SPOOL_PRINTER_INFO_LEVEL_2 *uni,
d->status=uni->status;
d->cjobs=uni->cjobs;
- unistr2_to_ascii(d->servername, &uni->servername, sizeof(d->servername)-1);
- unistr2_to_ascii(d->printername, &uni->printername, sizeof(d->printername)-1);
- unistr2_to_ascii(d->sharename, &uni->sharename, sizeof(d->sharename)-1);
- unistr2_to_ascii(d->portname, &uni->portname, sizeof(d->portname)-1);
- unistr2_to_ascii(d->drivername, &uni->drivername, sizeof(d->drivername)-1);
- unistr2_to_ascii(d->comment, &uni->comment, sizeof(d->comment)-1);
- unistr2_to_ascii(d->location, &uni->location, sizeof(d->location)-1);
- unistr2_to_ascii(d->sepfile, &uni->sepfile, sizeof(d->sepfile)-1);
- unistr2_to_ascii(d->printprocessor, &uni->printprocessor, sizeof(d->printprocessor)-1);
- unistr2_to_ascii(d->datatype, &uni->datatype, sizeof(d->datatype)-1);
- unistr2_to_ascii(d->parameters, &uni->parameters, sizeof(d->parameters)-1);
+ unistr2_to_dos(d->servername, &uni->servername, sizeof(d->servername)-1);
+ unistr2_to_dos(d->printername, &uni->printername, sizeof(d->printername)-1);
+ unistr2_to_dos(d->sharename, &uni->sharename, sizeof(d->sharename)-1);
+ unistr2_to_dos(d->portname, &uni->portname, sizeof(d->portname)-1);
+ unistr2_to_dos(d->drivername, &uni->drivername, sizeof(d->drivername)-1);
+ unistr2_to_dos(d->comment, &uni->comment, sizeof(d->comment)-1);
+ unistr2_to_dos(d->location, &uni->location, sizeof(d->location)-1);
+ unistr2_to_dos(d->sepfile, &uni->sepfile, sizeof(d->sepfile)-1);
+ unistr2_to_dos(d->printprocessor, &uni->printprocessor, sizeof(d->printprocessor)-1);
+ unistr2_to_dos(d->datatype, &uni->datatype, sizeof(d->datatype)-1);
+ unistr2_to_dos(d->parameters, &uni->parameters, sizeof(d->parameters)-1);
return True;
}
@@ -6007,14 +5746,6 @@ BOOL spoolss_io_r_enumprinterdata(char *desc, SPOOL_R_ENUMPRINTERDATA *r_u, prs_
if(!prs_uint32("valuesize", ps, depth, &r_u->valuesize))
return False;
- if (UNMARSHALLING(ps) && r_u->valuesize) {
- r_u->value = (uint16 *)prs_alloc_mem(ps, r_u->valuesize * 2);
- if (!r_u->value) {
- DEBUG(0, ("spoolss_io_r_enumprinterdata: out of memory for printerdata value\n"));
- return False;
- }
- }
-
if(!prs_uint16uni(False, "value", ps, depth, r_u->value, r_u->valuesize ))
return False;
@@ -6029,15 +5760,6 @@ BOOL spoolss_io_r_enumprinterdata(char *desc, SPOOL_R_ENUMPRINTERDATA *r_u, prs_
if(!prs_uint32("datasize", ps, depth, &r_u->datasize))
return False;
-
- if (UNMARSHALLING(ps) && r_u->datasize) {
- r_u->data = (uint8 *)prs_alloc_mem(ps, r_u->datasize);
- if (!r_u->data) {
- DEBUG(0, ("spoolss_io_r_enumprinterdata: out of memory for printerdata data\n"));
- return False;
- }
- }
-
if(!prs_uint8s(False, "data", ps, depth, r_u->data, r_u->datasize))
return False;
if(!prs_align(ps))
@@ -6090,50 +5812,22 @@ BOOL make_spoolss_q_enumprinterdata(SPOOL_Q_ENUMPRINTERDATA *q_u,
/*******************************************************************
********************************************************************/
-
-BOOL make_spoolss_q_enumprinterdataex(SPOOL_Q_ENUMPRINTERDATAEX *q_u,
- const POLICY_HND *hnd, char *key,
- uint32 size)
-{
- memcpy(&q_u->handle, hnd, sizeof(q_u->handle));
- init_unistr2(&q_u->key, key, strlen(key)+1);
- q_u->size = size;
-
- return True;
-}
-
-/*******************************************************************
-********************************************************************/
-BOOL make_spoolss_q_setprinterdata(SPOOL_Q_SETPRINTERDATA *q_u, const POLICY_HND *hnd,
- char* value, uint32 data_type, char* data, uint32 data_size)
+BOOL make_spoolss_q_setprinterdata(SPOOL_Q_SETPRINTERDATA *q_u, TALLOC_CTX *ctx, const POLICY_HND *hnd,
+ char* value, char* data)
{
- memcpy(&q_u->handle, hnd, sizeof(q_u->handle));
- q_u->type = data_type;
- init_unistr2(&q_u->value, value, strlen(value)+1);
-
- q_u->max_len = q_u->real_len = data_size;
- q_u->data = data;
-
- return True;
-}
+ UNISTR2 tmp;
-/*******************************************************************
-********************************************************************/
-BOOL make_spoolss_q_setprinterdataex(SPOOL_Q_SETPRINTERDATAEX *q_u, const POLICY_HND *hnd,
- char *key, char* value, uint32 data_type, char* data,
- uint32 data_size)
-{
memcpy(&q_u->handle, hnd, sizeof(q_u->handle));
- q_u->type = data_type;
+ q_u->type = REG_SZ;
init_unistr2(&q_u->value, value, strlen(value)+1);
- init_unistr2(&q_u->key, key, strlen(key)+1);
- q_u->max_len = q_u->real_len = data_size;
- q_u->data = data;
+ init_unistr2(&tmp, data, strlen(data)+1);
+ q_u->max_len = q_u->real_len = tmp.uni_max_len*2;
+ q_u->data = talloc(ctx, q_u->real_len);
+ memcpy(q_u->data, tmp.buffer, q_u->real_len);
return True;
}
-
/*******************************************************************
********************************************************************/
@@ -6216,7 +5910,7 @@ BOOL spoolss_io_q_resetprinter(char *desc, SPOOL_Q_RESETPRINTER *q_u, prs_struct
if (q_u->datatype_ptr) {
if (!smb_io_unistr2("datatype", &q_u->datatype, q_u->datatype_ptr?True:False, ps, depth))
- return False;
+ return False;
}
if (!spoolss_io_devmode_cont(desc, &q_u->devmode_ctr, ps, depth))
@@ -6243,6 +5937,42 @@ BOOL spoolss_io_r_resetprinter(char *desc, SPOOL_R_RESETPRINTER *r_u, prs_struct
/*******************************************************************
********************************************************************/
+BOOL convert_specific_param(NT_PRINTER_PARAM **param, const UNISTR2 *value,
+ uint32 type, const uint8 *data, uint32 len)
+{
+ DEBUG(5,("converting a specific param struct\n"));
+
+ if (*param == NULL)
+ {
+ *param=(NT_PRINTER_PARAM *)malloc(sizeof(NT_PRINTER_PARAM));
+ if(*param == NULL)
+ return False;
+ memset((char *)*param, '\0', sizeof(NT_PRINTER_PARAM));
+ DEBUGADD(6,("Allocated a new PARAM struct\n"));
+ }
+ unistr2_to_dos((*param)->value, value, sizeof((*param)->value)-1);
+ (*param)->type = type;
+
+ /* le champ data n'est pas NULL termine */
+ /* on stocke donc la longueur */
+
+ (*param)->data_len=len;
+
+ if (len) {
+ (*param)->data=(uint8 *)malloc(len * sizeof(uint8));
+ if((*param)->data == NULL)
+ return False;
+ memcpy((*param)->data, data, len);
+ }
+
+ DEBUGADD(6,("\tvalue:[%s], len:[%d]\n",(*param)->value, (*param)->data_len));
+ dump_data(10, (char *)(*param)->data, (*param)->data_len);
+
+ return True;
+}
+
+/*******************************************************************
+********************************************************************/
static BOOL spoolss_io_addform(char *desc, FORM *f, uint32 ptr, prs_struct *ps, int depth)
{
@@ -6786,7 +6516,7 @@ BOOL make_spoolss_q_reply_rrpcn(SPOOL_Q_REPLY_RRPCN *q_u, POLICY_HND *hnd,
q_u->unknown0=0x0;
q_u->unknown1=0x0;
- q_u->info_ptr=0x0FF0ADDE;
+ q_u->info_ptr=0xaddee11e;
q_u->info.version=2;
@@ -6800,8 +6530,8 @@ BOOL make_spoolss_q_reply_rrpcn(SPOOL_Q_REPLY_RRPCN *q_u, POLICY_HND *hnd,
q_u->info.data = info->data;
}
else {
- q_u->info.flags=PRINTER_NOTIFY_INFO_DISCARDED;
- q_u->info.count=0;
+ q_u->info.flags=PRINTER_NOTIFY_INFO_DISCARDED;
+ q_u->info.count=0;
}
return True;
@@ -6918,12 +6648,6 @@ BOOL spoolss_io_r_getprinterdataex(char *desc, SPOOL_R_GETPRINTERDATAEX *r_u, pr
if (!prs_uint32("size", ps, depth, &r_u->size))
return False;
- if (UNMARSHALLING(ps) && r_u->size) {
- r_u->data = prs_alloc_mem(ps, r_u->size);
- if(!r_u->data)
- return False;
- }
-
if (!prs_uint8s(False,"data", ps, depth, r_u->data, r_u->size))
return False;
@@ -7065,44 +6789,6 @@ BOOL spoolss_io_r_enumprinterkey(char *desc, SPOOL_R_ENUMPRINTERKEY *r_u, prs_st
return True;
}
-/*******************************************************************
- * read a structure.
- ********************************************************************/
-
-BOOL spoolss_io_q_deleteprinterkey(char *desc, SPOOL_Q_DELETEPRINTERKEY *q_u, prs_struct *ps, int depth)
-{
- prs_debug(ps, depth, desc, "spoolss_io_q_deleteprinterkey");
- depth++;
-
- if(!prs_align(ps))
- return False;
- if(!smb_io_pol_hnd("printer handle", &q_u->handle, ps, depth))
- return False;
-
- if(!smb_io_unistr2("", &q_u->keyname, True, ps, depth))
- return False;
-
- return True;
-}
-
-/*******************************************************************
- * write a structure.
- ********************************************************************/
-
-BOOL spoolss_io_r_deleteprinterkey(char *desc, SPOOL_R_DELETEPRINTERKEY *r_u, prs_struct *ps, int depth)
-{
- prs_debug(ps, depth, desc, "spoolss_io_r_deleteprinterkey");
- depth++;
-
- if(!prs_align(ps))
- return False;
-
- if(!prs_werror("status", ps, depth, &r_u->status))
- return False;
-
- return True;
-}
-
/*******************************************************************
* read a structure.
@@ -7132,7 +6818,6 @@ BOOL spoolss_io_q_enumprinterdataex(char *desc, SPOOL_Q_ENUMPRINTERDATAEX *q_u,
/*******************************************************************
********************************************************************/
-
static BOOL spoolss_io_printer_enum_values_ctr(char *desc, prs_struct *ps,
PRINTER_ENUM_VALUES_CTR *ctr, int depth)
{
@@ -7145,6 +6830,9 @@ static BOOL spoolss_io_printer_enum_values_ctr(char *desc, prs_struct *ps,
prs_debug(ps, depth, desc, "spoolss_io_printer_enum_values_ctr");
depth++;
+ if (!prs_uint32("size", ps, depth, &ctr->size))
+ return False;
+
/*
* offset data begins at 20 bytes per structure * size_of_array.
* Don't forget the uint32 at the beginning
@@ -7154,14 +6842,8 @@ static BOOL spoolss_io_printer_enum_values_ctr(char *desc, prs_struct *ps,
/* first loop to write basic enum_value information */
- if (UNMARSHALLING(ps)) {
- ctr->values = (PRINTER_ENUM_VALUES *)prs_alloc_mem(
- ps, ctr->size_of_array * sizeof(PRINTER_ENUM_VALUES));
- if (!ctr->values)
- return False;
- }
-
- for (i=0; i<ctr->size_of_array; i++) {
+ for (i=0; i<ctr->size_of_array; i++)
+ {
valuename_offset = current_offset;
if (!prs_uint32("valuename_offset", ps, depth, &valuename_offset))
return False;
@@ -7190,18 +6872,12 @@ static BOOL spoolss_io_printer_enum_values_ctr(char *desc, prs_struct *ps,
* attention to 2-byte alignment here....
*/
- for (i=0; i<ctr->size_of_array; i++) {
+ for (i=0; i<ctr->size_of_array; i++)
+ {
if (!prs_unistr("valuename", ps, depth, &ctr->values[i].valuename))
return False;
- if (UNMARSHALLING(ps)) {
- ctr->values[i].data = (uint8 *)prs_alloc_mem(
- ps, ctr->values[i].data_len);
- if (!ctr->values[i].data)
- return False;
- }
-
if (!prs_uint8s(False, "data", ps, depth, ctr->values[i].data, ctr->values[i].data_len))
return False;
@@ -7212,55 +6888,38 @@ static BOOL spoolss_io_printer_enum_values_ctr(char *desc, prs_struct *ps,
return True;
}
+
/*******************************************************************
* write a structure.
********************************************************************/
BOOL spoolss_io_r_enumprinterdataex(char *desc, SPOOL_R_ENUMPRINTERDATAEX *r_u, prs_struct *ps, int depth)
{
- uint32 data_offset, end_offset;
prs_debug(ps, depth, desc, "spoolss_io_r_enumprinterdataex");
depth++;
if(!prs_align(ps))
return False;
-
- if (!prs_uint32("size", ps, depth, &r_u->ctr.size))
- return False;
-
- data_offset = prs_offset(ps);
-
- if (!prs_set_offset(ps, data_offset + r_u->ctr.size))
+
+ if (!spoolss_io_printer_enum_values_ctr("", ps, &r_u->ctr, depth ))
return False;
-
+
if(!prs_align(ps))
return False;
if(!prs_uint32("needed", ps, depth, &r_u->needed))
return False;
-
+
if(!prs_uint32("returned", ps, depth, &r_u->returned))
return False;
if(!prs_werror("status", ps, depth, &r_u->status))
return False;
- r_u->ctr.size_of_array = r_u->returned;
-
- end_offset = prs_offset(ps);
-
- if (!prs_set_offset(ps, data_offset))
- return False;
-
- if (r_u->ctr.size)
- if (!spoolss_io_printer_enum_values_ctr("", ps, &r_u->ctr, depth ))
- return False;
-
- if (!prs_set_offset(ps, end_offset))
- return False;
- return True;
+ return True;
}
+
/*******************************************************************
* write a structure.
********************************************************************/
@@ -7457,193 +7116,3 @@ BOOL make_spoolss_q_enumforms(SPOOL_Q_ENUMFORMS *q_u, POLICY_HND *handle,
return True;
}
-
-/*******************************************************************
- * init a structure.
- ********************************************************************/
-
-BOOL make_spoolss_q_setjob(SPOOL_Q_SETJOB *q_u, POLICY_HND *handle,
- uint32 jobid, uint32 level, uint32 command)
-{
- memcpy(&q_u->handle, handle, sizeof(POLICY_HND));
- q_u->jobid = jobid;
- q_u->level = level;
-
- /* Hmm - the SPOOL_Q_SETJOB structure has a JOB_INFO ctr in it but
- the server side code has it marked as unused. */
-
- q_u->command = command;
-
- return True;
-}
-
-/*******************************************************************
- * init a structure.
- ********************************************************************/
-
-BOOL make_spoolss_q_getjob(SPOOL_Q_GETJOB *q_u, POLICY_HND *handle,
- uint32 jobid, uint32 level, NEW_BUFFER *buffer,
- uint32 offered)
-{
- memcpy(&q_u->handle, handle, sizeof(POLICY_HND));
- q_u->jobid = jobid;
- q_u->level = level;
- q_u->buffer = buffer;
- q_u->offered = offered;
-
- return True;
-}
-
-/*******************************************************************
- * init a structure.
- ********************************************************************/
-
-BOOL make_spoolss_q_startpageprinter(SPOOL_Q_STARTPAGEPRINTER *q_u,
- POLICY_HND *handle)
-{
- memcpy(&q_u->handle, handle, sizeof(POLICY_HND));
-
- return True;
-}
-
-/*******************************************************************
- * init a structure.
- ********************************************************************/
-
-BOOL make_spoolss_q_endpageprinter(SPOOL_Q_ENDPAGEPRINTER *q_u,
- POLICY_HND *handle)
-{
- memcpy(&q_u->handle, handle, sizeof(POLICY_HND));
-
- return True;
-}
-
-/*******************************************************************
- * init a structure.
- ********************************************************************/
-
-BOOL make_spoolss_q_startdocprinter(SPOOL_Q_STARTDOCPRINTER *q_u,
- POLICY_HND *handle, uint32 level,
- char *docname, char *outputfile,
- char *datatype)
-{
- DOC_INFO_CONTAINER *ctr = &q_u->doc_info_container;
-
- memcpy(&q_u->handle, handle, sizeof(POLICY_HND));
-
- ctr->level = level;
-
- switch (level) {
- case 1:
- ctr->docinfo.switch_value = level;
-
- ctr->docinfo.doc_info_1.p_docname = docname ? 1 : 0;
- ctr->docinfo.doc_info_1.p_outputfile = outputfile ? 1 : 0;
- ctr->docinfo.doc_info_1.p_datatype = datatype ? 1 : 0;
-
- if (docname)
- init_unistr2(&ctr->docinfo.doc_info_1.docname, docname,
- strlen(docname) + 1);
-
- if (outputfile)
- init_unistr2(&ctr->docinfo.doc_info_1.outputfile, outputfile,
- strlen(outputfile) + 1);
-
- if (datatype)
- init_unistr2(&ctr->docinfo.doc_info_1.datatype, datatype,
- strlen(datatype) + 1);
-
- break;
- case 2:
- /* DOC_INFO_2 is only used by Windows 9x and since it
- doesn't do printing over RPC we don't have to worry
- about it. */
- default:
- DEBUG(3, ("unsupported info level %d\n", level));
- return False;
- }
-
- return True;
-}
-
-/*******************************************************************
- * init a structure.
- ********************************************************************/
-
-BOOL make_spoolss_q_enddocprinter(SPOOL_Q_ENDDOCPRINTER *q_u,
- POLICY_HND *handle)
-{
- memcpy(&q_u->handle, handle, sizeof(POLICY_HND));
-
- return True;
-}
-
-/*******************************************************************
- * init a structure.
- ********************************************************************/
-
-BOOL make_spoolss_q_writeprinter(SPOOL_Q_WRITEPRINTER *q_u,
- POLICY_HND *handle, uint32 data_size,
- char *data)
-{
- memcpy(&q_u->handle, handle, sizeof(POLICY_HND));
- q_u->buffer_size = q_u->buffer_size2 = data_size;
- q_u->buffer = data;
- return True;
-}
-
-/*******************************************************************
- * init a structure.
- ********************************************************************/
-
-BOOL make_spoolss_q_deleteprinterdata(SPOOL_Q_DELETEPRINTERDATA *q_u,
- POLICY_HND *handle, char *valuename)
-{
- memcpy(&q_u->handle, handle, sizeof(POLICY_HND));
- init_unistr2(&q_u->valuename, valuename, strlen(valuename) + 1);
-
- return True;
-}
-
-/*******************************************************************
- * init a structure.
- ********************************************************************/
-
-BOOL make_spoolss_q_deleteprinterdataex(SPOOL_Q_DELETEPRINTERDATAEX *q_u,
- POLICY_HND *handle, char *key,
- char *value)
-{
- memcpy(&q_u->handle, handle, sizeof(POLICY_HND));
- init_unistr2(&q_u->valuename, value, strlen(value) + 1);
- init_unistr2(&q_u->keyname, key, strlen(key) + 1);
-
- return True;
-}
-
-/*******************************************************************
- * init a structure.
- ********************************************************************/
-
-BOOL make_spoolss_q_rffpcnex(SPOOL_Q_RFFPCNEX *q_u, POLICY_HND *handle,
- uint32 flags, uint32 options, char *localmachine,
- uint32 printerlocal, SPOOL_NOTIFY_OPTION *option)
-{
- memcpy(&q_u->handle, handle, sizeof(POLICY_HND));
-
- q_u->flags = flags;
- q_u->options = options;
-
- q_u->localmachine_ptr = 1;
-
- init_unistr2(&q_u->localmachine, localmachine,
- strlen(localmachine) + 1);
-
- q_u->printerlocal = printerlocal;
-
- if (option)
- q_u->option_ptr = 1;
-
- q_u->option = option;
-
- return True;
-}