summaryrefslogtreecommitdiff
path: root/source3/rpc_server/srv_spoolss.c
diff options
context:
space:
mode:
authorJean-François Micouleau <jfm@samba.org>2000-02-15 18:07:45 +0000
committerJean-François Micouleau <jfm@samba.org>2000-02-15 18:07:45 +0000
commit8688933c7feb87179c178a30e4fc42970fe1da8f (patch)
tree8ef350f73284081739058e446ac9e740fd0f7c35 /source3/rpc_server/srv_spoolss.c
parent13ac8fd847f9cc0a7c7d04034dfb8214edccbe48 (diff)
downloadsamba-8688933c7feb87179c178a30e4fc42970fe1da8f.tar.gz
samba-8688933c7feb87179c178a30e4fc42970fe1da8f.tar.bz2
samba-8688933c7feb87179c178a30e4fc42970fe1da8f.zip
fix the reply of rpc_alter_context
OpenPrinterEx is now decoding correctly the query most of the EnumXXX use the new_buffer struct. check the (un)marshalling return code. conclusion: still a long way to go. all the client code has to be rewritten, and I still wonder how to implement correctly the notify stuff. (This used to be commit 3d6d3863751787b08d40268c83221add1487a5c9)
Diffstat (limited to 'source3/rpc_server/srv_spoolss.c')
-rwxr-xr-xsource3/rpc_server/srv_spoolss.c526
1 files changed, 402 insertions, 124 deletions
diff --git a/source3/rpc_server/srv_spoolss.c b/source3/rpc_server/srv_spoolss.c
index 60333e1f3b..50b6dd3846 100755
--- a/source3/rpc_server/srv_spoolss.c
+++ b/source3/rpc_server/srv_spoolss.c
@@ -107,10 +107,18 @@ static BOOL api_spoolss_closeprinter(uint16 vuid, prs_struct *data, prs_struct *
ZERO_STRUCT(q_u);
ZERO_STRUCT(r_u);
- spoolss_io_q_closeprinter("", &q_u, data, 0);
+ if (!spoolss_io_q_closeprinter("", &q_u, data, 0)) {
+ DEBUG(0,("spoolss_io_q_closeprinter: unable to unmarshall SPOOL_Q_CLOSEPRINTER.\n"));
+ return False;
+ }
+
r_u.status = _spoolss_closeprinter(&q_u.handle);
memcpy(&r_u.handle, &q_u.handle, sizeof(r_u.handle));
- spoolss_io_r_closeprinter("",&r_u,rdata,0);
+
+ if (!spoolss_io_r_closeprinter("",&r_u,rdata,0)) {
+ DEBUG(0,("spoolss_io_r_closeprinter: unable to marshall SPOOL_R_CLOSEPRINTER.\n"));
+ return False;
+ }
}
/********************************************************************
@@ -125,12 +133,19 @@ static BOOL api_spoolss_rffpcnex(uint16 vuid, prs_struct *data, prs_struct *rdat
ZERO_STRUCT(q_u);
ZERO_STRUCT(r_u);
- spoolss_io_q_rffpcnex("", &q_u, data, 0);
+ if (!spoolss_io_q_rffpcnex("", &q_u, data, 0)) {
+ DEBUG(0,("spoolss_io_q_rffpcnex: unable to unmarshall SPOOL_Q_RFFPCNEX.\n"));
+ return False;
+ }
r_u.status = _spoolss_rffpcnex(&q_u.handle, q_u.flags,
q_u.options, &q_u.localmachine,
q_u.printerlocal, &q_u.option);
- spoolss_io_r_rffpcnex("",&r_u,rdata,0);
+
+ if (!spoolss_io_r_rffpcnex("",&r_u,rdata,0)) {
+ DEBUG(0,("spoolss_io_r_rffpcnex: unable to marshall SPOOL_R_RFFPCNEX.\n"));
+ return False;
+ }
}
@@ -148,11 +163,18 @@ static BOOL api_spoolss_rfnpcnex(uint16 vuid, prs_struct *data, prs_struct *rdat
ZERO_STRUCT(q_u);
ZERO_STRUCT(r_u);
- spoolss_io_q_rfnpcnex("", &q_u, data, 0);
+ if (!spoolss_io_q_rfnpcnex("", &q_u, data, 0)) {
+ DEBUG(0,("spoolss_io_q_rfnpcnex: unable to unmarshall SPOOL_Q_RFNPCNEX.\n"));
+ return False;
+ }
r_u.status = _spoolss_rfnpcnex(&q_u.handle, q_u.change,
&q_u.option, &r_u.count, &r_u.info);
- spoolss_io_r_rfnpcnex("", &r_u, rdata, 0);
+
+ if (!spoolss_io_r_rfnpcnex("", &r_u, rdata, 0)) {
+ DEBUG(0,("spoolss_io_r_rfnpcnex: unable to marshall SPOOL_R_RFNPCNEX.\n"));
+ return False;
+ }
}
@@ -169,32 +191,33 @@ static BOOL api_spoolss_enumprinters(uint16 vuid, prs_struct *data, prs_struct *
ZERO_STRUCT(q_u);
ZERO_STRUCT(r_u);
- spoolss_io_q_enumprinters("", &q_u, data, 0);
+ DEBUG(5,("api_spoolss_enumprinters\n"));
- /* lkclXXX DAMN DAMN DAMN! MICROSOFT @#$%S IT UP, AGAIN, AND WE
- HAVE TO DEAL WITH IT! AGH!
- */
- r_u.level = q_u.level;
- r_u.status = _spoolss_enumprinters(
- q_u.flags,
- &q_u.servername,
- q_u.level,
- &q_u.buffer,
- q_u.buf_size,
- &r_u.offered,
- &r_u.needed,
- &r_u.ctr,
- &r_u.returned);
+ new_spoolss_allocate_buffer(&q_u.buffer);
+
+ if (!spoolss_io_q_enumprinters("", &q_u, data, 0)) {
+ DEBUG(0,("spoolss_io_q_enumprinters: unable to unmarshall SPOOL_Q_ENUMPRINTERS.\n"));
+ return False;
+ }
+
+ /* that's an [in out] buffer */
+ new_spoolss_move_buffer(q_u.buffer, &r_u.buffer);
+
+ r_u.status = _spoolss_enumprinters( q_u.flags, &q_u.servername, q_u.level,
+ r_u.buffer, q_u.offered,
+ &r_u.needed, &r_u.returned);
- memcpy(r_u.servername.buffer,q_u.servername.buffer,
- 2*q_u.servername.uni_str_len);
- r_u.servername.buffer[q_u.servername.uni_str_len] = 0;
+ if (!new_spoolss_io_r_enumprinters("", &r_u, rdata, 0)) {
+ DEBUG(0,("new_spoolss_io_r_enumprinters: unable to marshall SPOOL_R_ENUMPRINTERS.\n"));
+ new_spoolss_free_buffer(q_u.buffer);
+ return False;
+ }
- spoolss_io_free_buffer(&(q_u.buffer));
- spoolss_io_r_enumprinters("",&r_u,rdata,0);
+ new_spoolss_free_buffer(q_u.buffer);
+
+ return True;
}
-
/********************************************************************
* api_spoolss_getprinter
* called from the spoolss dispatcher
@@ -208,7 +231,10 @@ static BOOL api_spoolss_getprinter(uint16 vuid, prs_struct *data, prs_struct *rd
ZERO_STRUCT(q_u);
ZERO_STRUCT(r_u);
- spoolss_io_q_getprinter("", &q_u, data, 0);
+ if(!spoolss_io_q_getprinter("", &q_u, data, 0)) {
+ DEBUG(0,("spoolss_io_q_getprinter: unable to unmarshall SPOOL_Q_GETPRINTER.\n"));
+ return False;
+ }
r_u.status = _spoolss_getprinter(&q_u.handle, q_u.level,
&r_u.ctr, &q_u.offered, &r_u.needed);
@@ -218,7 +244,12 @@ static BOOL api_spoolss_getprinter(uint16 vuid, prs_struct *data, prs_struct *rd
r_u.level = q_u.level;
safe_free(q_u.buffer);
- spoolss_io_r_getprinter("",&r_u,rdata,0);
+ if(!spoolss_io_r_getprinter("",&r_u,rdata,0)) {
+ DEBUG(0,("spoolss_io_r_getprinter: unable to marshall SPOOL_R_GETPRINTER.\n"));
+ return False;
+ }
+
+ return True;
}
@@ -235,7 +266,10 @@ static BOOL api_spoolss_getprinterdriver2(uint16 vuid, prs_struct *data, prs_str
ZERO_STRUCT(q_u);
ZERO_STRUCT(r_u);
- spoolss_io_q_getprinterdriver2("", &q_u, data, 0);
+ if(!spoolss_io_q_getprinterdriver2("", &q_u, data, 0)) {
+ DEBUG(0,("spoolss_io_q_getprinterdriver2: unable to unmarshall SPOOL_Q_GETPRINTERDRIVER2.\n"));
+ return False;
+ }
r_u.status = _spoolss_getprinterdriver2(&q_u.handle,
&q_u.architecture, q_u.level,
@@ -246,7 +280,12 @@ static BOOL api_spoolss_getprinterdriver2(uint16 vuid, prs_struct *data, prs_str
r_u.level = q_u.level;
spoolss_io_free_buffer(&(q_u.buffer));
- spoolss_io_r_getprinterdriver2("",&r_u,rdata,0);
+ if(!spoolss_io_r_getprinterdriver2("",&r_u,rdata,0)) {
+ DEBUG(0,("spoolss_io_r_getprinterdriver2: unable to marshall SPOOL_R_GETPRINTERDRIVER2.\n"));
+ return False;
+ }
+
+ return True;
}
/********************************************************************
@@ -262,9 +301,19 @@ static BOOL api_spoolss_startpageprinter(uint16 vuid, prs_struct *data, prs_stru
ZERO_STRUCT(q_u);
ZERO_STRUCT(r_u);
- spoolss_io_q_startpageprinter("", &q_u, data, 0);
+ if(!spoolss_io_q_startpageprinter("", &q_u, data, 0)) {
+ DEBUG(0,("spoolss_io_q_startpageprinter: unable to unmarshall SPOOL_Q_STARTPAGEPRINTER.\n"));
+ return False;
+ }
+
r_u.status = _spoolss_startpageprinter(&q_u.handle);
- spoolss_io_r_startpageprinter("",&r_u,rdata,0);
+
+ if(!spoolss_io_r_startpageprinter("",&r_u,rdata,0)) {
+ DEBUG(0,("spoolss_io_r_startpageprinter: unable to marshall SPOOL_R_STARTPAGEPRINTER.\n"));
+ return False;
+ }
+
+ return True;
}
@@ -281,9 +330,19 @@ static BOOL api_spoolss_endpageprinter(uint16 vuid, prs_struct *data, prs_struct
ZERO_STRUCT(q_u);
ZERO_STRUCT(r_u);
- spoolss_io_q_endpageprinter("", &q_u, data, 0);
+ if(!spoolss_io_q_endpageprinter("", &q_u, data, 0)) {
+ DEBUG(0,("spoolss_io_q_endpageprinter: unable to unmarshall SPOOL_Q_ENDPAGEPRINTER.\n"));
+ return False;
+ }
+
r_u.status = _spoolss_endpageprinter(&q_u.handle);
- spoolss_io_r_endpageprinter("",&r_u,rdata,0);
+
+ if(!spoolss_io_r_endpageprinter("",&r_u,rdata,0)) {
+ DEBUG(0,("spoolss_io_r_endpageprinter: unable to marshall SPOOL_R_ENDPAGEPRINTER.\n"));
+ return False;
+ }
+
+ return True;
}
/********************************************************************
@@ -299,12 +358,22 @@ static BOOL api_spoolss_startdocprinter(uint16 vuid, prs_struct *data, prs_struc
ZERO_STRUCT(q_u);
ZERO_STRUCT(r_u);
- spoolss_io_q_startdocprinter("", &q_u, data, 0);
+ if(!spoolss_io_q_startdocprinter("", &q_u, data, 0)) {
+ DEBUG(0,("spoolss_io_q_startdocprinter: unable to unmarshall SPOOL_Q_STARTDOCPRINTER.\n"));
+ return False;
+ }
+
r_u.status = _spoolss_startdocprinter(&q_u.handle,
q_u.doc_info_container.level,
&q_u.doc_info_container.docinfo,
&r_u.jobid);
- spoolss_io_r_startdocprinter("",&r_u,rdata,0);
+
+ if(!spoolss_io_r_startdocprinter("",&r_u,rdata,0)) {
+ DEBUG(0,("spoolss_io_r_startdocprinter: unable to marshall SPOOL_R_STARTDOCPRINTER.\n"));
+ return False;
+ }
+
+ return True;
}
/********************************************************************
@@ -320,9 +389,19 @@ static BOOL api_spoolss_enddocprinter(uint16 vuid, prs_struct *data, prs_struct
ZERO_STRUCT(q_u);
ZERO_STRUCT(r_u);
- spoolss_io_q_enddocprinter("", &q_u, data, 0);
+ if(!spoolss_io_q_enddocprinter("", &q_u, data, 0)) {
+ DEBUG(0,("spoolss_io_q_enddocprinter: unable to unmarshall SPOOL_Q_ENDDOCPRINTER.\n"));
+ return False;
+ }
+
r_u.status = _spoolss_enddocprinter(&q_u.handle);
- spoolss_io_r_enddocprinter("",&r_u,rdata,0);
+
+ if(!spoolss_io_r_enddocprinter("",&r_u,rdata,0)) {
+ DEBUG(0,("spoolss_io_r_enddocprinter: unable to marshall SPOOL_R_ENDDOCPRINTER.\n"));
+ return False;
+ }
+
+ return True;
}
@@ -339,14 +418,24 @@ static BOOL api_spoolss_writeprinter(uint16 vuid, prs_struct *data, prs_struct *
ZERO_STRUCT(q_u);
ZERO_STRUCT(r_u);
- spoolss_io_q_writeprinter("", &q_u, data, 0);
+ if(!spoolss_io_q_writeprinter("", &q_u, data, 0)) {
+ DEBUG(0,("spoolss_io_q_writeprinter: unable to unmarshall SPOOL_Q_WRITEPRINTER.\n"));
+ return False;
+ }
+
r_u.status = _spoolss_writeprinter(&q_u.handle,
q_u.buffer_size,
q_u.buffer,
&q_u.buffer_size2);
r_u.buffer_written = q_u.buffer_size2;
safe_free(q_u.buffer);
- spoolss_io_r_writeprinter("",&r_u,rdata,0);
+
+ if(!spoolss_io_r_writeprinter("",&r_u,rdata,0)) {
+ DEBUG(0,("spoolss_io_r_writeprinter: unable to marshall SPOOL_R_WRITEPRINTER.\n"));
+ return False;
+ }
+
+ return True;
}
/****************************************************************************
@@ -359,7 +448,11 @@ static BOOL api_spoolss_setprinter(uint16 vuid, prs_struct *data, prs_struct *rd
ZERO_STRUCT(q_u);
ZERO_STRUCT(r_u);
- spoolss_io_q_setprinter("", &q_u, data, 0);
+ if(!spoolss_io_q_setprinter("", &q_u, data, 0)) {
+ DEBUG(0,("spoolss_io_q_setprinter: unable to unmarshall SPOOL_Q_SETPRINTER.\n"));
+ return False;
+ }
+
DEBUG(0,("api_spoolss_setprinter: typecast sec_des to uint8*!\n"));
r_u.status = _spoolss_setprinter(&q_u.handle,
q_u.level, &q_u.info,
@@ -367,7 +460,13 @@ static BOOL api_spoolss_setprinter(uint16 vuid, prs_struct *data, prs_struct *rd
q_u.security.size_of_buffer,
(const uint8*)q_u.security.data,
q_u.command);
- spoolss_io_r_setprinter("",&r_u,rdata,0);
+
+ if(!spoolss_io_r_setprinter("",&r_u,rdata,0)) {
+ DEBUG(0,("spoolss_io_r_setprinter: unable to marshall SPOOL_R_SETPRINTER.\n"));
+ return False;
+ }
+
+ return True;
}
/****************************************************************************
@@ -380,9 +479,19 @@ static BOOL api_spoolss_fcpn(uint16 vuid, prs_struct *data, prs_struct *rdata)
ZERO_STRUCT(q_u);
ZERO_STRUCT(r_u);
- spoolss_io_q_fcpn("", &q_u, data, 0);
+ if(!spoolss_io_q_fcpn("", &q_u, data, 0)) {
+ DEBUG(0,("spoolss_io_q_fcpn: unable to unmarshall SPOOL_Q_FCPN.\n"));
+ return False;
+ }
+
r_u.status = _spoolss_fcpn(&q_u.handle);
- spoolss_io_r_fcpn("",&r_u,rdata,0);
+
+ if(!spoolss_io_r_fcpn("",&r_u,rdata,0)) {
+ DEBUG(0,("spoolss_io_r_fcpn: unable to marshall SPOOL_R_FCPN.\n"));
+ return False;
+ }
+
+ return True;
}
@@ -396,13 +505,22 @@ static BOOL api_spoolss_addjob(uint16 vuid, prs_struct *data, prs_struct *rdata)
ZERO_STRUCT(q_u);
ZERO_STRUCT(r_u);
- spoolss_io_q_addjob("", &q_u, data, 0);
+ if(!spoolss_io_q_addjob("", &q_u, data, 0)) {
+ DEBUG(0,("spoolss_io_q_addjob: unable to unmarshall SPOOL_Q_ADDJOB.\n"));
+ return False;
+ }
r_u.status = _spoolss_addjob(&q_u.handle, q_u.level,
&q_u.buffer, q_u.buf_size);
spoolss_io_free_buffer(&(q_u.buffer));
- spoolss_io_r_addjob("",&r_u,rdata,0);
+
+ if(!spoolss_io_r_addjob("",&r_u,rdata,0)) {
+ DEBUG(0,("spoolss_io_r_addjob: unable to marshall SPOOL_R_ADDJOB.\n"));
+ return False;
+ }
+
+ return True;
}
@@ -415,15 +533,30 @@ static BOOL api_spoolss_enumjobs(uint16 vuid, prs_struct *data, prs_struct *rdat
ZERO_STRUCT(q_u);
ZERO_STRUCT(r_u);
+
+ new_spoolss_allocate_buffer(&q_u.buffer);
+
+ if (!spoolss_io_q_enumjobs("", &q_u, data, 0)) {
+ DEBUG(0,("spoolss_io_q_enumjobs: unable to unmarshall SPOOL_Q_ENUMJOBS.\n"));
+ return False;
+ }
+
+ /* that's an [in out] buffer */
+ new_spoolss_move_buffer(q_u.buffer, &r_u.buffer);
+
+ r_u.status = _spoolss_enumjobs(&q_u.handle, q_u.firstjob, q_u.numofjobs, q_u.level,
+ r_u.buffer, q_u.offered,
+ &r_u.needed, &r_u.returned);
+
+ if (!spoolss_io_r_enumjobs("",&r_u,rdata,0)) {
+ DEBUG(0,("spoolss_io_r_enumjobs: unable to marshall SPOOL_R_ENUMJOBS.\n"));
+ new_spoolss_free_buffer(q_u.buffer);
+ return False;
+ }
+
+ new_spoolss_free_buffer(q_u.buffer);
- spoolss_io_q_enumjobs("", &q_u, data, 0);
- r_u.offered = q_u.buf_size;
- r_u.level = q_u.level;
- r_u.status = _spoolss_enumjobs(&q_u.handle,
- q_u.firstjob, q_u.numofjobs, q_u.level,
- &r_u.ctr, &r_u.offered, &r_u.numofjobs);
- spoolss_io_free_buffer(&(q_u.buffer));
- spoolss_io_r_enumjobs("",&r_u,rdata,0);
+ return True;
}
@@ -437,9 +570,19 @@ static BOOL api_spoolss_schedulejob(uint16 vuid, prs_struct *data, prs_struct *r
ZERO_STRUCT(q_u);
ZERO_STRUCT(r_u);
- spoolss_io_q_schedulejob("", &q_u, data, 0);
+ if(!spoolss_io_q_schedulejob("", &q_u, data, 0)) {
+ DEBUG(0,("spoolss_io_q_schedulejob: unable to unmarshall SPOOL_Q_SCHEDULEJOB.\n"));
+ return False;
+ }
+
r_u.status = _spoolss_schedulejob(&q_u.handle, q_u.jobid);
- spoolss_io_r_schedulejob("",&r_u,rdata,0);
+
+ if(!spoolss_io_r_schedulejob("",&r_u,rdata,0)) {
+ DEBUG(0,("spoolss_io_r_schedulejob: unable to marshall SPOOL_R_SCHEDULEJOB.\n"));
+ return False;
+ }
+
+ return True;
}
/****************************************************************************
@@ -452,10 +595,20 @@ static BOOL api_spoolss_setjob(uint16 vuid, prs_struct *data, prs_struct *rdata)
ZERO_STRUCT(q_u);
ZERO_STRUCT(r_u);
- spoolss_io_q_setjob("", &q_u, data, 0);
+ if(!spoolss_io_q_setjob("", &q_u, data, 0)) {
+ DEBUG(0,("spoolss_io_q_setjob: unable to unmarshall SPOOL_Q_SETJOB.\n"));
+ return False;
+ }
+
r_u.status = _spoolss_setjob(&q_u.handle, q_u.jobid,
q_u.level, &q_u.ctr, q_u.command);
- spoolss_io_r_setjob("",&r_u,rdata,0);
+
+ if(!spoolss_io_r_setjob("",&r_u,rdata,0)) {
+ DEBUG(0,("spoolss_io_r_setjob: unable to marshall SPOOL_R_SETJOB.\n"));
+ return False;
+ }
+
+ return True;
}
/****************************************************************************
@@ -468,18 +621,30 @@ static BOOL api_spoolss_enumprinterdrivers(uint16 vuid, prs_struct *data, prs_st
ZERO_STRUCT(q_u);
ZERO_STRUCT(r_u);
-
- spoolss_io_q_enumprinterdrivers("", &q_u, data, 0);
- r_u.offered = q_u.buf_size;
- r_u.level = q_u.level;
- r_u.status = _spoolss_enumprinterdrivers(&q_u.name,
- &q_u.environment, q_u. level,
- &r_u.ctr, &r_u.offered, &r_u.numofdrivers);
+ new_spoolss_allocate_buffer(&q_u.buffer);
- spoolss_io_free_buffer(&q_u.buffer);
- spoolss_io_r_enumdrivers("",&r_u,rdata,0);
- free_spoolss_r_enumdrivers(&r_u);
+ if (!spoolss_io_q_enumprinterdrivers("", &q_u, data, 0)) {
+ DEBUG(0,("spoolss_io_q_enumprinterdrivers: unable to unmarshall SPOOL_Q_ENUMPRINTERDRIVERS.\n"));
+ return False;
+ }
+
+ /* that's an [in out] buffer */
+ new_spoolss_move_buffer(q_u.buffer, &r_u.buffer);
+
+ r_u.status = _spoolss_enumprinterdrivers(&q_u.name, &q_u.environment, q_u.level,
+ r_u.buffer, q_u.offered,
+ &r_u.needed, &r_u.returned);
+
+ if (!new_spoolss_io_r_enumprinterdrivers("",&r_u,rdata,0)) {
+ DEBUG(0,("new_spoolss_io_r_enumprinterdrivers: unable to marshall SPOOL_R_ENUMPRINTERDRIVERS.\n"));
+ new_spoolss_free_buffer(q_u.buffer);
+ return False;
+ }
+
+ new_spoolss_free_buffer(q_u.buffer);
+
+ return True;
}
@@ -493,12 +658,12 @@ static BOOL api_spoolss_enumforms(uint16 vuid, prs_struct *data, prs_struct *rda
ZERO_STRUCT(q_u);
ZERO_STRUCT(r_u);
- DEBUG(5,("spoolss_io_q_enumforms\n"));
-
new_spoolss_allocate_buffer(&q_u.buffer);
- if (!spoolss_io_q_enumforms("", &q_u, data, 0))
+ if (!spoolss_io_q_enumforms("", &q_u, data, 0)) {
+ DEBUG(0,("spoolss_io_q_enumforms: unable to unmarshall SPOOL_Q_ENUMFORMS.\n"));
return False;
+ }
/* that's an [in out] buffer */
new_spoolss_move_buffer(q_u.buffer, &r_u.buffer);
@@ -508,6 +673,7 @@ static BOOL api_spoolss_enumforms(uint16 vuid, prs_struct *data, prs_struct *rda
&r_u.needed, &r_u.numofforms);
if (!new_spoolss_io_r_enumforms("",&r_u,rdata,0)) {
+ DEBUG(0,("new_spoolss_io_r_enumforms: unable to marshall SPOOL_R_ENUMFORMS.\n"));
new_spoolss_free_buffer(q_u.buffer);
return False;
}
@@ -527,20 +693,30 @@ static BOOL api_spoolss_enumports(uint16 vuid, prs_struct *data, prs_struct *rda
ZERO_STRUCT(q_u);
ZERO_STRUCT(r_u);
-
- spoolss_io_q_enumports("", &q_u, data, 0);
- r_u.offered = q_u.buf_size;
- r_u.level = q_u.level;
- r_u.status = _spoolss_enumports(&q_u.name,
- q_u.level,
- &r_u.ctr,
- &r_u.offered,
- &r_u.numofports);
+ new_spoolss_allocate_buffer(&q_u.buffer);
+
+ if(!spoolss_io_q_enumports("", &q_u, data, 0)) {
+ DEBUG(0,("spoolss_io_q_enumports: unable to unmarshall SPOOL_Q_ENUMPORTS.\n"));
+ return False;
+ }
+
+ /* that's an [in out] buffer */
+ new_spoolss_move_buffer(q_u.buffer, &r_u.buffer);
- spoolss_io_free_buffer(&(q_u.buffer));
- spoolss_io_r_enumports("",&r_u,rdata,0);
- spoolss_free_r_enumports(&r_u);
+ r_u.status = _spoolss_enumports(&q_u.name, q_u.level,
+ r_u.buffer, q_u.offered,
+ &r_u.needed, &r_u.returned);
+
+ if (!new_spoolss_io_r_enumports("",&r_u,rdata,0)) {
+ DEBUG(0,("new_spoolss_io_r_enumports: unable to marshall SPOOL_R_ENUMPORTS.\n"));
+ new_spoolss_free_buffer(q_u.buffer);
+ return False;
+ }
+
+ new_spoolss_free_buffer(q_u.buffer);
+
+ return True;
}
@@ -554,13 +730,23 @@ static BOOL api_spoolss_addprinterex(uint16 vuid, prs_struct *data, prs_struct *
ZERO_STRUCT(q_u);
ZERO_STRUCT(r_u);
- spoolss_io_q_addprinterex("", &q_u, data, 0);
+ if(!spoolss_io_q_addprinterex("", &q_u, data, 0)) {
+ DEBUG(0,("spoolss_io_q_addprinterex: unable to unmarshall SPOOL_Q_ADDPRINTEREX.\n"));
+ return False;
+ }
+
r_u.status = _spoolss_addprinterex(&q_u.server_name,
q_u.level, &q_u.info,
q_u.unk0, q_u.unk1, q_u.unk2, q_u.unk3,
q_u.user_level, &q_u.user,
&r_u.handle);
- spoolss_io_r_addprinterex("", &r_u, rdata, 0);
+
+ if(!spoolss_io_r_addprinterex("", &r_u, rdata, 0)) {
+ DEBUG(0,("spoolss_io_r_addprinterex: unable to marshall SPOOL_R_ADDPRINTEREX.\n"));
+ return False;
+ }
+
+ return True;
}
/****************************************************************************
@@ -573,10 +759,20 @@ static BOOL api_spoolss_addprinterdriver(uint16 vuid, prs_struct *data, prs_stru
ZERO_STRUCT(q_u);
ZERO_STRUCT(r_u);
- spoolss_io_q_addprinterdriver("", &q_u, data, 0);
+ if(!spoolss_io_q_addprinterdriver("", &q_u, data, 0)) {
+ DEBUG(0,("spoolss_io_q_addprinterdriver: unable to unmarshall SPOOL_Q_ADDPRINTERDRIVER.\n"));
+ return False;
+ }
+
r_u.status = _spoolss_addprinterdriver(&q_u.server_name,
q_u.level, &q_u.info);
- spoolss_io_r_addprinterdriver("", &r_u, rdata, 0);
+
+ if(!spoolss_io_r_addprinterdriver("", &r_u, rdata, 0)) {
+ DEBUG(0,("spoolss_io_r_addprinterdriver: unable to marshall SPOOL_R_ADDPRINTERDRIVER.\n"));
+ return False;
+ }
+
+ return True;
}
/****************************************************************************
@@ -586,7 +782,10 @@ static BOOL api_spoolss_getprinterdriverdirectory(uint16 vuid, prs_struct *data,
SPOOL_Q_GETPRINTERDRIVERDIR q_u;
SPOOL_R_GETPRINTERDRIVERDIR r_u;
- spoolss_io_q_getprinterdriverdir("", &q_u, data, 0);
+ if(!spoolss_io_q_getprinterdriverdir("", &q_u, data, 0)) {
+ DEBUG(0,("spoolss_io_q_getprinterdriverdir: unable to unmarshall SPOOL_Q_GETPRINTERDRIVERDIR.\n"));
+ return False;
+ }
r_u.offered = q_u.buf_size;
r_u.level = q_u.level;
@@ -596,7 +795,13 @@ static BOOL api_spoolss_getprinterdriverdirectory(uint16 vuid, prs_struct *data,
&r_u.ctr,
&r_u.offered);
spoolss_io_free_buffer(&q_u.buffer);
- spoolss_io_r_getprinterdriverdir("", &r_u, rdata, 0);
+
+ if(!spoolss_io_r_getprinterdriverdir("", &r_u, rdata, 0)) {
+ DEBUG(0,("spoolss_io_r_getprinterdriverdir: unable to marshall SPOOL_R_GETPRINTERDRIVERDIR.\n"));
+ return False;
+ }
+
+ return True;
}
/****************************************************************************
@@ -609,7 +814,11 @@ static BOOL api_spoolss_enumprinterdata(uint16 vuid, prs_struct *data, prs_struc
ZERO_STRUCT(q_u);
ZERO_STRUCT(r_u);
- spoolss_io_q_enumprinterdata("", &q_u, data, 0);
+ if(!spoolss_io_q_enumprinterdata("", &q_u, data, 0)) {
+ DEBUG(0,("spoolss_io_q_enumprinterdata: unable to unmarshall SPOOL_Q_ENUMPRINTERDATA.\n"));
+ return False;
+ }
+
r_u.valuesize = q_u.valuesize;
r_u.datasize = q_u.datasize;
@@ -622,8 +831,15 @@ static BOOL api_spoolss_enumprinterdata(uint16 vuid, prs_struct *data, prs_struc
&r_u.datasize,/* in out */
&r_u.data,/* out */
&r_u.realdatasize);/* out */
- spoolss_io_r_enumprinterdata("", &r_u, rdata, 0);
+
+ if(!spoolss_io_r_enumprinterdata("", &r_u, rdata, 0)) {
+ DEBUG(0,("spoolss_io_r_enumprinterdata: unable to marshall SPOOL_R_ENUMPRINTERDATA.\n"));
+ return False;
+ }
+
safe_free(r_u.data);
+
+ return True;
}
/****************************************************************************
@@ -636,12 +852,21 @@ static BOOL api_spoolss_setprinterdata(uint16 vuid, prs_struct *data, prs_struct
ZERO_STRUCT(q_u);
ZERO_STRUCT(r_u);
- spoolss_io_q_setprinterdata("", &q_u, data, 0);
+ if(!spoolss_io_q_setprinterdata("", &q_u, data, 0)) {
+ DEBUG(0,("spoolss_io_q_setprinterdata: unable to unmarshall SPOOL_Q_SETPRINTERDATA.\n"));
+ return False;
+ }
+
r_u.status = _spoolss_setprinterdata(&q_u.handle,
&q_u.value, q_u.type, q_u.max_len,
q_u.data, q_u.real_len, q_u.numeric_data);
- spoolss_io_r_setprinterdata("", &r_u, rdata, 0);
- safe_free(q_u.data);
+
+ if(!spoolss_io_r_setprinterdata("", &r_u, rdata, 0)) {
+ DEBUG(0,("spoolss_io_r_setprinterdata: unable to marshall SPOOL_R_SETPRINTERDATA.\n"));
+ return False;
+ }
+
+ return True;
}
/****************************************************************************
@@ -654,9 +879,19 @@ static BOOL api_spoolss_addform(uint16 vuid, prs_struct *data, prs_struct *rdata
ZERO_STRUCT(q_u);
ZERO_STRUCT(r_u);
- spoolss_io_q_addform("", &q_u, data, 0);
+ if(!spoolss_io_q_addform("", &q_u, data, 0)) {
+ DEBUG(0,("spoolss_io_q_addform: unable to unmarshall SPOOL_Q_ADDFORM.\n"));
+ return False;
+ }
+
r_u.status = _spoolss_addform(&q_u.handle, q_u.level, &q_u.form);
- spoolss_io_r_addform("", &r_u, rdata, 0);
+
+ if(!spoolss_io_r_addform("", &r_u, rdata, 0)) {
+ DEBUG(0,("spoolss_io_r_addform: unable to marshall SPOOL_R_ADDFORM.\n"));
+ return False;
+ }
+
+ return True;
}
/****************************************************************************
@@ -669,10 +904,20 @@ static BOOL api_spoolss_setform(uint16 vuid, prs_struct *data, prs_struct *rdata
ZERO_STRUCT(q_u);
ZERO_STRUCT(r_u);
- spoolss_io_q_setform("", &q_u, data, 0);
+ if(!spoolss_io_q_setform("", &q_u, data, 0)) {
+ DEBUG(0,("spoolss_io_q_setform: unable to unmarshall SPOOL_Q_SETFORM.\n"));
+ return False;
+ }
+
r_u.status = _spoolss_setform(&q_u.handle,
&q_u.name, q_u.level, &q_u.form);
- spoolss_io_r_setform("", &r_u, rdata, 0);
+
+ if(!spoolss_io_r_setform("", &r_u, rdata, 0)) {
+ DEBUG(0,("spoolss_io_r_setform: unable to marshall SPOOL_R_SETFORM.\n"));
+ return False;
+ }
+
+ return True;
}
/****************************************************************************
@@ -685,18 +930,29 @@ static BOOL api_spoolss_enumprintprocessors(uint16 vuid, prs_struct *data, prs_s
ZERO_STRUCT(q_u);
ZERO_STRUCT(r_u);
- spoolss_io_q_enumprintprocessors("", &q_u, data, 0);
- r_u.offered = q_u.buf_size;
- r_u.level = q_u.level;
- r_u.status = _spoolss_enumprintprocessors(&q_u.name,
- &q_u.environment,
- q_u.level,
- &r_u.info_1,
- &r_u.offered,
- &r_u.numofprintprocessors);
- spoolss_io_free_buffer(&q_u.buffer);
- spoolss_io_r_enumprintprocessors("", &r_u, rdata, 0);
- safe_free(r_u.info_1);
+ new_spoolss_allocate_buffer(&q_u.buffer);
+
+ if(!spoolss_io_q_enumprintprocessors("", &q_u, data, 0)) {
+ DEBUG(0,("spoolss_io_q_enumprintprocessors: unable to unmarshall SPOOL_Q_ENUMPRINTPROCESSORS.\n"));
+ return False;
+ }
+
+ /* that's an [in out] buffer */
+ new_spoolss_move_buffer(q_u.buffer, &r_u.buffer);
+
+ r_u.status = _spoolss_enumprintprocessors(&q_u.name, &q_u.environment, q_u.level,
+ r_u.buffer, q_u.offered,
+ &r_u.needed, &r_u.returned);
+
+ if(!spoolss_io_r_enumprintprocessors("", &r_u, rdata, 0)) {
+ DEBUG(0,("spoolss_io_r_enumprintprocessors: unable to marshall SPOOL_R_ENUMPRINTPROCESSORS.\n"));
+ new_spoolss_free_buffer(q_u.buffer);
+ return False;
+ }
+
+ new_spoolss_free_buffer(q_u.buffer);
+
+ return True;
}
/****************************************************************************
@@ -709,17 +965,29 @@ static BOOL api_spoolss_enumprintmonitors(uint16 vuid, prs_struct *data, prs_str
ZERO_STRUCT(q_u);
ZERO_STRUCT(r_u);
- spoolss_io_q_enumprintmonitors("", &q_u, data, 0);
- r_u.offered = q_u.buf_size;
- r_u.level = q_u.level;
- r_u.status = _spoolss_enumprintmonitors(&q_u.name,
- q_u.level,
- &r_u.info_1,
- &r_u.offered,
- &r_u.numofprintmonitors);
- spoolss_io_free_buffer(&q_u.buffer);
- spoolss_io_r_enumprintmonitors("", &r_u, rdata, 0);
- safe_free(r_u.info_1);
+ new_spoolss_allocate_buffer(&q_u.buffer);
+
+ if (!spoolss_io_q_enumprintmonitors("", &q_u, data, 0)) {
+ DEBUG(0,("spoolss_io_q_enumprintmonitors: unable to unmarshall SPOOL_Q_ENUMPRINTMONITORS.\n"));
+ return False;
+ }
+
+ /* that's an [in out] buffer */
+ new_spoolss_move_buffer(q_u.buffer, &r_u.buffer);
+
+ r_u.status = _spoolss_enumprintmonitors(&q_u.name, q_u.level,
+ r_u.buffer, q_u.offered,
+ &r_u.needed, &r_u.returned);
+
+ if (!spoolss_io_r_enumprintmonitors("", &r_u, rdata, 0)) {
+ DEBUG(0,("spoolss_io_r_enumprintmonitors: unable to marshall SPOOL_R_ENUMPRINTMONITORS.\n"));
+ new_spoolss_free_buffer(q_u.buffer);
+ return False;
+ }
+
+ new_spoolss_free_buffer(q_u.buffer);
+
+ return True;
}
/****************************************************************************
@@ -729,7 +997,10 @@ static BOOL api_spoolss_getjob(uint16 vuid, prs_struct *data, prs_struct *rdata)
SPOOL_Q_GETJOB q_u;
SPOOL_R_GETJOB r_u;
- spoolss_io_q_getjob("", &q_u, data, 0);
+ if(!spoolss_io_q_getjob("", &q_u, data, 0)) {
+ DEBUG(0,("spoolss_io_q_getjob: unable to unmarshall SPOOL_Q_GETJOB.\n"));
+ return False;
+ }
r_u.offered = q_u.buf_size;
r_u.level = q_u.level;
@@ -739,8 +1010,15 @@ static BOOL api_spoolss_getjob(uint16 vuid, prs_struct *data, prs_struct *rdata)
&r_u.ctr,
&r_u.offered);
spoolss_io_free_buffer(&(q_u.buffer));
- spoolss_io_r_getjob("",&r_u,rdata,0);
+
+ if(!spoolss_io_r_getjob("",&r_u,rdata,0)) {
+ DEBUG(0,("spoolss_io_r_getjob: unable to marshall SPOOL_R_GETJOB.\n"));
+ return False;
+ }
+
free_spoolss_r_getjob(&r_u);
+
+ return True;
}
/*******************************************************************