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 "librpc/gen_ndr/ndr_spoolss.h"
25 #include "rpc_server/common/common.h"
26 #include "rpc_server/spoolss/dcesrv_spoolss.h"
28 static WERROR spoolss_EnumPrinters1(TALLOC_CTX *mem_ctx,
29 struct ldb_message **msgs, int num_msgs,
32 struct spoolss_PrinterInfo1 *info;
35 info = talloc(mem_ctx, num_msgs * sizeof(struct spoolss_PrinterInfo1));
40 for (i = 0; i < num_msgs; i++) {
41 info[i].flags = samdb_result_uint(msgs[i], "flags", 0);
42 info[i].name = samdb_result_string(msgs[i], "name", "");
43 info[i].description = samdb_result_string(msgs[i], "description", "");
44 info[i].comment = samdb_result_string(msgs[i], "comment", "");
47 ndr_push_array(ndr, NDR_SCALARS|NDR_BUFFERS, info,
48 sizeof(struct spoolss_PrinterInfo1), num_msgs,
49 (ndr_push_flags_fn_t)ndr_push_spoolss_PrinterInfo1);
54 static WERROR spoolss_EnumPrinters2(TALLOC_CTX *mem_ctx,
55 struct ldb_message **msgs, int num_msgs,
58 struct spoolss_PrinterInfo2 *info;
61 info = talloc(mem_ctx, num_msgs * sizeof(struct spoolss_PrinterInfo1));
66 for (i = 0; i < num_msgs; i++) {
67 info[i].servername = samdb_result_string(msgs[i], "servername", "");
68 info[i].printername = samdb_result_string(msgs[i], "printername", "");
69 info[i].sharename = samdb_result_string(msgs[i], "sharename", "");
70 info[i].portname = samdb_result_string(msgs[i], "portname", "");
71 info[i].drivername = samdb_result_string(msgs[i], "drivername", "");
72 info[i].comment = samdb_result_string(msgs[i], "comment", "");
73 info[i].location = samdb_result_string(msgs[i], "location", "");
74 /* DEVICEMODE - eek! */
75 info[i].sepfile = samdb_result_string(msgs[i], "sepfile", "");
76 info[i].printprocessor = samdb_result_string(msgs[i], "printprocessor", "");
77 info[i].datatype = samdb_result_string(msgs[i], "datatype", "");
78 info[i].parameters = samdb_result_string(msgs[i], "parameters", "");
79 /* SECURITY_DESCRIPTOR */
80 info[i].attributes = samdb_result_uint(msgs[i], "attributes", 0);
81 info[i].priority = samdb_result_uint(msgs[i], "priority", 0);
82 info[i].defaultpriority = samdb_result_uint(msgs[i], "defaultpriority", 0);
83 info[i].starttime = samdb_result_uint(msgs[i], "starttime", 0);
84 info[i].untiltime = samdb_result_uint(msgs[i], "untiltime", 0);
85 info[i].status = samdb_result_uint(msgs[i], "status", 0);
86 info[i].cjobs = samdb_result_uint(msgs[i], "cjobs", 0);
87 info[i].averageppm = samdb_result_uint(msgs[i], "averageppm", 0);
90 ndr_push_array(ndr, NDR_SCALARS|NDR_BUFFERS, info,
91 sizeof(struct spoolss_PrinterInfo2), num_msgs,
92 (ndr_push_flags_fn_t)ndr_push_spoolss_PrinterInfo2);
97 static WERROR spoolss_EnumPrinters5(TALLOC_CTX *mem_ctx,
98 struct ldb_message **msgs, int num_msgs,
101 struct spoolss_PrinterInfo5 *info;
104 info = talloc(mem_ctx, num_msgs * sizeof(struct spoolss_PrinterInfo1));
109 for (i = 0; i < num_msgs; i++) {
110 info[i].printername = samdb_result_string(msgs[i], "name", "");
111 info[i].portname = samdb_result_string(msgs[i], "port", "");
112 info[i].attributes = samdb_result_uint(msgs[i], "attributes", 0);
113 info[i].device_not_selected_timeout = samdb_result_uint(msgs[i], "device_not_selected_timeout", 0);
114 info[i].transmission_retry_timeout = samdb_result_uint(msgs[i], "transmission_retry_timeout", 0);
117 ndr_push_array(ndr, NDR_SCALARS|NDR_BUFFERS, info,
118 sizeof(struct spoolss_PrinterInfo5), num_msgs,
119 (ndr_push_flags_fn_t)ndr_push_spoolss_PrinterInfo5);
127 static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
128 struct spoolss_EnumPrinters *r)
130 struct ndr_push *ndr;
133 struct ldb_message **msgs;
136 spoolss_ctx = spoolssdb_connect();
137 if (spoolss_ctx == NULL)
140 ret = spoolssdb_search(spoolss_ctx, mem_ctx, NULL, &msgs, NULL,
141 "(&(objectclass=printer))");
143 ndr = ndr_push_init();
146 *r->out.buf_size = 0;
148 switch(r->in.level) {
150 result = spoolss_EnumPrinters1(mem_ctx, msgs, ret, ndr);
153 result = spoolss_EnumPrinters2(mem_ctx, msgs, ret, ndr);
156 result = spoolss_EnumPrinters5(mem_ctx, msgs, ret, ndr);
159 r->out.buffer = NULL;
160 result = WERR_UNKNOWN_LEVEL;
164 if (*r->in.buf_size < ndr->offset) {
165 *r->out.buf_size = ndr->offset;
166 result = WERR_INSUFFICIENT_BUFFER;
170 r->out.buffer = (DATA_BLOB *)talloc(mem_ctx, sizeof(DATA_BLOB));
172 if (!r->out.buffer) {
177 *r->out.buffer = data_blob_talloc(mem_ctx, ndr->data, ndr->offset);
178 *r->out.buf_size = ndr->offset;
182 spoolssdb_close(spoolss_ctx);
189 destroy connection state
191 static void spoolss_OpenPrinter_close(struct spoolss_openprinter_state *c_state)
193 c_state->reference_count--;
194 if (c_state->reference_count == 0) {
195 talloc_destroy(c_state->mem_ctx);
200 destroy an open connection. This closes the database connection
202 static void spoolss_OpenPrinter_destroy(struct dcesrv_connection *conn, struct dcesrv_handle *h)
204 struct spoolss_openprinter_state *c_state = h->data;
205 spoolss_OpenPrinter_close(c_state);
211 static WERROR spoolss_OpenPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
212 struct spoolss_OpenPrinter *r)
214 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
221 static WERROR spoolss_SetJob(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
222 struct spoolss_SetJob *r)
224 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
231 static WERROR spoolss_GetJob(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
232 struct spoolss_GetJob *r)
234 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
241 static WERROR spoolss_EnumJobs(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
242 struct spoolss_EnumJobs *r)
244 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
251 static WERROR spoolss_AddPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
252 struct spoolss_AddPrinter *r)
254 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
259 spoolss_DeletePrinter
261 static WERROR spoolss_DeletePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
262 struct spoolss_DeletePrinter *r)
264 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
271 static WERROR spoolss_SetPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
272 struct spoolss_SetPrinter *r)
274 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
281 static WERROR spoolss_GetPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
282 struct spoolss_GetPrinter *r)
284 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
289 spoolss_AddPrinterDriver
291 static WERROR spoolss_AddPrinterDriver(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
292 struct spoolss_AddPrinterDriver *r)
294 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
299 spoolss_EnumPrinterDrivers
301 static WERROR spoolss_EnumPrinterDrivers(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
302 struct spoolss_EnumPrinterDrivers *r)
304 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
309 spoolss_GetPrinterDriver
311 static WERROR spoolss_GetPrinterDriver(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
312 struct spoolss_GetPrinterDriver *r)
314 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
319 spoolss_GetPrinterDriverDirectory
321 static WERROR spoolss_GetPrinterDriverDirectory(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
322 struct spoolss_GetPrinterDriverDirectory *r)
324 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
329 spoolss_DeletePrinterDriver
331 static WERROR spoolss_DeletePrinterDriver(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
332 struct spoolss_DeletePrinterDriver *r)
334 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
339 spoolss_AddPrintProcessor
341 static WERROR spoolss_AddPrintProcessor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
342 struct spoolss_AddPrintProcessor *r)
344 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
349 spoolss_EnumPrintProcessors
351 static WERROR spoolss_EnumPrintProcessors(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
352 struct spoolss_EnumPrintProcessors *r)
354 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
359 spoolss_GetPrintProcessorDirectory
361 static WERROR spoolss_GetPrintProcessorDirectory(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
362 struct spoolss_GetPrintProcessorDirectory *r)
364 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
369 spoolss_StartDocPrinter
371 static WERROR spoolss_StartDocPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
372 struct spoolss_StartDocPrinter *r)
374 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
379 spoolss_StartPagePrinter
381 static WERROR spoolss_StartPagePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
382 struct spoolss_StartPagePrinter *r)
384 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
391 static WERROR spoolss_WritePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
392 struct spoolss_WritePrinter *r)
394 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
399 spoolss_EndPagePrinter
401 static WERROR spoolss_EndPagePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
402 struct spoolss_EndPagePrinter *r)
404 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
411 static WERROR spoolss_AbortPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
412 struct spoolss_AbortPrinter *r)
414 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
421 static WERROR spoolss_ReadPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
422 struct spoolss_ReadPrinter *r)
424 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
429 spoolss_EndDocPrinter
431 static WERROR spoolss_EndDocPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
432 struct spoolss_EndDocPrinter *r)
434 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
441 static WERROR spoolss_AddJob(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
442 struct spoolss_AddJob *r)
444 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
451 static WERROR spoolss_ScheduleJob(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
452 struct spoolss_ScheduleJob *r)
454 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
459 spoolss_GetPrinterData
461 static WERROR spoolss_GetPrinterData(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
462 struct spoolss_GetPrinterData *r)
464 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
469 spoolss_SetPrinterData
471 static WERROR spoolss_SetPrinterData(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
472 struct spoolss_SetPrinterData *r)
474 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
479 spoolss_WaitForPrinterChange
481 static WERROR spoolss_WaitForPrinterChange(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
482 struct spoolss_WaitForPrinterChange *r)
484 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
491 static WERROR spoolss_ClosePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
492 struct spoolss_ClosePrinter *r)
494 struct dcesrv_handle *h;
496 *r->out.handle = *r->in.handle;
498 DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY);
500 /* this causes the callback s_XXX_destroy() to be called by
501 the handle destroy code which destroys the state associated
503 dcesrv_handle_destroy(dce_call->conn, h);
505 ZERO_STRUCTP(r->out.handle);
514 static WERROR spoolss_AddForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
515 struct spoolss_AddForm *r)
517 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
524 static WERROR spoolss_DeleteForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
525 struct spoolss_DeleteForm *r)
527 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
534 static WERROR spoolss_GetForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
535 struct spoolss_GetForm *r)
537 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
544 static WERROR spoolss_SetForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
545 struct spoolss_SetForm *r)
547 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
554 static WERROR spoolss_EnumForms(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
555 struct spoolss_EnumForms *r)
557 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
564 static WERROR spoolss_EnumPorts(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
565 struct spoolss_EnumPorts *r)
567 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
574 static WERROR spoolss_EnumMonitors(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
575 struct spoolss_EnumMonitors *r)
577 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
584 static WERROR spoolss_AddPort(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
585 struct spoolss_AddPort *r)
587 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
592 spoolss_ConfigurePort
594 static WERROR spoolss_ConfigurePort(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
595 struct spoolss_ConfigurePort *r)
597 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
604 static WERROR spoolss_DeletePort(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
605 struct spoolss_DeletePort *r)
607 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
612 spoolss_CreatePrinterIC
614 static WERROR spoolss_CreatePrinterIC(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
615 struct spoolss_CreatePrinterIC *r)
617 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
622 spoolss_PlayGDIScriptOnPrinterIC
624 static WERROR spoolss_PlayGDIScriptOnPrinterIC(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
625 struct spoolss_PlayGDIScriptOnPrinterIC *r)
627 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
632 spoolss_DeletePrinterIC
634 static WERROR spoolss_DeletePrinterIC(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
635 struct spoolss_DeletePrinterIC *r)
637 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
642 spoolss_AddPrinterConnection
644 static WERROR spoolss_AddPrinterConnection(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
645 struct spoolss_AddPrinterConnection *r)
647 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
652 spoolss_DeletePrinterConnection
654 static WERROR spoolss_DeletePrinterConnection(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
655 struct spoolss_DeletePrinterConnection *r)
657 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
662 spoolss_PrinterMessageBox
664 static WERROR spoolss_PrinterMessageBox(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
665 struct spoolss_PrinterMessageBox *r)
667 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
674 static WERROR spoolss_AddMonitor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
675 struct spoolss_AddMonitor *r)
677 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
682 spoolss_DeleteMonitor
684 static WERROR spoolss_DeleteMonitor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
685 struct spoolss_DeleteMonitor *r)
687 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
692 spoolss_DeletePrintProcessor
694 static WERROR spoolss_DeletePrintProcessor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
695 struct spoolss_DeletePrintProcessor *r)
697 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
702 spoolss_AddPrintProvidor
704 static WERROR spoolss_AddPrintProvidor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
705 struct spoolss_AddPrintProvidor *r)
707 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
712 spoolss_DeletePrintProvidor
714 static WERROR spoolss_DeletePrintProvidor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
715 struct spoolss_DeletePrintProvidor *r)
717 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
722 spoolss_EnumPrintProcDataTypes
724 static WERROR spoolss_EnumPrintProcDataTypes(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
725 struct spoolss_EnumPrintProcDataTypes *r)
727 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
734 static WERROR spoolss_ResetPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
735 struct spoolss_ResetPrinter *r)
737 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
742 spoolss_GetPrinterDriver2
744 static WERROR spoolss_GetPrinterDriver2(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
745 struct spoolss_GetPrinterDriver2 *r)
747 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
752 spoolss_FindFirstPrinterChangeNotification
754 static WERROR spoolss_FindFirstPrinterChangeNotification(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
755 struct spoolss_FindFirstPrinterChangeNotification *r)
757 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
762 spoolss_FindNextPrinterChangeNotification
764 static WERROR spoolss_FindNextPrinterChangeNotification(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
765 struct spoolss_FindNextPrinterChangeNotification *r)
767 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
772 spoolss_FindClosePrinterNotify
774 static WERROR spoolss_FindClosePrinterNotify(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
775 struct spoolss_FindClosePrinterNotify *r)
777 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
782 spoolss_RouterFindFirstPrinterChangeNotificationOld
784 static WERROR spoolss_RouterFindFirstPrinterChangeNotificationOld(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
785 struct spoolss_RouterFindFirstPrinterChangeNotificationOld *r)
787 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
792 spoolss_ReplyOpenPrinter
794 static WERROR spoolss_ReplyOpenPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
795 struct spoolss_ReplyOpenPrinter *r)
797 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
802 spoolss_RouterReplyPrinter
804 static WERROR spoolss_RouterReplyPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
805 struct spoolss_RouterReplyPrinter *r)
807 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
812 spoolss_ReplyClosePrinter
814 static WERROR spoolss_ReplyClosePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
815 struct spoolss_ReplyClosePrinter *r)
817 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
824 static WERROR spoolss_AddPortEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
825 struct spoolss_AddPortEx *r)
827 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
832 spoolss_RouterFindFirstPrinterChangeNotification
834 static WERROR spoolss_RouterFindFirstPrinterChangeNotification(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
835 struct spoolss_RouterFindFirstPrinterChangeNotification *r)
837 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
844 static WERROR spoolss_SpoolerInit(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
845 struct spoolss_SpoolerInit *r)
847 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
852 spoolss_ResetPrinterEx
854 static WERROR spoolss_ResetPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
855 struct spoolss_ResetPrinterEx *r)
857 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
862 spoolss_RemoteFindFirstPrinterChangeNotifyEx
864 static WERROR spoolss_RemoteFindFirstPrinterChangeNotifyEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
865 struct spoolss_RemoteFindFirstPrinterChangeNotifyEx *r)
867 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
872 spoolss_RouterRefreshPrinterChangeNotification
874 static WERROR spoolss_RouterRefreshPrinterChangeNotification(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
875 struct spoolss_RouterRefreshPrinterChangeNotification *r)
877 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
882 spoolss_RemoteFindNextPrinterChangeNotifyEx
884 static WERROR spoolss_RemoteFindNextPrinterChangeNotifyEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
885 struct spoolss_RemoteFindNextPrinterChangeNotifyEx *r)
887 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
894 static WERROR spoolss_44(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
895 struct spoolss_44 *r)
897 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
901 static WERROR spoolss_OpenPrinterEx_server(struct dcesrv_call_state *dce_call,
903 struct spoolss_OpenPrinterEx *r)
905 struct spoolss_openprinter_state *state;
906 struct dcesrv_handle *handle;
907 TALLOC_CTX *op_mem_ctx;
909 /* Check printername is our name */
911 if (!strequal(r->in.printername + 2, lp_netbios_name()))
912 return WERR_INVALID_PRINTER_NAME;
914 op_mem_ctx = talloc_init("spoolss_OpenPrinter");
919 state = talloc_p(op_mem_ctx, struct spoolss_openprinter_state);
923 state->mem_ctx = op_mem_ctx;
925 handle = dcesrv_handle_new(dce_call->conn, SPOOLSS_HANDLE_SERVER);
927 talloc_destroy(state->mem_ctx);
931 handle->data = state;
932 handle->destroy = spoolss_OpenPrinter_destroy;
934 state->reference_count = 1;
935 state->access_mask = r->in.access_mask;
936 *r->out.handle = handle->wire_handle;
941 static WERROR spoolss_OpenPrinterEx_printer(struct dcesrv_call_state *dce_call,
943 struct spoolss_OpenPrinterEx *r)
945 char *server = talloc_strdup(mem_ctx, r->in.printername + 2);
948 pos = strchr(server, '\\');
950 printer = talloc_strdup(mem_ctx, pos + 1);
952 if (!strequal(server, lp_netbios_name()))
953 return WERR_INVALID_PRINTER_NAME;
955 DEBUG(0, ("looking for server %s, printer %s\n", server, printer));
957 return WERR_INVALID_PRINTER_NAME;
961 spoolss_OpenPrinterEx
963 static WERROR spoolss_OpenPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
964 struct spoolss_OpenPrinterEx *r)
966 ZERO_STRUCTP(r->out.handle);
968 /* Printername must start with \\ */
970 if (strncmp(r->in.printername, "\\\\", 2) == 0)
971 return WERR_INVALID_PARAM;
973 if (strchr_m(r->in.printername + 2, '\\'))
974 return spoolss_OpenPrinterEx_server(dce_call, mem_ctx, r);
976 return spoolss_OpenPrinterEx_printer(dce_call, mem_ctx, r);
983 static WERROR spoolss_AddPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
984 struct spoolss_AddPrinterEx *r)
986 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
993 static WERROR spoolss_47(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
994 struct spoolss_47 *r)
996 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1001 spoolss_EnumPrinterData
1003 static WERROR spoolss_EnumPrinterData(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1004 struct spoolss_EnumPrinterData *r)
1006 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1011 spoolss_DeletePrinterData
1013 static WERROR spoolss_DeletePrinterData(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1014 struct spoolss_DeletePrinterData *r)
1016 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1023 static WERROR spoolss_4a(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1024 struct spoolss_4a *r)
1026 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1033 static WERROR spoolss_4b(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1034 struct spoolss_4b *r)
1036 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1043 static WERROR spoolss_4c(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1044 struct spoolss_4c *r)
1046 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1051 spoolss_SetPrinterDataEx
1053 static WERROR spoolss_SetPrinterDataEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1054 struct spoolss_SetPrinterDataEx *r)
1056 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1061 spoolss_GetPrinterDataEx
1063 static WERROR spoolss_GetPrinterDataEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1064 struct spoolss_GetPrinterDataEx *r)
1066 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1071 spoolss_EnumPrinterDataEx
1073 static WERROR spoolss_EnumPrinterDataEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1074 struct spoolss_EnumPrinterDataEx *r)
1076 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1081 spoolss_EnumPrinterKey
1083 static WERROR spoolss_EnumPrinterKey(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1084 struct spoolss_EnumPrinterKey *r)
1086 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1091 spoolss_DeletePrinterDataEx
1093 static WERROR spoolss_DeletePrinterDataEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1094 struct spoolss_DeletePrinterDataEx *r)
1096 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1101 spoolss_DeletePrinterKey
1103 static WERROR spoolss_DeletePrinterKey(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1104 struct spoolss_DeletePrinterKey *r)
1106 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1113 static WERROR spoolss_53(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1114 struct spoolss_53 *r)
1116 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1121 spoolss_DeletePrinterDriverEx
1123 static WERROR spoolss_DeletePrinterDriverEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1124 struct spoolss_DeletePrinterDriverEx *r)
1126 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1133 static WERROR spoolss_55(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1134 struct spoolss_55 *r)
1136 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1143 static WERROR spoolss_56(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1144 struct spoolss_56 *r)
1146 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1153 static WERROR spoolss_57(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1154 struct spoolss_57 *r)
1156 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1163 static WERROR spoolss_58(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1164 struct spoolss_58 *r)
1166 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1171 spoolss_AddPrinterDriverEx
1173 static WERROR spoolss_AddPrinterDriverEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1174 struct spoolss_AddPrinterDriverEx *r)
1176 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1183 static WERROR spoolss_5a(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1184 struct spoolss_5a *r)
1186 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1193 static WERROR spoolss_5b(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1194 struct spoolss_5b *r)
1196 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1203 static WERROR spoolss_5c(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1204 struct spoolss_5c *r)
1206 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1213 static WERROR spoolss_5d(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1214 struct spoolss_5d *r)
1216 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1223 static WERROR spoolss_5e(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1224 struct spoolss_5e *r)
1226 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1233 static WERROR spoolss_5f(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1234 struct spoolss_5f *r)
1236 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1240 /* include the generated boilerplate */
1241 #include "librpc/gen_ndr/ndr_spoolss_s.c"