2 Unix SMB/CIFS implementation.
4 endpoint server for the spoolss pipe
6 Copyright (C) Tim Potter 2004
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24 #include "rpc_server/dcerpc_server.h"
25 #include "librpc/gen_ndr/ndr_spoolss.h"
26 #include "rpc_server/common/common.h"
27 #include "rpc_server/spoolss/dcesrv_spoolss.h"
29 static WERROR spoolss_EnumPrinters1(TALLOC_CTX *mem_ctx,
30 struct ldb_message **msgs, int num_msgs,
33 struct spoolss_PrinterInfo1 *info;
36 info = talloc_array(mem_ctx, struct spoolss_PrinterInfo1, num_msgs);
41 for (i = 0; i < num_msgs; i++) {
42 info[i].flags = samdb_result_uint(msgs[i], "flags", 0);
43 info[i].name = samdb_result_string(msgs[i], "name", "");
44 info[i].description = samdb_result_string(msgs[i], "description", "");
45 info[i].comment = samdb_result_string(msgs[i], "comment", "");
48 ndr_push_array(ndr, NDR_SCALARS|NDR_BUFFERS, info,
49 sizeof(struct spoolss_PrinterInfo1), num_msgs,
50 (ndr_push_flags_fn_t)ndr_push_spoolss_PrinterInfo1);
55 static WERROR spoolss_EnumPrinters2(TALLOC_CTX *mem_ctx,
56 struct ldb_message **msgs, int num_msgs,
59 struct spoolss_PrinterInfo2 *info;
62 info = talloc_array(mem_ctx, struct spoolss_PrinterInfo2, num_msgs);
67 for (i = 0; i < num_msgs; i++) {
68 info[i].servername = samdb_result_string(msgs[i], "servername", "");
69 info[i].printername = samdb_result_string(msgs[i], "printername", "");
70 info[i].sharename = samdb_result_string(msgs[i], "sharename", "");
71 info[i].portname = samdb_result_string(msgs[i], "portname", "");
72 info[i].drivername = samdb_result_string(msgs[i], "drivername", "");
73 info[i].comment = samdb_result_string(msgs[i], "comment", "");
74 info[i].location = samdb_result_string(msgs[i], "location", "");
75 /* DEVICEMODE - eek! */
76 info[i].sepfile = samdb_result_string(msgs[i], "sepfile", "");
77 info[i].printprocessor = samdb_result_string(msgs[i], "printprocessor", "");
78 info[i].datatype = samdb_result_string(msgs[i], "datatype", "");
79 info[i].parameters = samdb_result_string(msgs[i], "parameters", "");
80 /* SECURITY_DESCRIPTOR */
81 info[i].attributes = samdb_result_uint(msgs[i], "attributes", 0);
82 info[i].priority = samdb_result_uint(msgs[i], "priority", 0);
83 info[i].defaultpriority = samdb_result_uint(msgs[i], "defaultpriority", 0);
84 info[i].starttime = samdb_result_uint(msgs[i], "starttime", 0);
85 info[i].untiltime = samdb_result_uint(msgs[i], "untiltime", 0);
86 info[i].status = samdb_result_uint(msgs[i], "status", 0);
87 info[i].cjobs = samdb_result_uint(msgs[i], "cjobs", 0);
88 info[i].averageppm = samdb_result_uint(msgs[i], "averageppm", 0);
91 ndr_push_array(ndr, NDR_SCALARS|NDR_BUFFERS, info,
92 sizeof(struct spoolss_PrinterInfo2), num_msgs,
93 (ndr_push_flags_fn_t)ndr_push_spoolss_PrinterInfo2);
98 static WERROR spoolss_EnumPrinters5(TALLOC_CTX *mem_ctx,
99 struct ldb_message **msgs, int num_msgs,
100 struct ndr_push *ndr)
102 struct spoolss_PrinterInfo5 *info;
105 info = talloc_array(mem_ctx, struct spoolss_PrinterInfo5, num_msgs);
110 for (i = 0; i < num_msgs; i++) {
111 info[i].printername = samdb_result_string(msgs[i], "name", "");
112 info[i].portname = samdb_result_string(msgs[i], "port", "");
113 info[i].attributes = samdb_result_uint(msgs[i], "attributes", 0);
114 info[i].device_not_selected_timeout = samdb_result_uint(msgs[i], "device_not_selected_timeout", 0);
115 info[i].transmission_retry_timeout = samdb_result_uint(msgs[i], "transmission_retry_timeout", 0);
118 ndr_push_array(ndr, NDR_SCALARS|NDR_BUFFERS, info,
119 sizeof(struct spoolss_PrinterInfo5), num_msgs,
120 (ndr_push_flags_fn_t)ndr_push_spoolss_PrinterInfo5);
128 static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
129 struct spoolss_EnumPrinters *r)
131 struct ndr_push *ndr;
134 struct ldb_message **msgs;
137 spoolss_ctx = spoolssdb_connect();
138 if (spoolss_ctx == NULL)
141 ret = spoolssdb_search(spoolss_ctx, mem_ctx, NULL, &msgs, NULL,
142 "(&(objectclass=printer))");
144 ndr = ndr_push_init();
147 *r->out.buf_size = 0;
149 switch(r->in.level) {
151 result = spoolss_EnumPrinters1(mem_ctx, msgs, ret, ndr);
154 result = spoolss_EnumPrinters2(mem_ctx, msgs, ret, ndr);
157 result = spoolss_EnumPrinters5(mem_ctx, msgs, ret, ndr);
160 r->out.buffer = NULL;
161 result = WERR_UNKNOWN_LEVEL;
165 if (*r->in.buf_size < ndr->offset) {
166 *r->out.buf_size = ndr->offset;
167 result = WERR_INSUFFICIENT_BUFFER;
171 r->out.buffer = talloc(mem_ctx, DATA_BLOB);
173 if (!r->out.buffer) {
178 *r->out.buffer = data_blob_talloc(mem_ctx, ndr->data, ndr->offset);
179 *r->out.buf_size = ndr->offset;
183 spoolssdb_close(spoolss_ctx);
192 static WERROR spoolss_OpenPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
193 struct spoolss_OpenPrinter *r)
195 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
202 static WERROR spoolss_SetJob(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
203 struct spoolss_SetJob *r)
205 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
212 static WERROR spoolss_GetJob(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
213 struct spoolss_GetJob *r)
215 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
222 static WERROR spoolss_EnumJobs(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
223 struct spoolss_EnumJobs *r)
225 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
232 static WERROR spoolss_AddPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
233 struct spoolss_AddPrinter *r)
235 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
240 spoolss_DeletePrinter
242 static WERROR spoolss_DeletePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
243 struct spoolss_DeletePrinter *r)
245 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
252 static WERROR spoolss_SetPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
253 struct spoolss_SetPrinter *r)
255 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
262 static WERROR spoolss_GetPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
263 struct spoolss_GetPrinter *r)
265 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
270 spoolss_AddPrinterDriver
272 static WERROR spoolss_AddPrinterDriver(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
273 struct spoolss_AddPrinterDriver *r)
275 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
280 spoolss_EnumPrinterDrivers
282 static WERROR spoolss_EnumPrinterDrivers(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
283 struct spoolss_EnumPrinterDrivers *r)
285 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
290 spoolss_GetPrinterDriver
292 static WERROR spoolss_GetPrinterDriver(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
293 struct spoolss_GetPrinterDriver *r)
295 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
300 spoolss_GetPrinterDriverDirectory
302 static WERROR spoolss_GetPrinterDriverDirectory(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
303 struct spoolss_GetPrinterDriverDirectory *r)
305 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
310 spoolss_DeletePrinterDriver
312 static WERROR spoolss_DeletePrinterDriver(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
313 struct spoolss_DeletePrinterDriver *r)
315 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
320 spoolss_AddPrintProcessor
322 static WERROR spoolss_AddPrintProcessor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
323 struct spoolss_AddPrintProcessor *r)
325 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
330 spoolss_EnumPrintProcessors
332 static WERROR spoolss_EnumPrintProcessors(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
333 struct spoolss_EnumPrintProcessors *r)
335 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
340 spoolss_GetPrintProcessorDirectory
342 static WERROR spoolss_GetPrintProcessorDirectory(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
343 struct spoolss_GetPrintProcessorDirectory *r)
345 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
350 spoolss_StartDocPrinter
352 static WERROR spoolss_StartDocPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
353 struct spoolss_StartDocPrinter *r)
355 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
360 spoolss_StartPagePrinter
362 static WERROR spoolss_StartPagePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
363 struct spoolss_StartPagePrinter *r)
365 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
372 static WERROR spoolss_WritePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
373 struct spoolss_WritePrinter *r)
375 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
380 spoolss_EndPagePrinter
382 static WERROR spoolss_EndPagePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
383 struct spoolss_EndPagePrinter *r)
385 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
392 static WERROR spoolss_AbortPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
393 struct spoolss_AbortPrinter *r)
395 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
402 static WERROR spoolss_ReadPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
403 struct spoolss_ReadPrinter *r)
405 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
410 spoolss_EndDocPrinter
412 static WERROR spoolss_EndDocPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
413 struct spoolss_EndDocPrinter *r)
415 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
422 static WERROR spoolss_AddJob(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
423 struct spoolss_AddJob *r)
425 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
432 static WERROR spoolss_ScheduleJob(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
433 struct spoolss_ScheduleJob *r)
435 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
440 spoolss_GetPrinterData
442 static WERROR spoolss_GetPrinterData(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
443 struct spoolss_GetPrinterData *r)
445 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
450 spoolss_SetPrinterData
452 static WERROR spoolss_SetPrinterData(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
453 struct spoolss_SetPrinterData *r)
455 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
460 spoolss_WaitForPrinterChange
462 static WERROR spoolss_WaitForPrinterChange(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
463 struct spoolss_WaitForPrinterChange *r)
465 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
472 static WERROR spoolss_ClosePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
473 struct spoolss_ClosePrinter *r)
475 struct dcesrv_handle *h;
477 *r->out.handle = *r->in.handle;
479 DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY);
483 ZERO_STRUCTP(r->out.handle);
492 static WERROR spoolss_AddForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
493 struct spoolss_AddForm *r)
495 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
502 static WERROR spoolss_DeleteForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
503 struct spoolss_DeleteForm *r)
505 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
512 static WERROR spoolss_GetForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
513 struct spoolss_GetForm *r)
515 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
522 static WERROR spoolss_SetForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
523 struct spoolss_SetForm *r)
525 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
532 static WERROR spoolss_EnumForms(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
533 struct spoolss_EnumForms *r)
535 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
542 static WERROR spoolss_EnumPorts(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
543 struct spoolss_EnumPorts *r)
545 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
552 static WERROR spoolss_EnumMonitors(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
553 struct spoolss_EnumMonitors *r)
555 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
562 static WERROR spoolss_AddPort(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
563 struct spoolss_AddPort *r)
565 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
570 spoolss_ConfigurePort
572 static WERROR spoolss_ConfigurePort(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
573 struct spoolss_ConfigurePort *r)
575 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
582 static WERROR spoolss_DeletePort(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
583 struct spoolss_DeletePort *r)
585 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
590 spoolss_CreatePrinterIC
592 static WERROR spoolss_CreatePrinterIC(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
593 struct spoolss_CreatePrinterIC *r)
595 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
600 spoolss_PlayGDIScriptOnPrinterIC
602 static WERROR spoolss_PlayGDIScriptOnPrinterIC(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
603 struct spoolss_PlayGDIScriptOnPrinterIC *r)
605 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
610 spoolss_DeletePrinterIC
612 static WERROR spoolss_DeletePrinterIC(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
613 struct spoolss_DeletePrinterIC *r)
615 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
620 spoolss_AddPrinterConnection
622 static WERROR spoolss_AddPrinterConnection(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
623 struct spoolss_AddPrinterConnection *r)
625 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
630 spoolss_DeletePrinterConnection
632 static WERROR spoolss_DeletePrinterConnection(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
633 struct spoolss_DeletePrinterConnection *r)
635 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
640 spoolss_PrinterMessageBox
642 static WERROR spoolss_PrinterMessageBox(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
643 struct spoolss_PrinterMessageBox *r)
645 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
652 static WERROR spoolss_AddMonitor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
653 struct spoolss_AddMonitor *r)
655 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
660 spoolss_DeleteMonitor
662 static WERROR spoolss_DeleteMonitor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
663 struct spoolss_DeleteMonitor *r)
665 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
670 spoolss_DeletePrintProcessor
672 static WERROR spoolss_DeletePrintProcessor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
673 struct spoolss_DeletePrintProcessor *r)
675 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
680 spoolss_AddPrintProvidor
682 static WERROR spoolss_AddPrintProvidor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
683 struct spoolss_AddPrintProvidor *r)
685 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
690 spoolss_DeletePrintProvidor
692 static WERROR spoolss_DeletePrintProvidor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
693 struct spoolss_DeletePrintProvidor *r)
695 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
700 spoolss_EnumPrintProcDataTypes
702 static WERROR spoolss_EnumPrintProcDataTypes(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
703 struct spoolss_EnumPrintProcDataTypes *r)
705 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
712 static WERROR spoolss_ResetPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
713 struct spoolss_ResetPrinter *r)
715 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
720 spoolss_GetPrinterDriver2
722 static WERROR spoolss_GetPrinterDriver2(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
723 struct spoolss_GetPrinterDriver2 *r)
725 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
730 spoolss_FindFirstPrinterChangeNotification
732 static WERROR spoolss_FindFirstPrinterChangeNotification(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
733 struct spoolss_FindFirstPrinterChangeNotification *r)
735 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
740 spoolss_FindNextPrinterChangeNotification
742 static WERROR spoolss_FindNextPrinterChangeNotification(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
743 struct spoolss_FindNextPrinterChangeNotification *r)
745 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
750 spoolss_FindClosePrinterNotify
752 static WERROR spoolss_FindClosePrinterNotify(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
753 struct spoolss_FindClosePrinterNotify *r)
755 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
760 spoolss_RouterFindFirstPrinterChangeNotificationOld
762 static WERROR spoolss_RouterFindFirstPrinterChangeNotificationOld(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
763 struct spoolss_RouterFindFirstPrinterChangeNotificationOld *r)
765 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
770 spoolss_ReplyOpenPrinter
772 static WERROR spoolss_ReplyOpenPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
773 struct spoolss_ReplyOpenPrinter *r)
775 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
780 spoolss_RouterReplyPrinter
782 static WERROR spoolss_RouterReplyPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
783 struct spoolss_RouterReplyPrinter *r)
785 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
790 spoolss_ReplyClosePrinter
792 static WERROR spoolss_ReplyClosePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
793 struct spoolss_ReplyClosePrinter *r)
795 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
802 static WERROR spoolss_AddPortEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
803 struct spoolss_AddPortEx *r)
805 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
810 spoolss_RouterFindFirstPrinterChangeNotification
812 static WERROR spoolss_RouterFindFirstPrinterChangeNotification(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
813 struct spoolss_RouterFindFirstPrinterChangeNotification *r)
815 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
822 static WERROR spoolss_SpoolerInit(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
823 struct spoolss_SpoolerInit *r)
825 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
830 spoolss_ResetPrinterEx
832 static WERROR spoolss_ResetPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
833 struct spoolss_ResetPrinterEx *r)
835 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
840 spoolss_RemoteFindFirstPrinterChangeNotifyEx
842 static WERROR spoolss_RemoteFindFirstPrinterChangeNotifyEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
843 struct spoolss_RemoteFindFirstPrinterChangeNotifyEx *r)
845 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
850 spoolss_RouterRefreshPrinterChangeNotification
852 static WERROR spoolss_RouterRefreshPrinterChangeNotification(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
853 struct spoolss_RouterRefreshPrinterChangeNotification *r)
855 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
860 spoolss_RemoteFindNextPrinterChangeNotifyEx
862 static WERROR spoolss_RemoteFindNextPrinterChangeNotifyEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
863 struct spoolss_RemoteFindNextPrinterChangeNotifyEx *r)
865 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
872 static WERROR spoolss_44(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
873 struct spoolss_44 *r)
875 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
879 static WERROR spoolss_OpenPrinterEx_server(struct dcesrv_call_state *dce_call,
881 struct spoolss_OpenPrinterEx *r)
883 struct spoolss_openprinter_state *state;
884 struct dcesrv_handle *handle;
886 /* Check printername is our name */
888 if (!strequal(r->in.printername + 2, lp_netbios_name()))
889 return WERR_INVALID_PRINTER_NAME;
891 handle = dcesrv_handle_new(dce_call->context, SPOOLSS_HANDLE_SERVER);
896 state = talloc(handle, struct spoolss_openprinter_state);
901 handle->data = state;
903 state->access_mask = r->in.access_mask;
904 *r->out.handle = handle->wire_handle;
909 static WERROR spoolss_OpenPrinterEx_printer(struct dcesrv_call_state *dce_call,
911 struct spoolss_OpenPrinterEx *r)
913 char *server = talloc_strdup(mem_ctx, r->in.printername + 2);
916 pos = strchr(server, '\\');
918 printer = talloc_strdup(mem_ctx, pos + 1);
920 if (!strequal(server, lp_netbios_name()))
921 return WERR_INVALID_PRINTER_NAME;
923 DEBUG(0, ("looking for server %s, printer %s\n", server, printer));
925 return WERR_INVALID_PRINTER_NAME;
929 spoolss_OpenPrinterEx
931 static WERROR spoolss_OpenPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
932 struct spoolss_OpenPrinterEx *r)
934 ZERO_STRUCTP(r->out.handle);
936 /* Printername must start with \\ */
938 if (strncmp(r->in.printername, "\\\\", 2) == 0)
939 return WERR_INVALID_PARAM;
941 if (strchr_m(r->in.printername + 2, '\\'))
942 return spoolss_OpenPrinterEx_server(dce_call, mem_ctx, r);
944 return spoolss_OpenPrinterEx_printer(dce_call, mem_ctx, r);
951 static WERROR spoolss_AddPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
952 struct spoolss_AddPrinterEx *r)
954 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
961 static WERROR spoolss_47(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
962 struct spoolss_47 *r)
964 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
969 spoolss_EnumPrinterData
971 static WERROR spoolss_EnumPrinterData(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
972 struct spoolss_EnumPrinterData *r)
974 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
979 spoolss_DeletePrinterData
981 static WERROR spoolss_DeletePrinterData(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
982 struct spoolss_DeletePrinterData *r)
984 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
991 static WERROR spoolss_4a(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
992 struct spoolss_4a *r)
994 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1001 static WERROR spoolss_4b(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1002 struct spoolss_4b *r)
1004 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1011 static WERROR spoolss_4c(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1012 struct spoolss_4c *r)
1014 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1019 spoolss_SetPrinterDataEx
1021 static WERROR spoolss_SetPrinterDataEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1022 struct spoolss_SetPrinterDataEx *r)
1024 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1029 spoolss_GetPrinterDataEx
1031 static WERROR spoolss_GetPrinterDataEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1032 struct spoolss_GetPrinterDataEx *r)
1034 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1039 spoolss_EnumPrinterDataEx
1041 static WERROR spoolss_EnumPrinterDataEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1042 struct spoolss_EnumPrinterDataEx *r)
1044 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1049 spoolss_EnumPrinterKey
1051 static WERROR spoolss_EnumPrinterKey(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1052 struct spoolss_EnumPrinterKey *r)
1054 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1059 spoolss_DeletePrinterDataEx
1061 static WERROR spoolss_DeletePrinterDataEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1062 struct spoolss_DeletePrinterDataEx *r)
1064 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1069 spoolss_DeletePrinterKey
1071 static WERROR spoolss_DeletePrinterKey(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1072 struct spoolss_DeletePrinterKey *r)
1074 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1081 static WERROR spoolss_53(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1082 struct spoolss_53 *r)
1084 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1089 spoolss_DeletePrinterDriverEx
1091 static WERROR spoolss_DeletePrinterDriverEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1092 struct spoolss_DeletePrinterDriverEx *r)
1094 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1101 static WERROR spoolss_55(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1102 struct spoolss_55 *r)
1104 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1111 static WERROR spoolss_56(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1112 struct spoolss_56 *r)
1114 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1121 static WERROR spoolss_57(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1122 struct spoolss_57 *r)
1124 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1131 static WERROR spoolss_58(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1132 struct spoolss_58 *r)
1134 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1139 spoolss_AddPrinterDriverEx
1141 static WERROR spoolss_AddPrinterDriverEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1142 struct spoolss_AddPrinterDriverEx *r)
1144 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1151 static WERROR spoolss_5a(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1152 struct spoolss_5a *r)
1154 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1161 static WERROR spoolss_5b(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1162 struct spoolss_5b *r)
1164 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1171 static WERROR spoolss_5c(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1172 struct spoolss_5c *r)
1174 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1181 static WERROR spoolss_5d(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1182 struct spoolss_5d *r)
1184 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1191 static WERROR spoolss_5e(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1192 struct spoolss_5e *r)
1194 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1201 static WERROR spoolss_5f(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1202 struct spoolss_5f *r)
1204 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1208 /* include the generated boilerplate */
1209 #include "librpc/gen_ndr/ndr_spoolss_s.c"