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
;
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
441 ZERO_STRUCTP(r
->out
.handle
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
,
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
);
854 state
= talloc(handle
, struct spoolss_openprinter_state
);
859 handle
->data
= state
;
861 state
->access_mask
= r
->in
.access_mask
;
862 *r
->out
.handle
= handle
->wire_handle
;
867 static WERROR
spoolss_OpenPrinterEx_printer(struct dcesrv_call_state
*dce_call
,
869 struct spoolss_OpenPrinterEx
*r
)
871 char *server
= talloc_strdup(mem_ctx
, r
->in
.printername
+ 2);
874 pos
= strchr(server
, '\\');
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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
);
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"