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"
32 static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
33 struct spoolss_EnumPrinters *r)
36 struct ldb_message **msgs;
39 union spoolss_PrinterInfo *info;
45 spoolss_ctx = spoolssdb_connect();
46 W_ERROR_HAVE_NO_MEMORY(spoolss_ctx);
48 count = spoolssdb_search(spoolss_ctx, mem_ctx, NULL, &msgs, NULL,
49 "(&(objectclass=printer))");
50 spoolssdb_close(spoolss_ctx);
52 if (count == 0) return WERR_OK;
53 if (count < 0) return WERR_GENERAL_FAILURE;
55 info = talloc_array(mem_ctx, union spoolss_PrinterInfo, count);
56 W_ERROR_HAVE_NO_MEMORY(info);
60 for (i = 0; i < count; i++) {
61 info[i].info1.flags = samdb_result_uint(msgs[i], "flags", 0);
63 info[i].info1.name = samdb_result_string(msgs[i], "name", "");
64 W_ERROR_HAVE_NO_MEMORY(info[i].info1.name);
66 info[i].info1.description = samdb_result_string(msgs[i], "description", "");
67 W_ERROR_HAVE_NO_MEMORY(info[i].info1.description);
69 info[i].info1.comment = samdb_result_string(msgs[i], "comment", NULL);
73 for (i = 0; i < count; i++) {
74 info[i].info2.servername = samdb_result_string(msgs[i], "servername", "");
75 W_ERROR_HAVE_NO_MEMORY(info[i].info2.servername);
77 info[i].info2.printername = samdb_result_string(msgs[i], "printername", "");
78 W_ERROR_HAVE_NO_MEMORY(info[i].info2.printername);
80 info[i].info2.sharename = samdb_result_string(msgs[i], "sharename", "");
81 W_ERROR_HAVE_NO_MEMORY(info[i].info2.sharename);
83 info[i].info2.portname = samdb_result_string(msgs[i], "portname", "");
84 W_ERROR_HAVE_NO_MEMORY(info[i].info2.portname);
86 info[i].info2.drivername = samdb_result_string(msgs[i], "drivername", "");
87 W_ERROR_HAVE_NO_MEMORY(info[i].info2.drivername);
89 info[i].info2.comment = samdb_result_string(msgs[i], "comment", NULL);
91 info[i].info2.location = samdb_result_string(msgs[i], "location", NULL);
93 info[i].info2.devmode = NULL;
95 info[i].info2.sepfile = samdb_result_string(msgs[i], "sepfile", NULL);
97 info[i].info2.printprocessor = samdb_result_string(msgs[i], "printprocessor", "");
98 W_ERROR_HAVE_NO_MEMORY(info[i].info2.printprocessor);
100 info[i].info2.datatype = samdb_result_string(msgs[i], "datatype", "");
101 W_ERROR_HAVE_NO_MEMORY(info[i].info2.datatype);
103 info[i].info2.parameters = samdb_result_string(msgs[i], "parameters", NULL);
105 info[i].info2.secdesc = NULL;
107 info[i].info2.attributes = samdb_result_uint(msgs[i], "attributes", 0);
108 info[i].info2.priority = samdb_result_uint(msgs[i], "priority", 0);
109 info[i].info2.defaultpriority = samdb_result_uint(msgs[i], "defaultpriority", 0);
110 info[i].info2.starttime = samdb_result_uint(msgs[i], "starttime", 0);
111 info[i].info2.untiltime = samdb_result_uint(msgs[i], "untiltime", 0);
112 info[i].info2.status = samdb_result_uint(msgs[i], "status", 0);
113 info[i].info2.cjobs = samdb_result_uint(msgs[i], "cjobs", 0);
114 info[i].info2.averageppm = samdb_result_uint(msgs[i], "averageppm", 0);
118 for (i = 0; i < count; i++) {
119 info[i].info4.printername = samdb_result_string(msgs[i], "printername", "");
120 W_ERROR_HAVE_NO_MEMORY(info[i].info2.printername);
122 info[i].info4.servername = samdb_result_string(msgs[i], "servername", "");
123 W_ERROR_HAVE_NO_MEMORY(info[i].info2.servername);
125 info[i].info4.attributes = samdb_result_uint(msgs[i], "attributes", 0);
129 for (i = 0; i < count; i++) {
130 info[i].info5.printername = samdb_result_string(msgs[i], "name", "");
131 W_ERROR_HAVE_NO_MEMORY(info[i].info5.printername);
133 info[i].info5.portname = samdb_result_string(msgs[i], "port", "");
134 W_ERROR_HAVE_NO_MEMORY(info[i].info5.portname);
136 info[i].info5.attributes = samdb_result_uint(msgs[i], "attributes", 0);
137 info[i].info5.device_not_selected_timeout = samdb_result_uint(msgs[i], "device_not_selected_timeout", 0);
138 info[i].info5.transmission_retry_timeout = samdb_result_uint(msgs[i], "transmission_retry_timeout", 0);
143 return WERR_UNKNOWN_LEVEL;
146 static WERROR spoolss_OpenPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
147 struct spoolss_OpenPrinterEx *r);
151 static WERROR spoolss_OpenPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
152 struct spoolss_OpenPrinter *r)
155 struct spoolss_OpenPrinterEx *r2;
157 r2 = talloc(mem_ctx, struct spoolss_OpenPrinterEx);
158 W_ERROR_HAVE_NO_MEMORY(r2);
160 r2->in.printername = r->in.printername;
161 r2->in.datatype = r->in.datatype;
162 r2->in.devmode_ctr = r->in.devmode_ctr;
163 r2->in.access_mask = r->in.access_mask;
165 r2->in.userlevel.level1 = NULL;
167 r2->out.handle = r->out.handle;
169 /* TODO: we should take care about async replies here,
170 if spoolss_OpenPrinterEx() would be async!
172 status = spoolss_OpenPrinterEx(dce_call, mem_ctx, r2);
174 r->out.handle = r2->out.handle;
183 static WERROR spoolss_SetJob(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
184 struct spoolss_SetJob *r)
186 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
193 static WERROR spoolss_GetJob(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
194 struct spoolss_GetJob *r)
196 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
203 static WERROR spoolss_EnumJobs(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
204 struct spoolss_EnumJobs *r)
206 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
213 static WERROR spoolss_AddPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
214 struct spoolss_AddPrinter *r)
216 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
221 spoolss_DeletePrinter
223 static WERROR spoolss_DeletePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
224 struct spoolss_DeletePrinter *r)
226 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
233 static WERROR spoolss_SetPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
234 struct spoolss_SetPrinter *r)
236 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
243 static WERROR spoolss_GetPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
244 struct spoolss_GetPrinter *r)
246 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
251 spoolss_AddPrinterDriver
253 static WERROR spoolss_AddPrinterDriver(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
254 struct spoolss_AddPrinterDriver *r)
256 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
261 spoolss_EnumPrinterDrivers
263 static WERROR spoolss_EnumPrinterDrivers(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
264 struct spoolss_EnumPrinterDrivers *r)
266 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
271 spoolss_GetPrinterDriver
273 static WERROR spoolss_GetPrinterDriver(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
274 struct spoolss_GetPrinterDriver *r)
276 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
281 spoolss_GetPrinterDriverDirectory
283 static WERROR spoolss_GetPrinterDriverDirectory(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
284 struct spoolss_GetPrinterDriverDirectory *r)
286 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
291 spoolss_DeletePrinterDriver
293 static WERROR spoolss_DeletePrinterDriver(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
294 struct spoolss_DeletePrinterDriver *r)
296 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
301 spoolss_AddPrintProcessor
303 static WERROR spoolss_AddPrintProcessor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
304 struct spoolss_AddPrintProcessor *r)
306 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
311 spoolss_EnumPrintProcessors
313 static WERROR spoolss_EnumPrintProcessors(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
314 struct spoolss_EnumPrintProcessors *r)
316 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
321 spoolss_GetPrintProcessorDirectory
323 static WERROR spoolss_GetPrintProcessorDirectory(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
324 struct spoolss_GetPrintProcessorDirectory *r)
326 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
331 spoolss_StartDocPrinter
333 static WERROR spoolss_StartDocPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
334 struct spoolss_StartDocPrinter *r)
336 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
341 spoolss_StartPagePrinter
343 static WERROR spoolss_StartPagePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
344 struct spoolss_StartPagePrinter *r)
346 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
353 static WERROR spoolss_WritePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
354 struct spoolss_WritePrinter *r)
356 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
361 spoolss_EndPagePrinter
363 static WERROR spoolss_EndPagePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
364 struct spoolss_EndPagePrinter *r)
366 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
373 static WERROR spoolss_AbortPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
374 struct spoolss_AbortPrinter *r)
376 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
383 static WERROR spoolss_ReadPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
384 struct spoolss_ReadPrinter *r)
386 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
391 spoolss_EndDocPrinter
393 static WERROR spoolss_EndDocPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
394 struct spoolss_EndDocPrinter *r)
396 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
403 static WERROR spoolss_AddJob(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
404 struct spoolss_AddJob *r)
406 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
413 static WERROR spoolss_ScheduleJob(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
414 struct spoolss_ScheduleJob *r)
416 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
421 spoolss_GetPrinterData
423 static WERROR spoolss_GetPrinterData(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
424 struct spoolss_GetPrinterData *r)
426 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
431 spoolss_SetPrinterData
433 static WERROR spoolss_SetPrinterData(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
434 struct spoolss_SetPrinterData *r)
436 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
441 spoolss_WaitForPrinterChange
443 static WERROR spoolss_WaitForPrinterChange(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
444 struct spoolss_WaitForPrinterChange *r)
446 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
453 static WERROR spoolss_ClosePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
454 struct spoolss_ClosePrinter *r)
456 struct dcesrv_handle *h;
458 *r->out.handle = *r->in.handle;
460 DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY);
464 ZERO_STRUCTP(r->out.handle);
473 static WERROR spoolss_AddForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
474 struct spoolss_AddForm *r)
476 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
483 static WERROR spoolss_DeleteForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
484 struct spoolss_DeleteForm *r)
486 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
493 static WERROR spoolss_GetForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
494 struct spoolss_GetForm *r)
496 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
503 static WERROR spoolss_SetForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
504 struct spoolss_SetForm *r)
506 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
513 static WERROR spoolss_EnumForms(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
514 struct spoolss_EnumForms *r)
516 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
523 static WERROR spoolss_EnumPorts(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
524 struct spoolss_EnumPorts *r)
526 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
533 static WERROR spoolss_EnumMonitors(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
534 struct spoolss_EnumMonitors *r)
536 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
543 static WERROR spoolss_AddPort(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
544 struct spoolss_AddPort *r)
546 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
551 spoolss_ConfigurePort
553 static WERROR spoolss_ConfigurePort(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
554 struct spoolss_ConfigurePort *r)
556 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
563 static WERROR spoolss_DeletePort(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
564 struct spoolss_DeletePort *r)
566 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
571 spoolss_CreatePrinterIC
573 static WERROR spoolss_CreatePrinterIC(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
574 struct spoolss_CreatePrinterIC *r)
576 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
581 spoolss_PlayGDIScriptOnPrinterIC
583 static WERROR spoolss_PlayGDIScriptOnPrinterIC(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
584 struct spoolss_PlayGDIScriptOnPrinterIC *r)
586 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
591 spoolss_DeletePrinterIC
593 static WERROR spoolss_DeletePrinterIC(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
594 struct spoolss_DeletePrinterIC *r)
596 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
601 spoolss_AddPrinterConnection
603 static WERROR spoolss_AddPrinterConnection(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
604 struct spoolss_AddPrinterConnection *r)
606 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
611 spoolss_DeletePrinterConnection
613 static WERROR spoolss_DeletePrinterConnection(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
614 struct spoolss_DeletePrinterConnection *r)
616 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
621 spoolss_PrinterMessageBox
623 static WERROR spoolss_PrinterMessageBox(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
624 struct spoolss_PrinterMessageBox *r)
626 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
633 static WERROR spoolss_AddMonitor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
634 struct spoolss_AddMonitor *r)
636 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
641 spoolss_DeleteMonitor
643 static WERROR spoolss_DeleteMonitor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
644 struct spoolss_DeleteMonitor *r)
646 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
651 spoolss_DeletePrintProcessor
653 static WERROR spoolss_DeletePrintProcessor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
654 struct spoolss_DeletePrintProcessor *r)
656 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
661 spoolss_AddPrintProvidor
663 static WERROR spoolss_AddPrintProvidor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
664 struct spoolss_AddPrintProvidor *r)
666 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
671 spoolss_DeletePrintProvidor
673 static WERROR spoolss_DeletePrintProvidor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
674 struct spoolss_DeletePrintProvidor *r)
676 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
681 spoolss_EnumPrintProcDataTypes
683 static WERROR spoolss_EnumPrintProcDataTypes(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
684 struct spoolss_EnumPrintProcDataTypes *r)
686 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
693 static WERROR spoolss_ResetPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
694 struct spoolss_ResetPrinter *r)
696 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
701 spoolss_GetPrinterDriver2
703 static WERROR spoolss_GetPrinterDriver2(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
704 struct spoolss_GetPrinterDriver2 *r)
706 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
711 spoolss_FindFirstPrinterChangeNotification
713 static WERROR spoolss_FindFirstPrinterChangeNotification(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
714 struct spoolss_FindFirstPrinterChangeNotification *r)
716 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
721 spoolss_FindNextPrinterChangeNotification
723 static WERROR spoolss_FindNextPrinterChangeNotification(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
724 struct spoolss_FindNextPrinterChangeNotification *r)
726 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
731 spoolss_FindClosePrinterNotify
733 static WERROR spoolss_FindClosePrinterNotify(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
734 struct spoolss_FindClosePrinterNotify *r)
736 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
741 spoolss_RouterFindFirstPrinterChangeNotificationOld
743 static WERROR spoolss_RouterFindFirstPrinterChangeNotificationOld(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
744 struct spoolss_RouterFindFirstPrinterChangeNotificationOld *r)
746 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
751 spoolss_ReplyOpenPrinter
753 static WERROR spoolss_ReplyOpenPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
754 struct spoolss_ReplyOpenPrinter *r)
756 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
761 spoolss_RouterReplyPrinter
763 static WERROR spoolss_RouterReplyPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
764 struct spoolss_RouterReplyPrinter *r)
766 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
771 spoolss_ReplyClosePrinter
773 static WERROR spoolss_ReplyClosePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
774 struct spoolss_ReplyClosePrinter *r)
776 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
783 static WERROR spoolss_AddPortEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
784 struct spoolss_AddPortEx *r)
786 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
791 spoolss_RouterFindFirstPrinterChangeNotification
793 static WERROR spoolss_RouterFindFirstPrinterChangeNotification(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
794 struct spoolss_RouterFindFirstPrinterChangeNotification *r)
796 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
803 static WERROR spoolss_SpoolerInit(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
804 struct spoolss_SpoolerInit *r)
806 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
811 spoolss_ResetPrinterEx
813 static WERROR spoolss_ResetPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
814 struct spoolss_ResetPrinterEx *r)
816 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
821 spoolss_RemoteFindFirstPrinterChangeNotifyEx
823 static WERROR spoolss_RemoteFindFirstPrinterChangeNotifyEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
824 struct spoolss_RemoteFindFirstPrinterChangeNotifyEx *r)
826 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
831 spoolss_RouterRefreshPrinterChangeNotification
833 static WERROR spoolss_RouterRefreshPrinterChangeNotification(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
834 struct spoolss_RouterRefreshPrinterChangeNotification *r)
836 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
841 spoolss_RemoteFindNextPrinterChangeNotifyEx
843 static WERROR spoolss_RemoteFindNextPrinterChangeNotifyEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
844 struct spoolss_RemoteFindNextPrinterChangeNotifyEx *r)
846 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
853 static WERROR spoolss_44(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
854 struct spoolss_44 *r)
856 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
860 static WERROR spoolss_OpenPrinterEx_server(struct dcesrv_call_state *dce_call,
862 struct spoolss_OpenPrinterEx *r,
863 const char *server_name)
865 struct spoolss_handle_server *state;
866 struct dcesrv_handle *handle;
869 /* Check printername is our name or our ip address
871 ret = strequal(server_name, lp_netbios_name());
874 ret = strequal(server_name, ...our_ip...);*/
876 return WERR_INVALID_PRINTER_NAME;
880 handle = dcesrv_handle_new(dce_call->context, SPOOLSS_HANDLE_SERVER);
881 W_ERROR_HAVE_NO_MEMORY(handle);
883 state = talloc(handle, struct spoolss_handle_server);
884 W_ERROR_HAVE_NO_MEMORY(state);
886 handle->data = state;
888 state->handle_type = SPOOLSS_HANDLE_SERVER;
889 state->access_mask = r->in.access_mask;
891 *r->out.handle = handle->wire_handle;
896 static WERROR spoolss_OpenPrinterEx_printer(struct dcesrv_call_state *dce_call,
898 struct spoolss_OpenPrinterEx *r,
899 const char *printer_name)
901 DEBUG(0, ("looking for printer %s\n", printer_name));
903 return WERR_INVALID_PRINTER_NAME;
907 spoolss_OpenPrinterEx
909 static WERROR spoolss_OpenPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
910 struct spoolss_OpenPrinterEx *r)
913 const char *printer = r->in.printername;
914 ZERO_STRUCTP(r->out.handle);
916 /* just "\\" is invalid */
917 if (strequal(r->in.printername, "\\\\")) {
918 return WERR_INVALID_PRINTER_NAME;
921 if (strncmp(r->in.printername, "\\\\", 2) == 0) {
922 /* here we know we have "\\" in front not followed
923 * by '\0', now see if we have another "\" in the string
925 p = strchr_m(r->in.printername + 2, '\\');
927 /* there's no other "\", so it's ("\\%s",server)
929 const char *server = r->in.printername + 2;
930 DEBUG(0,("print server: [%s][%s]\n", r->in.printername, server));
931 return spoolss_OpenPrinterEx_server(dce_call, mem_ctx, r, server);
933 /* here we know that we have ("\\%s\",server),
934 * if we have '\0' as next then it's an invalid name
935 * otherwise the printer_name
939 return WERR_INVALID_PRINTER_NAME;
944 DEBUG(0,("printer: [%s][%s]\n", r->in.printername, printer));
945 return spoolss_OpenPrinterEx_printer(dce_call, mem_ctx, r, printer);
952 static WERROR spoolss_AddPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
953 struct spoolss_AddPrinterEx *r)
955 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
962 static WERROR spoolss_47(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
963 struct spoolss_47 *r)
965 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
970 spoolss_EnumPrinterData
972 static WERROR spoolss_EnumPrinterData(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
973 struct spoolss_EnumPrinterData *r)
975 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
980 spoolss_DeletePrinterData
982 static WERROR spoolss_DeletePrinterData(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
983 struct spoolss_DeletePrinterData *r)
985 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
992 static WERROR spoolss_4a(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
993 struct spoolss_4a *r)
995 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1002 static WERROR spoolss_4b(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1003 struct spoolss_4b *r)
1005 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1012 static WERROR spoolss_4c(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1013 struct spoolss_4c *r)
1015 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1020 spoolss_SetPrinterDataEx
1022 static WERROR spoolss_SetPrinterDataEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1023 struct spoolss_SetPrinterDataEx *r)
1025 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1030 spoolss_GetPrinterDataEx
1032 static WERROR spoolss_GetPrinterDataEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1033 struct spoolss_GetPrinterDataEx *r)
1035 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1040 spoolss_EnumPrinterDataEx
1042 static WERROR spoolss_EnumPrinterDataEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1043 struct spoolss_EnumPrinterDataEx *r)
1045 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1050 spoolss_EnumPrinterKey
1052 static WERROR spoolss_EnumPrinterKey(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1053 struct spoolss_EnumPrinterKey *r)
1055 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1060 spoolss_DeletePrinterDataEx
1062 static WERROR spoolss_DeletePrinterDataEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1063 struct spoolss_DeletePrinterDataEx *r)
1065 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1070 spoolss_DeletePrinterKey
1072 static WERROR spoolss_DeletePrinterKey(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1073 struct spoolss_DeletePrinterKey *r)
1075 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1082 static WERROR spoolss_53(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1083 struct spoolss_53 *r)
1085 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1090 spoolss_DeletePrinterDriverEx
1092 static WERROR spoolss_DeletePrinterDriverEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1093 struct spoolss_DeletePrinterDriverEx *r)
1095 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1102 static WERROR spoolss_55(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1103 struct spoolss_55 *r)
1105 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1112 static WERROR spoolss_56(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1113 struct spoolss_56 *r)
1115 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1122 static WERROR spoolss_57(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1123 struct spoolss_57 *r)
1125 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1132 static WERROR spoolss_58(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1133 struct spoolss_58 *r)
1135 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1140 spoolss_AddPrinterDriverEx
1142 static WERROR spoolss_AddPrinterDriverEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1143 struct spoolss_AddPrinterDriverEx *r)
1145 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1152 static WERROR spoolss_5a(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1153 struct spoolss_5a *r)
1155 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1162 static WERROR spoolss_5b(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1163 struct spoolss_5b *r)
1165 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1172 static WERROR spoolss_5c(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1173 struct spoolss_5c *r)
1175 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1182 static WERROR spoolss_5d(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1183 struct spoolss_5d *r)
1185 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1192 static WERROR spoolss_5e(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1193 struct spoolss_5e *r)
1195 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1202 static WERROR spoolss_5f(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1203 struct spoolss_5f *r)
1205 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1209 /* include the generated boilerplate */
1210 #include "librpc/gen_ndr/ndr_spoolss_s.c"