2 Unix SMB/CIFS implementation.
5 Copyright (C) Gerald Carter 2001-2005,
6 Copyright (C) Tim Potter 2000-2002,
7 Copyright (C) Andrew Tridgell 1994-2000,
8 Copyright (C) Jean-Francois Micouleau 1999-2000.
9 Copyright (C) Jeremy Allison 2005.
11 This program is free software; you can redistribute it and/or modify
12 it under the terms of the GNU General Public License as published by
13 the Free Software Foundation; either version 2 of the License, or
14 (at your option) any later version.
16 This program is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License for more details.
21 You should have received a copy of the GNU General Public License
22 along with this program; if not, write to the Free Software
23 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
27 #include "rpc_client.h"
29 /*********************************************************************
30 Decode various spoolss rpc's and info levels
31 ********************************************************************/
33 /**********************************************************************
34 **********************************************************************/
36 static void decode_printer_info_0(TALLOC_CTX
*mem_ctx
, RPC_BUFFER
*buffer
,
37 uint32 returned
, PRINTER_INFO_0
**info
)
42 inf
=TALLOC_ARRAY(mem_ctx
, PRINTER_INFO_0
, returned
);
43 memset(inf
, 0, returned
*sizeof(PRINTER_INFO_0
));
45 prs_set_offset(&buffer
->prs
,0);
47 for (i
=0; i
<returned
; i
++) {
48 smb_io_printer_info_0("", buffer
, &inf
[i
], 0);
54 /**********************************************************************
55 **********************************************************************/
56 static void decode_printer_info_1(TALLOC_CTX
*mem_ctx
, RPC_BUFFER
*buffer
,
57 uint32 returned
, PRINTER_INFO_1
**info
)
62 inf
=TALLOC_ARRAY(mem_ctx
, PRINTER_INFO_1
, returned
);
63 memset(inf
, 0, returned
*sizeof(PRINTER_INFO_1
));
65 prs_set_offset(&buffer
->prs
,0);
67 for (i
=0; i
<returned
; i
++) {
68 smb_io_printer_info_1("", buffer
, &inf
[i
], 0);
74 /**********************************************************************
75 **********************************************************************/
76 static void decode_printer_info_2(TALLOC_CTX
*mem_ctx
, RPC_BUFFER
*buffer
,
77 uint32 returned
, PRINTER_INFO_2
**info
)
82 inf
=TALLOC_ARRAY(mem_ctx
, PRINTER_INFO_2
, returned
);
83 memset(inf
, 0, returned
*sizeof(PRINTER_INFO_2
));
85 prs_set_offset(&buffer
->prs
,0);
87 for (i
=0; i
<returned
; i
++) {
88 /* a little initialization as we go */
89 inf
[i
].secdesc
= NULL
;
90 smb_io_printer_info_2("", buffer
, &inf
[i
], 0);
96 /**********************************************************************
97 **********************************************************************/
98 static void decode_printer_info_3(TALLOC_CTX
*mem_ctx
, RPC_BUFFER
*buffer
,
99 uint32 returned
, PRINTER_INFO_3
**info
)
104 inf
=TALLOC_ARRAY(mem_ctx
, PRINTER_INFO_3
, returned
);
105 memset(inf
, 0, returned
*sizeof(PRINTER_INFO_3
));
107 prs_set_offset(&buffer
->prs
,0);
109 for (i
=0; i
<returned
; i
++) {
110 inf
[i
].secdesc
= NULL
;
111 smb_io_printer_info_3("", buffer
, &inf
[i
], 0);
117 /**********************************************************************
118 **********************************************************************/
119 static void decode_printer_info_7(TALLOC_CTX
*mem_ctx
, RPC_BUFFER
*buffer
,
120 uint32 returned
, PRINTER_INFO_7
**info
)
125 inf
=TALLOC_ARRAY(mem_ctx
, PRINTER_INFO_7
, returned
);
126 memset(inf
, 0, returned
*sizeof(PRINTER_INFO_7
));
128 prs_set_offset(&buffer
->prs
,0);
130 for (i
=0; i
<returned
; i
++) {
131 smb_io_printer_info_7("", buffer
, &inf
[i
], 0);
138 /**********************************************************************
139 **********************************************************************/
140 static void decode_port_info_1(TALLOC_CTX
*mem_ctx
, RPC_BUFFER
*buffer
,
141 uint32 returned
, PORT_INFO_1
**info
)
146 inf
=TALLOC_ARRAY(mem_ctx
, PORT_INFO_1
, returned
);
147 memset(inf
, 0, returned
*sizeof(PORT_INFO_1
));
149 prs_set_offset(&buffer
->prs
, 0);
151 for (i
=0; i
<returned
; i
++) {
152 smb_io_port_info_1("", buffer
, &(inf
[i
]), 0);
158 /**********************************************************************
159 **********************************************************************/
160 static void decode_port_info_2(TALLOC_CTX
*mem_ctx
, RPC_BUFFER
*buffer
,
161 uint32 returned
, PORT_INFO_2
**info
)
166 inf
=TALLOC_ARRAY(mem_ctx
, PORT_INFO_2
, returned
);
167 memset(inf
, 0, returned
*sizeof(PORT_INFO_2
));
169 prs_set_offset(&buffer
->prs
, 0);
171 for (i
=0; i
<returned
; i
++) {
172 smb_io_port_info_2("", buffer
, &(inf
[i
]), 0);
178 /**********************************************************************
179 **********************************************************************/
180 static void decode_printer_driver_1(TALLOC_CTX
*mem_ctx
, RPC_BUFFER
*buffer
,
181 uint32 returned
, DRIVER_INFO_1
**info
)
186 inf
=TALLOC_ARRAY(mem_ctx
, DRIVER_INFO_1
, returned
);
187 memset(inf
, 0, returned
*sizeof(DRIVER_INFO_1
));
189 prs_set_offset(&buffer
->prs
,0);
191 for (i
=0; i
<returned
; i
++) {
192 smb_io_printer_driver_info_1("", buffer
, &(inf
[i
]), 0);
198 /**********************************************************************
199 **********************************************************************/
200 static void decode_printer_driver_2(TALLOC_CTX
*mem_ctx
, RPC_BUFFER
*buffer
,
201 uint32 returned
, DRIVER_INFO_2
**info
)
206 inf
=TALLOC_ARRAY(mem_ctx
, DRIVER_INFO_2
, returned
);
207 memset(inf
, 0, returned
*sizeof(DRIVER_INFO_2
));
209 prs_set_offset(&buffer
->prs
,0);
211 for (i
=0; i
<returned
; i
++) {
212 smb_io_printer_driver_info_2("", buffer
, &(inf
[i
]), 0);
218 /**********************************************************************
219 **********************************************************************/
220 static void decode_printer_driver_3(TALLOC_CTX
*mem_ctx
, RPC_BUFFER
*buffer
,
221 uint32 returned
, DRIVER_INFO_3
**info
)
226 inf
=TALLOC_ARRAY(mem_ctx
, DRIVER_INFO_3
, returned
);
227 memset(inf
, 0, returned
*sizeof(DRIVER_INFO_3
));
229 prs_set_offset(&buffer
->prs
,0);
231 for (i
=0; i
<returned
; i
++) {
232 smb_io_printer_driver_info_3("", buffer
, &(inf
[i
]), 0);
238 /**********************************************************************
239 **********************************************************************/
240 static void decode_printerdriverdir_1 (TALLOC_CTX
*mem_ctx
, RPC_BUFFER
*buffer
,
241 uint32 returned
, DRIVER_DIRECTORY_1
**info
244 DRIVER_DIRECTORY_1
*inf
;
246 inf
=TALLOC_P(mem_ctx
, DRIVER_DIRECTORY_1
);
247 memset(inf
, 0, sizeof(DRIVER_DIRECTORY_1
));
249 prs_set_offset(&buffer
->prs
, 0);
251 smb_io_driverdir_1("", buffer
, inf
, 0);
256 /**********************************************************************
257 **********************************************************************/
259 static void decode_jobs_1(TALLOC_CTX
*mem_ctx
, RPC_BUFFER
*buffer
,
260 uint32 num_jobs
, JOB_INFO_1
**jobs
)
264 *jobs
= TALLOC_ARRAY(mem_ctx
, JOB_INFO_1
, num_jobs
);
265 prs_set_offset(&buffer
->prs
,0);
267 for (i
= 0; i
< num_jobs
; i
++)
268 smb_io_job_info_1("", buffer
, &((*jobs
)[i
]), 0);
271 /**********************************************************************
272 **********************************************************************/
274 static void decode_jobs_2(TALLOC_CTX
*mem_ctx
, RPC_BUFFER
*buffer
,
275 uint32 num_jobs
, JOB_INFO_2
**jobs
)
279 *jobs
= TALLOC_ARRAY(mem_ctx
, JOB_INFO_2
, num_jobs
);
280 prs_set_offset(&buffer
->prs
,0);
282 for (i
= 0; i
< num_jobs
; i
++)
283 smb_io_job_info_2("", buffer
, &((*jobs
)[i
]), 0);
286 /**********************************************************************
287 **********************************************************************/
289 static void decode_forms_1(TALLOC_CTX
*mem_ctx
, RPC_BUFFER
*buffer
,
290 uint32 num_forms
, FORM_1
**forms
)
294 *forms
= TALLOC_ARRAY(mem_ctx
, FORM_1
, num_forms
);
295 prs_set_offset(&buffer
->prs
,0);
297 for (i
= 0; i
< num_forms
; i
++)
298 smb_io_form_1("", buffer
, &((*forms
)[i
]), 0);
301 /**********************************************************************
302 **********************************************************************/
304 WERROR
rpccli_spoolss_open_printer_ex(struct rpc_pipe_client
*cli
, TALLOC_CTX
*mem_ctx
,
305 const char *printername
, const char *datatype
, uint32 access_required
,
306 const char *station
, const char *username
, POLICY_HND
*pol
)
308 prs_struct qbuf
, rbuf
;
309 SPOOL_Q_OPEN_PRINTER_EX in
;
310 SPOOL_R_OPEN_PRINTER_EX out
;
315 make_spoolss_q_open_printer_ex( &in
, printername
, datatype
,
316 access_required
, station
, username
);
318 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_OPENPRINTEREX
,
321 spoolss_io_q_open_printer_ex
,
322 spoolss_io_r_open_printer_ex
,
323 WERR_GENERAL_FAILURE
);
325 memcpy( pol
, &out
.handle
, sizeof(POLICY_HND
) );
330 /**********************************************************************
331 **********************************************************************/
333 WERROR
rpccli_spoolss_close_printer(struct rpc_pipe_client
*cli
, TALLOC_CTX
*mem_ctx
,
336 prs_struct qbuf
, rbuf
;
337 SPOOL_Q_CLOSEPRINTER in
;
338 SPOOL_R_CLOSEPRINTER out
;
343 make_spoolss_q_closeprinter( &in
, pol
);
345 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_CLOSEPRINTER
,
348 spoolss_io_q_closeprinter
,
349 spoolss_io_r_closeprinter
,
350 WERR_GENERAL_FAILURE
);
355 /**********************************************************************
356 **********************************************************************/
358 WERROR
rpccli_spoolss_enum_printers(struct rpc_pipe_client
*cli
, TALLOC_CTX
*mem_ctx
,
359 char *name
, uint32 flags
, uint32 level
,
360 uint32
*num_printers
, PRINTER_INFO_CTR
*ctr
)
362 prs_struct qbuf
, rbuf
;
363 SPOOL_Q_ENUMPRINTERS in
;
364 SPOOL_R_ENUMPRINTERS out
;
372 rpcbuf_init(&buffer
, offered
, mem_ctx
);
373 make_spoolss_q_enumprinters( &in
, flags
, name
, level
, &buffer
, offered
);
375 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_ENUMPRINTERS
,
378 spoolss_io_q_enumprinters
,
379 spoolss_io_r_enumprinters
,
380 WERR_GENERAL_FAILURE
);
382 if ( W_ERROR_EQUAL( out
.status
, WERR_INSUFFICIENT_BUFFER
) ) {
383 offered
= out
.needed
;
388 rpcbuf_init(&buffer
, offered
, mem_ctx
);
389 make_spoolss_q_enumprinters( &in
, flags
, name
, level
, &buffer
, offered
);
391 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_ENUMPRINTERS
,
394 spoolss_io_q_enumprinters
,
395 spoolss_io_r_enumprinters
,
396 WERR_GENERAL_FAILURE
);
399 if ( !W_ERROR_IS_OK(out
.status
) )
404 decode_printer_info_0(mem_ctx
, out
.buffer
, out
.returned
, &ctr
->printers_0
);
407 decode_printer_info_1(mem_ctx
, out
.buffer
, out
.returned
, &ctr
->printers_1
);
410 decode_printer_info_2(mem_ctx
, out
.buffer
, out
.returned
, &ctr
->printers_2
);
413 decode_printer_info_3(mem_ctx
, out
.buffer
, out
.returned
, &ctr
->printers_3
);
417 *num_printers
= out
.returned
;
422 /**********************************************************************
423 **********************************************************************/
425 WERROR
rpccli_spoolss_enum_ports(struct rpc_pipe_client
*cli
, TALLOC_CTX
*mem_ctx
,
426 uint32 level
, uint32
*num_ports
, PORT_INFO_CTR
*ctr
)
428 prs_struct qbuf
, rbuf
;
429 SPOOL_Q_ENUMPORTS in
;
430 SPOOL_R_ENUMPORTS out
;
438 slprintf(server
, sizeof(fstring
)-1, "\\\\%s", cli
->cli
->desthost
);
442 rpcbuf_init(&buffer
, offered
, mem_ctx
);
443 make_spoolss_q_enumports( &in
, server
, level
, &buffer
, offered
);
445 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_ENUMPORTS
,
448 spoolss_io_q_enumports
,
449 spoolss_io_r_enumports
,
450 WERR_GENERAL_FAILURE
);
452 if ( W_ERROR_EQUAL( out
.status
, WERR_INSUFFICIENT_BUFFER
) ) {
453 offered
= out
.needed
;
458 rpcbuf_init(&buffer
, offered
, mem_ctx
);
459 make_spoolss_q_enumports( &in
, server
, level
, &buffer
, offered
);
461 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_ENUMPORTS
,
464 spoolss_io_q_enumports
,
465 spoolss_io_r_enumports
,
466 WERR_GENERAL_FAILURE
);
469 if ( !W_ERROR_IS_OK(out
.status
) )
474 decode_port_info_1(mem_ctx
, out
.buffer
, out
.returned
, &ctr
->port
.info_1
);
477 decode_port_info_2(mem_ctx
, out
.buffer
, out
.returned
, &ctr
->port
.info_2
);
481 *num_ports
= out
.returned
;
486 /**********************************************************************
487 **********************************************************************/
489 WERROR
rpccli_spoolss_getprinter(struct rpc_pipe_client
*cli
, TALLOC_CTX
*mem_ctx
,
490 POLICY_HND
*pol
, uint32 level
,
491 PRINTER_INFO_CTR
*ctr
)
493 prs_struct qbuf
, rbuf
;
494 SPOOL_Q_GETPRINTER in
;
495 SPOOL_R_GETPRINTER out
;
502 /* Initialise input parameters */
505 rpcbuf_init(&buffer
, offered
, mem_ctx
);
506 make_spoolss_q_getprinter( mem_ctx
, &in
, pol
, level
, &buffer
, offered
);
508 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_GETPRINTER
,
511 spoolss_io_q_getprinter
,
512 spoolss_io_r_getprinter
,
513 WERR_GENERAL_FAILURE
);
515 if ( W_ERROR_EQUAL( out
.status
, WERR_INSUFFICIENT_BUFFER
) ) {
516 offered
= out
.needed
;
521 rpcbuf_init(&buffer
, offered
, mem_ctx
);
522 make_spoolss_q_getprinter( mem_ctx
, &in
, pol
, level
, &buffer
, offered
);
524 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_GETPRINTER
,
527 spoolss_io_q_getprinter
,
528 spoolss_io_r_getprinter
,
529 WERR_GENERAL_FAILURE
);
532 if ( !W_ERROR_IS_OK(out
.status
) )
537 decode_printer_info_0(mem_ctx
, out
.buffer
, 1, &ctr
->printers_0
);
540 decode_printer_info_1(mem_ctx
, out
.buffer
, 1, &ctr
->printers_1
);
543 decode_printer_info_2(mem_ctx
, out
.buffer
, 1, &ctr
->printers_2
);
546 decode_printer_info_3(mem_ctx
, out
.buffer
, 1, &ctr
->printers_3
);
549 decode_printer_info_7(mem_ctx
, out
.buffer
, 1, &ctr
->printers_7
);
556 /**********************************************************************
557 **********************************************************************/
559 WERROR
rpccli_spoolss_setprinter(struct rpc_pipe_client
*cli
, TALLOC_CTX
*mem_ctx
,
560 POLICY_HND
*pol
, uint32 level
,
561 PRINTER_INFO_CTR
*ctr
, uint32 command
)
563 prs_struct qbuf
, rbuf
;
564 SPOOL_Q_SETPRINTER in
;
565 SPOOL_R_SETPRINTER out
;
570 make_spoolss_q_setprinter( mem_ctx
, &in
, pol
, level
, ctr
, command
);
572 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_SETPRINTER
,
575 spoolss_io_q_setprinter
,
576 spoolss_io_r_setprinter
,
577 WERR_GENERAL_FAILURE
);
582 /**********************************************************************
583 **********************************************************************/
585 WERROR
rpccli_spoolss_getprinterdriver(struct rpc_pipe_client
*cli
,
587 POLICY_HND
*pol
, uint32 level
,
588 const char *env
, int version
, PRINTER_DRIVER_CTR
*ctr
)
590 prs_struct qbuf
, rbuf
;
591 SPOOL_Q_GETPRINTERDRIVER2 in
;
592 SPOOL_R_GETPRINTERDRIVER2 out
;
600 fstrcpy(server
, cli
->cli
->desthost
);
604 rpcbuf_init(&buffer
, offered
, mem_ctx
);
605 make_spoolss_q_getprinterdriver2( &in
, pol
, env
, level
,
606 version
, 2, &buffer
, offered
);
608 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_GETPRINTERDRIVER2
,
611 spoolss_io_q_getprinterdriver2
,
612 spoolss_io_r_getprinterdriver2
,
613 WERR_GENERAL_FAILURE
);
615 if ( W_ERROR_EQUAL( out
.status
, WERR_INSUFFICIENT_BUFFER
) ) {
616 offered
= out
.needed
;
621 rpcbuf_init(&buffer
, offered
, mem_ctx
);
622 make_spoolss_q_getprinterdriver2( &in
, pol
, env
, level
,
623 version
, 2, &buffer
, offered
);
625 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_GETPRINTERDRIVER2
,
628 spoolss_io_q_getprinterdriver2
,
629 spoolss_io_r_getprinterdriver2
,
630 WERR_GENERAL_FAILURE
);
633 if ( !W_ERROR_IS_OK(out
.status
) )
638 decode_printer_driver_1(mem_ctx
, out
.buffer
, 1, &ctr
->info1
);
641 decode_printer_driver_2(mem_ctx
, out
.buffer
, 1, &ctr
->info2
);
644 decode_printer_driver_3(mem_ctx
, out
.buffer
, 1, &ctr
->info3
);
651 /**********************************************************************
652 **********************************************************************/
654 WERROR
rpccli_spoolss_enumprinterdrivers (struct rpc_pipe_client
*cli
,
656 uint32 level
, const char *env
,
658 PRINTER_DRIVER_CTR
*ctr
)
660 prs_struct qbuf
, rbuf
;
661 SPOOL_Q_ENUMPRINTERDRIVERS in
;
662 SPOOL_R_ENUMPRINTERDRIVERS out
;
670 slprintf(server
, sizeof(fstring
)-1, "\\\\%s", cli
->cli
->desthost
);
674 rpcbuf_init(&buffer
, offered
, mem_ctx
);
675 make_spoolss_q_enumprinterdrivers( &in
, server
, env
, level
,
678 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_ENUMPRINTERDRIVERS
,
681 spoolss_io_q_enumprinterdrivers
,
682 spoolss_io_r_enumprinterdrivers
,
683 WERR_GENERAL_FAILURE
);
685 if ( W_ERROR_EQUAL( out
.status
, WERR_INSUFFICIENT_BUFFER
) ) {
686 offered
= out
.needed
;
691 rpcbuf_init(&buffer
, offered
, mem_ctx
);
692 make_spoolss_q_enumprinterdrivers( &in
, server
, env
, level
,
695 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_ENUMPRINTERDRIVERS
,
698 spoolss_io_q_enumprinterdrivers
,
699 spoolss_io_r_enumprinterdrivers
,
700 WERR_GENERAL_FAILURE
);
703 *num_drivers
= out
.returned
;
705 if ( !W_ERROR_IS_OK(out
.status
) )
708 if ( out
.returned
) {
712 decode_printer_driver_1(mem_ctx
, out
.buffer
, out
.returned
, &ctr
->info1
);
715 decode_printer_driver_2(mem_ctx
, out
.buffer
, out
.returned
, &ctr
->info2
);
718 decode_printer_driver_3(mem_ctx
, out
.buffer
, out
.returned
, &ctr
->info3
);
727 /**********************************************************************
728 **********************************************************************/
730 WERROR
rpccli_spoolss_getprinterdriverdir (struct rpc_pipe_client
*cli
,
732 uint32 level
, char *env
,
733 DRIVER_DIRECTORY_CTR
*ctr
)
735 prs_struct qbuf
, rbuf
;
736 SPOOL_Q_GETPRINTERDRIVERDIR in
;
737 SPOOL_R_GETPRINTERDRIVERDIR out
;
745 slprintf(server
, sizeof(fstring
)-1, "\\\\%s", cli
->cli
->desthost
);
749 rpcbuf_init(&buffer
, offered
, mem_ctx
);
750 make_spoolss_q_getprinterdriverdir( &in
, server
, env
, level
,
753 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_GETPRINTERDRIVERDIRECTORY
,
756 spoolss_io_q_getprinterdriverdir
,
757 spoolss_io_r_getprinterdriverdir
,
758 WERR_GENERAL_FAILURE
);
760 if ( W_ERROR_EQUAL( out
.status
, WERR_INSUFFICIENT_BUFFER
) ) {
761 offered
= out
.needed
;
766 rpcbuf_init(&buffer
, offered
, mem_ctx
);
767 make_spoolss_q_getprinterdriverdir( &in
, server
, env
, level
,
770 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_GETPRINTERDRIVERDIRECTORY
,
773 spoolss_io_q_getprinterdriverdir
,
774 spoolss_io_r_getprinterdriverdir
,
775 WERR_GENERAL_FAILURE
);
778 if (!W_ERROR_IS_OK(out
.status
))
781 decode_printerdriverdir_1(mem_ctx
, out
.buffer
, 1, &ctr
->info1
);
786 /**********************************************************************
787 **********************************************************************/
789 WERROR
rpccli_spoolss_addprinterdriver (struct rpc_pipe_client
*cli
,
790 TALLOC_CTX
*mem_ctx
, uint32 level
,
791 PRINTER_DRIVER_CTR
*ctr
)
793 prs_struct qbuf
, rbuf
;
794 SPOOL_Q_ADDPRINTERDRIVER in
;
795 SPOOL_R_ADDPRINTERDRIVER out
;
801 slprintf(server
, sizeof(fstring
)-1, "\\\\%s", cli
->cli
->desthost
);
804 make_spoolss_q_addprinterdriver( mem_ctx
, &in
, server
, level
, ctr
);
806 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_ADDPRINTERDRIVER
,
809 spoolss_io_q_addprinterdriver
,
810 spoolss_io_r_addprinterdriver
,
811 WERR_GENERAL_FAILURE
);
816 /**********************************************************************
817 **********************************************************************/
819 WERROR
rpccli_spoolss_addprinterex (struct rpc_pipe_client
*cli
, TALLOC_CTX
*mem_ctx
,
820 uint32 level
, PRINTER_INFO_CTR
*ctr
)
822 prs_struct qbuf
, rbuf
;
823 SPOOL_Q_ADDPRINTEREX in
;
824 SPOOL_R_ADDPRINTEREX out
;
825 fstring server
, client
, user
;
830 slprintf(client
, sizeof(fstring
)-1, "\\\\%s", global_myname());
831 slprintf(server
, sizeof(fstring
)-1, "\\\\%s", cli
->cli
->desthost
);
836 fstrcpy (user
, cli
->user_name
);
838 make_spoolss_q_addprinterex( mem_ctx
, &in
, server
, client
,
841 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_ADDPRINTEREX
,
844 spoolss_io_q_addprinterex
,
845 spoolss_io_r_addprinterex
,
846 WERR_GENERAL_FAILURE
);
851 /**********************************************************************
852 **********************************************************************/
854 WERROR
rpccli_spoolss_deleteprinterdriverex(struct rpc_pipe_client
*cli
,
855 TALLOC_CTX
*mem_ctx
, const char *arch
,
856 const char *driver
, int version
)
858 prs_struct qbuf
, rbuf
;
859 SPOOL_Q_DELETEPRINTERDRIVEREX in
;
860 SPOOL_R_DELETEPRINTERDRIVEREX out
;
866 slprintf(server
, sizeof(fstring
)-1, "\\\\%s", cli
->cli
->desthost
);
869 make_spoolss_q_deleteprinterdriverex( mem_ctx
, &in
, server
, arch
, driver
, version
);
871 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_DELETEPRINTERDRIVEREX
,
874 spoolss_io_q_deleteprinterdriverex
,
875 spoolss_io_r_deleteprinterdriverex
,
876 WERR_GENERAL_FAILURE
);
881 /**********************************************************************
882 **********************************************************************/
884 WERROR
rpccli_spoolss_deleteprinterdriver (struct rpc_pipe_client
*cli
,
885 TALLOC_CTX
*mem_ctx
, const char *arch
,
888 prs_struct qbuf
, rbuf
;
889 SPOOL_Q_DELETEPRINTERDRIVER in
;
890 SPOOL_R_DELETEPRINTERDRIVER out
;
896 slprintf(server
, sizeof(fstring
)-1, "\\\\%s", cli
->cli
->desthost
);
899 make_spoolss_q_deleteprinterdriver( mem_ctx
, &in
, server
, arch
, driver
);
901 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_DELETEPRINTERDRIVER
,
904 spoolss_io_q_deleteprinterdriver
,
905 spoolss_io_r_deleteprinterdriver
,
906 WERR_GENERAL_FAILURE
);
911 /**********************************************************************
912 **********************************************************************/
914 WERROR
rpccli_spoolss_getprintprocessordirectory(struct rpc_pipe_client
*cli
,
916 char *name
, char *environment
,
919 prs_struct qbuf
, rbuf
;
920 SPOOL_Q_GETPRINTPROCESSORDIRECTORY in
;
921 SPOOL_R_GETPRINTPROCESSORDIRECTORY out
;
930 rpcbuf_init(&buffer
, offered
, mem_ctx
);
931 make_spoolss_q_getprintprocessordirectory( &in
, name
,
932 environment
, level
, &buffer
, offered
);
934 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_GETPRINTPROCESSORDIRECTORY
,
937 spoolss_io_q_getprintprocessordirectory
,
938 spoolss_io_r_getprintprocessordirectory
,
939 WERR_GENERAL_FAILURE
);
941 if ( W_ERROR_EQUAL( out
.status
, WERR_INSUFFICIENT_BUFFER
) ) {
942 offered
= out
.needed
;
947 rpcbuf_init(&buffer
, offered
, mem_ctx
);
948 make_spoolss_q_getprintprocessordirectory( &in
, name
,
949 environment
, level
, &buffer
, offered
);
951 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_GETPRINTPROCESSORDIRECTORY
,
954 spoolss_io_q_getprintprocessordirectory
,
955 spoolss_io_r_getprintprocessordirectory
,
956 WERR_GENERAL_FAILURE
);
959 if ( !W_ERROR_IS_OK(out
.status
) )
962 fstrcpy(procdir
, "Not implemented!");
967 /**********************************************************************
968 **********************************************************************/
970 WERROR
rpccli_spoolss_addform(struct rpc_pipe_client
*cli
, TALLOC_CTX
*mem_ctx
,
971 POLICY_HND
*handle
, uint32 level
, FORM
*form
)
973 prs_struct qbuf
, rbuf
;
980 make_spoolss_q_addform( &in
, handle
, level
, form
);
982 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_ADDFORM
,
985 spoolss_io_q_addform
,
986 spoolss_io_r_addform
,
987 WERR_GENERAL_FAILURE
);
992 /**********************************************************************
993 **********************************************************************/
995 WERROR
rpccli_spoolss_setform(struct rpc_pipe_client
*cli
, TALLOC_CTX
*mem_ctx
,
996 POLICY_HND
*handle
, uint32 level
,
997 const char *form_name
, FORM
*form
)
999 prs_struct qbuf
, rbuf
;
1001 SPOOL_R_SETFORM out
;
1006 make_spoolss_q_setform( &in
, handle
, level
, form_name
, form
);
1008 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_SETFORM
,
1011 spoolss_io_q_setform
,
1012 spoolss_io_r_setform
,
1013 WERR_GENERAL_FAILURE
);
1018 /**********************************************************************
1019 **********************************************************************/
1021 WERROR
rpccli_spoolss_getform(struct rpc_pipe_client
*cli
, TALLOC_CTX
*mem_ctx
,
1022 POLICY_HND
*handle
, const char *formname
,
1023 uint32 level
, FORM_1
*form
)
1025 prs_struct qbuf
, rbuf
;
1027 SPOOL_R_GETFORM out
;
1035 rpcbuf_init(&buffer
, offered
, mem_ctx
);
1036 make_spoolss_q_getform( &in
, handle
, formname
, level
, &buffer
, offered
);
1038 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_GETFORM
,
1041 spoolss_io_q_getform
,
1042 spoolss_io_r_getform
,
1043 WERR_GENERAL_FAILURE
);
1045 if ( W_ERROR_EQUAL( out
.status
, WERR_INSUFFICIENT_BUFFER
) ) {
1046 offered
= out
.needed
;
1051 rpcbuf_init(&buffer
, offered
, mem_ctx
);
1052 make_spoolss_q_getform( &in
, handle
, formname
, level
, &buffer
, offered
);
1054 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_GETFORM
,
1057 spoolss_io_q_getform
,
1058 spoolss_io_r_getform
,
1059 WERR_GENERAL_FAILURE
);
1062 if (!W_ERROR_IS_OK(out
.status
))
1065 smb_io_form_1("", out
.buffer
, form
, 0);
1070 /**********************************************************************
1071 **********************************************************************/
1073 WERROR
rpccli_spoolss_deleteform(struct rpc_pipe_client
*cli
, TALLOC_CTX
*mem_ctx
,
1074 POLICY_HND
*handle
, const char *form_name
)
1076 prs_struct qbuf
, rbuf
;
1077 SPOOL_Q_DELETEFORM in
;
1078 SPOOL_R_DELETEFORM out
;
1083 make_spoolss_q_deleteform( &in
, handle
, form_name
);
1085 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_DELETEFORM
,
1088 spoolss_io_q_deleteform
,
1089 spoolss_io_r_deleteform
,
1090 WERR_GENERAL_FAILURE
);
1095 /**********************************************************************
1096 **********************************************************************/
1098 WERROR
rpccli_spoolss_enumforms(struct rpc_pipe_client
*cli
, TALLOC_CTX
*mem_ctx
,
1099 POLICY_HND
*handle
, int level
, uint32
*num_forms
,
1102 prs_struct qbuf
, rbuf
;
1103 SPOOL_Q_ENUMFORMS in
;
1104 SPOOL_R_ENUMFORMS out
;
1112 rpcbuf_init(&buffer
, offered
, mem_ctx
);
1113 make_spoolss_q_enumforms( &in
, handle
, level
, &buffer
, offered
);
1115 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_ENUMFORMS
,
1118 spoolss_io_q_enumforms
,
1119 spoolss_io_r_enumforms
,
1120 WERR_GENERAL_FAILURE
);
1122 if ( W_ERROR_EQUAL( out
.status
, WERR_INSUFFICIENT_BUFFER
) ) {
1123 offered
= out
.needed
;
1128 rpcbuf_init(&buffer
, offered
, mem_ctx
);
1129 make_spoolss_q_enumforms( &in
, handle
, level
, &buffer
, offered
);
1131 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_ENUMFORMS
,
1134 spoolss_io_q_enumforms
,
1135 spoolss_io_r_enumforms
,
1136 WERR_GENERAL_FAILURE
);
1139 if (!W_ERROR_IS_OK(out
.status
))
1142 *num_forms
= out
.numofforms
;
1144 decode_forms_1(mem_ctx
, out
.buffer
, *num_forms
, forms
);
1149 /**********************************************************************
1150 **********************************************************************/
1152 WERROR
rpccli_spoolss_enumjobs(struct rpc_pipe_client
*cli
, TALLOC_CTX
*mem_ctx
,
1153 POLICY_HND
*hnd
, uint32 level
, uint32 firstjob
,
1154 uint32 num_jobs
, uint32
*returned
, JOB_INFO_CTR
*ctr
)
1156 prs_struct qbuf
, rbuf
;
1157 SPOOL_Q_ENUMJOBS in
;
1158 SPOOL_R_ENUMJOBS out
;
1166 rpcbuf_init(&buffer
, offered
, mem_ctx
);
1167 make_spoolss_q_enumjobs( &in
, hnd
, firstjob
, num_jobs
, level
,
1170 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_ENUMJOBS
,
1173 spoolss_io_q_enumjobs
,
1174 spoolss_io_r_enumjobs
,
1175 WERR_GENERAL_FAILURE
);
1177 if ( W_ERROR_EQUAL( out
.status
, WERR_INSUFFICIENT_BUFFER
) ) {
1178 offered
= out
.needed
;
1183 rpcbuf_init(&buffer
, offered
, mem_ctx
);
1184 make_spoolss_q_enumjobs( &in
, hnd
, firstjob
, num_jobs
, level
,
1187 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_ENUMJOBS
,
1190 spoolss_io_q_enumjobs
,
1191 spoolss_io_r_enumjobs
,
1192 WERR_GENERAL_FAILURE
);
1195 if (!W_ERROR_IS_OK(out
.status
))
1200 decode_jobs_1(mem_ctx
, out
.buffer
, out
.returned
, &ctr
->job
.job_info_1
);
1203 decode_jobs_2(mem_ctx
, out
.buffer
, out
.returned
, &ctr
->job
.job_info_2
);
1206 DEBUG(3, ("unsupported info level %d", level
));
1210 *returned
= out
.returned
;
1215 /**********************************************************************
1216 **********************************************************************/
1218 WERROR
rpccli_spoolss_setjob(struct rpc_pipe_client
*cli
, TALLOC_CTX
*mem_ctx
,
1219 POLICY_HND
*hnd
, uint32 jobid
, uint32 level
,
1222 prs_struct qbuf
, rbuf
;
1229 make_spoolss_q_setjob( &in
, hnd
, jobid
, level
, command
);
1231 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_SETJOB
,
1234 spoolss_io_q_setjob
,
1235 spoolss_io_r_setjob
,
1236 WERR_GENERAL_FAILURE
);
1241 /**********************************************************************
1242 **********************************************************************/
1244 WERROR
rpccli_spoolss_getjob(struct rpc_pipe_client
*cli
, TALLOC_CTX
*mem_ctx
,
1245 POLICY_HND
*hnd
, uint32 jobid
, uint32 level
,
1248 prs_struct qbuf
, rbuf
;
1258 rpcbuf_init(&buffer
, offered
, mem_ctx
);
1259 make_spoolss_q_getjob( &in
, hnd
, jobid
, level
, &buffer
, offered
);
1261 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_GETJOB
,
1264 spoolss_io_q_getjob
,
1265 spoolss_io_r_getjob
,
1266 WERR_GENERAL_FAILURE
);
1268 if ( W_ERROR_EQUAL( out
.status
, WERR_MORE_DATA
) ) {
1269 offered
= out
.needed
;
1274 rpcbuf_init(&buffer
, offered
, mem_ctx
);
1275 make_spoolss_q_getjob( &in
, hnd
, jobid
, level
, &buffer
, offered
);
1277 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_GETJOB
,
1280 spoolss_io_q_getjob
,
1281 spoolss_io_r_getjob
,
1282 WERR_GENERAL_FAILURE
);
1285 if (!W_ERROR_IS_OK(out
.status
))
1290 decode_jobs_1(mem_ctx
, out
.buffer
, 1, &ctr
->job
.job_info_1
);
1293 decode_jobs_2(mem_ctx
, out
.buffer
, 1, &ctr
->job
.job_info_2
);
1300 /**********************************************************************
1301 **********************************************************************/
1303 WERROR
rpccli_spoolss_startpageprinter(struct rpc_pipe_client
*cli
, TALLOC_CTX
*mem_ctx
,
1306 prs_struct qbuf
, rbuf
;
1307 SPOOL_Q_STARTPAGEPRINTER in
;
1308 SPOOL_R_STARTPAGEPRINTER out
;
1313 make_spoolss_q_startpageprinter( &in
, hnd
);
1315 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_STARTPAGEPRINTER
,
1318 spoolss_io_q_startpageprinter
,
1319 spoolss_io_r_startpageprinter
,
1320 WERR_GENERAL_FAILURE
);
1325 /**********************************************************************
1326 **********************************************************************/
1328 WERROR
rpccli_spoolss_endpageprinter(struct rpc_pipe_client
*cli
, TALLOC_CTX
*mem_ctx
,
1331 prs_struct qbuf
, rbuf
;
1332 SPOOL_Q_ENDPAGEPRINTER in
;
1333 SPOOL_R_ENDPAGEPRINTER out
;
1338 make_spoolss_q_endpageprinter( &in
, hnd
);
1340 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_ENDPAGEPRINTER
,
1343 spoolss_io_q_endpageprinter
,
1344 spoolss_io_r_endpageprinter
,
1345 WERR_GENERAL_FAILURE
);
1350 /**********************************************************************
1351 **********************************************************************/
1353 WERROR
rpccli_spoolss_startdocprinter(struct rpc_pipe_client
*cli
, TALLOC_CTX
*mem_ctx
,
1354 POLICY_HND
*hnd
, char *docname
,
1355 char *outputfile
, char *datatype
,
1358 prs_struct qbuf
, rbuf
;
1359 SPOOL_Q_STARTDOCPRINTER in
;
1360 SPOOL_R_STARTDOCPRINTER out
;
1366 make_spoolss_q_startdocprinter( &in
, hnd
, level
, docname
,
1367 outputfile
, datatype
);
1369 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_STARTDOCPRINTER
,
1372 spoolss_io_q_startdocprinter
,
1373 spoolss_io_r_startdocprinter
,
1374 WERR_GENERAL_FAILURE
);
1381 /**********************************************************************
1382 **********************************************************************/
1384 WERROR
rpccli_spoolss_enddocprinter(struct rpc_pipe_client
*cli
, TALLOC_CTX
*mem_ctx
,
1387 prs_struct qbuf
, rbuf
;
1388 SPOOL_Q_ENDDOCPRINTER in
;
1389 SPOOL_R_ENDDOCPRINTER out
;
1394 make_spoolss_q_enddocprinter( &in
, hnd
);
1396 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_ENDDOCPRINTER
,
1399 spoolss_io_q_enddocprinter
,
1400 spoolss_io_r_enddocprinter
,
1401 WERR_GENERAL_FAILURE
);
1406 /**********************************************************************
1407 **********************************************************************/
1409 WERROR
rpccli_spoolss_getprinterdata(struct rpc_pipe_client
*cli
, TALLOC_CTX
*mem_ctx
,
1410 POLICY_HND
*hnd
, const char *valuename
,
1411 REGISTRY_VALUE
*value
)
1413 prs_struct qbuf
, rbuf
;
1414 SPOOL_Q_GETPRINTERDATA in
;
1415 SPOOL_R_GETPRINTERDATA out
;
1422 make_spoolss_q_getprinterdata( &in
, hnd
, valuename
, offered
);
1424 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_GETPRINTERDATA
,
1427 spoolss_io_q_getprinterdata
,
1428 spoolss_io_r_getprinterdata
,
1429 WERR_GENERAL_FAILURE
);
1431 if ( W_ERROR_EQUAL( out
.status
, WERR_MORE_DATA
) ) {
1432 offered
= out
.needed
;
1437 make_spoolss_q_getprinterdata( &in
, hnd
, valuename
, offered
);
1439 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_GETPRINTERDATA
,
1442 spoolss_io_q_getprinterdata
,
1443 spoolss_io_r_getprinterdata
,
1444 WERR_GENERAL_FAILURE
);
1447 if (!W_ERROR_IS_OK(out
.status
))
1450 /* Return output parameters */
1452 value
->data_p
= TALLOC_MEMDUP(mem_ctx
, out
.data
, out
.needed
);
1453 value
->type
= out
.type
;
1454 value
->size
= out
.size
;
1459 /**********************************************************************
1460 **********************************************************************/
1462 WERROR
rpccli_spoolss_getprinterdataex(struct rpc_pipe_client
*cli
, TALLOC_CTX
*mem_ctx
,
1463 POLICY_HND
*hnd
, const char *keyname
,
1464 const char *valuename
,
1465 REGISTRY_VALUE
*value
)
1467 prs_struct qbuf
, rbuf
;
1468 SPOOL_Q_GETPRINTERDATAEX in
;
1469 SPOOL_R_GETPRINTERDATAEX out
;
1475 make_spoolss_q_getprinterdataex( &in
, hnd
, keyname
, valuename
, offered
);
1477 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_GETPRINTERDATAEX
,
1480 spoolss_io_q_getprinterdataex
,
1481 spoolss_io_r_getprinterdataex
,
1482 WERR_GENERAL_FAILURE
);
1484 if ( W_ERROR_EQUAL( out
.status
, WERR_MORE_DATA
) ) {
1485 offered
= out
.needed
;
1490 make_spoolss_q_getprinterdataex( &in
, hnd
, keyname
, valuename
, offered
);
1492 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_GETPRINTERDATAEX
,
1495 spoolss_io_q_getprinterdataex
,
1496 spoolss_io_r_getprinterdataex
,
1497 WERR_GENERAL_FAILURE
);
1500 if (!W_ERROR_IS_OK(out
.status
))
1503 /* Return output parameters */
1505 value
->data_p
= TALLOC_MEMDUP(mem_ctx
, out
.data
, out
.needed
);
1506 value
->type
= out
.type
;
1507 value
->size
= out
.needed
;
1512 /**********************************************************************
1513 **********************************************************************/
1515 WERROR
rpccli_spoolss_setprinterdata(struct rpc_pipe_client
*cli
, TALLOC_CTX
*mem_ctx
,
1516 POLICY_HND
*hnd
, REGISTRY_VALUE
*value
)
1518 prs_struct qbuf
, rbuf
;
1519 SPOOL_Q_SETPRINTERDATA in
;
1520 SPOOL_R_SETPRINTERDATA out
;
1525 make_spoolss_q_setprinterdata( &in
, hnd
, value
->valuename
,
1526 value
->type
, (char *)value
->data_p
, value
->size
);
1528 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_SETPRINTERDATA
,
1531 spoolss_io_q_setprinterdata
,
1532 spoolss_io_r_setprinterdata
,
1533 WERR_GENERAL_FAILURE
);
1538 /**********************************************************************
1539 **********************************************************************/
1541 WERROR
rpccli_spoolss_setprinterdataex(struct rpc_pipe_client
*cli
, TALLOC_CTX
*mem_ctx
,
1542 POLICY_HND
*hnd
, char *keyname
,
1543 REGISTRY_VALUE
*value
)
1545 prs_struct qbuf
, rbuf
;
1546 SPOOL_Q_SETPRINTERDATAEX in
;
1547 SPOOL_R_SETPRINTERDATAEX out
;
1552 make_spoolss_q_setprinterdataex( &in
, hnd
, keyname
, value
->valuename
,
1553 value
->type
, (char *)value
->data_p
, value
->size
);
1555 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_SETPRINTERDATAEX
,
1558 spoolss_io_q_setprinterdataex
,
1559 spoolss_io_r_setprinterdataex
,
1560 WERR_GENERAL_FAILURE
);
1565 /**********************************************************************
1566 **********************************************************************/
1568 WERROR
rpccli_spoolss_enumprinterdata(struct rpc_pipe_client
*cli
, TALLOC_CTX
*mem_ctx
,
1569 POLICY_HND
*hnd
, uint32 ndx
,
1570 uint32 value_offered
, uint32 data_offered
,
1571 uint32
*value_needed
, uint32
*data_needed
,
1572 REGISTRY_VALUE
*value
)
1574 prs_struct qbuf
, rbuf
;
1575 SPOOL_Q_ENUMPRINTERDATA in
;
1576 SPOOL_R_ENUMPRINTERDATA out
;
1581 make_spoolss_q_enumprinterdata( &in
, hnd
, ndx
, value_offered
, data_offered
);
1583 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_ENUMPRINTERDATA
,
1586 spoolss_io_q_enumprinterdata
,
1587 spoolss_io_r_enumprinterdata
,
1588 WERR_GENERAL_FAILURE
);
1591 *value_needed
= out
.realvaluesize
;
1593 *data_needed
= out
.realdatasize
;
1595 if (!W_ERROR_IS_OK(out
.status
))
1599 rpcstr_pull(value
->valuename
, out
.value
, sizeof(value
->valuename
), -1,
1601 value
->data_p
= TALLOC_MEMDUP(mem_ctx
, out
.data
, out
.realdatasize
);
1602 value
->type
= out
.type
;
1603 value
->size
= out
.realdatasize
;
1609 /**********************************************************************
1610 **********************************************************************/
1612 WERROR
rpccli_spoolss_enumprinterdataex(struct rpc_pipe_client
*cli
, TALLOC_CTX
*mem_ctx
,
1613 POLICY_HND
*hnd
, const char *keyname
,
1616 prs_struct qbuf
, rbuf
;
1617 SPOOL_Q_ENUMPRINTERDATAEX in
;
1618 SPOOL_R_ENUMPRINTERDATAEX out
;
1626 make_spoolss_q_enumprinterdataex( &in
, hnd
, keyname
, offered
);
1628 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_ENUMPRINTERDATAEX
,
1631 spoolss_io_q_enumprinterdataex
,
1632 spoolss_io_r_enumprinterdataex
,
1633 WERR_GENERAL_FAILURE
);
1635 if ( W_ERROR_EQUAL( out
.status
, WERR_MORE_DATA
) ) {
1636 offered
= out
.needed
;
1641 make_spoolss_q_enumprinterdataex( &in
, hnd
, keyname
, offered
);
1643 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_ENUMPRINTERDATAEX
,
1646 spoolss_io_q_enumprinterdataex
,
1647 spoolss_io_r_enumprinterdataex
,
1648 WERR_GENERAL_FAILURE
);
1651 if (!W_ERROR_IS_OK(out
.status
))
1654 for (i
= 0; i
< out
.returned
; i
++) {
1655 PRINTER_ENUM_VALUES
*v
= &out
.ctr
.values
[i
];
1658 rpcstr_pull(name
, v
->valuename
.buffer
, sizeof(name
), -1,
1660 regval_ctr_addvalue(ctr
, name
, v
->type
, (const char *)v
->data
, v
->data_len
);
1666 /**********************************************************************
1667 **********************************************************************/
1669 WERROR
rpccli_spoolss_writeprinter(struct rpc_pipe_client
*cli
, TALLOC_CTX
*mem_ctx
,
1670 POLICY_HND
*hnd
, uint32 data_size
, char *data
,
1671 uint32
*num_written
)
1673 prs_struct qbuf
, rbuf
;
1674 SPOOL_Q_WRITEPRINTER in
;
1675 SPOOL_R_WRITEPRINTER out
;
1680 make_spoolss_q_writeprinter( &in
, hnd
, data_size
, data
);
1682 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_WRITEPRINTER
,
1685 spoolss_io_q_writeprinter
,
1686 spoolss_io_r_writeprinter
,
1687 WERR_GENERAL_FAILURE
);
1690 *num_written
= out
.buffer_written
;
1695 /**********************************************************************
1696 **********************************************************************/
1698 WERROR
rpccli_spoolss_deleteprinterdata(struct rpc_pipe_client
*cli
, TALLOC_CTX
*mem_ctx
,
1699 POLICY_HND
*hnd
, char *valuename
)
1701 prs_struct qbuf
, rbuf
;
1702 SPOOL_Q_DELETEPRINTERDATA in
;
1703 SPOOL_R_DELETEPRINTERDATA out
;
1708 make_spoolss_q_deleteprinterdata( &in
, hnd
, valuename
);
1710 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_DELETEPRINTERDATA
,
1713 spoolss_io_q_deleteprinterdata
,
1714 spoolss_io_r_deleteprinterdata
,
1715 WERR_GENERAL_FAILURE
);
1720 /**********************************************************************
1721 **********************************************************************/
1723 WERROR
rpccli_spoolss_deleteprinterdataex(struct rpc_pipe_client
*cli
, TALLOC_CTX
*mem_ctx
,
1724 POLICY_HND
*hnd
, char *keyname
,
1727 prs_struct qbuf
, rbuf
;
1728 SPOOL_Q_DELETEPRINTERDATAEX in
;
1729 SPOOL_R_DELETEPRINTERDATAEX out
;
1734 make_spoolss_q_deleteprinterdataex( &in
, hnd
, keyname
, valuename
);
1736 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_DELETEPRINTERDATAEX
,
1739 spoolss_io_q_deleteprinterdataex
,
1740 spoolss_io_r_deleteprinterdataex
,
1741 WERR_GENERAL_FAILURE
);
1746 /**********************************************************************
1747 **********************************************************************/
1749 WERROR
rpccli_spoolss_enumprinterkey(struct rpc_pipe_client
*cli
, TALLOC_CTX
*mem_ctx
,
1750 POLICY_HND
*hnd
, const char *keyname
,
1751 uint16
**keylist
, uint32
*len
)
1753 prs_struct qbuf
, rbuf
;
1754 SPOOL_Q_ENUMPRINTERKEY in
;
1755 SPOOL_R_ENUMPRINTERKEY out
;
1761 make_spoolss_q_enumprinterkey( &in
, hnd
, keyname
, offered
);
1763 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_ENUMPRINTERKEY
,
1766 spoolss_io_q_enumprinterkey
,
1767 spoolss_io_r_enumprinterkey
,
1768 WERR_GENERAL_FAILURE
);
1770 if ( W_ERROR_EQUAL( out
.status
, WERR_MORE_DATA
) ) {
1771 offered
= out
.needed
;
1776 make_spoolss_q_enumprinterkey( &in
, hnd
, keyname
, offered
);
1778 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_ENUMPRINTERKEY
,
1781 spoolss_io_q_enumprinterkey
,
1782 spoolss_io_r_enumprinterkey
,
1783 WERR_GENERAL_FAILURE
);
1786 if ( !W_ERROR_IS_OK(out
.status
) )
1790 *keylist
= SMB_MALLOC_ARRAY(uint16
, out
.keys
.buf_len
);
1791 memcpy(*keylist
, out
.keys
.buffer
, out
.keys
.buf_len
* 2);
1793 *len
= out
.keys
.buf_len
* 2;
1799 /**********************************************************************
1800 **********************************************************************/
1802 WERROR
rpccli_spoolss_deleteprinterkey(struct rpc_pipe_client
*cli
, TALLOC_CTX
*mem_ctx
,
1803 POLICY_HND
*hnd
, char *keyname
)
1805 prs_struct qbuf
, rbuf
;
1806 SPOOL_Q_DELETEPRINTERKEY in
;
1807 SPOOL_R_DELETEPRINTERKEY out
;
1812 make_spoolss_q_deleteprinterkey( &in
, hnd
, keyname
);
1814 CLI_DO_RPC_WERR( cli
, mem_ctx
, PI_SPOOLSS
, SPOOLSS_DELETEPRINTERKEY
,
1817 spoolss_io_q_deleteprinterkey
,
1818 spoolss_io_r_deleteprinterkey
,
1819 WERR_GENERAL_FAILURE
);