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