1*8d7e4166Sjose borrego /*
2*8d7e4166Sjose borrego  * CDDL HEADER START
3*8d7e4166Sjose borrego  *
4*8d7e4166Sjose borrego  * The contents of this file are subject to the terms of the
5*8d7e4166Sjose borrego  * Common Development and Distribution License (the "License").
6*8d7e4166Sjose borrego  * You may not use this file except in compliance with the License.
7*8d7e4166Sjose borrego  *
8*8d7e4166Sjose borrego  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*8d7e4166Sjose borrego  * or http://www.opensolaris.org/os/licensing.
10*8d7e4166Sjose borrego  * See the License for the specific language governing permissions
11*8d7e4166Sjose borrego  * and limitations under the License.
12*8d7e4166Sjose borrego  *
13*8d7e4166Sjose borrego  * When distributing Covered Code, include this CDDL HEADER in each
14*8d7e4166Sjose borrego  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*8d7e4166Sjose borrego  * If applicable, add the following below this CDDL HEADER, with the
16*8d7e4166Sjose borrego  * fields enclosed by brackets "[]" replaced with your own identifying
17*8d7e4166Sjose borrego  * information: Portions Copyright [yyyy] [name of copyright owner]
18*8d7e4166Sjose borrego  *
19*8d7e4166Sjose borrego  * CDDL HEADER END
20*8d7e4166Sjose borrego  */
21*8d7e4166Sjose borrego /*
22*8d7e4166Sjose borrego  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
23*8d7e4166Sjose borrego  * Use is subject to license terms.
24*8d7e4166Sjose borrego  */
25*8d7e4166Sjose borrego 
26*8d7e4166Sjose borrego /*
27*8d7e4166Sjose borrego  * Printing and Spooling RPC service.
28*8d7e4166Sjose borrego  */
29*8d7e4166Sjose borrego 
30*8d7e4166Sjose borrego #include <stdlib.h>
31*8d7e4166Sjose borrego #include <strings.h>
32*8d7e4166Sjose borrego #include <smbsrv/libsmb.h>
33*8d7e4166Sjose borrego #include <smbsrv/libmlrpc.h>
34*8d7e4166Sjose borrego #include <smbsrv/libmlsvc.h>
35*8d7e4166Sjose borrego #include <smbsrv/ndl/spoolss.ndl>
36*8d7e4166Sjose borrego #include <smbsrv/nterror.h>
37*8d7e4166Sjose borrego #include <smbsrv/smbinfo.h>
38*8d7e4166Sjose borrego #include <smbsrv/nmpipes.h>
39*8d7e4166Sjose borrego 
40*8d7e4166Sjose borrego int spoolss_s_OpenPrinter(void *, ndr_xa_t *);
41*8d7e4166Sjose borrego int spoolss_s_stub(void *, ndr_xa_t *);
42*8d7e4166Sjose borrego 
43*8d7e4166Sjose borrego static ndr_stub_table_t spoolss_stub_table[] = {
44*8d7e4166Sjose borrego 	{ spoolss_s_OpenPrinter,	SPOOLSS_OPNUM_OpenPrinter },
45*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_GetJob },
46*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_DeletePrinter },
47*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_GetPrinterDriver },
48*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_DeletePrinterDriver },
49*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_AddPrintProcessor },
50*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_GetPrintProcessorDirectory },
51*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_AbortPrinter },
52*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_ReadPrinter },
53*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_WaitForPrinterChange },
54*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_AddForm },
55*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_DeleteForm },
56*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_GetForm },
57*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_SetForm },
58*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_EnumMonitors },
59*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_AddPort },
60*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_ConfigurePort },
61*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_DeletePort },
62*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_CreatePrinterIc },
63*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_PlayDescriptionPrinterIc },
64*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_DeletePrinterIc },
65*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_AddPrinterConnection },
66*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_DeletePrinterConnection },
67*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_PrinterMessageBox },
68*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_AddMonitor },
69*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_DeleteMonitor },
70*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_DeletePrintProcessor },
71*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_AddPrintProvider },
72*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_DeletePrintProvider },
73*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_ResetPrinter },
74*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_FindFirstChangeNotify },
75*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_FindNextChangeNotify },
76*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_RouterFindFirstNotify },
77*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_ReplyOpenPrinter },
78*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_RouterReplyPrinter },
79*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_ReplyClosePrinter },
80*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_AddPortEx },
81*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_RemoteFindFirstChangeNotify },
82*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_SpoolerInitialize },
83*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_ResetPrinterEx },
84*8d7e4166Sjose borrego 	{ spoolss_s_stub,	SPOOLSS_OPNUM_RouterRefreshChangeNotify },
85*8d7e4166Sjose borrego 	{ spoolss_s_OpenPrinter,	SPOOLSS_OPNUM_OpenPrinter2 },
86*8d7e4166Sjose borrego 	{0}
87*8d7e4166Sjose borrego };
88*8d7e4166Sjose borrego 
89*8d7e4166Sjose borrego static ndr_service_t spoolss_service = {
90*8d7e4166Sjose borrego 	"SPOOLSS",			/* name */
91*8d7e4166Sjose borrego 	"Print Spool Service",		/* desc */
92*8d7e4166Sjose borrego 	"\\spoolss",			/* endpoint */
93*8d7e4166Sjose borrego 	PIPE_SPOOLSS,			/* sec_addr_port */
94*8d7e4166Sjose borrego 	"12345678-1234-abcd-ef000123456789ab",	1,	/* abstract */
95*8d7e4166Sjose borrego 	NDR_TRANSFER_SYNTAX_UUID,		2,	/* transfer */
96*8d7e4166Sjose borrego 	0,				/* no bind_instance_size */
97*8d7e4166Sjose borrego 	0,				/* no bind_req() */
98*8d7e4166Sjose borrego 	0,				/* no unbind_and_close() */
99*8d7e4166Sjose borrego 	0,				/* use generic_call_stub() */
100*8d7e4166Sjose borrego 	&TYPEINFO(spoolss_interface),	/* interface ti */
101*8d7e4166Sjose borrego 	spoolss_stub_table		/* stub_table */
102*8d7e4166Sjose borrego };
103*8d7e4166Sjose borrego 
104*8d7e4166Sjose borrego void
105*8d7e4166Sjose borrego spoolss_initialize(void)
106*8d7e4166Sjose borrego {
107*8d7e4166Sjose borrego 	(void) ndr_svc_register(&spoolss_service);
108*8d7e4166Sjose borrego }
109*8d7e4166Sjose borrego 
110*8d7e4166Sjose borrego int
111*8d7e4166Sjose borrego spoolss_s_OpenPrinter(void *arg, ndr_xa_t *mxa)
112*8d7e4166Sjose borrego {
113*8d7e4166Sjose borrego 	struct spoolss_OpenPrinter *param = arg;
114*8d7e4166Sjose borrego 
115*8d7e4166Sjose borrego 	bzero(param, sizeof (struct spoolss_OpenPrinter));
116*8d7e4166Sjose borrego 
117*8d7e4166Sjose borrego 	if (mxa == NULL)
118*8d7e4166Sjose borrego 		param->status = NT_SC_ERROR(NT_STATUS_INVALID_PARAMETER);
119*8d7e4166Sjose borrego 	else
120*8d7e4166Sjose borrego 		param->status = NT_SC_ERROR(NT_STATUS_ACCESS_DENIED);
121*8d7e4166Sjose borrego 
122*8d7e4166Sjose borrego 	return (NDR_DRC_OK);
123*8d7e4166Sjose borrego }
124*8d7e4166Sjose borrego 
125*8d7e4166Sjose borrego /*ARGSUSED*/
126*8d7e4166Sjose borrego int
127*8d7e4166Sjose borrego spoolss_s_stub(void *arg, ndr_xa_t *mxa)
128*8d7e4166Sjose borrego {
129*8d7e4166Sjose borrego 	return (NDR_DRC_FAULT_PARAM_0_UNIMPLEMENTED);
130*8d7e4166Sjose borrego }
131