r5489: hide handwritten pull/push/print code from the caller
[Samba/gebeck_regimport.git] / source4 / rpc_server / spoolss / dcesrv_spoolss.c
blob470c9e2674d1fb57366876ef0fda5163d48d186d
1 /*
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.
23 #include "includes.h"
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 /*
30 spoolss_EnumPrinters
32 static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
33 struct spoolss_EnumPrinters *r)
35 void *spoolss_ctx;
36 struct ldb_message **msgs;
37 int count;
38 int i;
39 union spoolss_PrinterInfo *info;
41 r->out.info = NULL;
42 *r->out.buf_size = 0;
43 r->out.count = 0;
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);
58 switch(r->in.level) {
59 case 1:
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);
71 return WERR_OK;
72 case 2:
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);
116 return WERR_OK;
117 case 4:
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);
127 return WERR_OK;
128 case 5:
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);
140 return WERR_OK;
143 return WERR_UNKNOWN_LEVEL;
148 spoolss_OpenPrinter
150 static WERROR spoolss_OpenPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
151 struct spoolss_OpenPrinter *r)
153 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
158 spoolss_SetJob
160 static WERROR spoolss_SetJob(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
161 struct spoolss_SetJob *r)
163 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
168 spoolss_GetJob
170 static WERROR spoolss_GetJob(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
171 struct spoolss_GetJob *r)
173 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
178 spoolss_EnumJobs
180 static WERROR spoolss_EnumJobs(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
181 struct spoolss_EnumJobs *r)
183 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
188 spoolss_AddPrinter
190 static WERROR spoolss_AddPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
191 struct spoolss_AddPrinter *r)
193 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
198 spoolss_DeletePrinter
200 static WERROR spoolss_DeletePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
201 struct spoolss_DeletePrinter *r)
203 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
208 spoolss_SetPrinter
210 static WERROR spoolss_SetPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
211 struct spoolss_SetPrinter *r)
213 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
218 spoolss_GetPrinter
220 static WERROR spoolss_GetPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
221 struct spoolss_GetPrinter *r)
223 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
228 spoolss_AddPrinterDriver
230 static WERROR spoolss_AddPrinterDriver(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
231 struct spoolss_AddPrinterDriver *r)
233 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
238 spoolss_EnumPrinterDrivers
240 static WERROR spoolss_EnumPrinterDrivers(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
241 struct spoolss_EnumPrinterDrivers *r)
243 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
248 spoolss_GetPrinterDriver
250 static WERROR spoolss_GetPrinterDriver(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
251 struct spoolss_GetPrinterDriver *r)
253 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
258 spoolss_GetPrinterDriverDirectory
260 static WERROR spoolss_GetPrinterDriverDirectory(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
261 struct spoolss_GetPrinterDriverDirectory *r)
263 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
268 spoolss_DeletePrinterDriver
270 static WERROR spoolss_DeletePrinterDriver(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
271 struct spoolss_DeletePrinterDriver *r)
273 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
278 spoolss_AddPrintProcessor
280 static WERROR spoolss_AddPrintProcessor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
281 struct spoolss_AddPrintProcessor *r)
283 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
288 spoolss_EnumPrintProcessors
290 static WERROR spoolss_EnumPrintProcessors(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
291 struct spoolss_EnumPrintProcessors *r)
293 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
298 spoolss_GetPrintProcessorDirectory
300 static WERROR spoolss_GetPrintProcessorDirectory(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
301 struct spoolss_GetPrintProcessorDirectory *r)
303 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
308 spoolss_StartDocPrinter
310 static WERROR spoolss_StartDocPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
311 struct spoolss_StartDocPrinter *r)
313 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
318 spoolss_StartPagePrinter
320 static WERROR spoolss_StartPagePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
321 struct spoolss_StartPagePrinter *r)
323 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
328 spoolss_WritePrinter
330 static WERROR spoolss_WritePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
331 struct spoolss_WritePrinter *r)
333 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
338 spoolss_EndPagePrinter
340 static WERROR spoolss_EndPagePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
341 struct spoolss_EndPagePrinter *r)
343 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
348 spoolss_AbortPrinter
350 static WERROR spoolss_AbortPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
351 struct spoolss_AbortPrinter *r)
353 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
358 spoolss_ReadPrinter
360 static WERROR spoolss_ReadPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
361 struct spoolss_ReadPrinter *r)
363 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
368 spoolss_EndDocPrinter
370 static WERROR spoolss_EndDocPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
371 struct spoolss_EndDocPrinter *r)
373 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
378 spoolss_AddJob
380 static WERROR spoolss_AddJob(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
381 struct spoolss_AddJob *r)
383 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
388 spoolss_ScheduleJob
390 static WERROR spoolss_ScheduleJob(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
391 struct spoolss_ScheduleJob *r)
393 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
398 spoolss_GetPrinterData
400 static WERROR spoolss_GetPrinterData(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
401 struct spoolss_GetPrinterData *r)
403 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
408 spoolss_SetPrinterData
410 static WERROR spoolss_SetPrinterData(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
411 struct spoolss_SetPrinterData *r)
413 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
418 spoolss_WaitForPrinterChange
420 static WERROR spoolss_WaitForPrinterChange(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
421 struct spoolss_WaitForPrinterChange *r)
423 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
428 spoolss_ClosePrinter
430 static WERROR spoolss_ClosePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
431 struct spoolss_ClosePrinter *r)
433 struct dcesrv_handle *h;
435 *r->out.handle = *r->in.handle;
437 DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY);
439 talloc_free(h);
441 ZERO_STRUCTP(r->out.handle);
443 return WERR_OK;
448 spoolss_AddForm
450 static WERROR spoolss_AddForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
451 struct spoolss_AddForm *r)
453 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
458 spoolss_DeleteForm
460 static WERROR spoolss_DeleteForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
461 struct spoolss_DeleteForm *r)
463 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
468 spoolss_GetForm
470 static WERROR spoolss_GetForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
471 struct spoolss_GetForm *r)
473 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
478 spoolss_SetForm
480 static WERROR spoolss_SetForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
481 struct spoolss_SetForm *r)
483 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
488 spoolss_EnumForms
490 static WERROR spoolss_EnumForms(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
491 struct spoolss_EnumForms *r)
493 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
498 spoolss_EnumPorts
500 static WERROR spoolss_EnumPorts(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
501 struct spoolss_EnumPorts *r)
503 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
508 spoolss_EnumMonitors
510 static WERROR spoolss_EnumMonitors(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
511 struct spoolss_EnumMonitors *r)
513 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
518 spoolss_AddPort
520 static WERROR spoolss_AddPort(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
521 struct spoolss_AddPort *r)
523 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
528 spoolss_ConfigurePort
530 static WERROR spoolss_ConfigurePort(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
531 struct spoolss_ConfigurePort *r)
533 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
538 spoolss_DeletePort
540 static WERROR spoolss_DeletePort(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
541 struct spoolss_DeletePort *r)
543 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
548 spoolss_CreatePrinterIC
550 static WERROR spoolss_CreatePrinterIC(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
551 struct spoolss_CreatePrinterIC *r)
553 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
558 spoolss_PlayGDIScriptOnPrinterIC
560 static WERROR spoolss_PlayGDIScriptOnPrinterIC(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
561 struct spoolss_PlayGDIScriptOnPrinterIC *r)
563 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
568 spoolss_DeletePrinterIC
570 static WERROR spoolss_DeletePrinterIC(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
571 struct spoolss_DeletePrinterIC *r)
573 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
578 spoolss_AddPrinterConnection
580 static WERROR spoolss_AddPrinterConnection(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
581 struct spoolss_AddPrinterConnection *r)
583 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
588 spoolss_DeletePrinterConnection
590 static WERROR spoolss_DeletePrinterConnection(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
591 struct spoolss_DeletePrinterConnection *r)
593 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
598 spoolss_PrinterMessageBox
600 static WERROR spoolss_PrinterMessageBox(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
601 struct spoolss_PrinterMessageBox *r)
603 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
608 spoolss_AddMonitor
610 static WERROR spoolss_AddMonitor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
611 struct spoolss_AddMonitor *r)
613 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
618 spoolss_DeleteMonitor
620 static WERROR spoolss_DeleteMonitor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
621 struct spoolss_DeleteMonitor *r)
623 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
628 spoolss_DeletePrintProcessor
630 static WERROR spoolss_DeletePrintProcessor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
631 struct spoolss_DeletePrintProcessor *r)
633 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
638 spoolss_AddPrintProvidor
640 static WERROR spoolss_AddPrintProvidor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
641 struct spoolss_AddPrintProvidor *r)
643 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
648 spoolss_DeletePrintProvidor
650 static WERROR spoolss_DeletePrintProvidor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
651 struct spoolss_DeletePrintProvidor *r)
653 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
658 spoolss_EnumPrintProcDataTypes
660 static WERROR spoolss_EnumPrintProcDataTypes(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
661 struct spoolss_EnumPrintProcDataTypes *r)
663 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
668 spoolss_ResetPrinter
670 static WERROR spoolss_ResetPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
671 struct spoolss_ResetPrinter *r)
673 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
678 spoolss_GetPrinterDriver2
680 static WERROR spoolss_GetPrinterDriver2(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
681 struct spoolss_GetPrinterDriver2 *r)
683 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
688 spoolss_FindFirstPrinterChangeNotification
690 static WERROR spoolss_FindFirstPrinterChangeNotification(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
691 struct spoolss_FindFirstPrinterChangeNotification *r)
693 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
698 spoolss_FindNextPrinterChangeNotification
700 static WERROR spoolss_FindNextPrinterChangeNotification(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
701 struct spoolss_FindNextPrinterChangeNotification *r)
703 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
708 spoolss_FindClosePrinterNotify
710 static WERROR spoolss_FindClosePrinterNotify(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
711 struct spoolss_FindClosePrinterNotify *r)
713 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
718 spoolss_RouterFindFirstPrinterChangeNotificationOld
720 static WERROR spoolss_RouterFindFirstPrinterChangeNotificationOld(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
721 struct spoolss_RouterFindFirstPrinterChangeNotificationOld *r)
723 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
728 spoolss_ReplyOpenPrinter
730 static WERROR spoolss_ReplyOpenPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
731 struct spoolss_ReplyOpenPrinter *r)
733 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
738 spoolss_RouterReplyPrinter
740 static WERROR spoolss_RouterReplyPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
741 struct spoolss_RouterReplyPrinter *r)
743 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
748 spoolss_ReplyClosePrinter
750 static WERROR spoolss_ReplyClosePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
751 struct spoolss_ReplyClosePrinter *r)
753 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
758 spoolss_AddPortEx
760 static WERROR spoolss_AddPortEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
761 struct spoolss_AddPortEx *r)
763 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
768 spoolss_RouterFindFirstPrinterChangeNotification
770 static WERROR spoolss_RouterFindFirstPrinterChangeNotification(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
771 struct spoolss_RouterFindFirstPrinterChangeNotification *r)
773 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
778 spoolss_SpoolerInit
780 static WERROR spoolss_SpoolerInit(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
781 struct spoolss_SpoolerInit *r)
783 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
788 spoolss_ResetPrinterEx
790 static WERROR spoolss_ResetPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
791 struct spoolss_ResetPrinterEx *r)
793 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
798 spoolss_RemoteFindFirstPrinterChangeNotifyEx
800 static WERROR spoolss_RemoteFindFirstPrinterChangeNotifyEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
801 struct spoolss_RemoteFindFirstPrinterChangeNotifyEx *r)
803 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
808 spoolss_RouterRefreshPrinterChangeNotification
810 static WERROR spoolss_RouterRefreshPrinterChangeNotification(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
811 struct spoolss_RouterRefreshPrinterChangeNotification *r)
813 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
818 spoolss_RemoteFindNextPrinterChangeNotifyEx
820 static WERROR spoolss_RemoteFindNextPrinterChangeNotifyEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
821 struct spoolss_RemoteFindNextPrinterChangeNotifyEx *r)
823 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
828 spoolss_44
830 static WERROR spoolss_44(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
831 struct spoolss_44 *r)
833 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
837 static WERROR spoolss_OpenPrinterEx_server(struct dcesrv_call_state *dce_call,
838 TALLOC_CTX *mem_ctx,
839 struct spoolss_OpenPrinterEx *r)
841 struct spoolss_openprinter_state *state;
842 struct dcesrv_handle *handle;
844 /* Check printername is our name */
846 if (!strequal(r->in.printername + 2, lp_netbios_name()))
847 return WERR_INVALID_PRINTER_NAME;
849 handle = dcesrv_handle_new(dce_call->context, SPOOLSS_HANDLE_SERVER);
850 if (!handle) {
851 return WERR_NOMEM;
854 state = talloc(handle, struct spoolss_openprinter_state);
855 if (!state) {
856 return WERR_OK;
859 handle->data = state;
861 state->access_mask = r->in.access_mask;
862 *r->out.handle = handle->wire_handle;
864 return WERR_OK;
867 static WERROR spoolss_OpenPrinterEx_printer(struct dcesrv_call_state *dce_call,
868 TALLOC_CTX *mem_ctx,
869 struct spoolss_OpenPrinterEx *r)
871 char *server = talloc_strdup(mem_ctx, r->in.printername + 2);
872 char *pos, *printer;
874 pos = strchr(server, '\\');
875 *pos = 0;
876 printer = talloc_strdup(mem_ctx, pos + 1);
878 if (!strequal(server, lp_netbios_name()))
879 return WERR_INVALID_PRINTER_NAME;
881 DEBUG(0, ("looking for server %s, printer %s\n", server, printer));
883 return WERR_INVALID_PRINTER_NAME;
887 spoolss_OpenPrinterEx
889 static WERROR spoolss_OpenPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
890 struct spoolss_OpenPrinterEx *r)
892 ZERO_STRUCTP(r->out.handle);
894 /* Printername must start with \\ */
896 if (strncmp(r->in.printername, "\\\\", 2) == 0)
897 return WERR_INVALID_PARAM;
899 if (strchr_m(r->in.printername + 2, '\\'))
900 return spoolss_OpenPrinterEx_server(dce_call, mem_ctx, r);
902 return spoolss_OpenPrinterEx_printer(dce_call, mem_ctx, r);
907 spoolss_AddPrinterEx
909 static WERROR spoolss_AddPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
910 struct spoolss_AddPrinterEx *r)
912 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
917 spoolss_47
919 static WERROR spoolss_47(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
920 struct spoolss_47 *r)
922 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
927 spoolss_EnumPrinterData
929 static WERROR spoolss_EnumPrinterData(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
930 struct spoolss_EnumPrinterData *r)
932 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
937 spoolss_DeletePrinterData
939 static WERROR spoolss_DeletePrinterData(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
940 struct spoolss_DeletePrinterData *r)
942 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
947 spoolss_4a
949 static WERROR spoolss_4a(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
950 struct spoolss_4a *r)
952 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
957 spoolss_4b
959 static WERROR spoolss_4b(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
960 struct spoolss_4b *r)
962 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
967 spoolss_4c
969 static WERROR spoolss_4c(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
970 struct spoolss_4c *r)
972 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
977 spoolss_SetPrinterDataEx
979 static WERROR spoolss_SetPrinterDataEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
980 struct spoolss_SetPrinterDataEx *r)
982 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
987 spoolss_GetPrinterDataEx
989 static WERROR spoolss_GetPrinterDataEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
990 struct spoolss_GetPrinterDataEx *r)
992 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
997 spoolss_EnumPrinterDataEx
999 static WERROR spoolss_EnumPrinterDataEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1000 struct spoolss_EnumPrinterDataEx *r)
1002 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1007 spoolss_EnumPrinterKey
1009 static WERROR spoolss_EnumPrinterKey(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1010 struct spoolss_EnumPrinterKey *r)
1012 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1017 spoolss_DeletePrinterDataEx
1019 static WERROR spoolss_DeletePrinterDataEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1020 struct spoolss_DeletePrinterDataEx *r)
1022 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1027 spoolss_DeletePrinterKey
1029 static WERROR spoolss_DeletePrinterKey(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1030 struct spoolss_DeletePrinterKey *r)
1032 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1037 spoolss_53
1039 static WERROR spoolss_53(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1040 struct spoolss_53 *r)
1042 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1047 spoolss_DeletePrinterDriverEx
1049 static WERROR spoolss_DeletePrinterDriverEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1050 struct spoolss_DeletePrinterDriverEx *r)
1052 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1057 spoolss_55
1059 static WERROR spoolss_55(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1060 struct spoolss_55 *r)
1062 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1067 spoolss_56
1069 static WERROR spoolss_56(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1070 struct spoolss_56 *r)
1072 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1077 spoolss_57
1079 static WERROR spoolss_57(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1080 struct spoolss_57 *r)
1082 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1087 spoolss_58
1089 static WERROR spoolss_58(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1090 struct spoolss_58 *r)
1092 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1097 spoolss_AddPrinterDriverEx
1099 static WERROR spoolss_AddPrinterDriverEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1100 struct spoolss_AddPrinterDriverEx *r)
1102 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1107 spoolss_5a
1109 static WERROR spoolss_5a(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1110 struct spoolss_5a *r)
1112 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1117 spoolss_5b
1119 static WERROR spoolss_5b(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1120 struct spoolss_5b *r)
1122 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1127 spoolss_5c
1129 static WERROR spoolss_5c(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1130 struct spoolss_5c *r)
1132 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1137 spoolss_5d
1139 static WERROR spoolss_5d(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1140 struct spoolss_5d *r)
1142 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1147 spoolss_5e
1149 static WERROR spoolss_5e(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1150 struct spoolss_5e *r)
1152 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1157 spoolss_5f
1159 static WERROR spoolss_5f(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
1160 struct spoolss_5f *r)
1162 DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
1166 /* include the generated boilerplate */
1167 #include "librpc/gen_ndr/ndr_spoolss_s.c"