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