spoolss_svc.c revision 8d7e41661dc4633488e93b13363137523ce59977
8d7e41661dc4633488e93b13363137523ce59977jose borrego/*
8d7e41661dc4633488e93b13363137523ce59977jose borrego * CDDL HEADER START
8d7e41661dc4633488e93b13363137523ce59977jose borrego *
8d7e41661dc4633488e93b13363137523ce59977jose borrego * The contents of this file are subject to the terms of the
8d7e41661dc4633488e93b13363137523ce59977jose borrego * Common Development and Distribution License (the "License").
8d7e41661dc4633488e93b13363137523ce59977jose borrego * You may not use this file except in compliance with the License.
8d7e41661dc4633488e93b13363137523ce59977jose borrego *
8d7e41661dc4633488e93b13363137523ce59977jose borrego * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
8d7e41661dc4633488e93b13363137523ce59977jose borrego * or http://www.opensolaris.org/os/licensing.
8d7e41661dc4633488e93b13363137523ce59977jose borrego * See the License for the specific language governing permissions
8d7e41661dc4633488e93b13363137523ce59977jose borrego * and limitations under the License.
8d7e41661dc4633488e93b13363137523ce59977jose borrego *
8d7e41661dc4633488e93b13363137523ce59977jose borrego * When distributing Covered Code, include this CDDL HEADER in each
8d7e41661dc4633488e93b13363137523ce59977jose borrego * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
8d7e41661dc4633488e93b13363137523ce59977jose borrego * If applicable, add the following below this CDDL HEADER, with the
8d7e41661dc4633488e93b13363137523ce59977jose borrego * fields enclosed by brackets "[]" replaced with your own identifying
8d7e41661dc4633488e93b13363137523ce59977jose borrego * information: Portions Copyright [yyyy] [name of copyright owner]
8d7e41661dc4633488e93b13363137523ce59977jose borrego *
8d7e41661dc4633488e93b13363137523ce59977jose borrego * CDDL HEADER END
8d7e41661dc4633488e93b13363137523ce59977jose borrego */
8d7e41661dc4633488e93b13363137523ce59977jose borrego/*
8d7e41661dc4633488e93b13363137523ce59977jose borrego * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
8d7e41661dc4633488e93b13363137523ce59977jose borrego * Use is subject to license terms.
8d7e41661dc4633488e93b13363137523ce59977jose borrego */
8d7e41661dc4633488e93b13363137523ce59977jose borrego
8d7e41661dc4633488e93b13363137523ce59977jose borrego/*
8d7e41661dc4633488e93b13363137523ce59977jose borrego * Printing and Spooling RPC service.
8d7e41661dc4633488e93b13363137523ce59977jose borrego */
8d7e41661dc4633488e93b13363137523ce59977jose borrego
8d7e41661dc4633488e93b13363137523ce59977jose borrego#include <stdlib.h>
8d7e41661dc4633488e93b13363137523ce59977jose borrego#include <strings.h>
8d7e41661dc4633488e93b13363137523ce59977jose borrego#include <smbsrv/libsmb.h>
8d7e41661dc4633488e93b13363137523ce59977jose borrego#include <smbsrv/libmlrpc.h>
8d7e41661dc4633488e93b13363137523ce59977jose borrego#include <smbsrv/libmlsvc.h>
8d7e41661dc4633488e93b13363137523ce59977jose borrego#include <smbsrv/ndl/spoolss.ndl>
8d7e41661dc4633488e93b13363137523ce59977jose borrego#include <smbsrv/nterror.h>
8d7e41661dc4633488e93b13363137523ce59977jose borrego#include <smbsrv/smbinfo.h>
8d7e41661dc4633488e93b13363137523ce59977jose borrego#include <smbsrv/nmpipes.h>
8d7e41661dc4633488e93b13363137523ce59977jose borrego
8d7e41661dc4633488e93b13363137523ce59977jose borregoint spoolss_s_OpenPrinter(void *, ndr_xa_t *);
8d7e41661dc4633488e93b13363137523ce59977jose borregoint spoolss_s_stub(void *, ndr_xa_t *);
8d7e41661dc4633488e93b13363137523ce59977jose borrego
8d7e41661dc4633488e93b13363137523ce59977jose borregostatic ndr_stub_table_t spoolss_stub_table[] = {
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_OpenPrinter, SPOOLSS_OPNUM_OpenPrinter },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_GetJob },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_DeletePrinter },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_GetPrinterDriver },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_DeletePrinterDriver },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_AddPrintProcessor },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_GetPrintProcessorDirectory },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_AbortPrinter },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_ReadPrinter },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_WaitForPrinterChange },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_AddForm },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_DeleteForm },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_GetForm },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_SetForm },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_EnumMonitors },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_AddPort },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_ConfigurePort },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_DeletePort },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_CreatePrinterIc },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_PlayDescriptionPrinterIc },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_DeletePrinterIc },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_AddPrinterConnection },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_DeletePrinterConnection },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_PrinterMessageBox },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_AddMonitor },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_DeleteMonitor },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_DeletePrintProcessor },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_AddPrintProvider },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_DeletePrintProvider },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_ResetPrinter },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_FindFirstChangeNotify },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_FindNextChangeNotify },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_RouterFindFirstNotify },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_ReplyOpenPrinter },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_RouterReplyPrinter },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_ReplyClosePrinter },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_AddPortEx },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_RemoteFindFirstChangeNotify },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_SpoolerInitialize },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_ResetPrinterEx },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_stub, SPOOLSS_OPNUM_RouterRefreshChangeNotify },
8d7e41661dc4633488e93b13363137523ce59977jose borrego { spoolss_s_OpenPrinter, SPOOLSS_OPNUM_OpenPrinter2 },
8d7e41661dc4633488e93b13363137523ce59977jose borrego {0}
8d7e41661dc4633488e93b13363137523ce59977jose borrego};
8d7e41661dc4633488e93b13363137523ce59977jose borrego
8d7e41661dc4633488e93b13363137523ce59977jose borregostatic ndr_service_t spoolss_service = {
8d7e41661dc4633488e93b13363137523ce59977jose borrego "SPOOLSS", /* name */
8d7e41661dc4633488e93b13363137523ce59977jose borrego "Print Spool Service", /* desc */
8d7e41661dc4633488e93b13363137523ce59977jose borrego "\\spoolss", /* endpoint */
8d7e41661dc4633488e93b13363137523ce59977jose borrego PIPE_SPOOLSS, /* sec_addr_port */
8d7e41661dc4633488e93b13363137523ce59977jose borrego "12345678-1234-abcd-ef000123456789ab", 1, /* abstract */
8d7e41661dc4633488e93b13363137523ce59977jose borrego NDR_TRANSFER_SYNTAX_UUID, 2, /* transfer */
8d7e41661dc4633488e93b13363137523ce59977jose borrego 0, /* no bind_instance_size */
8d7e41661dc4633488e93b13363137523ce59977jose borrego 0, /* no bind_req() */
8d7e41661dc4633488e93b13363137523ce59977jose borrego 0, /* no unbind_and_close() */
8d7e41661dc4633488e93b13363137523ce59977jose borrego 0, /* use generic_call_stub() */
8d7e41661dc4633488e93b13363137523ce59977jose borrego &TYPEINFO(spoolss_interface), /* interface ti */
8d7e41661dc4633488e93b13363137523ce59977jose borrego spoolss_stub_table /* stub_table */
8d7e41661dc4633488e93b13363137523ce59977jose borrego};
8d7e41661dc4633488e93b13363137523ce59977jose borrego
8d7e41661dc4633488e93b13363137523ce59977jose borregovoid
8d7e41661dc4633488e93b13363137523ce59977jose borregospoolss_initialize(void)
8d7e41661dc4633488e93b13363137523ce59977jose borrego{
8d7e41661dc4633488e93b13363137523ce59977jose borrego (void) ndr_svc_register(&spoolss_service);
8d7e41661dc4633488e93b13363137523ce59977jose borrego}
8d7e41661dc4633488e93b13363137523ce59977jose borrego
8d7e41661dc4633488e93b13363137523ce59977jose borregoint
8d7e41661dc4633488e93b13363137523ce59977jose borregospoolss_s_OpenPrinter(void *arg, ndr_xa_t *mxa)
8d7e41661dc4633488e93b13363137523ce59977jose borrego{
8d7e41661dc4633488e93b13363137523ce59977jose borrego struct spoolss_OpenPrinter *param = arg;
8d7e41661dc4633488e93b13363137523ce59977jose borrego
8d7e41661dc4633488e93b13363137523ce59977jose borrego bzero(param, sizeof (struct spoolss_OpenPrinter));
8d7e41661dc4633488e93b13363137523ce59977jose borrego
8d7e41661dc4633488e93b13363137523ce59977jose borrego if (mxa == NULL)
8d7e41661dc4633488e93b13363137523ce59977jose borrego param->status = NT_SC_ERROR(NT_STATUS_INVALID_PARAMETER);
8d7e41661dc4633488e93b13363137523ce59977jose borrego else
8d7e41661dc4633488e93b13363137523ce59977jose borrego param->status = NT_SC_ERROR(NT_STATUS_ACCESS_DENIED);
8d7e41661dc4633488e93b13363137523ce59977jose borrego
8d7e41661dc4633488e93b13363137523ce59977jose borrego return (NDR_DRC_OK);
8d7e41661dc4633488e93b13363137523ce59977jose borrego}
8d7e41661dc4633488e93b13363137523ce59977jose borrego
8d7e41661dc4633488e93b13363137523ce59977jose borrego/*ARGSUSED*/
8d7e41661dc4633488e93b13363137523ce59977jose borregoint
8d7e41661dc4633488e93b13363137523ce59977jose borregospoolss_s_stub(void *arg, ndr_xa_t *mxa)
8d7e41661dc4633488e93b13363137523ce59977jose borrego{
8d7e41661dc4633488e93b13363137523ce59977jose borrego return (NDR_DRC_FAULT_PARAM_0_UNIMPLEMENTED);
8d7e41661dc4633488e93b13363137523ce59977jose borrego}