From 84a52084c2d5ff403f9285de7043292277cbe426 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Fri, 18 Jun 2004 07:34:28 +0000 Subject: r1185: Hey look an endpoint for the spoolss pipe! Doesn't do much at the moment except compile. (This used to be commit ed9c4d7d70041879fa5005222f6cf84af558abef) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 721 ++++++++++++++++++++++++++++ 1 file changed, 721 insertions(+) create mode 100644 source4/rpc_server/spoolss/dcesrv_spoolss.c (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c new file mode 100644 index 0000000000..5153ad0b57 --- /dev/null +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -0,0 +1,721 @@ +/* + Unix SMB/CIFS implementation. + + endpoint server for the spoolss pipe + + Copyright (C) Tim Potter 2004 + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include "includes.h" +#include "rpc_server/common/common.h" +#include "rpc_server/spoolss/dcesrv_spoolss.h" + +static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_EnumPrinters *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_OpenPrinter(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_OpenPrinter *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_SetJob(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_SetJob *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_GetJob(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_GetJob *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_EnumJobs(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_EnumJobs *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_AddPrinter(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_AddPrinter *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_DeletePrinter(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_DeletePrinter *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_SetPrinter(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_SetPrinter *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_GetPrinter(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_GetPrinter *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_AddPrinterDriver(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_AddPrinterDriver *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_EnumPrinterDrivers(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_EnumPrinterDrivers *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_GetPrinterDriver(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_GetPrinterDriver *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_GetPrinterDriverDirectory( + struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_GetPrinterDriverDirectory *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_DeletePrinterDriver( + struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_DeletePrinterDriver *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_AddPrintProcessor(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_AddPrintProcessor *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_EnumPrintProcessors( + struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_EnumPrintProcessors *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_GetPrintProcessorDirectory( + struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_GetPrintProcessorDirectory *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_StartDocPrinter(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_StartDocPrinter *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_StartPagePrinter(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_StartPagePrinter *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_WritePrinter(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_WritePrinter *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_EndPagePrinter(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_EndPagePrinter *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_AbortPrinter(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_AbortPrinter *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_ReadPrinter(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_ReadPrinter *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_EndDocPrinter(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_EndDocPrinter *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_AddJob(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_AddJob *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_ScheduleJob(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_ScheduleJob *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_GetPrinterData(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_GetPrinterData *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_SetPrinterData(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_SetPrinterData *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_WaitForPrinterChange( + struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_WaitForPrinterChange *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_ClosePrinter(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_ClosePrinter *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_AddForm(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_AddForm *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_DeleteForm(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_DeleteForm *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_GetForm(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_GetForm *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_SetForm(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_SetForm *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_EnumForms(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_EnumForms *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_EnumPorts(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_EnumPorts *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_EnumMonitors(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_EnumMonitors *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_AddPort(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_AddPort *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_ConfigurePort(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_ConfigurePort *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_DeletePort(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_DeletePort *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_CreatePrinterIC(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_CreatePrinterIC *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_PlayGDIScriptOnPrinterIC( + struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_PlayGDIScriptOnPrinterIC *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_DeletePrinterIC(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_DeletePrinterIC *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_AddPrinterConnection( + struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_AddPrinterConnection *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_DeletePrinterConnection( + struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_DeletePrinterConnection *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_PrinterMessageBox(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_PrinterMessageBox *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_AddMonitor(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_AddMonitor *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_DeleteMonitor(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_DeleteMonitor *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_DeletePrintProcessor( + struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_DeletePrintProcessor *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_AddPrintProvidor(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_AddPrintProvidor *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_DeletePrintProvidor( + struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_DeletePrintProvidor *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_EnumPrintProcDataTypes( + struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_EnumPrintProcDataTypes *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_ResetPrinter(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_ResetPrinter *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_GetPrinterDriver2(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_GetPrinterDriver2 *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_FindFirstPrinterChangeNotification( + struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_FindFirstPrinterChangeNotification *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_FindNextPrinterChangeNotification( + struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_FindNextPrinterChangeNotification *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_FindClosePrinterNotify( + struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_FindClosePrinterNotify *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_RouterFindFirstPrinterChangeNotificationOld( + struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_RouterFindFirstPrinterChangeNotificationOld *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_ReplyOpenPrinter(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_ReplyOpenPrinter *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_RouterReplyPrinter(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_RouterReplyPrinter *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_ReplyClosePrinter(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_ReplyClosePrinter *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_AddPortEx(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_AddPortEx *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_RouterFindFirstPrinterChangeNotification( + struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_RouterFindFirstPrinterChangeNotification *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_SpoolerInit(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_SpoolerInit *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_ResetPrinterEx(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_ResetPrinterEx *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_RemoteFindFirstPrinterChangeNotifyEx( + struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_RemoteFindFirstPrinterChangeNotifyEx *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_RouterRefreshPrinterChangeNotification( + struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_RouterRefreshPrinterChangeNotification *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_RemoteFindNextPrinterChangeNotifyEx( + struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_RemoteFindNextPrinterChangeNotifyEx *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_44(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_44 *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_OpenPrinterEx(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_OpenPrinterEx *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_AddPrinterEx(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_AddPrinterEx *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_47(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_47 *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_EnumPrinterData(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_EnumPrinterData *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_DeletePrinterData(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_DeletePrinterData *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_4a(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_4a *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_4b(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_4b *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_4c(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_4c *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_SetPrinterDataEx(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_SetPrinterDataEx *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_GetPrinterDataEx(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_GetPrinterDataEx *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_EnumPrinterDataEx(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_EnumPrinterDataEx *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_EnumPrinterKey(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_EnumPrinterKey *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_DeletePrinterDataEx( + struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_DeletePrinterDataEx *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_DeletePrinterKey(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_DeletePrinterKey *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_53(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_53 *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_DeletePrinterDriverEx( + struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_DeletePrinterDriverEx *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_55(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_55 *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_56(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_56 *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_57(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_57 *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_58(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_58 *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_AddPrinterDriverEx(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_AddPrinterDriverEx *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_5a(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_5a *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_5b(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_5b *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_5c(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_5c *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_5d(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_5d *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_5e(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_5e *r) +{ + return WERR_BADFUNC; +} + +static WERROR spoolss_5f(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_5f *r) +{ + return WERR_BADFUNC; +} + +/* include the generated boilerplate */ +#include "librpc/gen_ndr/ndr_spoolss_s.c" -- cgit From 4e4c3d4bea5549eece6db05ac9f26344f3c476f7 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Fri, 18 Jun 2004 12:11:41 +0000 Subject: r1188: Use generated pidl template for this file and return DCESRV_FAULT instead of a bogus WERROR. (This used to be commit 261531ce0a7f33eda5358319312877dc85386edb) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 1078 +++++++++++++++++---------- 1 file changed, 672 insertions(+), 406 deletions(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index 5153ad0b57..56cd04c18a 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -22,700 +22,966 @@ #include "includes.h" #include "rpc_server/common/common.h" -#include "rpc_server/spoolss/dcesrv_spoolss.h" -static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_EnumPrinters *r) +/* + spoolss_EnumPrinters +*/ +static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_EnumPrinters *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_OpenPrinter(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_OpenPrinter *r) + +/* + spoolss_OpenPrinter +*/ +static WERROR spoolss_OpenPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_OpenPrinter *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_SetJob(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_SetJob *r) + +/* + spoolss_SetJob +*/ +static WERROR spoolss_SetJob(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_SetJob *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_GetJob(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_GetJob *r) + +/* + spoolss_GetJob +*/ +static WERROR spoolss_GetJob(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_GetJob *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_EnumJobs(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_EnumJobs *r) + +/* + spoolss_EnumJobs +*/ +static WERROR spoolss_EnumJobs(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_EnumJobs *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_AddPrinter(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_AddPrinter *r) + +/* + spoolss_AddPrinter +*/ +static WERROR spoolss_AddPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_AddPrinter *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_DeletePrinter(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_DeletePrinter *r) + +/* + spoolss_DeletePrinter +*/ +static WERROR spoolss_DeletePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_DeletePrinter *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_SetPrinter(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_SetPrinter *r) + +/* + spoolss_SetPrinter +*/ +static WERROR spoolss_SetPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_SetPrinter *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_GetPrinter(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_GetPrinter *r) + +/* + spoolss_GetPrinter +*/ +static WERROR spoolss_GetPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_GetPrinter *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_AddPrinterDriver(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_AddPrinterDriver *r) + +/* + spoolss_AddPrinterDriver +*/ +static WERROR spoolss_AddPrinterDriver(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_AddPrinterDriver *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_EnumPrinterDrivers(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_EnumPrinterDrivers *r) + +/* + spoolss_EnumPrinterDrivers +*/ +static WERROR spoolss_EnumPrinterDrivers(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_EnumPrinterDrivers *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_GetPrinterDriver(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_GetPrinterDriver *r) + +/* + spoolss_GetPrinterDriver +*/ +static WERROR spoolss_GetPrinterDriver(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_GetPrinterDriver *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_GetPrinterDriverDirectory( - struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_GetPrinterDriverDirectory *r) + +/* + spoolss_GetPrinterDriverDirectory +*/ +static WERROR spoolss_GetPrinterDriverDirectory(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_GetPrinterDriverDirectory *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_DeletePrinterDriver( - struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_DeletePrinterDriver *r) + +/* + spoolss_DeletePrinterDriver +*/ +static WERROR spoolss_DeletePrinterDriver(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_DeletePrinterDriver *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_AddPrintProcessor(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_AddPrintProcessor *r) + +/* + spoolss_AddPrintProcessor +*/ +static WERROR spoolss_AddPrintProcessor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_AddPrintProcessor *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_EnumPrintProcessors( - struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_EnumPrintProcessors *r) + +/* + spoolss_EnumPrintProcessors +*/ +static WERROR spoolss_EnumPrintProcessors(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_EnumPrintProcessors *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_GetPrintProcessorDirectory( - struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_GetPrintProcessorDirectory *r) + +/* + spoolss_GetPrintProcessorDirectory +*/ +static WERROR spoolss_GetPrintProcessorDirectory(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_GetPrintProcessorDirectory *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_StartDocPrinter(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_StartDocPrinter *r) + +/* + spoolss_StartDocPrinter +*/ +static WERROR spoolss_StartDocPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_StartDocPrinter *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_StartPagePrinter(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_StartPagePrinter *r) + +/* + spoolss_StartPagePrinter +*/ +static WERROR spoolss_StartPagePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_StartPagePrinter *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_WritePrinter(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_WritePrinter *r) + +/* + spoolss_WritePrinter +*/ +static WERROR spoolss_WritePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_WritePrinter *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_EndPagePrinter(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_EndPagePrinter *r) + +/* + spoolss_EndPagePrinter +*/ +static WERROR spoolss_EndPagePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_EndPagePrinter *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_AbortPrinter(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_AbortPrinter *r) + +/* + spoolss_AbortPrinter +*/ +static WERROR spoolss_AbortPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_AbortPrinter *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_ReadPrinter(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_ReadPrinter *r) + +/* + spoolss_ReadPrinter +*/ +static WERROR spoolss_ReadPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_ReadPrinter *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_EndDocPrinter(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_EndDocPrinter *r) + +/* + spoolss_EndDocPrinter +*/ +static WERROR spoolss_EndDocPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_EndDocPrinter *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_AddJob(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_AddJob *r) + +/* + spoolss_AddJob +*/ +static WERROR spoolss_AddJob(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_AddJob *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_ScheduleJob(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_ScheduleJob *r) + +/* + spoolss_ScheduleJob +*/ +static WERROR spoolss_ScheduleJob(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_ScheduleJob *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_GetPrinterData(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_GetPrinterData *r) + +/* + spoolss_GetPrinterData +*/ +static WERROR spoolss_GetPrinterData(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_GetPrinterData *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_SetPrinterData(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_SetPrinterData *r) + +/* + spoolss_SetPrinterData +*/ +static WERROR spoolss_SetPrinterData(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_SetPrinterData *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_WaitForPrinterChange( - struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_WaitForPrinterChange *r) + +/* + spoolss_WaitForPrinterChange +*/ +static WERROR spoolss_WaitForPrinterChange(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_WaitForPrinterChange *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_ClosePrinter(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_ClosePrinter *r) + +/* + spoolss_ClosePrinter +*/ +static WERROR spoolss_ClosePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_ClosePrinter *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_AddForm(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_AddForm *r) + +/* + spoolss_AddForm +*/ +static WERROR spoolss_AddForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_AddForm *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_DeleteForm(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_DeleteForm *r) + +/* + spoolss_DeleteForm +*/ +static WERROR spoolss_DeleteForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_DeleteForm *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_GetForm(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_GetForm *r) + +/* + spoolss_GetForm +*/ +static WERROR spoolss_GetForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_GetForm *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_SetForm(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_SetForm *r) + +/* + spoolss_SetForm +*/ +static WERROR spoolss_SetForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_SetForm *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_EnumForms(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_EnumForms *r) + +/* + spoolss_EnumForms +*/ +static WERROR spoolss_EnumForms(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_EnumForms *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_EnumPorts(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_EnumPorts *r) + +/* + spoolss_EnumPorts +*/ +static WERROR spoolss_EnumPorts(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_EnumPorts *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_EnumMonitors(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_EnumMonitors *r) + +/* + spoolss_EnumMonitors +*/ +static WERROR spoolss_EnumMonitors(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_EnumMonitors *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_AddPort(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_AddPort *r) + +/* + spoolss_AddPort +*/ +static WERROR spoolss_AddPort(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_AddPort *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_ConfigurePort(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_ConfigurePort *r) + +/* + spoolss_ConfigurePort +*/ +static WERROR spoolss_ConfigurePort(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_ConfigurePort *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_DeletePort(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_DeletePort *r) + +/* + spoolss_DeletePort +*/ +static WERROR spoolss_DeletePort(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_DeletePort *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_CreatePrinterIC(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_CreatePrinterIC *r) + +/* + spoolss_CreatePrinterIC +*/ +static WERROR spoolss_CreatePrinterIC(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_CreatePrinterIC *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_PlayGDIScriptOnPrinterIC( - struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_PlayGDIScriptOnPrinterIC *r) + +/* + spoolss_PlayGDIScriptOnPrinterIC +*/ +static WERROR spoolss_PlayGDIScriptOnPrinterIC(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_PlayGDIScriptOnPrinterIC *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_DeletePrinterIC(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_DeletePrinterIC *r) + +/* + spoolss_DeletePrinterIC +*/ +static WERROR spoolss_DeletePrinterIC(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_DeletePrinterIC *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_AddPrinterConnection( - struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_AddPrinterConnection *r) + +/* + spoolss_AddPrinterConnection +*/ +static WERROR spoolss_AddPrinterConnection(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_AddPrinterConnection *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_DeletePrinterConnection( - struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_DeletePrinterConnection *r) + +/* + spoolss_DeletePrinterConnection +*/ +static WERROR spoolss_DeletePrinterConnection(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_DeletePrinterConnection *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_PrinterMessageBox(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_PrinterMessageBox *r) + +/* + spoolss_PrinterMessageBox +*/ +static WERROR spoolss_PrinterMessageBox(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_PrinterMessageBox *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_AddMonitor(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_AddMonitor *r) + +/* + spoolss_AddMonitor +*/ +static WERROR spoolss_AddMonitor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_AddMonitor *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_DeleteMonitor(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_DeleteMonitor *r) + +/* + spoolss_DeleteMonitor +*/ +static WERROR spoolss_DeleteMonitor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_DeleteMonitor *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_DeletePrintProcessor( - struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_DeletePrintProcessor *r) + +/* + spoolss_DeletePrintProcessor +*/ +static WERROR spoolss_DeletePrintProcessor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_DeletePrintProcessor *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_AddPrintProvidor(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_AddPrintProvidor *r) + +/* + spoolss_AddPrintProvidor +*/ +static WERROR spoolss_AddPrintProvidor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_AddPrintProvidor *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_DeletePrintProvidor( - struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_DeletePrintProvidor *r) + +/* + spoolss_DeletePrintProvidor +*/ +static WERROR spoolss_DeletePrintProvidor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_DeletePrintProvidor *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_EnumPrintProcDataTypes( - struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_EnumPrintProcDataTypes *r) + +/* + spoolss_EnumPrintProcDataTypes +*/ +static WERROR spoolss_EnumPrintProcDataTypes(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_EnumPrintProcDataTypes *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_ResetPrinter(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_ResetPrinter *r) + +/* + spoolss_ResetPrinter +*/ +static WERROR spoolss_ResetPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_ResetPrinter *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_GetPrinterDriver2(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_GetPrinterDriver2 *r) + +/* + spoolss_GetPrinterDriver2 +*/ +static WERROR spoolss_GetPrinterDriver2(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_GetPrinterDriver2 *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_FindFirstPrinterChangeNotification( - struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_FindFirstPrinterChangeNotification *r) + +/* + spoolss_FindFirstPrinterChangeNotification +*/ +static WERROR spoolss_FindFirstPrinterChangeNotification(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_FindFirstPrinterChangeNotification *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_FindNextPrinterChangeNotification( - struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_FindNextPrinterChangeNotification *r) + +/* + spoolss_FindNextPrinterChangeNotification +*/ +static WERROR spoolss_FindNextPrinterChangeNotification(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_FindNextPrinterChangeNotification *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_FindClosePrinterNotify( - struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_FindClosePrinterNotify *r) + +/* + spoolss_FindClosePrinterNotify +*/ +static WERROR spoolss_FindClosePrinterNotify(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_FindClosePrinterNotify *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_RouterFindFirstPrinterChangeNotificationOld( - struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_RouterFindFirstPrinterChangeNotificationOld *r) + +/* + spoolss_RouterFindFirstPrinterChangeNotificationOld +*/ +static WERROR spoolss_RouterFindFirstPrinterChangeNotificationOld(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_RouterFindFirstPrinterChangeNotificationOld *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_ReplyOpenPrinter(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_ReplyOpenPrinter *r) + +/* + spoolss_ReplyOpenPrinter +*/ +static WERROR spoolss_ReplyOpenPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_ReplyOpenPrinter *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_RouterReplyPrinter(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_RouterReplyPrinter *r) + +/* + spoolss_RouterReplyPrinter +*/ +static WERROR spoolss_RouterReplyPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_RouterReplyPrinter *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_ReplyClosePrinter(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_ReplyClosePrinter *r) + +/* + spoolss_ReplyClosePrinter +*/ +static WERROR spoolss_ReplyClosePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_ReplyClosePrinter *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_AddPortEx(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_AddPortEx *r) + +/* + spoolss_AddPortEx +*/ +static WERROR spoolss_AddPortEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_AddPortEx *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_RouterFindFirstPrinterChangeNotification( - struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_RouterFindFirstPrinterChangeNotification *r) + +/* + spoolss_RouterFindFirstPrinterChangeNotification +*/ +static WERROR spoolss_RouterFindFirstPrinterChangeNotification(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_RouterFindFirstPrinterChangeNotification *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_SpoolerInit(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_SpoolerInit *r) + +/* + spoolss_SpoolerInit +*/ +static WERROR spoolss_SpoolerInit(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_SpoolerInit *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_ResetPrinterEx(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_ResetPrinterEx *r) + +/* + spoolss_ResetPrinterEx +*/ +static WERROR spoolss_ResetPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_ResetPrinterEx *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_RemoteFindFirstPrinterChangeNotifyEx( - struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_RemoteFindFirstPrinterChangeNotifyEx *r) + +/* + spoolss_RemoteFindFirstPrinterChangeNotifyEx +*/ +static WERROR spoolss_RemoteFindFirstPrinterChangeNotifyEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_RemoteFindFirstPrinterChangeNotifyEx *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_RouterRefreshPrinterChangeNotification( - struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_RouterRefreshPrinterChangeNotification *r) + +/* + spoolss_RouterRefreshPrinterChangeNotification +*/ +static WERROR spoolss_RouterRefreshPrinterChangeNotification(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_RouterRefreshPrinterChangeNotification *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_RemoteFindNextPrinterChangeNotifyEx( - struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_RemoteFindNextPrinterChangeNotifyEx *r) + +/* + spoolss_RemoteFindNextPrinterChangeNotifyEx +*/ +static WERROR spoolss_RemoteFindNextPrinterChangeNotifyEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_RemoteFindNextPrinterChangeNotifyEx *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_44(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_44 *r) + +/* + spoolss_44 +*/ +static WERROR spoolss_44(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_44 *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_OpenPrinterEx(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_OpenPrinterEx *r) + +/* + spoolss_OpenPrinterEx +*/ +static WERROR spoolss_OpenPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_OpenPrinterEx *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_AddPrinterEx(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_AddPrinterEx *r) + +/* + spoolss_AddPrinterEx +*/ +static WERROR spoolss_AddPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_AddPrinterEx *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_47(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_47 *r) + +/* + spoolss_47 +*/ +static WERROR spoolss_47(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_47 *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_EnumPrinterData(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_EnumPrinterData *r) + +/* + spoolss_EnumPrinterData +*/ +static WERROR spoolss_EnumPrinterData(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_EnumPrinterData *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_DeletePrinterData(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_DeletePrinterData *r) + +/* + spoolss_DeletePrinterData +*/ +static WERROR spoolss_DeletePrinterData(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_DeletePrinterData *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_4a(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_4a *r) + +/* + spoolss_4a +*/ +static WERROR spoolss_4a(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_4a *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_4b(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_4b *r) + +/* + spoolss_4b +*/ +static WERROR spoolss_4b(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_4b *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_4c(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_4c *r) + +/* + spoolss_4c +*/ +static WERROR spoolss_4c(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_4c *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_SetPrinterDataEx(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_SetPrinterDataEx *r) + +/* + spoolss_SetPrinterDataEx +*/ +static WERROR spoolss_SetPrinterDataEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_SetPrinterDataEx *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_GetPrinterDataEx(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_GetPrinterDataEx *r) + +/* + spoolss_GetPrinterDataEx +*/ +static WERROR spoolss_GetPrinterDataEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_GetPrinterDataEx *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_EnumPrinterDataEx(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_EnumPrinterDataEx *r) + +/* + spoolss_EnumPrinterDataEx +*/ +static WERROR spoolss_EnumPrinterDataEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_EnumPrinterDataEx *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_EnumPrinterKey(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_EnumPrinterKey *r) + +/* + spoolss_EnumPrinterKey +*/ +static WERROR spoolss_EnumPrinterKey(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_EnumPrinterKey *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_DeletePrinterDataEx( - struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_DeletePrinterDataEx *r) + +/* + spoolss_DeletePrinterDataEx +*/ +static WERROR spoolss_DeletePrinterDataEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_DeletePrinterDataEx *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_DeletePrinterKey(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_DeletePrinterKey *r) + +/* + spoolss_DeletePrinterKey +*/ +static WERROR spoolss_DeletePrinterKey(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_DeletePrinterKey *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_53(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_53 *r) + +/* + spoolss_53 +*/ +static WERROR spoolss_53(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_53 *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_DeletePrinterDriverEx( - struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_DeletePrinterDriverEx *r) + +/* + spoolss_DeletePrinterDriverEx +*/ +static WERROR spoolss_DeletePrinterDriverEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_DeletePrinterDriverEx *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_55(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_55 *r) + +/* + spoolss_55 +*/ +static WERROR spoolss_55(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_55 *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_56(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_56 *r) + +/* + spoolss_56 +*/ +static WERROR spoolss_56(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_56 *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_57(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_57 *r) + +/* + spoolss_57 +*/ +static WERROR spoolss_57(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_57 *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_58(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_58 *r) + +/* + spoolss_58 +*/ +static WERROR spoolss_58(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_58 *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_AddPrinterDriverEx(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_AddPrinterDriverEx *r) + +/* + spoolss_AddPrinterDriverEx +*/ +static WERROR spoolss_AddPrinterDriverEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_AddPrinterDriverEx *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_5a(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_5a *r) + +/* + spoolss_5a +*/ +static WERROR spoolss_5a(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_5a *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_5b(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_5b *r) + +/* + spoolss_5b +*/ +static WERROR spoolss_5b(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_5b *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_5c(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_5c *r) + +/* + spoolss_5c +*/ +static WERROR spoolss_5c(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_5c *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_5d(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_5d *r) + +/* + spoolss_5d +*/ +static WERROR spoolss_5d(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_5d *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_5e(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_5e *r) + +/* + spoolss_5e +*/ +static WERROR spoolss_5e(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_5e *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } -static WERROR spoolss_5f(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_5f *r) + +/* + spoolss_5f +*/ +static WERROR spoolss_5f(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_5f *r) { - return WERR_BADFUNC; + DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } + /* include the generated boilerplate */ #include "librpc/gen_ndr/ndr_spoolss_s.c" -- cgit From f1eef54ba8b16ed7b354ad457dbbadce26ebb807 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Sun, 20 Jun 2004 07:36:26 +0000 Subject: r1201: Skeleton versions of OpenPrinterEx() and ClosePrinter() to get the hang of things. (This used to be commit 3e79a6219eca3b96fe04d66b6cdfb11400c1771d) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 67 ++++++++++++++++++++++++++++- 1 file changed, 65 insertions(+), 2 deletions(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index 56cd04c18a..cb001c168a 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -22,6 +22,8 @@ #include "includes.h" #include "rpc_server/common/common.h" +#include "rpc_server/spoolss/dcesrv_spoolss.h" + /* spoolss_EnumPrinters @@ -33,6 +35,17 @@ static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CT } +/* + destroy an open connection. This closes the database connection +*/ +static void spoolss_OpenPrinter_destroy(struct dcesrv_connection *conn, struct dcesrv_handle *h) +{ +#if 0 + struct samr_connect_state *c_state = h->data; + samr_Connect_close(c_state); +#endif +} + /* spoolss_OpenPrinter */ @@ -319,7 +332,20 @@ static WERROR spoolss_WaitForPrinterChange(struct dcesrv_call_state *dce_call, T static WERROR spoolss_ClosePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_ClosePrinter *r) { - DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); + struct dcesrv_handle *h; + + *r->out.handle = *r->in.handle; + + DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY); + + /* this causes the callback spoolss_XXX_destroy() to be called by + the handle destroy code which destroys the state associated + with the handle */ + dcesrv_handle_destroy(dce_call->conn, h); + + ZERO_STRUCTP(r->out.handle); + + return WERR_OK; } @@ -719,7 +745,44 @@ static WERROR spoolss_44(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx static WERROR spoolss_OpenPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_OpenPrinterEx *r) { - DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); + struct spoolss_openprinter_state *state; + struct dcesrv_handle *handle; + TALLOC_CTX *op_mem_ctx; + + ZERO_STRUCTP(r->out.handle); + + /* Check printername is either \\\\SERVER, \\\\SERVERIP or + \\\\SERVER.FQ.DN */ + + if (!strequal(r->in.printername, lp_netbios_name())) { + return WERR_INVALID_PRINTER_NAME; + } + + op_mem_ctx = talloc_init("spoolss_OpenPrinter"); + if (!op_mem_ctx) { + return WERR_OK; + } + + state = talloc_p(op_mem_ctx, struct spoolss_openprinter_state); + if (!state) { + return WERR_OK; + } + state->mem_ctx = op_mem_ctx; + + handle = dcesrv_handle_new(dce_call->conn, SPOOLSS_HANDLE_SERVER); + if (!handle) { + talloc_destroy(state->mem_ctx); + return WERR_NOMEM; + } + + handle->data = state; + handle->destroy = spoolss_OpenPrinter_destroy; + + state->reference_count = 1; + state->access_mask = r->in.access_required; + *r->out.handle = handle->wire_handle; + + return WERR_OK; } -- cgit From 77c571986414afd070ba629f41317e011e52349b Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Sun, 20 Jun 2004 11:34:26 +0000 Subject: r1208: Return some dummy printer information for the EnumPrinters RPC. rpcclient enumprinters prints this information OK. Some minor cut&paste cleanups. (This used to be commit 1c749a3a348a2df477808d4fcc5377832bffa5e9) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 57 ++++++++++++++++++++++++++--- 1 file changed, 51 insertions(+), 6 deletions(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index cb001c168a..dbf3d4cb89 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -31,19 +31,64 @@ static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_EnumPrinters *r) { - DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); + struct ndr_push *buf; + struct spoolss_PrinterInfo1 info; + WERROR result; + + info.flags = 0; + info.name = "p"; + info.description = "a printer"; + info.comment = "a comment"; + + buf = ndr_push_init(); + + ndr_push_spoolss_PrinterInfo1(buf, NDR_SCALARS|NDR_BUFFERS, &info); + + if (*r->in.buf_size < buf->offset) { + *r->out.buf_size = buf->offset; + result = WERR_INSUFFICIENT_BUFFER; + goto done; + } + + r->out.buffer = (DATA_BLOB *)talloc(mem_ctx, sizeof(DATA_BLOB)); + + if (!r->out.buffer) { + result = WERR_NOMEM; + goto done; + } + + *r->out.buffer = data_blob_talloc(mem_ctx, buf->data, buf->offset); + + r->out.count = 1; + *r->out.buf_size = buf->offset; + + result = WERR_OK; + + done: + ndr_push_free(buf); + + return result; } +/* + destroy connection state +*/ +static void spoolss_OpenPrinter_close(struct spoolss_openprinter_state *c_state) +{ + c_state->reference_count--; + if (c_state->reference_count == 0) { + talloc_destroy(c_state->mem_ctx); + } +} + /* destroy an open connection. This closes the database connection */ static void spoolss_OpenPrinter_destroy(struct dcesrv_connection *conn, struct dcesrv_handle *h) { -#if 0 - struct samr_connect_state *c_state = h->data; - samr_Connect_close(c_state); -#endif + struct spoolss_openprinter_state *c_state = h->data; + spoolss_OpenPrinter_close(c_state); } /* @@ -338,7 +383,7 @@ static WERROR spoolss_ClosePrinter(struct dcesrv_call_state *dce_call, TALLOC_CT DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY); - /* this causes the callback spoolss_XXX_destroy() to be called by + /* this causes the callback s_XXX_destroy() to be called by the handle destroy code which destroys the state associated with the handle */ dcesrv_handle_destroy(dce_call->conn, h); -- cgit From a38429269edbad0a2a8aef9fd38f125a610bd639 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Wed, 23 Jun 2004 07:31:09 +0000 Subject: r1226: Return dummy information for two printers. Note that ndr_push_array() can be used here - neat! (This used to be commit 5d0013438e6f838da44e6c7e74e4c49d477da3f1) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index dbf3d4cb89..7efe9b2129 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -32,17 +32,24 @@ static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CT struct spoolss_EnumPrinters *r) { struct ndr_push *buf; - struct spoolss_PrinterInfo1 info; + struct spoolss_PrinterInfo1 info[2]; WERROR result; - info.flags = 0; - info.name = "p"; - info.description = "a printer"; - info.comment = "a comment"; + info[0].flags = 0x80; + info[0].name = "p"; + info[0].description = "a printer"; + info[0].comment = "a comment"; + + info[1].flags = 0x80; + info[1].name = "p2"; + info[1].description = "spottyfoot"; + info[1].comment = "the doggy"; buf = ndr_push_init(); - ndr_push_spoolss_PrinterInfo1(buf, NDR_SCALARS|NDR_BUFFERS, &info); + ndr_push_array(buf, NDR_SCALARS|NDR_BUFFERS, info, + sizeof(struct spoolss_PrinterInfo1), 2, + (ndr_push_const_fn_t)ndr_push_spoolss_PrinterInfo1); if (*r->in.buf_size < buf->offset) { *r->out.buf_size = buf->offset; @@ -59,7 +66,7 @@ static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CT *r->out.buffer = data_blob_talloc(mem_ctx, buf->data, buf->offset); - r->out.count = 1; + r->out.count = 2; *r->out.buf_size = buf->offset; result = WERR_OK; -- cgit From 27f245a2199f2ce8d007810992d13b3a2c7560fa Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Sat, 26 Jun 2004 13:28:30 +0000 Subject: r1266: Start to split out EnumPrinters into a separate fn for each info level. (This used to be commit 6b24ee38646f3476eaf8eda946488b46180038e2) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 64 ++++++++++++++++++++--------- 1 file changed, 44 insertions(+), 20 deletions(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index 7efe9b2129..0916ddf081 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -25,15 +25,10 @@ #include "rpc_server/spoolss/dcesrv_spoolss.h" -/* - spoolss_EnumPrinters -*/ -static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, - struct spoolss_EnumPrinters *r) +static WERROR spoolss_EnumPrinters1(TALLOC_CTX *mem_ctx, void *spoolss_ctx, + struct ndr_push *ndr, uint32_t *count) { - struct ndr_push *buf; struct spoolss_PrinterInfo1 info[2]; - WERROR result; info[0].flags = 0x80; info[0].name = "p"; @@ -45,14 +40,46 @@ static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CT info[1].description = "spottyfoot"; info[1].comment = "the doggy"; - buf = ndr_push_init(); - - ndr_push_array(buf, NDR_SCALARS|NDR_BUFFERS, info, + ndr_push_array(ndr, NDR_SCALARS|NDR_BUFFERS, info, sizeof(struct spoolss_PrinterInfo1), 2, - (ndr_push_const_fn_t)ndr_push_spoolss_PrinterInfo1); + (ndr_push_flags_fn_t)ndr_push_spoolss_PrinterInfo1); + + *count = 2; - if (*r->in.buf_size < buf->offset) { - *r->out.buf_size = buf->offset; + return WERR_OK; +} + +/* + spoolss_EnumPrinters +*/ +static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_EnumPrinters *r) +{ + struct ndr_push *ndr; + void *spoolss_ctx; + WERROR result; + + spoolss_ctx = spoolssdb_connect(); + if (spoolss_ctx == NULL) + return WERR_NOMEM; + + ndr = ndr_push_init(); + + switch(r->in.level) { + case 1: + result = spoolss_EnumPrinters1( + mem_ctx, spoolss_ctx, ndr, &r->out.count); + break; + default: + r->out.buffer = NULL; + *r->out.buf_size = 0; + r->out.count = 0; + result = WERR_INVALID_PARAM; + goto done; + } + + if (*r->in.buf_size < ndr->offset) { + *r->out.buf_size = ndr->offset; result = WERR_INSUFFICIENT_BUFFER; goto done; } @@ -64,15 +91,12 @@ static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CT goto done; } - *r->out.buffer = data_blob_talloc(mem_ctx, buf->data, buf->offset); - - r->out.count = 2; - *r->out.buf_size = buf->offset; - - result = WERR_OK; + *r->out.buffer = data_blob_talloc(mem_ctx, ndr->data, ndr->offset); + *r->out.buf_size = ndr->offset; done: - ndr_push_free(buf); + ndr_push_free(ndr); + spoolssdb_close(spoolss_ctx); return result; } -- cgit From 674414c5b80ca7f2e4052486f892b34ec93140f9 Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Sun, 27 Jun 2004 12:03:57 +0000 Subject: r1271: Return spoolss enumprinters info level1 from spoolss.ldb - woot! (This used to be commit 60e48790dc7ee8a98be1914ff4a2c335d25639a8) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 44 ++++++++++++++++------------- 1 file changed, 25 insertions(+), 19 deletions(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index 0916ddf081..7c14975106 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -24,28 +24,29 @@ #include "rpc_server/common/common.h" #include "rpc_server/spoolss/dcesrv_spoolss.h" - -static WERROR spoolss_EnumPrinters1(TALLOC_CTX *mem_ctx, void *spoolss_ctx, - struct ndr_push *ndr, uint32_t *count) +static WERROR spoolss_EnumPrinters1(TALLOC_CTX *mem_ctx, + struct ldb_message **msgs, int num_msgs, + struct ndr_push *ndr) { - struct spoolss_PrinterInfo1 info[2]; + struct spoolss_PrinterInfo1 *info; + int i; + + info = talloc(mem_ctx, num_msgs * sizeof(struct spoolss_PrinterInfo1)); - info[0].flags = 0x80; - info[0].name = "p"; - info[0].description = "a printer"; - info[0].comment = "a comment"; + if (!info) + return WERR_NOMEM; - info[1].flags = 0x80; - info[1].name = "p2"; - info[1].description = "spottyfoot"; - info[1].comment = "the doggy"; + for (i = 0; i < num_msgs; i++) { + info[i].flags = samdb_result_uint(msgs[i], "flags", 0); + info[i].name = samdb_result_string(msgs[i], "name", ""); + info[i].description = samdb_result_string(msgs[i], "description", ""); + info[i].comment = samdb_result_string(msgs[i], "comment", ""); + } ndr_push_array(ndr, NDR_SCALARS|NDR_BUFFERS, info, - sizeof(struct spoolss_PrinterInfo1), 2, + sizeof(struct spoolss_PrinterInfo1), num_msgs, (ndr_push_flags_fn_t)ndr_push_spoolss_PrinterInfo1); - *count = 2; - return WERR_OK; } @@ -58,22 +59,27 @@ static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CT struct ndr_push *ndr; void *spoolss_ctx; WERROR result; + struct ldb_message **msgs; + int ret; spoolss_ctx = spoolssdb_connect(); if (spoolss_ctx == NULL) return WERR_NOMEM; + ret = spoolssdb_search(spoolss_ctx, mem_ctx, NULL, &msgs, NULL, + "(&(objectclass=printer))"); + ndr = ndr_push_init(); + r->out.count = 0; + *r->out.buf_size = 0; + switch(r->in.level) { case 1: - result = spoolss_EnumPrinters1( - mem_ctx, spoolss_ctx, ndr, &r->out.count); + result = spoolss_EnumPrinters1(mem_ctx, msgs, ret, ndr); break; default: r->out.buffer = NULL; - *r->out.buf_size = 0; - r->out.count = 0; result = WERR_INVALID_PARAM; goto done; } -- cgit From f18fa1dfdbd1ca2d721d146522c7efdfae638e7f Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Mon, 28 Jun 2004 07:12:45 +0000 Subject: r1276: Return data for enumprinters level 2 and 5. (This used to be commit cf4e9080d52a5461650062f21f95b7887e3f3411) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 78 ++++++++++++++++++++++++++++- 1 file changed, 77 insertions(+), 1 deletion(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index 7c14975106..330d6c09da 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -50,6 +50,76 @@ static WERROR spoolss_EnumPrinters1(TALLOC_CTX *mem_ctx, return WERR_OK; } +static WERROR spoolss_EnumPrinters2(TALLOC_CTX *mem_ctx, + struct ldb_message **msgs, int num_msgs, + struct ndr_push *ndr) +{ + struct spoolss_PrinterInfo2 *info; + int i; + + info = talloc(mem_ctx, num_msgs * sizeof(struct spoolss_PrinterInfo1)); + + if (!info) + return WERR_NOMEM; + + for (i = 0; i < num_msgs; i++) { + info[i].servername = samdb_result_string(msgs[i], "servername", ""); + info[i].printername = samdb_result_string(msgs[i], "printername", ""); + info[i].sharename = samdb_result_string(msgs[i], "sharename", ""); + info[i].portname = samdb_result_string(msgs[i], "portname", ""); + info[i].drivername = samdb_result_string(msgs[i], "drivername", ""); + info[i].comment = samdb_result_string(msgs[i], "comment", ""); + info[i].location = samdb_result_string(msgs[i], "location", ""); + /* DEVICEMODE - eek! */ + info[i].sepfile = samdb_result_string(msgs[i], "sepfile", ""); + info[i].printprocessor = samdb_result_string(msgs[i], "printprocessor", ""); + info[i].datatype = samdb_result_string(msgs[i], "datatype", ""); + info[i].parameters = samdb_result_string(msgs[i], "parameters", ""); + /* SECURITY_DESCRIPTOR */ + info[i].attributes = samdb_result_uint(msgs[i], "attributes", 0); + info[i].priority = samdb_result_uint(msgs[i], "priority", 0); + info[i].defaultpriority = samdb_result_uint(msgs[i], "defaultpriority", 0); + info[i].starttime = samdb_result_uint(msgs[i], "starttime", 0); + info[i].untiltime = samdb_result_uint(msgs[i], "untiltime", 0); + info[i].status = samdb_result_uint(msgs[i], "status", 0); + info[i].cjobs = samdb_result_uint(msgs[i], "cjobs", 0); + info[i].averageppm = samdb_result_uint(msgs[i], "averageppm", 0); + } + + ndr_push_array(ndr, NDR_SCALARS|NDR_BUFFERS, info, + sizeof(struct spoolss_PrinterInfo2), num_msgs, + (ndr_push_flags_fn_t)ndr_push_spoolss_PrinterInfo2); + + return WERR_OK; +} + +static WERROR spoolss_EnumPrinters5(TALLOC_CTX *mem_ctx, + struct ldb_message **msgs, int num_msgs, + struct ndr_push *ndr) +{ + struct spoolss_PrinterInfo5 *info; + int i; + + info = talloc(mem_ctx, num_msgs * sizeof(struct spoolss_PrinterInfo1)); + + if (!info) + return WERR_NOMEM; + + for (i = 0; i < num_msgs; i++) { + info[i].printername = samdb_result_string(msgs[i], "name", ""); + info[i].portname = samdb_result_string(msgs[i], "port", ""); + info[i].attributes = samdb_result_uint(msgs[i], "attributes", 0); + info[i].device_not_selected_timeout = samdb_result_uint(msgs[i], "device_not_selected_timeout", 0); + info[i].transmission_retry_timeout = samdb_result_uint(msgs[i], "transmission_retry_timeout", 0); + } + + ndr_push_array(ndr, NDR_SCALARS|NDR_BUFFERS, info, + sizeof(struct spoolss_PrinterInfo5), num_msgs, + (ndr_push_flags_fn_t)ndr_push_spoolss_PrinterInfo5); + + return WERR_OK; +} + /* spoolss_EnumPrinters */ @@ -78,9 +148,15 @@ static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CT case 1: result = spoolss_EnumPrinters1(mem_ctx, msgs, ret, ndr); break; + case 2: + result = spoolss_EnumPrinters2(mem_ctx, msgs, ret, ndr); + break; + case 5: + result = spoolss_EnumPrinters5(mem_ctx, msgs, ret, ndr); + break; default: r->out.buffer = NULL; - result = WERR_INVALID_PARAM; + result = WERR_UNKNOWN_LEVEL; goto done; } -- cgit From c08a2a9e10fc5d53865e4ab08e749b1c207be9ed Mon Sep 17 00:00:00 2001 From: Tim Potter Date: Thu, 1 Jul 2004 04:17:26 +0000 Subject: r1313: Split up OpenPrinterEx into functions to handle opening printers and print servers. (This used to be commit 0edf17ac38b43cadb07dc0840730cd9b4e381713) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 56 ++++++++++++++++++++++------- 1 file changed, 44 insertions(+), 12 deletions(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index 330d6c09da..e3f4279669 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -897,24 +897,18 @@ static WERROR spoolss_44(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx } -/* - spoolss_OpenPrinterEx -*/ -static WERROR spoolss_OpenPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, - struct spoolss_OpenPrinterEx *r) +static WERROR spoolss_OpenPrinterEx_server(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_OpenPrinterEx *r) { struct spoolss_openprinter_state *state; struct dcesrv_handle *handle; TALLOC_CTX *op_mem_ctx; - ZERO_STRUCTP(r->out.handle); - - /* Check printername is either \\\\SERVER, \\\\SERVERIP or - \\\\SERVER.FQ.DN */ + /* Check printername is our name */ - if (!strequal(r->in.printername, lp_netbios_name())) { + if (!strequal(r->in.printername + 2, lp_netbios_name())) return WERR_INVALID_PRINTER_NAME; - } op_mem_ctx = talloc_init("spoolss_OpenPrinter"); if (!op_mem_ctx) { @@ -940,7 +934,45 @@ static WERROR spoolss_OpenPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_C state->access_mask = r->in.access_required; *r->out.handle = handle->wire_handle; - return WERR_OK; + return WERR_OK; +} + +static WERROR spoolss_OpenPrinterEx_printer(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_OpenPrinterEx *r) +{ + char *server = talloc_strdup(mem_ctx, r->in.printername + 2); + char *pos, *printer; + + pos = strchr(server, '\\'); + *pos = 0; + printer = talloc_strdup(mem_ctx, pos + 1); + + if (!strequal(server, lp_netbios_name())) + return WERR_INVALID_PRINTER_NAME; + + DEBUG(0, ("looking for server %s, printer %s\n", server, printer)); + + return WERR_INVALID_PRINTER_NAME; +} + +/* + spoolss_OpenPrinterEx +*/ +static WERROR spoolss_OpenPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_OpenPrinterEx *r) +{ + ZERO_STRUCTP(r->out.handle); + + /* Printername must start with \\ */ + + if (!strnequal(r->in.printername, "\\\\", 2)) + return WERR_INVALID_PARAM; + + if (strchr_m(r->in.printername + 2, '\\')) + return spoolss_OpenPrinterEx_server(dce_call, mem_ctx, r); + + return spoolss_OpenPrinterEx_printer(dce_call, mem_ctx, r); } -- cgit From 421c0d2a187481c74ebee0937be9ba0a47752fa6 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 20 Sep 2004 07:26:35 +0000 Subject: r2435: got rid of another pointless strnequal() (This used to be commit 1b4cee825e6e3d3710eda15cc25cdf6450feec17) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index e3f4279669..8fefb9d6df 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -966,7 +966,7 @@ static WERROR spoolss_OpenPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_C /* Printername must start with \\ */ - if (!strnequal(r->in.printername, "\\\\", 2)) + if (strncmp(r->in.printername, "\\\\", 2) == 0) return WERR_INVALID_PARAM; if (strchr_m(r->in.printername + 2, '\\')) -- cgit From 5a75c3b060374b01afb6b0df4ba2444042241c05 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Mon, 25 Oct 2004 15:19:19 +0000 Subject: r3218: Fix the build (This used to be commit 478ba629158e8ce5e15467105b1013ba60f04ec1) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index 8fefb9d6df..ed9cd01842 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -931,7 +931,7 @@ static WERROR spoolss_OpenPrinterEx_server(struct dcesrv_call_state *dce_call, handle->destroy = spoolss_OpenPrinter_destroy; state->reference_count = 1; - state->access_mask = r->in.access_required; + state->access_mask = r->in.access_mask; *r->out.handle = handle->wire_handle; return WERR_OK; -- cgit From 90067934cd3195df80f8b1e614629d51fffcb38b Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 1 Nov 2004 10:30:34 +0000 Subject: r3428: switched to using minimal includes for the auto-generated RPC code. The thing that finally convinced me that minimal includes was worth pursuing for rpc was a compiler (tcc) that failed to build Samba due to reaching internal limits of the size of include files. Also the fact that includes.h.gch was 16MB, which really seems excessive. This patch brings it back to 12M, which is still too large, but better. Note that this patch speeds up compile times for both the pch and non-pch case. This change also includes the addition iof a "depends()" option in our IDL files, allowing you to specify that one IDL file depends on another. This capability was needed for the auto-includes generation. (This used to be commit b8f5fa8ac8e8725f3d321004f0aedf4246fc6b49) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 1 + 1 file changed, 1 insertion(+) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index ed9cd01842..4654674744 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -21,6 +21,7 @@ */ #include "includes.h" +#include "librpc/gen_ndr/ndr_spoolss.h" #include "rpc_server/common/common.h" #include "rpc_server/spoolss/dcesrv_spoolss.h" -- cgit From c051779a0a34a9c40a5425fb1eb821983b8dc852 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Tue, 2 Nov 2004 07:42:47 +0000 Subject: r3468: split out dcerpc_server.h (This used to be commit 729e0026e4408f74f140375537d4fe48c1fc3242) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 1 + 1 file changed, 1 insertion(+) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index 4654674744..028471a715 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -21,6 +21,7 @@ */ #include "includes.h" +#include "rpc_server/dcerpc_server.h" #include "librpc/gen_ndr/ndr_spoolss.h" #include "rpc_server/common/common.h" #include "rpc_server/spoolss/dcesrv_spoolss.h" -- cgit From 58c326809a816703dc516c3022c9c4dbb9d09445 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 3 Dec 2004 06:24:38 +0000 Subject: r4052: fixed a bunch of code to use the type safe _p allocation macros (This used to be commit 80d15fa3402a9d1183467463f6b21c0b674bc442) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index 028471a715..17c23dcba8 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -33,7 +33,7 @@ static WERROR spoolss_EnumPrinters1(TALLOC_CTX *mem_ctx, struct spoolss_PrinterInfo1 *info; int i; - info = talloc(mem_ctx, num_msgs * sizeof(struct spoolss_PrinterInfo1)); + info = talloc_array_p(mem_ctx, struct spoolss_PrinterInfo1, num_msgs); if (!info) return WERR_NOMEM; @@ -59,7 +59,7 @@ static WERROR spoolss_EnumPrinters2(TALLOC_CTX *mem_ctx, struct spoolss_PrinterInfo2 *info; int i; - info = talloc(mem_ctx, num_msgs * sizeof(struct spoolss_PrinterInfo1)); + info = talloc_array_p(mem_ctx, struct spoolss_PrinterInfo2, num_msgs); if (!info) return WERR_NOMEM; @@ -102,7 +102,7 @@ static WERROR spoolss_EnumPrinters5(TALLOC_CTX *mem_ctx, struct spoolss_PrinterInfo5 *info; int i; - info = talloc(mem_ctx, num_msgs * sizeof(struct spoolss_PrinterInfo1)); + info = talloc_array_p(mem_ctx, struct spoolss_PrinterInfo5, num_msgs); if (!info) return WERR_NOMEM; -- cgit From 6e6374cb5bcffb4df8bdb0a83327fff92b61ac84 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Fri, 3 Dec 2004 07:20:30 +0000 Subject: r4055: fixed more places to use type safe allocation macros (This used to be commit eec698254f67365f27b4b7569fa982e22472aca1) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index 17c23dcba8..25210913fe 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -168,7 +168,7 @@ static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CT goto done; } - r->out.buffer = (DATA_BLOB *)talloc(mem_ctx, sizeof(DATA_BLOB)); + r->out.buffer = talloc_p(mem_ctx, DATA_BLOB); if (!r->out.buffer) { result = WERR_NOMEM; -- cgit From 577218b2aded7adb367f3f33bcc5560f3d4c0ec2 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 10 Jan 2005 12:15:26 +0000 Subject: r4640: first stage in the server side support for multiple context_ids on one pipe this stage does the following: - simplifies the dcerpc_handle handling, and all the callers of it - split out the context_id depenent state into a linked list of established contexts - fixed some talloc handling in several rpc servers that i noticed while doing the above (This used to be commit fde042b3fc609c94e2c7eedcdd72ecdf489cf63b) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 43 ++++------------------------- 1 file changed, 5 insertions(+), 38 deletions(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index 25210913fe..ff0a5641b7 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -186,26 +186,6 @@ static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CT } -/* - destroy connection state -*/ -static void spoolss_OpenPrinter_close(struct spoolss_openprinter_state *c_state) -{ - c_state->reference_count--; - if (c_state->reference_count == 0) { - talloc_destroy(c_state->mem_ctx); - } -} - -/* - destroy an open connection. This closes the database connection -*/ -static void spoolss_OpenPrinter_destroy(struct dcesrv_connection *conn, struct dcesrv_handle *h) -{ - struct spoolss_openprinter_state *c_state = h->data; - spoolss_OpenPrinter_close(c_state); -} - /* spoolss_OpenPrinter */ @@ -498,10 +478,7 @@ static WERROR spoolss_ClosePrinter(struct dcesrv_call_state *dce_call, TALLOC_CT DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY); - /* this causes the callback s_XXX_destroy() to be called by - the handle destroy code which destroys the state associated - with the handle */ - dcesrv_handle_destroy(dce_call->conn, h); + talloc_free(h); ZERO_STRUCTP(r->out.handle); @@ -905,34 +882,24 @@ static WERROR spoolss_OpenPrinterEx_server(struct dcesrv_call_state *dce_call, { struct spoolss_openprinter_state *state; struct dcesrv_handle *handle; - TALLOC_CTX *op_mem_ctx; /* Check printername is our name */ if (!strequal(r->in.printername + 2, lp_netbios_name())) return WERR_INVALID_PRINTER_NAME; - op_mem_ctx = talloc_init("spoolss_OpenPrinter"); - if (!op_mem_ctx) { - return WERR_OK; + handle = dcesrv_handle_new(dce_call->context, SPOOLSS_HANDLE_SERVER); + if (!handle) { + return WERR_NOMEM; } - state = talloc_p(op_mem_ctx, struct spoolss_openprinter_state); + state = talloc_p(handle, struct spoolss_openprinter_state); if (!state) { return WERR_OK; } - state->mem_ctx = op_mem_ctx; - - handle = dcesrv_handle_new(dce_call->conn, SPOOLSS_HANDLE_SERVER); - if (!handle) { - talloc_destroy(state->mem_ctx); - return WERR_NOMEM; - } handle->data = state; - handle->destroy = spoolss_OpenPrinter_destroy; - state->reference_count = 1; state->access_mask = r->in.access_mask; *r->out.handle = handle->wire_handle; -- cgit From 759da3b915e2006d4c87b5ace47f399accd9ce91 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Thu, 27 Jan 2005 07:08:20 +0000 Subject: r5037: got rid of all of the TALLOC_DEPRECATED stuff. My apologies for the large commit. I thought this was worthwhile to get done for consistency. (This used to be commit ec32b22ed5ec224f6324f5e069d15e92e38e15c0) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index ff0a5641b7..8bb6a5c60f 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -33,7 +33,7 @@ static WERROR spoolss_EnumPrinters1(TALLOC_CTX *mem_ctx, struct spoolss_PrinterInfo1 *info; int i; - info = talloc_array_p(mem_ctx, struct spoolss_PrinterInfo1, num_msgs); + info = talloc_array(mem_ctx, struct spoolss_PrinterInfo1, num_msgs); if (!info) return WERR_NOMEM; @@ -59,7 +59,7 @@ static WERROR spoolss_EnumPrinters2(TALLOC_CTX *mem_ctx, struct spoolss_PrinterInfo2 *info; int i; - info = talloc_array_p(mem_ctx, struct spoolss_PrinterInfo2, num_msgs); + info = talloc_array(mem_ctx, struct spoolss_PrinterInfo2, num_msgs); if (!info) return WERR_NOMEM; @@ -102,7 +102,7 @@ static WERROR spoolss_EnumPrinters5(TALLOC_CTX *mem_ctx, struct spoolss_PrinterInfo5 *info; int i; - info = talloc_array_p(mem_ctx, struct spoolss_PrinterInfo5, num_msgs); + info = talloc_array(mem_ctx, struct spoolss_PrinterInfo5, num_msgs); if (!info) return WERR_NOMEM; @@ -168,7 +168,7 @@ static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CT goto done; } - r->out.buffer = talloc_p(mem_ctx, DATA_BLOB); + r->out.buffer = talloc(mem_ctx, DATA_BLOB); if (!r->out.buffer) { result = WERR_NOMEM; @@ -893,7 +893,7 @@ static WERROR spoolss_OpenPrinterEx_server(struct dcesrv_call_state *dce_call, return WERR_NOMEM; } - state = talloc_p(handle, struct spoolss_openprinter_state); + state = talloc(handle, struct spoolss_openprinter_state); if (!state) { return WERR_OK; } -- cgit From 6b4cac2c00bd77c34bfe47f35729a60782b8c9c2 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Mon, 21 Feb 2005 13:54:06 +0000 Subject: r5489: hide handwritten pull/push/print code from the caller for the spoolss_Enum* functions metze (This used to be commit bfcc86e706cf32672323eda939e5def6694509a8) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 214 +++++++++++----------------- 1 file changed, 86 insertions(+), 128 deletions(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index 8bb6a5c60f..470c9e2674 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -26,163 +26,121 @@ #include "rpc_server/common/common.h" #include "rpc_server/spoolss/dcesrv_spoolss.h" -static WERROR spoolss_EnumPrinters1(TALLOC_CTX *mem_ctx, - struct ldb_message **msgs, int num_msgs, - struct ndr_push *ndr) +/* + spoolss_EnumPrinters +*/ +static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_EnumPrinters *r) { - struct spoolss_PrinterInfo1 *info; + void *spoolss_ctx; + struct ldb_message **msgs; + int count; int i; + union spoolss_PrinterInfo *info; - info = talloc_array(mem_ctx, struct spoolss_PrinterInfo1, num_msgs); - - if (!info) - return WERR_NOMEM; + r->out.info = NULL; + *r->out.buf_size = 0; + r->out.count = 0; - for (i = 0; i < num_msgs; i++) { - info[i].flags = samdb_result_uint(msgs[i], "flags", 0); - info[i].name = samdb_result_string(msgs[i], "name", ""); - info[i].description = samdb_result_string(msgs[i], "description", ""); - info[i].comment = samdb_result_string(msgs[i], "comment", ""); - } + spoolss_ctx = spoolssdb_connect(); + W_ERROR_HAVE_NO_MEMORY(spoolss_ctx); - ndr_push_array(ndr, NDR_SCALARS|NDR_BUFFERS, info, - sizeof(struct spoolss_PrinterInfo1), num_msgs, - (ndr_push_flags_fn_t)ndr_push_spoolss_PrinterInfo1); + count = spoolssdb_search(spoolss_ctx, mem_ctx, NULL, &msgs, NULL, + "(&(objectclass=printer))"); + spoolssdb_close(spoolss_ctx); - return WERR_OK; -} + if (count == 0) return WERR_OK; + if (count < 0) return WERR_GENERAL_FAILURE; -static WERROR spoolss_EnumPrinters2(TALLOC_CTX *mem_ctx, - struct ldb_message **msgs, int num_msgs, - struct ndr_push *ndr) -{ - struct spoolss_PrinterInfo2 *info; - int i; + info = talloc_array(mem_ctx, union spoolss_PrinterInfo, count); + W_ERROR_HAVE_NO_MEMORY(info); - info = talloc_array(mem_ctx, struct spoolss_PrinterInfo2, num_msgs); + switch(r->in.level) { + case 1: + for (i = 0; i < count; i++) { + info[i].info1.flags = samdb_result_uint(msgs[i], "flags", 0); - if (!info) - return WERR_NOMEM; + info[i].info1.name = samdb_result_string(msgs[i], "name", ""); + W_ERROR_HAVE_NO_MEMORY(info[i].info1.name); - for (i = 0; i < num_msgs; i++) { - info[i].servername = samdb_result_string(msgs[i], "servername", ""); - info[i].printername = samdb_result_string(msgs[i], "printername", ""); - info[i].sharename = samdb_result_string(msgs[i], "sharename", ""); - info[i].portname = samdb_result_string(msgs[i], "portname", ""); - info[i].drivername = samdb_result_string(msgs[i], "drivername", ""); - info[i].comment = samdb_result_string(msgs[i], "comment", ""); - info[i].location = samdb_result_string(msgs[i], "location", ""); - /* DEVICEMODE - eek! */ - info[i].sepfile = samdb_result_string(msgs[i], "sepfile", ""); - info[i].printprocessor = samdb_result_string(msgs[i], "printprocessor", ""); - info[i].datatype = samdb_result_string(msgs[i], "datatype", ""); - info[i].parameters = samdb_result_string(msgs[i], "parameters", ""); - /* SECURITY_DESCRIPTOR */ - info[i].attributes = samdb_result_uint(msgs[i], "attributes", 0); - info[i].priority = samdb_result_uint(msgs[i], "priority", 0); - info[i].defaultpriority = samdb_result_uint(msgs[i], "defaultpriority", 0); - info[i].starttime = samdb_result_uint(msgs[i], "starttime", 0); - info[i].untiltime = samdb_result_uint(msgs[i], "untiltime", 0); - info[i].status = samdb_result_uint(msgs[i], "status", 0); - info[i].cjobs = samdb_result_uint(msgs[i], "cjobs", 0); - info[i].averageppm = samdb_result_uint(msgs[i], "averageppm", 0); - } + info[i].info1.description = samdb_result_string(msgs[i], "description", ""); + W_ERROR_HAVE_NO_MEMORY(info[i].info1.description); - ndr_push_array(ndr, NDR_SCALARS|NDR_BUFFERS, info, - sizeof(struct spoolss_PrinterInfo2), num_msgs, - (ndr_push_flags_fn_t)ndr_push_spoolss_PrinterInfo2); + info[i].info1.comment = samdb_result_string(msgs[i], "comment", NULL); + } + return WERR_OK; + case 2: + for (i = 0; i < count; i++) { + info[i].info2.servername = samdb_result_string(msgs[i], "servername", ""); + W_ERROR_HAVE_NO_MEMORY(info[i].info2.servername); - return WERR_OK; -} + info[i].info2.printername = samdb_result_string(msgs[i], "printername", ""); + W_ERROR_HAVE_NO_MEMORY(info[i].info2.printername); -static WERROR spoolss_EnumPrinters5(TALLOC_CTX *mem_ctx, - struct ldb_message **msgs, int num_msgs, - struct ndr_push *ndr) -{ - struct spoolss_PrinterInfo5 *info; - int i; + info[i].info2.sharename = samdb_result_string(msgs[i], "sharename", ""); + W_ERROR_HAVE_NO_MEMORY(info[i].info2.sharename); - info = talloc_array(mem_ctx, struct spoolss_PrinterInfo5, num_msgs); + info[i].info2.portname = samdb_result_string(msgs[i], "portname", ""); + W_ERROR_HAVE_NO_MEMORY(info[i].info2.portname); - if (!info) - return WERR_NOMEM; + info[i].info2.drivername = samdb_result_string(msgs[i], "drivername", ""); + W_ERROR_HAVE_NO_MEMORY(info[i].info2.drivername); - for (i = 0; i < num_msgs; i++) { - info[i].printername = samdb_result_string(msgs[i], "name", ""); - info[i].portname = samdb_result_string(msgs[i], "port", ""); - info[i].attributes = samdb_result_uint(msgs[i], "attributes", 0); - info[i].device_not_selected_timeout = samdb_result_uint(msgs[i], "device_not_selected_timeout", 0); - info[i].transmission_retry_timeout = samdb_result_uint(msgs[i], "transmission_retry_timeout", 0); - } + info[i].info2.comment = samdb_result_string(msgs[i], "comment", NULL); - ndr_push_array(ndr, NDR_SCALARS|NDR_BUFFERS, info, - sizeof(struct spoolss_PrinterInfo5), num_msgs, - (ndr_push_flags_fn_t)ndr_push_spoolss_PrinterInfo5); + info[i].info2.location = samdb_result_string(msgs[i], "location", NULL); - return WERR_OK; -} + info[i].info2.devmode = NULL; -/* - spoolss_EnumPrinters -*/ -static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, - struct spoolss_EnumPrinters *r) -{ - struct ndr_push *ndr; - void *spoolss_ctx; - WERROR result; - struct ldb_message **msgs; - int ret; + info[i].info2.sepfile = samdb_result_string(msgs[i], "sepfile", NULL); - spoolss_ctx = spoolssdb_connect(); - if (spoolss_ctx == NULL) - return WERR_NOMEM; + info[i].info2.printprocessor = samdb_result_string(msgs[i], "printprocessor", ""); + W_ERROR_HAVE_NO_MEMORY(info[i].info2.printprocessor); - ret = spoolssdb_search(spoolss_ctx, mem_ctx, NULL, &msgs, NULL, - "(&(objectclass=printer))"); - - ndr = ndr_push_init(); + info[i].info2.datatype = samdb_result_string(msgs[i], "datatype", ""); + W_ERROR_HAVE_NO_MEMORY(info[i].info2.datatype); - r->out.count = 0; - *r->out.buf_size = 0; + info[i].info2.parameters = samdb_result_string(msgs[i], "parameters", NULL); - switch(r->in.level) { - case 1: - result = spoolss_EnumPrinters1(mem_ctx, msgs, ret, ndr); - break; - case 2: - result = spoolss_EnumPrinters2(mem_ctx, msgs, ret, ndr); - break; - case 5: - result = spoolss_EnumPrinters5(mem_ctx, msgs, ret, ndr); - break; - default: - r->out.buffer = NULL; - result = WERR_UNKNOWN_LEVEL; - goto done; - } + info[i].info2.secdesc = NULL; - if (*r->in.buf_size < ndr->offset) { - *r->out.buf_size = ndr->offset; - result = WERR_INSUFFICIENT_BUFFER; - goto done; - } + info[i].info2.attributes = samdb_result_uint(msgs[i], "attributes", 0); + info[i].info2.priority = samdb_result_uint(msgs[i], "priority", 0); + info[i].info2.defaultpriority = samdb_result_uint(msgs[i], "defaultpriority", 0); + info[i].info2.starttime = samdb_result_uint(msgs[i], "starttime", 0); + info[i].info2.untiltime = samdb_result_uint(msgs[i], "untiltime", 0); + info[i].info2.status = samdb_result_uint(msgs[i], "status", 0); + info[i].info2.cjobs = samdb_result_uint(msgs[i], "cjobs", 0); + info[i].info2.averageppm = samdb_result_uint(msgs[i], "averageppm", 0); + } + return WERR_OK; + case 4: + for (i = 0; i < count; i++) { + info[i].info4.printername = samdb_result_string(msgs[i], "printername", ""); + W_ERROR_HAVE_NO_MEMORY(info[i].info2.printername); - r->out.buffer = talloc(mem_ctx, DATA_BLOB); + info[i].info4.servername = samdb_result_string(msgs[i], "servername", ""); + W_ERROR_HAVE_NO_MEMORY(info[i].info2.servername); - if (!r->out.buffer) { - result = WERR_NOMEM; - goto done; - } + info[i].info4.attributes = samdb_result_uint(msgs[i], "attributes", 0); + } + return WERR_OK; + case 5: + for (i = 0; i < count; i++) { + info[i].info5.printername = samdb_result_string(msgs[i], "name", ""); + W_ERROR_HAVE_NO_MEMORY(info[i].info5.printername); - *r->out.buffer = data_blob_talloc(mem_ctx, ndr->data, ndr->offset); - *r->out.buf_size = ndr->offset; + info[i].info5.portname = samdb_result_string(msgs[i], "port", ""); + W_ERROR_HAVE_NO_MEMORY(info[i].info5.portname); - done: - ndr_push_free(ndr); - spoolssdb_close(spoolss_ctx); + info[i].info5.attributes = samdb_result_uint(msgs[i], "attributes", 0); + info[i].info5.device_not_selected_timeout = samdb_result_uint(msgs[i], "device_not_selected_timeout", 0); + info[i].info5.transmission_retry_timeout = samdb_result_uint(msgs[i], "transmission_retry_timeout", 0); + } + return WERR_OK; + } - return result; + return WERR_UNKNOWN_LEVEL; } -- cgit From d900aed90c6383e9db6a0a51071c3c8622a53ba6 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Tue, 22 Feb 2005 11:51:18 +0000 Subject: r5503: - add torture test which tests for invalid printernames - add OpenPrinter() server code that just calls OpenPrinterEx() - fix OpenPrinterEx logic, we pass the invalid printer names test now metze (This used to be commit 3085d3728eaf76097319f648ab4bc7f9447bbe10) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 119 +++++++++++++++++++--------- 1 file changed, 81 insertions(+), 38 deletions(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index 470c9e2674..fa3a16f7e1 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -143,14 +143,37 @@ static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CT return WERR_UNKNOWN_LEVEL; } - +static WERROR spoolss_OpenPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_OpenPrinterEx *r); /* spoolss_OpenPrinter */ static WERROR spoolss_OpenPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_OpenPrinter *r) { - DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); + WERROR status; + struct spoolss_OpenPrinterEx *r2; + + r2 = talloc(mem_ctx, struct spoolss_OpenPrinterEx); + W_ERROR_HAVE_NO_MEMORY(r2); + + r2->in.printername = r->in.printername; + r2->in.datatype = r->in.datatype; + r2->in.devmode_ctr = r->in.devmode_ctr; + r2->in.access_mask = r->in.access_mask; + r2->in.level = 1; + r2->in.userlevel.level1 = NULL; + + r2->out.handle = r->out.handle; + + /* TODO: we should take care about async replies here, + if spoolss_OpenPrinterEx() would be async! + */ + status = spoolss_OpenPrinterEx(dce_call, mem_ctx, r2); + + r->out.handle = r2->out.handle; + + return status; } @@ -836,49 +859,46 @@ static WERROR spoolss_44(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx static WERROR spoolss_OpenPrinterEx_server(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, - struct spoolss_OpenPrinterEx *r) + struct spoolss_OpenPrinterEx *r, + const char *server_name) { - struct spoolss_openprinter_state *state; + struct spoolss_handle_server *state; struct dcesrv_handle *handle; - - /* Check printername is our name */ - - if (!strequal(r->in.printername + 2, lp_netbios_name())) - return WERR_INVALID_PRINTER_NAME; + BOOL ret; + + /* Check printername is our name or our ip address + */ + ret = strequal(server_name, lp_netbios_name()); + if (!ret) { + /* TODO: + ret = strequal(server_name, ...our_ip...);*/ + if (!ret) { + return WERR_INVALID_PRINTER_NAME; + } + } handle = dcesrv_handle_new(dce_call->context, SPOOLSS_HANDLE_SERVER); - if (!handle) { - return WERR_NOMEM; - } + W_ERROR_HAVE_NO_MEMORY(handle); - state = talloc(handle, struct spoolss_openprinter_state); - if (!state) { - return WERR_OK; - } + state = talloc(handle, struct spoolss_handle_server); + W_ERROR_HAVE_NO_MEMORY(state); handle->data = state; - state->access_mask = r->in.access_mask; - *r->out.handle = handle->wire_handle; + state->handle_type = SPOOLSS_HANDLE_SERVER; + state->access_mask = r->in.access_mask; + + *r->out.handle = handle->wire_handle; return WERR_OK; } static WERROR spoolss_OpenPrinterEx_printer(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, - struct spoolss_OpenPrinterEx *r) + struct spoolss_OpenPrinterEx *r, + const char *printer_name) { - char *server = talloc_strdup(mem_ctx, r->in.printername + 2); - char *pos, *printer; - - pos = strchr(server, '\\'); - *pos = 0; - printer = talloc_strdup(mem_ctx, pos + 1); - - if (!strequal(server, lp_netbios_name())) - return WERR_INVALID_PRINTER_NAME; - - DEBUG(0, ("looking for server %s, printer %s\n", server, printer)); + DEBUG(0, ("looking for printer %s\n", printer_name)); return WERR_INVALID_PRINTER_NAME; } @@ -889,17 +909,40 @@ static WERROR spoolss_OpenPrinterEx_printer(struct dcesrv_call_state *dce_call, static WERROR spoolss_OpenPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_OpenPrinterEx *r) { + const char *p; + const char *printer = r->in.printername; ZERO_STRUCTP(r->out.handle); - - /* Printername must start with \\ */ - if (strncmp(r->in.printername, "\\\\", 2) == 0) - return WERR_INVALID_PARAM; + /* just "\\" is invalid */ + if (strequal(r->in.printername, "\\\\")) { + return WERR_INVALID_PRINTER_NAME; + } - if (strchr_m(r->in.printername + 2, '\\')) - return spoolss_OpenPrinterEx_server(dce_call, mem_ctx, r); - - return spoolss_OpenPrinterEx_printer(dce_call, mem_ctx, r); + if (strncmp(r->in.printername, "\\\\", 2) == 0) { + /* here we know we have "\\" in front not followed + * by '\0', now see if we have another "\" in the string + */ + p = strchr_m(r->in.printername + 2, '\\'); + if (!p) { + /* there's no other "\", so it's ("\\%s",server) + */ + const char *server = r->in.printername + 2; + DEBUG(0,("print server: [%s][%s]\n", r->in.printername, server)); + return spoolss_OpenPrinterEx_server(dce_call, mem_ctx, r, server); + } + /* here we know that we have ("\\%s\",server), + * if we have '\0' as next then it's an invalid name + * otherwise the printer_name + */ + p++; + if (p[0] == '\0') { + return WERR_INVALID_PRINTER_NAME; + } + printer = p; + } + + DEBUG(0,("printer: [%s][%s]\n", r->in.printername, printer)); + return spoolss_OpenPrinterEx_printer(dce_call, mem_ctx, r, printer); } -- cgit From 9401b2bbd218de29aa626d42d2e1894bd3d177c4 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Thu, 24 Feb 2005 15:21:46 +0000 Subject: r5540: - some more input checking in OpenPrinerEx() - fix EnumPrinters() output - add dummy EnumPorts metze (This used to be commit 6cdc717f3fa61fa053b20bad723d1f62b8d9a57a) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 105 ++++++++++++++++++++++++---- 1 file changed, 93 insertions(+), 12 deletions(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index fa3a16f7e1..7a217dee1d 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -36,7 +36,7 @@ static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CT struct ldb_message **msgs; int count; int i; - union spoolss_PrinterInfo *info; + union spoolss_PrinterInfo *info, **info_ptr; r->out.info = NULL; *r->out.buf_size = 0; @@ -52,9 +52,14 @@ static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CT if (count == 0) return WERR_OK; if (count < 0) return WERR_GENERAL_FAILURE; + info_ptr = talloc(mem_ctx, union spoolss_PrinterInfo *); + W_ERROR_HAVE_NO_MEMORY(info_ptr); + info = talloc_array(mem_ctx, union spoolss_PrinterInfo, count); W_ERROR_HAVE_NO_MEMORY(info); + *info_ptr = info; + switch(r->in.level) { case 1: for (i = 0; i < count; i++) { @@ -68,6 +73,8 @@ static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CT info[i].info1.comment = samdb_result_string(msgs[i], "comment", NULL); } + r->out.info = info_ptr; + r->out.count = count; return WERR_OK; case 2: for (i = 0; i < count; i++) { @@ -113,6 +120,8 @@ static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CT info[i].info2.cjobs = samdb_result_uint(msgs[i], "cjobs", 0); info[i].info2.averageppm = samdb_result_uint(msgs[i], "averageppm", 0); } + r->out.info = info_ptr; + r->out.count = count; return WERR_OK; case 4: for (i = 0; i < count; i++) { @@ -124,6 +133,8 @@ static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CT info[i].info4.attributes = samdb_result_uint(msgs[i], "attributes", 0); } + r->out.info = info_ptr; + r->out.count = count; return WERR_OK; case 5: for (i = 0; i < count; i++) { @@ -137,6 +148,8 @@ static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CT info[i].info5.device_not_selected_timeout = samdb_result_uint(msgs[i], "device_not_selected_timeout", 0); info[i].info5.transmission_retry_timeout = samdb_result_uint(msgs[i], "transmission_retry_timeout", 0); } + r->out.info = info_ptr; + r->out.count = count; return WERR_OK; } @@ -523,7 +536,56 @@ static WERROR spoolss_EnumForms(struct dcesrv_call_state *dce_call, TALLOC_CTX * static WERROR spoolss_EnumPorts(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_EnumPorts *r) { - DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); + union spoolss_PortInfo *info, **info_ptr; + int count; + int i; + + r->out.info = NULL; + *r->out.buf_size = 0; + r->out.count = 0; + + count = 1; + + if (count == 0) return WERR_OK; + if (count < 0) return WERR_GENERAL_FAILURE; + + info_ptr = talloc(mem_ctx, union spoolss_PortInfo *); + W_ERROR_HAVE_NO_MEMORY(info_ptr); + + info = talloc_array(mem_ctx, union spoolss_PortInfo, count); + W_ERROR_HAVE_NO_MEMORY(info); + + *info_ptr = info; + + switch (r->in.level) { + case 1: + for (i=0; i < count; i++) { + info[i].info1.port_name = talloc_strdup(mem_ctx, "Samba Printer Port"); + W_ERROR_HAVE_NO_MEMORY(info[i].info1.port_name); + } + r->out.info = info_ptr; + r->out.count = count; + return WERR_OK; + case 2: + for (i=0; i < count; i++) { + info[i].info2.port_name = talloc_strdup(mem_ctx, "Samba Printer Port"); + W_ERROR_HAVE_NO_MEMORY(info[i].info2.port_name); + + info[i].info2.monitor_name = talloc_strdup(mem_ctx, "Local Monitor"); + W_ERROR_HAVE_NO_MEMORY(info[i].info2.monitor_name); + + info[i].info2.description = talloc_strdup(mem_ctx, "Local Port"); + W_ERROR_HAVE_NO_MEMORY(info[i].info2.description); + + info[i].info2.port_type = SPOOLSS_PORT_TYPE_WRITE; + info[i].info2.reserved = 0; + } + r->out.info = info_ptr; + r->out.count = count; + return WERR_OK; + } + + return WERR_UNKNOWN_LEVEL; } @@ -896,10 +958,11 @@ static WERROR spoolss_OpenPrinterEx_server(struct dcesrv_call_state *dce_call, static WERROR spoolss_OpenPrinterEx_printer(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_OpenPrinterEx *r, + const char *server_name, const char *printer_name) { - DEBUG(0, ("looking for printer %s\n", printer_name)); - + DEBUG(0, ("looking for printer [%s] (server[%s])\n", printer_name, server_name)); + return WERR_INVALID_PRINTER_NAME; } @@ -909,40 +972,58 @@ static WERROR spoolss_OpenPrinterEx_printer(struct dcesrv_call_state *dce_call, static WERROR spoolss_OpenPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_OpenPrinterEx *r) { - const char *p; + char *p; + char *server = NULL; const char *printer = r->in.printername; ZERO_STRUCTP(r->out.handle); + /* no printername is there it's like open server */ + if (!r->in.printername) { + return spoolss_OpenPrinterEx_server(dce_call, mem_ctx, r, NULL); + } + /* just "\\" is invalid */ if (strequal(r->in.printername, "\\\\")) { return WERR_INVALID_PRINTER_NAME; } if (strncmp(r->in.printername, "\\\\", 2) == 0) { + server = talloc_strdup(mem_ctx, r->in.printername + 2); + W_ERROR_HAVE_NO_MEMORY(server); + /* here we know we have "\\" in front not followed * by '\0', now see if we have another "\" in the string */ - p = strchr_m(r->in.printername + 2, '\\'); + p = strchr_m(server, '\\'); if (!p) { /* there's no other "\", so it's ("\\%s",server) */ - const char *server = r->in.printername + 2; - DEBUG(0,("print server: [%s][%s]\n", r->in.printername, server)); return spoolss_OpenPrinterEx_server(dce_call, mem_ctx, r, server); } /* here we know that we have ("\\%s\",server), * if we have '\0' as next then it's an invalid name * otherwise the printer_name */ + p[0] = '\0'; + /* everything that follows is the printer name */ p++; - if (p[0] == '\0') { + printer = p; + + /* just "" as server is invalid */ + if (strequal(server, "")) { + DEBUG(0,("ivalid server: [%s][%s][%s]\n", r->in.printername, server, printer)); return WERR_INVALID_PRINTER_NAME; } - printer = p; } - DEBUG(0,("printer: [%s][%s]\n", r->in.printername, printer)); - return spoolss_OpenPrinterEx_printer(dce_call, mem_ctx, r, printer); + /* just "" is invalid */ + if (strequal(printer, "")) { + DEBUG(0,("invalid printer: [%s][%s][%s]\n", r->in.printername, server, printer)); + return WERR_INVALID_PRINTER_NAME; + } + + DEBUG(0,("printer: [%s][%s][%s]\n", r->in.printername, server, printer)); + return spoolss_OpenPrinterEx_printer(dce_call, mem_ctx, r, server, printer); } -- cgit From b46eb7aa17193d87624a4ea0107b6f98652f9e9e Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Mon, 4 Apr 2005 15:15:18 +0000 Subject: r6193: we don't need to store the handle type here, it's in handle->wire_handle.handle_type metze (This used to be commit 539286bc9fa1638dd564fb2f8ba924a0ede8db08) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index 7a217dee1d..ab70035f28 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -947,8 +947,7 @@ static WERROR spoolss_OpenPrinterEx_server(struct dcesrv_call_state *dce_call, handle->data = state; - state->handle_type = SPOOLSS_HANDLE_SERVER; - state->access_mask = r->in.access_mask; + state->access_mask = r->in.access_mask; *r->out.handle = handle->wire_handle; -- cgit From 62480f12529326d174d2c53376765e88ca03754f Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Mon, 30 May 2005 22:44:17 +0000 Subject: r7120: make use of the new 'noopnum' property and get rid of handwritten parsing code for the spoolss_Enum* functions, there still same handwritten code needed but just to stack the autogenerated code into the correct way metze (This used to be commit 155d18e8b78afebfb4a84e43e3b4d8fc6c9cc4e2) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 26 ++++++++------------------ 1 file changed, 8 insertions(+), 18 deletions(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index ab70035f28..4e81e5188c 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -36,7 +36,7 @@ static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CT struct ldb_message **msgs; int count; int i; - union spoolss_PrinterInfo *info, **info_ptr; + union spoolss_PrinterInfo *info; r->out.info = NULL; *r->out.buf_size = 0; @@ -52,14 +52,9 @@ static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CT if (count == 0) return WERR_OK; if (count < 0) return WERR_GENERAL_FAILURE; - info_ptr = talloc(mem_ctx, union spoolss_PrinterInfo *); - W_ERROR_HAVE_NO_MEMORY(info_ptr); - info = talloc_array(mem_ctx, union spoolss_PrinterInfo, count); W_ERROR_HAVE_NO_MEMORY(info); - *info_ptr = info; - switch(r->in.level) { case 1: for (i = 0; i < count; i++) { @@ -73,7 +68,7 @@ static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CT info[i].info1.comment = samdb_result_string(msgs[i], "comment", NULL); } - r->out.info = info_ptr; + r->out.info = info; r->out.count = count; return WERR_OK; case 2: @@ -120,7 +115,7 @@ static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CT info[i].info2.cjobs = samdb_result_uint(msgs[i], "cjobs", 0); info[i].info2.averageppm = samdb_result_uint(msgs[i], "averageppm", 0); } - r->out.info = info_ptr; + r->out.info = info; r->out.count = count; return WERR_OK; case 4: @@ -133,7 +128,7 @@ static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CT info[i].info4.attributes = samdb_result_uint(msgs[i], "attributes", 0); } - r->out.info = info_ptr; + r->out.info = info; r->out.count = count; return WERR_OK; case 5: @@ -148,7 +143,7 @@ static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CT info[i].info5.device_not_selected_timeout = samdb_result_uint(msgs[i], "device_not_selected_timeout", 0); info[i].info5.transmission_retry_timeout = samdb_result_uint(msgs[i], "transmission_retry_timeout", 0); } - r->out.info = info_ptr; + r->out.info = info; r->out.count = count; return WERR_OK; } @@ -536,7 +531,7 @@ static WERROR spoolss_EnumForms(struct dcesrv_call_state *dce_call, TALLOC_CTX * static WERROR spoolss_EnumPorts(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_EnumPorts *r) { - union spoolss_PortInfo *info, **info_ptr; + union spoolss_PortInfo *info; int count; int i; @@ -549,21 +544,16 @@ static WERROR spoolss_EnumPorts(struct dcesrv_call_state *dce_call, TALLOC_CTX * if (count == 0) return WERR_OK; if (count < 0) return WERR_GENERAL_FAILURE; - info_ptr = talloc(mem_ctx, union spoolss_PortInfo *); - W_ERROR_HAVE_NO_MEMORY(info_ptr); - info = talloc_array(mem_ctx, union spoolss_PortInfo, count); W_ERROR_HAVE_NO_MEMORY(info); - *info_ptr = info; - switch (r->in.level) { case 1: for (i=0; i < count; i++) { info[i].info1.port_name = talloc_strdup(mem_ctx, "Samba Printer Port"); W_ERROR_HAVE_NO_MEMORY(info[i].info1.port_name); } - r->out.info = info_ptr; + r->out.info = info; r->out.count = count; return WERR_OK; case 2: @@ -580,7 +570,7 @@ static WERROR spoolss_EnumPorts(struct dcesrv_call_state *dce_call, TALLOC_CTX * info[i].info2.port_type = SPOOLSS_PORT_TYPE_WRITE; info[i].info2.reserved = 0; } - r->out.info = info_ptr; + r->out.info = info; r->out.count = count; return WERR_OK; } -- cgit From 501986ab4e5483b378c875795c95d077db59b77d Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Tue, 7 Jun 2005 14:13:46 +0000 Subject: r7368: some server side spoolss stuff, w2k3 shows the printers icon, and I can view the print server properties... But it didn't like our EnumPorts() reply and also didn't show the test Form... (jerry: can you have a look at this?) metze (This used to be commit 42c9a66da9b4adf1c44dcca13ea184ed2e7a4681) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 228 ++++++++++++++++++++++++---- 1 file changed, 200 insertions(+), 28 deletions(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index 4e81e5188c..a6290cd882 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -4,6 +4,7 @@ endpoint server for the spoolss pipe Copyright (C) Tim Potter 2004 + Copyright (C) Stefan Metzmacher 2005 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -25,6 +26,13 @@ #include "librpc/gen_ndr/ndr_spoolss.h" #include "rpc_server/common/common.h" #include "rpc_server/spoolss/dcesrv_spoolss.h" +#include "lib/socket/socket.h" +#include "smbd/service_stream.h" + +#define SPOOLSS_BUFFER_SIZE(fn,level,count,info) \ + ndr_size_##fn##_info(dce_call, level, count, info) + +#define SPOOLSS_BUFFER_OK(val_true,val_false) ((*r->in.buf_size >= *r->out.buf_size)?val_true:val_false) /* spoolss_EnumPrinters @@ -38,9 +46,7 @@ static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CT int i; union spoolss_PrinterInfo *info; - r->out.info = NULL; *r->out.buf_size = 0; - r->out.count = 0; spoolss_ctx = spoolssdb_connect(); W_ERROR_HAVE_NO_MEMORY(spoolss_ctx); @@ -68,9 +74,10 @@ static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CT info[i].info1.comment = samdb_result_string(msgs[i], "comment", NULL); } - r->out.info = info; - r->out.count = count; - return WERR_OK; + *r->out.buf_size= SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinters, r->in.level, count, info); + r->out.info = SPOOLSS_BUFFER_OK(info, NULL); + r->out.count = SPOOLSS_BUFFER_OK(count, 0); + return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); case 2: for (i = 0; i < count; i++) { info[i].info2.servername = samdb_result_string(msgs[i], "servername", ""); @@ -115,9 +122,10 @@ static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CT info[i].info2.cjobs = samdb_result_uint(msgs[i], "cjobs", 0); info[i].info2.averageppm = samdb_result_uint(msgs[i], "averageppm", 0); } - r->out.info = info; - r->out.count = count; - return WERR_OK; + *r->out.buf_size= SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinters, r->in.level, count, info); + r->out.info = SPOOLSS_BUFFER_OK(info, NULL); + r->out.count = SPOOLSS_BUFFER_OK(count, 0); + return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); case 4: for (i = 0; i < count; i++) { info[i].info4.printername = samdb_result_string(msgs[i], "printername", ""); @@ -128,9 +136,10 @@ static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CT info[i].info4.attributes = samdb_result_uint(msgs[i], "attributes", 0); } - r->out.info = info; - r->out.count = count; - return WERR_OK; + *r->out.buf_size= SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinters, r->in.level, count, info); + r->out.info = SPOOLSS_BUFFER_OK(info, NULL); + r->out.count = SPOOLSS_BUFFER_OK(count, 0); + return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); case 5: for (i = 0; i < count; i++) { info[i].info5.printername = samdb_result_string(msgs[i], "name", ""); @@ -143,9 +152,10 @@ static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CT info[i].info5.device_not_selected_timeout = samdb_result_uint(msgs[i], "device_not_selected_timeout", 0); info[i].info5.transmission_retry_timeout = samdb_result_uint(msgs[i], "transmission_retry_timeout", 0); } - r->out.info = info; - r->out.count = count; - return WERR_OK; + *r->out.buf_size= SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinters, r->in.level, count, info); + r->out.info = SPOOLSS_BUFFER_OK(info, NULL); + r->out.count = SPOOLSS_BUFFER_OK(count, 0); + return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); } return WERR_UNKNOWN_LEVEL; @@ -271,7 +281,66 @@ static WERROR spoolss_AddPrinterDriver(struct dcesrv_call_state *dce_call, TALLO static WERROR spoolss_EnumPrinterDrivers(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_EnumPrinterDrivers *r) { - DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); + union spoolss_DriverInfo *info; + int count; + int i; + + *r->out.buf_size = 0; + + count = 0; + + if (count == 0) return WERR_OK; + if (count < 0) return WERR_GENERAL_FAILURE; + + info = talloc_array(mem_ctx, union spoolss_DriverInfo, count); + W_ERROR_HAVE_NO_MEMORY(info); + + switch (r->in.level) { + case 1: + for (i=0; i < count; i++) { + } + *r->out.buf_size= SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinterDrivers, r->in.level, count, info); + r->out.info = SPOOLSS_BUFFER_OK(info, NULL); + r->out.count = SPOOLSS_BUFFER_OK(count, 0); + return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); + case 2: + for (i=0; i < count; i++) { + } + *r->out.buf_size= SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinterDrivers, r->in.level, count, info); + r->out.info = SPOOLSS_BUFFER_OK(info, NULL); + r->out.count = SPOOLSS_BUFFER_OK(count, 0); + return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); + case 3: + for (i=0; i < count; i++) { + } + *r->out.buf_size= SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinterDrivers, r->in.level, count, info); + r->out.info = SPOOLSS_BUFFER_OK(info, NULL); + r->out.count = SPOOLSS_BUFFER_OK(count, 0); + return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); + case 4: + for (i=0; i < count; i++) { + } + *r->out.buf_size= SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinterDrivers, r->in.level, count, info); + r->out.info = SPOOLSS_BUFFER_OK(info, NULL); + r->out.count = SPOOLSS_BUFFER_OK(count, 0); + return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); + case 5: + for (i=0; i < count; i++) { + } + *r->out.buf_size= SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinterDrivers, r->in.level, count, info); + r->out.info = SPOOLSS_BUFFER_OK(info, NULL); + r->out.count = SPOOLSS_BUFFER_OK(count, 0); + return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); + case 6: + for (i=0; i < count; i++) { + } + *r->out.buf_size= SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinterDrivers, r->in.level, count, info); + r->out.info = SPOOLSS_BUFFER_OK(info, NULL); + r->out.count = SPOOLSS_BUFFER_OK(count, 0); + return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); + } + + return WERR_UNKNOWN_LEVEL; } @@ -431,7 +500,67 @@ static WERROR spoolss_ScheduleJob(struct dcesrv_call_state *dce_call, TALLOC_CTX static WERROR spoolss_GetPrinterData(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_GetPrinterData *r) { - DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); + struct dcesrv_handle *h; + WERROR status = WERR_INVALID_PARAM; + enum spoolss_PrinterDataType type = SPOOLSS_PRINTER_DATA_TYPE_NULL; + union spoolss_PrinterData data; + + DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY); + + if (h->wire_handle.handle_type == SPOOLSS_HANDLE_SERVER) { + /* TODO: do access check here */ + + if (strcmp("W3SvcInstalled", r->in.value_name) == 0) { + type = SPOOLSS_PRINTER_DATA_TYPE_UINT32; + data.value = 0; + status = WERR_OK; + } else if (strcmp("BeepEnabled", r->in.value_name) == 0) { + type = SPOOLSS_PRINTER_DATA_TYPE_UINT32; + data.value = 0; + status = WERR_OK; + } else if (strcmp("EventLog", r->in.value_name) == 0) { + type = SPOOLSS_PRINTER_DATA_TYPE_UINT32; + data.value = 0; + status = WERR_OK; + } else if (strcmp("NetPopup", r->in.value_name) == 0) { + type = SPOOLSS_PRINTER_DATA_TYPE_UINT32; + data.value = 0; + status = WERR_OK; + } else if (strcmp("NetPopupToComputer", r->in.value_name) == 0) { + type = SPOOLSS_PRINTER_DATA_TYPE_UINT32; + data.value = 0; + status = WERR_OK; + } else if (strcmp("MajorVersion", r->in.value_name) == 0) { + type = SPOOLSS_PRINTER_DATA_TYPE_UINT32; + data.value = 3; + status = WERR_OK; + } else if (strcmp("MinorVersion", r->in.value_name) == 0) { + type = SPOOLSS_PRINTER_DATA_TYPE_UINT32; + data.value = 0; + status = WERR_OK; + } else if (strcmp("DefaultSpoolDirectory", r->in.value_name) == 0) { + type = SPOOLSS_PRINTER_DATA_TYPE_STRING; + data.string = "C:\\PRINTERS"; + status = WERR_OK; + } else if (strcmp("Architecture", r->in.value_name) == 0) { + type = SPOOLSS_PRINTER_DATA_TYPE_STRING; + data.string = SPOOLSS_ARCHITECTURE_NT_X86; + status = WERR_OK; + } else if (strcmp("DsPresent", r->in.value_name) == 0) { + type = SPOOLSS_PRINTER_DATA_TYPE_UINT32; + data.value = 1; + status = WERR_OK; + } + } + + if (W_ERROR_IS_OK(status)) { + *r->out.buf_size = ndr_size_spoolss_PrinterData(&data, type, 0); + r->out.type = SPOOLSS_BUFFER_OK(type, SPOOLSS_PRINTER_DATA_TYPE_NULL); + r->out.data = SPOOLSS_BUFFER_OK(data, data); + return SPOOLSS_BUFFER_OK(WERR_OK, WERR_MORE_DATA); + } + + return status; } @@ -521,7 +650,46 @@ static WERROR spoolss_SetForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *me static WERROR spoolss_EnumForms(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_EnumForms *r) { - DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); + union spoolss_FormInfo *info; + int count; + int i; + struct dcesrv_handle *h; + + *r->out.buf_size = 0; + + DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY); + + count = 1; + + if (count == 0) return WERR_OK; + if (count < 0) return WERR_GENERAL_FAILURE; + + info = talloc_array(mem_ctx, union spoolss_FormInfo, count); + W_ERROR_HAVE_NO_MEMORY(info); + + switch (r->in.level) { + case 1: + for (i=0; i < count; i++) { + info[i].info1.flags = SPOOLSS_FORM_PRINTER; + + info[i].info1.form_name = talloc_strdup(mem_ctx, "Samba Printer Form"); + W_ERROR_HAVE_NO_MEMORY(info[i].info1.form_name); + + info[i].info1.size.width = 30; + info[i].info1.size.height = 40; + + info[i].info1.area.left = 0; + info[i].info1.area.top = 0; + info[i].info1.area.right = 30; + info[i].info1.area.bottom = 40; + } + *r->out.buf_size= SPOOLSS_BUFFER_SIZE(spoolss_EnumForms, r->in.level, count, info); + r->out.info = SPOOLSS_BUFFER_OK(info, NULL); + r->out.count = SPOOLSS_BUFFER_OK(count, 0); + return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); + } + + return WERR_UNKNOWN_LEVEL; } @@ -535,9 +703,7 @@ static WERROR spoolss_EnumPorts(struct dcesrv_call_state *dce_call, TALLOC_CTX * int count; int i; - r->out.info = NULL; *r->out.buf_size = 0; - r->out.count = 0; count = 1; @@ -553,9 +719,10 @@ static WERROR spoolss_EnumPorts(struct dcesrv_call_state *dce_call, TALLOC_CTX * info[i].info1.port_name = talloc_strdup(mem_ctx, "Samba Printer Port"); W_ERROR_HAVE_NO_MEMORY(info[i].info1.port_name); } - r->out.info = info; - r->out.count = count; - return WERR_OK; + *r->out.buf_size= SPOOLSS_BUFFER_SIZE(spoolss_EnumPorts, r->in.level, count, info); + r->out.info = SPOOLSS_BUFFER_OK(info, NULL); + r->out.count = SPOOLSS_BUFFER_OK(count, 0); + return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); case 2: for (i=0; i < count; i++) { info[i].info2.port_name = talloc_strdup(mem_ctx, "Samba Printer Port"); @@ -570,9 +737,10 @@ static WERROR spoolss_EnumPorts(struct dcesrv_call_state *dce_call, TALLOC_CTX * info[i].info2.port_type = SPOOLSS_PORT_TYPE_WRITE; info[i].info2.reserved = 0; } - r->out.info = info; - r->out.count = count; - return WERR_OK; + *r->out.buf_size= SPOOLSS_BUFFER_SIZE(spoolss_EnumPorts, r->in.level, count, info); + r->out.info = SPOOLSS_BUFFER_OK(info, NULL); + r->out.count = SPOOLSS_BUFFER_OK(count, 0); + return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); } return WERR_UNKNOWN_LEVEL; @@ -875,7 +1043,7 @@ static WERROR spoolss_ResetPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_ static WERROR spoolss_RemoteFindFirstPrinterChangeNotifyEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_RemoteFindFirstPrinterChangeNotifyEx *r) { - DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); + return WERR_NOT_SUPPORTED; } @@ -922,13 +1090,17 @@ static WERROR spoolss_OpenPrinterEx_server(struct dcesrv_call_state *dce_call, */ ret = strequal(server_name, lp_netbios_name()); if (!ret) { - /* TODO: - ret = strequal(server_name, ...our_ip...);*/ + const char *ip = socket_get_my_addr(dce_call->conn->srv_conn->socket, mem_ctx); + W_ERROR_HAVE_NO_MEMORY(ip); + + ret = strequal(server_name, ip); if (!ret) { return WERR_INVALID_PRINTER_NAME; } } + /* TODO: do access check here */ + handle = dcesrv_handle_new(dce_call->context, SPOOLSS_HANDLE_SERVER); W_ERROR_HAVE_NO_MEMORY(handle); -- cgit From d20bc8c6f4c1ac1580311e0eaa1efc95354b7ff0 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Tue, 7 Jun 2005 14:34:10 +0000 Subject: r7370: change debug levels metze (This used to be commit 665e4f0bd47117ce597f7eb6be0b89420582c471) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index a6290cd882..41143e6f9b 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -1122,7 +1122,7 @@ static WERROR spoolss_OpenPrinterEx_printer(struct dcesrv_call_state *dce_call, const char *server_name, const char *printer_name) { - DEBUG(0, ("looking for printer [%s] (server[%s])\n", printer_name, server_name)); + DEBUG(1, ("looking for printer [%s] (server[%s])\n", printer_name, server_name)); return WERR_INVALID_PRINTER_NAME; } @@ -1172,18 +1172,18 @@ static WERROR spoolss_OpenPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_C /* just "" as server is invalid */ if (strequal(server, "")) { - DEBUG(0,("ivalid server: [%s][%s][%s]\n", r->in.printername, server, printer)); + DEBUG(2,("ivalid server: [%s][%s][%s]\n", r->in.printername, server, printer)); return WERR_INVALID_PRINTER_NAME; } } /* just "" is invalid */ if (strequal(printer, "")) { - DEBUG(0,("invalid printer: [%s][%s][%s]\n", r->in.printername, server, printer)); + DEBUG(2,("invalid printer: [%s][%s][%s]\n", r->in.printername, server, printer)); return WERR_INVALID_PRINTER_NAME; } - DEBUG(0,("printer: [%s][%s][%s]\n", r->in.printername, server, printer)); + DEBUG(3,("printer: [%s][%s][%s]\n", r->in.printername, server, printer)); return spoolss_OpenPrinterEx_printer(dce_call, mem_ctx, r, server, printer); } -- cgit From 838e4835de917ab5b848f30cc6a226ba89038ea5 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Fri, 10 Jun 2005 15:39:23 +0000 Subject: r7465: - return empty lists for now - return WERR_NOT_SUPPORTED on AddPort() (we pass the RPC-SPOOLSS test now :-) metze (This used to be commit d62db5b7d3b6418e870b87c8fd33a1587ecc1728) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index 41143e6f9b..f42710396f 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -221,7 +221,9 @@ static WERROR spoolss_GetJob(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem static WERROR spoolss_EnumJobs(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_EnumJobs *r) { - DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); + *r->out.buf_size = 0; + + return WERR_OK; } @@ -390,7 +392,9 @@ static WERROR spoolss_AddPrintProcessor(struct dcesrv_call_state *dce_call, TALL static WERROR spoolss_EnumPrintProcessors(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_EnumPrintProcessors *r) { - DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); + *r->out.buf_size = 0; + + return WERR_OK; } @@ -753,7 +757,9 @@ static WERROR spoolss_EnumPorts(struct dcesrv_call_state *dce_call, TALLOC_CTX * static WERROR spoolss_EnumMonitors(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_EnumMonitors *r) { - DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); + *r->out.buf_size = 0; + + return WERR_OK; } @@ -763,7 +769,7 @@ static WERROR spoolss_EnumMonitors(struct dcesrv_call_state *dce_call, TALLOC_CT static WERROR spoolss_AddPort(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_AddPort *r) { - DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); + return WERR_NOT_SUPPORTED; } -- cgit From 33bbe2b9e1a878c74d09696b2afdd5ba680fd43c Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Mon, 13 Jun 2005 14:39:39 +0000 Subject: r7536: doesn't spam the smbd_log in the build_farm... metze (This used to be commit 9f4ed54c58a1d029b171ad199dd4a7ccf1f96f64) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index f42710396f..d92d6de55a 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -1128,7 +1128,7 @@ static WERROR spoolss_OpenPrinterEx_printer(struct dcesrv_call_state *dce_call, const char *server_name, const char *printer_name) { - DEBUG(1, ("looking for printer [%s] (server[%s])\n", printer_name, server_name)); + DEBUG(3, ("looking for printer [%s] (server[%s])\n", printer_name, server_name)); return WERR_INVALID_PRINTER_NAME; } -- cgit From 04c3bbe05336f4ad0f2d73964676c9cda95f7027 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Tue, 14 Jun 2005 15:52:31 +0000 Subject: r7574: - seperate [in] and [out] buffers and buf_sizes - use the same names as etherel (offered,needed) for the buffer sizes (and they are really independently used) metze (This used to be commit f5532a5b74e972f44ed8aa19ee9c5851a4b40f65) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 44 ++++++++++------------------- 1 file changed, 15 insertions(+), 29 deletions(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index d92d6de55a..b226816436 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -32,7 +32,7 @@ #define SPOOLSS_BUFFER_SIZE(fn,level,count,info) \ ndr_size_##fn##_info(dce_call, level, count, info) -#define SPOOLSS_BUFFER_OK(val_true,val_false) ((*r->in.buf_size >= *r->out.buf_size)?val_true:val_false) +#define SPOOLSS_BUFFER_OK(val_true,val_false) ((r->in.offered >= r->out.needed)?val_true:val_false) /* spoolss_EnumPrinters @@ -46,8 +46,6 @@ static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CT int i; union spoolss_PrinterInfo *info; - *r->out.buf_size = 0; - spoolss_ctx = spoolssdb_connect(); W_ERROR_HAVE_NO_MEMORY(spoolss_ctx); @@ -74,7 +72,7 @@ static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CT info[i].info1.comment = samdb_result_string(msgs[i], "comment", NULL); } - *r->out.buf_size= SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinters, r->in.level, count, info); + r->out.needed = SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinters, r->in.level, count, info); r->out.info = SPOOLSS_BUFFER_OK(info, NULL); r->out.count = SPOOLSS_BUFFER_OK(count, 0); return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); @@ -122,7 +120,7 @@ static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CT info[i].info2.cjobs = samdb_result_uint(msgs[i], "cjobs", 0); info[i].info2.averageppm = samdb_result_uint(msgs[i], "averageppm", 0); } - *r->out.buf_size= SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinters, r->in.level, count, info); + r->out.needed = SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinters, r->in.level, count, info); r->out.info = SPOOLSS_BUFFER_OK(info, NULL); r->out.count = SPOOLSS_BUFFER_OK(count, 0); return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); @@ -136,7 +134,7 @@ static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CT info[i].info4.attributes = samdb_result_uint(msgs[i], "attributes", 0); } - *r->out.buf_size= SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinters, r->in.level, count, info); + r->out.needed = SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinters, r->in.level, count, info); r->out.info = SPOOLSS_BUFFER_OK(info, NULL); r->out.count = SPOOLSS_BUFFER_OK(count, 0); return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); @@ -152,7 +150,7 @@ static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CT info[i].info5.device_not_selected_timeout = samdb_result_uint(msgs[i], "device_not_selected_timeout", 0); info[i].info5.transmission_retry_timeout = samdb_result_uint(msgs[i], "transmission_retry_timeout", 0); } - *r->out.buf_size= SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinters, r->in.level, count, info); + r->out.needed = SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinters, r->in.level, count, info); r->out.info = SPOOLSS_BUFFER_OK(info, NULL); r->out.count = SPOOLSS_BUFFER_OK(count, 0); return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); @@ -221,8 +219,6 @@ static WERROR spoolss_GetJob(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem static WERROR spoolss_EnumJobs(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_EnumJobs *r) { - *r->out.buf_size = 0; - return WERR_OK; } @@ -287,8 +283,6 @@ static WERROR spoolss_EnumPrinterDrivers(struct dcesrv_call_state *dce_call, TAL int count; int i; - *r->out.buf_size = 0; - count = 0; if (count == 0) return WERR_OK; @@ -301,42 +295,42 @@ static WERROR spoolss_EnumPrinterDrivers(struct dcesrv_call_state *dce_call, TAL case 1: for (i=0; i < count; i++) { } - *r->out.buf_size= SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinterDrivers, r->in.level, count, info); + r->out.needed = SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinterDrivers, r->in.level, count, info); r->out.info = SPOOLSS_BUFFER_OK(info, NULL); r->out.count = SPOOLSS_BUFFER_OK(count, 0); return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); case 2: for (i=0; i < count; i++) { } - *r->out.buf_size= SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinterDrivers, r->in.level, count, info); + r->out.needed = SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinterDrivers, r->in.level, count, info); r->out.info = SPOOLSS_BUFFER_OK(info, NULL); r->out.count = SPOOLSS_BUFFER_OK(count, 0); return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); case 3: for (i=0; i < count; i++) { } - *r->out.buf_size= SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinterDrivers, r->in.level, count, info); + r->out.needed = SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinterDrivers, r->in.level, count, info); r->out.info = SPOOLSS_BUFFER_OK(info, NULL); r->out.count = SPOOLSS_BUFFER_OK(count, 0); return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); case 4: for (i=0; i < count; i++) { } - *r->out.buf_size= SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinterDrivers, r->in.level, count, info); + r->out.needed = SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinterDrivers, r->in.level, count, info); r->out.info = SPOOLSS_BUFFER_OK(info, NULL); r->out.count = SPOOLSS_BUFFER_OK(count, 0); return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); case 5: for (i=0; i < count; i++) { } - *r->out.buf_size= SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinterDrivers, r->in.level, count, info); + r->out.needed = SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinterDrivers, r->in.level, count, info); r->out.info = SPOOLSS_BUFFER_OK(info, NULL); r->out.count = SPOOLSS_BUFFER_OK(count, 0); return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); case 6: for (i=0; i < count; i++) { } - *r->out.buf_size= SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinterDrivers, r->in.level, count, info); + r->out.needed = SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinterDrivers, r->in.level, count, info); r->out.info = SPOOLSS_BUFFER_OK(info, NULL); r->out.count = SPOOLSS_BUFFER_OK(count, 0); return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); @@ -392,8 +386,6 @@ static WERROR spoolss_AddPrintProcessor(struct dcesrv_call_state *dce_call, TALL static WERROR spoolss_EnumPrintProcessors(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_EnumPrintProcessors *r) { - *r->out.buf_size = 0; - return WERR_OK; } @@ -558,7 +550,7 @@ static WERROR spoolss_GetPrinterData(struct dcesrv_call_state *dce_call, TALLOC_ } if (W_ERROR_IS_OK(status)) { - *r->out.buf_size = ndr_size_spoolss_PrinterData(&data, type, 0); + r->out.needed = ndr_size_spoolss_PrinterData(&data, type, 0); r->out.type = SPOOLSS_BUFFER_OK(type, SPOOLSS_PRINTER_DATA_TYPE_NULL); r->out.data = SPOOLSS_BUFFER_OK(data, data); return SPOOLSS_BUFFER_OK(WERR_OK, WERR_MORE_DATA); @@ -659,8 +651,6 @@ static WERROR spoolss_EnumForms(struct dcesrv_call_state *dce_call, TALLOC_CTX * int i; struct dcesrv_handle *h; - *r->out.buf_size = 0; - DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY); count = 1; @@ -687,7 +677,7 @@ static WERROR spoolss_EnumForms(struct dcesrv_call_state *dce_call, TALLOC_CTX * info[i].info1.area.right = 30; info[i].info1.area.bottom = 40; } - *r->out.buf_size= SPOOLSS_BUFFER_SIZE(spoolss_EnumForms, r->in.level, count, info); + r->out.needed = SPOOLSS_BUFFER_SIZE(spoolss_EnumForms, r->in.level, count, info); r->out.info = SPOOLSS_BUFFER_OK(info, NULL); r->out.count = SPOOLSS_BUFFER_OK(count, 0); return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); @@ -707,8 +697,6 @@ static WERROR spoolss_EnumPorts(struct dcesrv_call_state *dce_call, TALLOC_CTX * int count; int i; - *r->out.buf_size = 0; - count = 1; if (count == 0) return WERR_OK; @@ -723,7 +711,7 @@ static WERROR spoolss_EnumPorts(struct dcesrv_call_state *dce_call, TALLOC_CTX * info[i].info1.port_name = talloc_strdup(mem_ctx, "Samba Printer Port"); W_ERROR_HAVE_NO_MEMORY(info[i].info1.port_name); } - *r->out.buf_size= SPOOLSS_BUFFER_SIZE(spoolss_EnumPorts, r->in.level, count, info); + r->out.needed = SPOOLSS_BUFFER_SIZE(spoolss_EnumPorts, r->in.level, count, info); r->out.info = SPOOLSS_BUFFER_OK(info, NULL); r->out.count = SPOOLSS_BUFFER_OK(count, 0); return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); @@ -741,7 +729,7 @@ static WERROR spoolss_EnumPorts(struct dcesrv_call_state *dce_call, TALLOC_CTX * info[i].info2.port_type = SPOOLSS_PORT_TYPE_WRITE; info[i].info2.reserved = 0; } - *r->out.buf_size= SPOOLSS_BUFFER_SIZE(spoolss_EnumPorts, r->in.level, count, info); + r->out.needed = SPOOLSS_BUFFER_SIZE(spoolss_EnumPorts, r->in.level, count, info); r->out.info = SPOOLSS_BUFFER_OK(info, NULL); r->out.count = SPOOLSS_BUFFER_OK(count, 0); return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); @@ -757,8 +745,6 @@ static WERROR spoolss_EnumPorts(struct dcesrv_call_state *dce_call, TALLOC_CTX * static WERROR spoolss_EnumMonitors(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_EnumMonitors *r) { - *r->out.buf_size = 0; - return WERR_OK; } -- cgit From 056d63c62f3793fda0d3049a2f98cef435c9003e Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Tue, 14 Jun 2005 18:44:22 +0000 Subject: r7580: - add GetPrinterDriverDirectory() idl, torture test and server code - add EnumMonitors() server code and return "Standard TCP/IP Port" - add parsing for opening Ports and Monitors with OpenPrinterEx() metze (This used to be commit 08e6de37bc293e2f000d03b51642964d92d6e95e) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 164 +++++++++++++++++++++++++--- 1 file changed, 149 insertions(+), 15 deletions(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index b226816436..5c6506b7c2 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -356,7 +356,43 @@ static WERROR spoolss_GetPrinterDriver(struct dcesrv_call_state *dce_call, TALLO static WERROR spoolss_GetPrinterDriverDirectory(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_GetPrinterDriverDirectory *r) { - DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); + union spoolss_DriverDirectoryInfo *info; + const char *prefix; + const char *postfix; + + /* + * NOTE: normally r->in.level is 1, but both w2k3 and nt4 sp6a + * are ignoring the r->in.level completely, so we do :-) + */ + + /* + * TODO: check the server name is ours + * - if it's a invalid UNC then return WERR_INVALID_NAME + * - if it's the wrong host name return WERR_INVALID_PARAM + * - if it's "" then we need to return a local WINDOWS path + */ + if (strcmp("", r->in.server) == 0) { + prefix = "C:\\DRIVERS"; + } else { + prefix = talloc_asprintf(mem_ctx, "%s\\print$", r->in.server); + W_ERROR_HAVE_NO_MEMORY(prefix); + } + + if (strcmp(SPOOLSS_ARCHITECTURE_NT_X86, r->in.environment) == 0) { + postfix = "W32X86"; + } else { + return WERR_INVALID_ENVIRONMENT; + } + + info = talloc(mem_ctx, union spoolss_DriverDirectoryInfo); + W_ERROR_HAVE_NO_MEMORY(info); + + info->info1.directory_name = talloc_asprintf(mem_ctx, "%s\\%s", prefix, postfix); + W_ERROR_HAVE_NO_MEMORY(info->info1.directory_name); + + r->out.needed = ndr_size_spoolss_DriverDirectoryInfo(info, r->in.level, 0); + r->out.info = SPOOLSS_BUFFER_OK(info, NULL); + return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); } @@ -666,16 +702,16 @@ static WERROR spoolss_EnumForms(struct dcesrv_call_state *dce_call, TALLOC_CTX * for (i=0; i < count; i++) { info[i].info1.flags = SPOOLSS_FORM_PRINTER; - info[i].info1.form_name = talloc_strdup(mem_ctx, "Samba Printer Form"); + info[i].info1.form_name = talloc_strdup(mem_ctx, "Letter"); W_ERROR_HAVE_NO_MEMORY(info[i].info1.form_name); - info[i].info1.size.width = 30; - info[i].info1.size.height = 40; + info[i].info1.size.width = 0x34b5c; + info[i].info1.size.height = 0x44368; info[i].info1.area.left = 0; info[i].info1.area.top = 0; - info[i].info1.area.right = 30; - info[i].info1.area.bottom = 40; + info[i].info1.area.right = 0x34b5c; + info[i].info1.area.bottom = 0x44368; } r->out.needed = SPOOLSS_BUFFER_SIZE(spoolss_EnumForms, r->in.level, count, info); r->out.info = SPOOLSS_BUFFER_OK(info, NULL); @@ -745,7 +781,46 @@ static WERROR spoolss_EnumPorts(struct dcesrv_call_state *dce_call, TALLOC_CTX * static WERROR spoolss_EnumMonitors(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_EnumMonitors *r) { - return WERR_OK; + union spoolss_MonitorInfo *info; + int count; + int i; + + count = 1; + + if (count == 0) return WERR_OK; + if (count < 0) return WERR_GENERAL_FAILURE; + + info = talloc_array(mem_ctx, union spoolss_MonitorInfo, count); + W_ERROR_HAVE_NO_MEMORY(info); + + switch (r->in.level) { + case 1: + for (i=0; i < count; i++) { + info[i].info1.monitor_name = talloc_strdup(mem_ctx, "Standard TCP/IP Port"); + W_ERROR_HAVE_NO_MEMORY(info[i].info1.monitor_name); + } + r->out.needed = SPOOLSS_BUFFER_SIZE(spoolss_EnumMonitors, r->in.level, count, info); + r->out.info = SPOOLSS_BUFFER_OK(info, NULL); + r->out.count = SPOOLSS_BUFFER_OK(count, 0); + return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); + case 2: + for (i=0; i < count; i++) { + info[i].info2.monitor_name = talloc_strdup(mem_ctx, "Standard TCP/IP Port"); + W_ERROR_HAVE_NO_MEMORY(info[i].info2.monitor_name); + + info[i].info2.environment = talloc_strdup(mem_ctx, SPOOLSS_ARCHITECTURE_NT_X86); + W_ERROR_HAVE_NO_MEMORY(info[i].info2.environment); + + info[i].info2.dll_name = talloc_strdup(mem_ctx, "tcpmon.dll"); + W_ERROR_HAVE_NO_MEMORY(info[i].info2.dll_name); + } + r->out.needed = SPOOLSS_BUFFER_SIZE(spoolss_EnumMonitors, r->in.level, count, info); + r->out.info = SPOOLSS_BUFFER_OK(info, NULL); + r->out.count = SPOOLSS_BUFFER_OK(count, 0); + return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); + } + + return WERR_UNKNOWN_LEVEL; } @@ -1108,6 +1183,41 @@ static WERROR spoolss_OpenPrinterEx_server(struct dcesrv_call_state *dce_call, return WERR_OK; } +static WERROR spoolss_OpenPrinterEx_port(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_OpenPrinterEx *r, + const char *server_name, + const char *port_name) +{ + DEBUG(1, ("looking for port [%s] (server[%s])\n", port_name, server_name)); + + return WERR_INVALID_PRINTER_NAME; +} + +static WERROR spoolss_OpenPrinterEx_monitor(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + struct spoolss_OpenPrinterEx *r, + const char *server_name, + const char *monitor_name) +{ + if (strequal("Standard TCP/IP Port", monitor_name)) { + struct dcesrv_handle *handle; + + handle = dcesrv_handle_new(dce_call->context, SPOOLSS_HANDLE_MONITOR); + W_ERROR_HAVE_NO_MEMORY(handle); + + handle->data = NULL; + + *r->out.handle = handle->wire_handle; + + return WERR_OK; + } + + DEBUG(1, ("looking for monitor [%s] (server[%s])\n", monitor_name, server_name)); + + return WERR_INVALID_PRINTER_NAME; +} + static WERROR spoolss_OpenPrinterEx_printer(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_OpenPrinterEx *r, @@ -1127,7 +1237,7 @@ static WERROR spoolss_OpenPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_C { char *p; char *server = NULL; - const char *printer = r->in.printername; + const char *object = r->in.printername; ZERO_STRUCTP(r->out.handle); /* no printername is there it's like open server */ @@ -1160,25 +1270,49 @@ static WERROR spoolss_OpenPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_C p[0] = '\0'; /* everything that follows is the printer name */ p++; - printer = p; + object = p; /* just "" as server is invalid */ if (strequal(server, "")) { - DEBUG(2,("ivalid server: [%s][%s][%s]\n", r->in.printername, server, printer)); + DEBUG(2,("OpenPrinterEx invalid print server: [%s][%s][%s]\n", r->in.printername, server, object)); return WERR_INVALID_PRINTER_NAME; } } /* just "" is invalid */ - if (strequal(printer, "")) { - DEBUG(2,("invalid printer: [%s][%s][%s]\n", r->in.printername, server, printer)); + if (strequal(object, "")) { + DEBUG(2,("OpenPrinterEx invalid object: [%s][%s][%s]\n", r->in.printername, server, object)); return WERR_INVALID_PRINTER_NAME; } - DEBUG(3,("printer: [%s][%s][%s]\n", r->in.printername, server, printer)); - return spoolss_OpenPrinterEx_printer(dce_call, mem_ctx, r, server, printer); -} + DEBUG(3,("OpenPrinterEx object: [%s][%s][%s]\n", r->in.printername, server, object)); + +#define XCV_PORT ",XcvPort " +#define XCV_MONITOR ",XcvMonitor " + if (strncmp(object, XCV_PORT, strlen(XCV_PORT)) == 0) { + object += strlen(XCV_PORT); + + /* just "" is invalid */ + if (strequal(object, "")) { + DEBUG(2,("OpenPrinterEx invalid port: [%s][%s][%s]\n", r->in.printername, server, object)); + return WERR_INVALID_PRINTER_NAME; + } + + return spoolss_OpenPrinterEx_port(dce_call, mem_ctx, r, server, object); + } else if (strncmp(object, XCV_MONITOR, strlen(XCV_MONITOR)) == 0) { + object += strlen(XCV_MONITOR); + /* just "" is invalid */ + if (strequal(object, "")) { + DEBUG(2,("OpenPrinterEx invalid monitor: [%s][%s][%s]\n", r->in.printername, server, object)); + return WERR_INVALID_PRINTER_NAME; + } + + return spoolss_OpenPrinterEx_monitor(dce_call, mem_ctx, r, server, object); + } + + return spoolss_OpenPrinterEx_printer(dce_call, mem_ctx, r, server, object); +} /* spoolss_AddPrinterEx -- cgit From 8f85427d6d8fa7e6bfd76ed5335c8dbe7dd14afe Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Thu, 16 Jun 2005 17:27:57 +0000 Subject: r7643: This patch adds a new NTPTR subsystem: - this is an abstraction layer for print services, like out NTVFS subsystem for file services - all protocol specific details are still in rpc_server/spoolss/ - like the stupid in and out Buffer handling - checking of the r->in.server_name - ... - this subsystem can have multiple implementation selected by the "ntptr providor" global-section parameter - I currently added a "simple_ldb" backend, that stores Printers, Forms, Ports, Monitors, ... in the spoolss.db, and does no real printing this backend is basicly for testing, how the spoolss protocol works - the interface is just a prototype and will be changed a bit the next days or weeks, till the simple_ldb backend can handle all calls that are used by normal w2k3/xp clients - I'll also make the api async, as the ntvfs api this will make things like the RemoteFindFirstPrinterChangeNotifyEx(), that opens a connection back to the client, easier to implement, as we should not block the whole smbd for that - the idea is to later implement a "unix" backend that works like the current samba3 code - and maybe some embedded print server vendors can write there own backend that can directly talk to a printer without having cups or something like this - the default settings are (it currently makes no sense to change them :-): ntptr providor = simple_ldb spoolss database = $private_dir/spoolss.db metze (This used to be commit 455b5536d41bc31ebef8290812f45d4a38afa8e9) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 803 ++++++++++------------------ 1 file changed, 290 insertions(+), 513 deletions(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index 5c6506b7c2..7689f084a9 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -25,138 +25,186 @@ #include "rpc_server/dcerpc_server.h" #include "librpc/gen_ndr/ndr_spoolss.h" #include "rpc_server/common/common.h" -#include "rpc_server/spoolss/dcesrv_spoolss.h" +#include "ntptr/ntptr.h" #include "lib/socket/socket.h" #include "smbd/service_stream.h" -#define SPOOLSS_BUFFER_SIZE(fn,level,count,info) \ - ndr_size_##fn##_info(dce_call, level, count, info) +#define SPOOLSS_BUFFER_UNION(fn,info,level) \ + ((info)?ndr_size_##fn(info, level, 0):0) + +#define SPOOLSS_BUFFER_UNION_ARRAY(fn,info,level,count) \ + ((info)?ndr_size_##fn##_info(dce_call, level, count, info):0) #define SPOOLSS_BUFFER_OK(val_true,val_false) ((r->in.offered >= r->out.needed)?val_true:val_false) -/* - spoolss_EnumPrinters -*/ -static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, - struct spoolss_EnumPrinters *r) +static WERROR spoolss_parse_printer_name(TALLOC_CTX *mem_ctx, const char *name, + const char **_server_name, + const char **_object_name, + enum ntptr_HandleType *_object_type) { - void *spoolss_ctx; - struct ldb_message **msgs; - int count; - int i; - union spoolss_PrinterInfo *info; + char *p; + char *server = NULL; + char *server_unc = NULL; + const char *object = name; - spoolss_ctx = spoolssdb_connect(); - W_ERROR_HAVE_NO_MEMORY(spoolss_ctx); + /* no printername is there it's like open server */ + if (!name) { + *_server_name = NULL; + *_object_name = NULL; + *_object_type = NTPTR_HANDLE_SERVER; + return WERR_OK; + } - count = spoolssdb_search(spoolss_ctx, mem_ctx, NULL, &msgs, NULL, - "(&(objectclass=printer))"); - spoolssdb_close(spoolss_ctx); + /* just "\\" is invalid */ + if (strequal("\\\\", name)) { + return WERR_INVALID_PRINTER_NAME; + } - if (count == 0) return WERR_OK; - if (count < 0) return WERR_GENERAL_FAILURE; + if (strncmp("\\\\", name, 2) == 0) { + server_unc = talloc_strdup(mem_ctx, name); + W_ERROR_HAVE_NO_MEMORY(server_unc); + server = server_unc + 2; - info = talloc_array(mem_ctx, union spoolss_PrinterInfo, count); - W_ERROR_HAVE_NO_MEMORY(info); + /* here we know we have "\\" in front not followed + * by '\0', now see if we have another "\" in the string + */ + p = strchr_m(server, '\\'); + if (!p) { + /* there's no other "\", so it's ("\\%s",server) + */ + *_server_name = server_unc; + *_object_name = NULL; + *_object_type = NTPTR_HANDLE_SERVER; + return WERR_OK; + } + /* here we know that we have ("\\%s\",server), + * if we have '\0' as next then it's an invalid name + * otherwise the printer_name + */ + p[0] = '\0'; + /* everything that follows is the printer name */ + p++; + object = p; - switch(r->in.level) { - case 1: - for (i = 0; i < count; i++) { - info[i].info1.flags = samdb_result_uint(msgs[i], "flags", 0); + /* just "" as server is invalid */ + if (strequal(server, "")) { + return WERR_INVALID_PRINTER_NAME; + } + } - info[i].info1.name = samdb_result_string(msgs[i], "name", ""); - W_ERROR_HAVE_NO_MEMORY(info[i].info1.name); + /* just "" is invalid */ + if (strequal(object, "")) { + return WERR_INVALID_PRINTER_NAME; + } - info[i].info1.description = samdb_result_string(msgs[i], "description", ""); - W_ERROR_HAVE_NO_MEMORY(info[i].info1.description); +#define XCV_PORT ",XcvPort " +#define XCV_MONITOR ",XcvMonitor " + if (strncmp(object, XCV_PORT, strlen(XCV_PORT)) == 0) { + object += strlen(XCV_PORT); - info[i].info1.comment = samdb_result_string(msgs[i], "comment", NULL); + /* just "" is invalid */ + if (strequal(object, "")) { + return WERR_INVALID_PRINTER_NAME; } - r->out.needed = SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinters, r->in.level, count, info); - r->out.info = SPOOLSS_BUFFER_OK(info, NULL); - r->out.count = SPOOLSS_BUFFER_OK(count, 0); - return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); - case 2: - for (i = 0; i < count; i++) { - info[i].info2.servername = samdb_result_string(msgs[i], "servername", ""); - W_ERROR_HAVE_NO_MEMORY(info[i].info2.servername); - info[i].info2.printername = samdb_result_string(msgs[i], "printername", ""); - W_ERROR_HAVE_NO_MEMORY(info[i].info2.printername); + *_server_name = server_unc; + *_object_name = object; + *_object_type = NTPTR_HANDLE_PORT; + return WERR_OK; + } else if (strncmp(object, XCV_MONITOR, strlen(XCV_MONITOR)) == 0) { + object += strlen(XCV_MONITOR); - info[i].info2.sharename = samdb_result_string(msgs[i], "sharename", ""); - W_ERROR_HAVE_NO_MEMORY(info[i].info2.sharename); + /* just "" is invalid */ + if (strequal(object, "")) { + return WERR_INVALID_PRINTER_NAME; + } - info[i].info2.portname = samdb_result_string(msgs[i], "portname", ""); - W_ERROR_HAVE_NO_MEMORY(info[i].info2.portname); + *_server_name = server_unc; + *_object_name = object; + *_object_type = NTPTR_HANDLE_MONITOR; + return WERR_OK; + } - info[i].info2.drivername = samdb_result_string(msgs[i], "drivername", ""); - W_ERROR_HAVE_NO_MEMORY(info[i].info2.drivername); + *_server_name = server_unc; + *_object_name = object; + *_object_type = NTPTR_HANDLE_PRINTER; + return WERR_OK; +} - info[i].info2.comment = samdb_result_string(msgs[i], "comment", NULL); +/* + * Check server_name is: + * - "" , functions that don't allow "", + * should check that on their own, before calling this function + * - our name (only netbios yet, TODO: need to test dns name!) + * - our ip address of the current use socket + * otherwise return WERR_INVALID_PRINTER_NAME + */ +static WERROR spoolss_check_server_name(struct dcesrv_call_state *dce_call, + TALLOC_CTX *mem_ctx, + const char *server_name) +{ + BOOL ret; + const char *ip_str; - info[i].info2.location = samdb_result_string(msgs[i], "location", NULL); + if (!server_name) return WERR_OK; - info[i].info2.devmode = NULL; + ret = strequal("",server_name); + if (ret) return WERR_OK; - info[i].info2.sepfile = samdb_result_string(msgs[i], "sepfile", NULL); + if (strncmp("\\\\", server_name, 2) != 0) { + return WERR_INVALID_PRINTER_NAME; + } - info[i].info2.printprocessor = samdb_result_string(msgs[i], "printprocessor", ""); - W_ERROR_HAVE_NO_MEMORY(info[i].info2.printprocessor); + server_name += 2; - info[i].info2.datatype = samdb_result_string(msgs[i], "datatype", ""); - W_ERROR_HAVE_NO_MEMORY(info[i].info2.datatype); + ret = strequal(lp_netbios_name(), server_name); + if (ret) return WERR_OK; - info[i].info2.parameters = samdb_result_string(msgs[i], "parameters", NULL); + /* TODO: check dns name here ? */ - info[i].info2.secdesc = NULL; + ip_str = socket_get_my_addr(dce_call->conn->srv_conn->socket, mem_ctx); + W_ERROR_HAVE_NO_MEMORY(ip_str); - info[i].info2.attributes = samdb_result_uint(msgs[i], "attributes", 0); - info[i].info2.priority = samdb_result_uint(msgs[i], "priority", 0); - info[i].info2.defaultpriority = samdb_result_uint(msgs[i], "defaultpriority", 0); - info[i].info2.starttime = samdb_result_uint(msgs[i], "starttime", 0); - info[i].info2.untiltime = samdb_result_uint(msgs[i], "untiltime", 0); - info[i].info2.status = samdb_result_uint(msgs[i], "status", 0); - info[i].info2.cjobs = samdb_result_uint(msgs[i], "cjobs", 0); - info[i].info2.averageppm = samdb_result_uint(msgs[i], "averageppm", 0); - } - r->out.needed = SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinters, r->in.level, count, info); - r->out.info = SPOOLSS_BUFFER_OK(info, NULL); - r->out.count = SPOOLSS_BUFFER_OK(count, 0); - return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); - case 4: - for (i = 0; i < count; i++) { - info[i].info4.printername = samdb_result_string(msgs[i], "printername", ""); - W_ERROR_HAVE_NO_MEMORY(info[i].info2.printername); - - info[i].info4.servername = samdb_result_string(msgs[i], "servername", ""); - W_ERROR_HAVE_NO_MEMORY(info[i].info2.servername); - - info[i].info4.attributes = samdb_result_uint(msgs[i], "attributes", 0); - } - r->out.needed = SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinters, r->in.level, count, info); - r->out.info = SPOOLSS_BUFFER_OK(info, NULL); - r->out.count = SPOOLSS_BUFFER_OK(count, 0); - return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); - case 5: - for (i = 0; i < count; i++) { - info[i].info5.printername = samdb_result_string(msgs[i], "name", ""); - W_ERROR_HAVE_NO_MEMORY(info[i].info5.printername); - - info[i].info5.portname = samdb_result_string(msgs[i], "port", ""); - W_ERROR_HAVE_NO_MEMORY(info[i].info5.portname); - - info[i].info5.attributes = samdb_result_uint(msgs[i], "attributes", 0); - info[i].info5.device_not_selected_timeout = samdb_result_uint(msgs[i], "device_not_selected_timeout", 0); - info[i].info5.transmission_retry_timeout = samdb_result_uint(msgs[i], "transmission_retry_timeout", 0); - } - r->out.needed = SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinters, r->in.level, count, info); - r->out.info = SPOOLSS_BUFFER_OK(info, NULL); - r->out.count = SPOOLSS_BUFFER_OK(count, 0); - return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); - } + ret = strequal(ip_str, server_name); + if (ret) return WERR_OK; + + return WERR_INVALID_PRINTER_NAME; +} + +static NTSTATUS dcerpc_spoolss_bind(struct dcesrv_call_state *dce_call, const struct dcesrv_interface *iface) +{ + NTSTATUS status; + struct ntptr_context *ntptr; + + status = ntptr_init_context(dce_call->context, lp_ntptr_providor(), &ntptr); + NT_STATUS_NOT_OK_RETURN(status); + + dce_call->context->private = ntptr; + + return NT_STATUS_OK; +} + +#define DCESRV_INTERFACE_SPOOLSS_BIND dcerpc_spoolss_bind + +/* + spoolss_EnumPrinters +*/ +static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_EnumPrinters *r) +{ + struct ntptr_context *ntptr = talloc_get_type(dce_call->context->private, struct ntptr_context); + WERROR status; - return WERR_UNKNOWN_LEVEL; + status = spoolss_check_server_name(dce_call, mem_ctx, r->in.server); + W_ERROR_NOT_OK_RETURN(status); + + status = ntptr_EnumPrinters(ntptr, mem_ctx, r); + W_ERROR_NOT_OK_RETURN(status); + + r->out.needed = SPOOLSS_BUFFER_UNION_ARRAY(spoolss_EnumPrinters, r->out.info, r->in.level, r->out.count); + r->out.info = SPOOLSS_BUFFER_OK(r->out.info, NULL); + r->out.count = SPOOLSS_BUFFER_OK(r->out.count, 0); + return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); } static WERROR spoolss_OpenPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, @@ -279,64 +327,19 @@ static WERROR spoolss_AddPrinterDriver(struct dcesrv_call_state *dce_call, TALLO static WERROR spoolss_EnumPrinterDrivers(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_EnumPrinterDrivers *r) { - union spoolss_DriverInfo *info; - int count; - int i; - - count = 0; - - if (count == 0) return WERR_OK; - if (count < 0) return WERR_GENERAL_FAILURE; + struct ntptr_context *ntptr = talloc_get_type(dce_call->context->private, struct ntptr_context); + WERROR status; - info = talloc_array(mem_ctx, union spoolss_DriverInfo, count); - W_ERROR_HAVE_NO_MEMORY(info); + status = spoolss_check_server_name(dce_call, mem_ctx, r->in.server); + W_ERROR_NOT_OK_RETURN(status); - switch (r->in.level) { - case 1: - for (i=0; i < count; i++) { - } - r->out.needed = SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinterDrivers, r->in.level, count, info); - r->out.info = SPOOLSS_BUFFER_OK(info, NULL); - r->out.count = SPOOLSS_BUFFER_OK(count, 0); - return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); - case 2: - for (i=0; i < count; i++) { - } - r->out.needed = SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinterDrivers, r->in.level, count, info); - r->out.info = SPOOLSS_BUFFER_OK(info, NULL); - r->out.count = SPOOLSS_BUFFER_OK(count, 0); - return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); - case 3: - for (i=0; i < count; i++) { - } - r->out.needed = SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinterDrivers, r->in.level, count, info); - r->out.info = SPOOLSS_BUFFER_OK(info, NULL); - r->out.count = SPOOLSS_BUFFER_OK(count, 0); - return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); - case 4: - for (i=0; i < count; i++) { - } - r->out.needed = SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinterDrivers, r->in.level, count, info); - r->out.info = SPOOLSS_BUFFER_OK(info, NULL); - r->out.count = SPOOLSS_BUFFER_OK(count, 0); - return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); - case 5: - for (i=0; i < count; i++) { - } - r->out.needed = SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinterDrivers, r->in.level, count, info); - r->out.info = SPOOLSS_BUFFER_OK(info, NULL); - r->out.count = SPOOLSS_BUFFER_OK(count, 0); - return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); - case 6: - for (i=0; i < count; i++) { - } - r->out.needed = SPOOLSS_BUFFER_SIZE(spoolss_EnumPrinterDrivers, r->in.level, count, info); - r->out.info = SPOOLSS_BUFFER_OK(info, NULL); - r->out.count = SPOOLSS_BUFFER_OK(count, 0); - return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); - } + status = ntptr_EnumPrinterDrivers(ntptr, mem_ctx, r); + W_ERROR_NOT_OK_RETURN(status); - return WERR_UNKNOWN_LEVEL; + r->out.needed = SPOOLSS_BUFFER_UNION_ARRAY(spoolss_EnumPrinterDrivers, r->out.info, r->in.level, r->out.count); + r->out.info = SPOOLSS_BUFFER_OK(r->out.info, NULL); + r->out.count = SPOOLSS_BUFFER_OK(r->out.count, 0); + return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); } @@ -356,42 +359,17 @@ static WERROR spoolss_GetPrinterDriver(struct dcesrv_call_state *dce_call, TALLO static WERROR spoolss_GetPrinterDriverDirectory(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_GetPrinterDriverDirectory *r) { - union spoolss_DriverDirectoryInfo *info; - const char *prefix; - const char *postfix; - - /* - * NOTE: normally r->in.level is 1, but both w2k3 and nt4 sp6a - * are ignoring the r->in.level completely, so we do :-) - */ - - /* - * TODO: check the server name is ours - * - if it's a invalid UNC then return WERR_INVALID_NAME - * - if it's the wrong host name return WERR_INVALID_PARAM - * - if it's "" then we need to return a local WINDOWS path - */ - if (strcmp("", r->in.server) == 0) { - prefix = "C:\\DRIVERS"; - } else { - prefix = talloc_asprintf(mem_ctx, "%s\\print$", r->in.server); - W_ERROR_HAVE_NO_MEMORY(prefix); - } - - if (strcmp(SPOOLSS_ARCHITECTURE_NT_X86, r->in.environment) == 0) { - postfix = "W32X86"; - } else { - return WERR_INVALID_ENVIRONMENT; - } + struct ntptr_context *ntptr = talloc_get_type(dce_call->context->private, struct ntptr_context); + WERROR status; - info = talloc(mem_ctx, union spoolss_DriverDirectoryInfo); - W_ERROR_HAVE_NO_MEMORY(info); + status = spoolss_check_server_name(dce_call, mem_ctx, r->in.server); + W_ERROR_NOT_OK_RETURN(status); - info->info1.directory_name = talloc_asprintf(mem_ctx, "%s\\%s", prefix, postfix); - W_ERROR_HAVE_NO_MEMORY(info->info1.directory_name); + status = ntptr_GetPrinterDriverDirectory(ntptr, mem_ctx, r); + W_ERROR_NOT_OK_RETURN(status); - r->out.needed = ndr_size_spoolss_DriverDirectoryInfo(info, r->in.level, 0); - r->out.info = SPOOLSS_BUFFER_OK(info, NULL); + r->out.needed = SPOOLSS_BUFFER_UNION(spoolss_DriverDirectoryInfo, r->out.info, r->in.level); + r->out.info = SPOOLSS_BUFFER_OK(r->out.info, NULL); return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); } @@ -532,67 +510,28 @@ static WERROR spoolss_ScheduleJob(struct dcesrv_call_state *dce_call, TALLOC_CTX static WERROR spoolss_GetPrinterData(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_GetPrinterData *r) { + struct ntptr_GenericHandle *handle; struct dcesrv_handle *h; - WERROR status = WERR_INVALID_PARAM; - enum spoolss_PrinterDataType type = SPOOLSS_PRINTER_DATA_TYPE_NULL; - union spoolss_PrinterData data; + WERROR status; DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY); - - if (h->wire_handle.handle_type == SPOOLSS_HANDLE_SERVER) { - /* TODO: do access check here */ - - if (strcmp("W3SvcInstalled", r->in.value_name) == 0) { - type = SPOOLSS_PRINTER_DATA_TYPE_UINT32; - data.value = 0; - status = WERR_OK; - } else if (strcmp("BeepEnabled", r->in.value_name) == 0) { - type = SPOOLSS_PRINTER_DATA_TYPE_UINT32; - data.value = 0; - status = WERR_OK; - } else if (strcmp("EventLog", r->in.value_name) == 0) { - type = SPOOLSS_PRINTER_DATA_TYPE_UINT32; - data.value = 0; - status = WERR_OK; - } else if (strcmp("NetPopup", r->in.value_name) == 0) { - type = SPOOLSS_PRINTER_DATA_TYPE_UINT32; - data.value = 0; - status = WERR_OK; - } else if (strcmp("NetPopupToComputer", r->in.value_name) == 0) { - type = SPOOLSS_PRINTER_DATA_TYPE_UINT32; - data.value = 0; - status = WERR_OK; - } else if (strcmp("MajorVersion", r->in.value_name) == 0) { - type = SPOOLSS_PRINTER_DATA_TYPE_UINT32; - data.value = 3; - status = WERR_OK; - } else if (strcmp("MinorVersion", r->in.value_name) == 0) { - type = SPOOLSS_PRINTER_DATA_TYPE_UINT32; - data.value = 0; - status = WERR_OK; - } else if (strcmp("DefaultSpoolDirectory", r->in.value_name) == 0) { - type = SPOOLSS_PRINTER_DATA_TYPE_STRING; - data.string = "C:\\PRINTERS"; - status = WERR_OK; - } else if (strcmp("Architecture", r->in.value_name) == 0) { - type = SPOOLSS_PRINTER_DATA_TYPE_STRING; - data.string = SPOOLSS_ARCHITECTURE_NT_X86; - status = WERR_OK; - } else if (strcmp("DsPresent", r->in.value_name) == 0) { - type = SPOOLSS_PRINTER_DATA_TYPE_UINT32; - data.value = 1; - status = WERR_OK; - } + handle = talloc_get_type(h->data, struct ntptr_GenericHandle); + + switch (handle->type) { + case NTPTR_HANDLE_SERVER: + status = ntptr_GetPrintServerData(handle, mem_ctx, r); + break; + default: + status = WERR_FOOBAR; + break; } - if (W_ERROR_IS_OK(status)) { - r->out.needed = ndr_size_spoolss_PrinterData(&data, type, 0); - r->out.type = SPOOLSS_BUFFER_OK(type, SPOOLSS_PRINTER_DATA_TYPE_NULL); - r->out.data = SPOOLSS_BUFFER_OK(data, data); - return SPOOLSS_BUFFER_OK(WERR_OK, WERR_MORE_DATA); - } + W_ERROR_NOT_OK_RETURN(status); - return status; + r->out.needed = ndr_size_spoolss_PrinterData(&r->out.data, r->out.type, 0); + r->out.type = SPOOLSS_BUFFER_OK(r->out.type, SPOOLSS_PRINTER_DATA_TYPE_NULL); + r->out.data = SPOOLSS_BUFFER_OK(r->out.data, r->out.data); + return SPOOLSS_BUFFER_OK(WERR_OK, WERR_MORE_DATA); } @@ -662,7 +601,29 @@ static WERROR spoolss_DeleteForm(struct dcesrv_call_state *dce_call, TALLOC_CTX static WERROR spoolss_GetForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_GetForm *r) { - DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); + struct ntptr_GenericHandle *handle; + struct dcesrv_handle *h; + WERROR status; + + DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY); + handle = talloc_get_type(h->data, struct ntptr_GenericHandle); + + switch (handle->type) { + case NTPTR_HANDLE_SERVER: + status = ntptr_GetPrintServerForm(handle, mem_ctx, r); + W_ERROR_NOT_OK_RETURN(status); + break; + case NTPTR_HANDLE_PRINTER: + status = ntptr_GetPrinterForm(handle, mem_ctx, r); + W_ERROR_NOT_OK_RETURN(status); + break; + default: + return WERR_FOOBAR; + } + + r->out.needed = SPOOLSS_BUFFER_UNION(spoolss_FormInfo, r->out.info, r->in.level); + r->out.info = SPOOLSS_BUFFER_OK(r->out.info, NULL); + return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); } @@ -682,44 +643,30 @@ static WERROR spoolss_SetForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *me static WERROR spoolss_EnumForms(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_EnumForms *r) { - union spoolss_FormInfo *info; - int count; - int i; + struct ntptr_GenericHandle *handle; struct dcesrv_handle *h; + WERROR status; DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY); - - count = 1; - - if (count == 0) return WERR_OK; - if (count < 0) return WERR_GENERAL_FAILURE; - - info = talloc_array(mem_ctx, union spoolss_FormInfo, count); - W_ERROR_HAVE_NO_MEMORY(info); - - switch (r->in.level) { - case 1: - for (i=0; i < count; i++) { - info[i].info1.flags = SPOOLSS_FORM_PRINTER; - - info[i].info1.form_name = talloc_strdup(mem_ctx, "Letter"); - W_ERROR_HAVE_NO_MEMORY(info[i].info1.form_name); - - info[i].info1.size.width = 0x34b5c; - info[i].info1.size.height = 0x44368; - - info[i].info1.area.left = 0; - info[i].info1.area.top = 0; - info[i].info1.area.right = 0x34b5c; - info[i].info1.area.bottom = 0x44368; - } - r->out.needed = SPOOLSS_BUFFER_SIZE(spoolss_EnumForms, r->in.level, count, info); - r->out.info = SPOOLSS_BUFFER_OK(info, NULL); - r->out.count = SPOOLSS_BUFFER_OK(count, 0); - return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); + handle = talloc_get_type(h->data, struct ntptr_GenericHandle); + + switch (handle->type) { + case NTPTR_HANDLE_SERVER: + status = ntptr_EnumPrintServerForms(handle, mem_ctx, r); + W_ERROR_NOT_OK_RETURN(status); + break; + case NTPTR_HANDLE_PRINTER: + status = ntptr_EnumPrinterForms(handle, mem_ctx, r); + W_ERROR_NOT_OK_RETURN(status); + break; + default: + return WERR_FOOBAR; } - return WERR_UNKNOWN_LEVEL; + r->out.needed = SPOOLSS_BUFFER_UNION_ARRAY(spoolss_EnumForms, r->out.info, r->in.level, r->out.count); + r->out.info = SPOOLSS_BUFFER_OK(r->out.info, NULL); + r->out.count = SPOOLSS_BUFFER_OK(r->out.count, 0); + return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); } @@ -729,49 +676,19 @@ static WERROR spoolss_EnumForms(struct dcesrv_call_state *dce_call, TALLOC_CTX * static WERROR spoolss_EnumPorts(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_EnumPorts *r) { - union spoolss_PortInfo *info; - int count; - int i; - - count = 1; + struct ntptr_context *ntptr = talloc_get_type(dce_call->context->private, struct ntptr_context); + WERROR status; - if (count == 0) return WERR_OK; - if (count < 0) return WERR_GENERAL_FAILURE; + status = spoolss_check_server_name(dce_call, mem_ctx, r->in.servername); + W_ERROR_NOT_OK_RETURN(status); - info = talloc_array(mem_ctx, union spoolss_PortInfo, count); - W_ERROR_HAVE_NO_MEMORY(info); + status = ntptr_EnumPorts(ntptr, mem_ctx, r); + W_ERROR_NOT_OK_RETURN(status); - switch (r->in.level) { - case 1: - for (i=0; i < count; i++) { - info[i].info1.port_name = talloc_strdup(mem_ctx, "Samba Printer Port"); - W_ERROR_HAVE_NO_MEMORY(info[i].info1.port_name); - } - r->out.needed = SPOOLSS_BUFFER_SIZE(spoolss_EnumPorts, r->in.level, count, info); - r->out.info = SPOOLSS_BUFFER_OK(info, NULL); - r->out.count = SPOOLSS_BUFFER_OK(count, 0); - return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); - case 2: - for (i=0; i < count; i++) { - info[i].info2.port_name = talloc_strdup(mem_ctx, "Samba Printer Port"); - W_ERROR_HAVE_NO_MEMORY(info[i].info2.port_name); - - info[i].info2.monitor_name = talloc_strdup(mem_ctx, "Local Monitor"); - W_ERROR_HAVE_NO_MEMORY(info[i].info2.monitor_name); - - info[i].info2.description = talloc_strdup(mem_ctx, "Local Port"); - W_ERROR_HAVE_NO_MEMORY(info[i].info2.description); - - info[i].info2.port_type = SPOOLSS_PORT_TYPE_WRITE; - info[i].info2.reserved = 0; - } - r->out.needed = SPOOLSS_BUFFER_SIZE(spoolss_EnumPorts, r->in.level, count, info); - r->out.info = SPOOLSS_BUFFER_OK(info, NULL); - r->out.count = SPOOLSS_BUFFER_OK(count, 0); - return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); - } - - return WERR_UNKNOWN_LEVEL; + r->out.needed = SPOOLSS_BUFFER_UNION_ARRAY(spoolss_EnumPorts, r->out.info, r->in.level, r->out.count); + r->out.info = SPOOLSS_BUFFER_OK(r->out.info, NULL); + r->out.count = SPOOLSS_BUFFER_OK(r->out.count, 0); + return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); } @@ -781,46 +698,19 @@ static WERROR spoolss_EnumPorts(struct dcesrv_call_state *dce_call, TALLOC_CTX * static WERROR spoolss_EnumMonitors(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_EnumMonitors *r) { - union spoolss_MonitorInfo *info; - int count; - int i; - - count = 1; - - if (count == 0) return WERR_OK; - if (count < 0) return WERR_GENERAL_FAILURE; + struct ntptr_context *ntptr = talloc_get_type(dce_call->context->private, struct ntptr_context); + WERROR status; - info = talloc_array(mem_ctx, union spoolss_MonitorInfo, count); - W_ERROR_HAVE_NO_MEMORY(info); + status = spoolss_check_server_name(dce_call, mem_ctx, r->in.servername); + W_ERROR_NOT_OK_RETURN(status); - switch (r->in.level) { - case 1: - for (i=0; i < count; i++) { - info[i].info1.monitor_name = talloc_strdup(mem_ctx, "Standard TCP/IP Port"); - W_ERROR_HAVE_NO_MEMORY(info[i].info1.monitor_name); - } - r->out.needed = SPOOLSS_BUFFER_SIZE(spoolss_EnumMonitors, r->in.level, count, info); - r->out.info = SPOOLSS_BUFFER_OK(info, NULL); - r->out.count = SPOOLSS_BUFFER_OK(count, 0); - return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); - case 2: - for (i=0; i < count; i++) { - info[i].info2.monitor_name = talloc_strdup(mem_ctx, "Standard TCP/IP Port"); - W_ERROR_HAVE_NO_MEMORY(info[i].info2.monitor_name); - - info[i].info2.environment = talloc_strdup(mem_ctx, SPOOLSS_ARCHITECTURE_NT_X86); - W_ERROR_HAVE_NO_MEMORY(info[i].info2.environment); - - info[i].info2.dll_name = talloc_strdup(mem_ctx, "tcpmon.dll"); - W_ERROR_HAVE_NO_MEMORY(info[i].info2.dll_name); - } - r->out.needed = SPOOLSS_BUFFER_SIZE(spoolss_EnumMonitors, r->in.level, count, info); - r->out.info = SPOOLSS_BUFFER_OK(info, NULL); - r->out.count = SPOOLSS_BUFFER_OK(count, 0); - return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); - } + status = ntptr_EnumMonitors(ntptr, mem_ctx, r); + W_ERROR_NOT_OK_RETURN(status); - return WERR_UNKNOWN_LEVEL; + r->out.needed = SPOOLSS_BUFFER_UNION_ARRAY(spoolss_EnumMonitors, r->out.info, r->in.level, r->out.count); + r->out.info = SPOOLSS_BUFFER_OK(r->out.info, NULL); + r->out.count = SPOOLSS_BUFFER_OK(r->out.count, 0); + return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); } @@ -1110,7 +1000,12 @@ static WERROR spoolss_ResetPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_ static WERROR spoolss_RemoteFindFirstPrinterChangeNotifyEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_RemoteFindFirstPrinterChangeNotifyEx *r) { - return WERR_NOT_SUPPORTED; + /* + * TODO: for now just return ok, + * to keep the w2k3 PrintServer + * happy to allow to open the Add Printer GUI + */ + return WERR_OK; } @@ -1143,175 +1038,57 @@ static WERROR spoolss_44(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); } - -static WERROR spoolss_OpenPrinterEx_server(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_OpenPrinterEx *r, - const char *server_name) -{ - struct spoolss_handle_server *state; - struct dcesrv_handle *handle; - BOOL ret; - - /* Check printername is our name or our ip address - */ - ret = strequal(server_name, lp_netbios_name()); - if (!ret) { - const char *ip = socket_get_my_addr(dce_call->conn->srv_conn->socket, mem_ctx); - W_ERROR_HAVE_NO_MEMORY(ip); - - ret = strequal(server_name, ip); - if (!ret) { - return WERR_INVALID_PRINTER_NAME; - } - } - - /* TODO: do access check here */ - - handle = dcesrv_handle_new(dce_call->context, SPOOLSS_HANDLE_SERVER); - W_ERROR_HAVE_NO_MEMORY(handle); - - state = talloc(handle, struct spoolss_handle_server); - W_ERROR_HAVE_NO_MEMORY(state); - - handle->data = state; - - state->access_mask = r->in.access_mask; - - *r->out.handle = handle->wire_handle; - - return WERR_OK; -} - -static WERROR spoolss_OpenPrinterEx_port(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_OpenPrinterEx *r, - const char *server_name, - const char *port_name) -{ - DEBUG(1, ("looking for port [%s] (server[%s])\n", port_name, server_name)); - - return WERR_INVALID_PRINTER_NAME; -} - -static WERROR spoolss_OpenPrinterEx_monitor(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_OpenPrinterEx *r, - const char *server_name, - const char *monitor_name) -{ - if (strequal("Standard TCP/IP Port", monitor_name)) { - struct dcesrv_handle *handle; - - handle = dcesrv_handle_new(dce_call->context, SPOOLSS_HANDLE_MONITOR); - W_ERROR_HAVE_NO_MEMORY(handle); - - handle->data = NULL; - - *r->out.handle = handle->wire_handle; - - return WERR_OK; - } - - DEBUG(1, ("looking for monitor [%s] (server[%s])\n", monitor_name, server_name)); - - return WERR_INVALID_PRINTER_NAME; -} - -static WERROR spoolss_OpenPrinterEx_printer(struct dcesrv_call_state *dce_call, - TALLOC_CTX *mem_ctx, - struct spoolss_OpenPrinterEx *r, - const char *server_name, - const char *printer_name) -{ - DEBUG(3, ("looking for printer [%s] (server[%s])\n", printer_name, server_name)); - - return WERR_INVALID_PRINTER_NAME; -} - /* spoolss_OpenPrinterEx */ static WERROR spoolss_OpenPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_OpenPrinterEx *r) { - char *p; - char *server = NULL; - const char *object = r->in.printername; - ZERO_STRUCTP(r->out.handle); - - /* no printername is there it's like open server */ - if (!r->in.printername) { - return spoolss_OpenPrinterEx_server(dce_call, mem_ctx, r, NULL); - } - - /* just "\\" is invalid */ - if (strequal(r->in.printername, "\\\\")) { - return WERR_INVALID_PRINTER_NAME; - } - - if (strncmp(r->in.printername, "\\\\", 2) == 0) { - server = talloc_strdup(mem_ctx, r->in.printername + 2); - W_ERROR_HAVE_NO_MEMORY(server); - - /* here we know we have "\\" in front not followed - * by '\0', now see if we have another "\" in the string - */ - p = strchr_m(server, '\\'); - if (!p) { - /* there's no other "\", so it's ("\\%s",server) - */ - return spoolss_OpenPrinterEx_server(dce_call, mem_ctx, r, server); - } - /* here we know that we have ("\\%s\",server), - * if we have '\0' as next then it's an invalid name - * otherwise the printer_name - */ - p[0] = '\0'; - /* everything that follows is the printer name */ - p++; - object = p; + struct ntptr_context *ntptr = talloc_get_type(dce_call->context->private, struct ntptr_context); + struct ntptr_GenericHandle *handle; + struct dcesrv_handle *h; + const char *server; + const char *object; + enum ntptr_HandleType type; + WERROR status; - /* just "" as server is invalid */ - if (strequal(server, "")) { - DEBUG(2,("OpenPrinterEx invalid print server: [%s][%s][%s]\n", r->in.printername, server, object)); - return WERR_INVALID_PRINTER_NAME; - } - } + ZERO_STRUCTP(r->out.handle); - /* just "" is invalid */ - if (strequal(object, "")) { - DEBUG(2,("OpenPrinterEx invalid object: [%s][%s][%s]\n", r->in.printername, server, object)); - return WERR_INVALID_PRINTER_NAME; + status = spoolss_parse_printer_name(mem_ctx, r->in.printername, &server, &object, &type); + W_ERROR_NOT_OK_RETURN(status); + + status = spoolss_check_server_name(dce_call, mem_ctx, server); + W_ERROR_NOT_OK_RETURN(status); + + switch (type) { + case NTPTR_HANDLE_SERVER: + status = ntptr_OpenPrintServer(ntptr, mem_ctx, r, server, &handle); + W_ERROR_NOT_OK_RETURN(status); + break; + case NTPTR_HANDLE_PORT: + status = ntptr_OpenPort(ntptr, mem_ctx, r, object, &handle); + W_ERROR_NOT_OK_RETURN(status); + break; + case NTPTR_HANDLE_MONITOR: + status = ntptr_OpenMonitor(ntptr, mem_ctx, r, object, &handle); + W_ERROR_NOT_OK_RETURN(status); + break; + case NTPTR_HANDLE_PRINTER: + status = ntptr_OpenPrinter(ntptr, mem_ctx, r, object, &handle); + W_ERROR_NOT_OK_RETURN(status); + break; + default: + return WERR_FOOBAR; } - DEBUG(3,("OpenPrinterEx object: [%s][%s][%s]\n", r->in.printername, server, object)); - -#define XCV_PORT ",XcvPort " -#define XCV_MONITOR ",XcvMonitor " - if (strncmp(object, XCV_PORT, strlen(XCV_PORT)) == 0) { - object += strlen(XCV_PORT); - - /* just "" is invalid */ - if (strequal(object, "")) { - DEBUG(2,("OpenPrinterEx invalid port: [%s][%s][%s]\n", r->in.printername, server, object)); - return WERR_INVALID_PRINTER_NAME; - } + h = dcesrv_handle_new(dce_call->context, handle->type); + W_ERROR_HAVE_NO_MEMORY(h); - return spoolss_OpenPrinterEx_port(dce_call, mem_ctx, r, server, object); - } else if (strncmp(object, XCV_MONITOR, strlen(XCV_MONITOR)) == 0) { - object += strlen(XCV_MONITOR); + h->data = talloc_steal(h, handle); - /* just "" is invalid */ - if (strequal(object, "")) { - DEBUG(2,("OpenPrinterEx invalid monitor: [%s][%s][%s]\n", r->in.printername, server, object)); - return WERR_INVALID_PRINTER_NAME; - } + *r->out.handle = h->wire_handle; - return spoolss_OpenPrinterEx_monitor(dce_call, mem_ctx, r, server, object); - } - - return spoolss_OpenPrinterEx_printer(dce_call, mem_ctx, r, server, object); + return WERR_OK; } /* -- cgit From 19c9f032fd65b67529c8b49763a7413899ff5da4 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Thu, 16 Jun 2005 19:53:14 +0000 Subject: r7644: - remove some dublicate structures SetForm and AddForm uses the same struct - fix some typos in EnumPrintServerForms()/GetPrintServerForms() - add AddPrintServerForms()/SetPrintServerForms() and DeletePrintServerForms metze (This used to be commit 73906388421beebb34f2a00c9e0d1fc8b400a42a) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 66 +++++++++++++++++++++++++++-- 1 file changed, 63 insertions(+), 3 deletions(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index 7689f084a9..f8a0ab5efa 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -581,7 +581,27 @@ static WERROR spoolss_ClosePrinter(struct dcesrv_call_state *dce_call, TALLOC_CT static WERROR spoolss_AddForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_AddForm *r) { - DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); + struct ntptr_GenericHandle *handle; + struct dcesrv_handle *h; + WERROR status; + + DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY); + handle = talloc_get_type(h->data, struct ntptr_GenericHandle); + + switch (handle->type) { + case NTPTR_HANDLE_SERVER: + status = ntptr_AddPrintServerForm(handle, mem_ctx, r); + W_ERROR_NOT_OK_RETURN(status); + break; + case NTPTR_HANDLE_PRINTER: + status = ntptr_AddPrinterForm(handle, mem_ctx, r); + W_ERROR_NOT_OK_RETURN(status); + break; + default: + return WERR_FOOBAR; + } + + return WERR_OK; } @@ -591,7 +611,27 @@ static WERROR spoolss_AddForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *me static WERROR spoolss_DeleteForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_DeleteForm *r) { - DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); + struct ntptr_GenericHandle *handle; + struct dcesrv_handle *h; + WERROR status; + + DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY); + handle = talloc_get_type(h->data, struct ntptr_GenericHandle); + + switch (handle->type) { + case NTPTR_HANDLE_SERVER: + status = ntptr_DeletePrintServerForm(handle, mem_ctx, r); + W_ERROR_NOT_OK_RETURN(status); + break; + case NTPTR_HANDLE_PRINTER: + status = ntptr_DeletePrinterForm(handle, mem_ctx, r); + W_ERROR_NOT_OK_RETURN(status); + break; + default: + return WERR_FOOBAR; + } + + return WERR_OK; } @@ -633,7 +673,27 @@ static WERROR spoolss_GetForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *me static WERROR spoolss_SetForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_SetForm *r) { - DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); + struct ntptr_GenericHandle *handle; + struct dcesrv_handle *h; + WERROR status; + + DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY); + handle = talloc_get_type(h->data, struct ntptr_GenericHandle); + + switch (handle->type) { + case NTPTR_HANDLE_SERVER: + status = ntptr_SetPrintServerForm(handle, mem_ctx, r); + W_ERROR_NOT_OK_RETURN(status); + break; + case NTPTR_HANDLE_PRINTER: + status = ntptr_SetPrinterForm(handle, mem_ctx, r); + W_ERROR_NOT_OK_RETURN(status); + break; + default: + return WERR_FOOBAR; + } + + return WERR_OK; } -- cgit From fe94ba6e71eb8d3273d593763f6b6d03fa90113d Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Fri, 1 Jul 2005 09:05:10 +0000 Subject: r8046: - add somemore failure checks in the RPC-SPOOLSS test - test AddForm on the PrintServer object - GetForm() isn't allowed on the PrintServer object so remove NTPTR function for it - accept the dns name as servername in the spoolss server metze (This used to be commit d8c308a4653d59514915021607fe55c5f2b38749) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 39 +++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 8 deletions(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index f8a0ab5efa..dfa935b750 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -144,28 +144,50 @@ static WERROR spoolss_check_server_name(struct dcesrv_call_state *dce_call, const char *server_name) { BOOL ret; - const char *ip_str; + char *str; + /* NULL is ok */ if (!server_name) return WERR_OK; + /* "" is ok */ ret = strequal("",server_name); if (ret) return WERR_OK; + /* just "\\" is invalid */ + if (strequal("\\\\", server_name)) { + return WERR_INVALID_PRINTER_NAME; + } + + /* then we need "\\" */ if (strncmp("\\\\", server_name, 2) != 0) { return WERR_INVALID_PRINTER_NAME; } server_name += 2; + /* NETBIOS NAME is ok */ ret = strequal(lp_netbios_name(), server_name); if (ret) return WERR_OK; - /* TODO: check dns name here ? */ + /* DNS NAME is ok + * TODO: we need to check if aliases are also ok + */ + if (lp_realm() != NULL) { + str = talloc_asprintf(mem_ctx, "%s.%s", + lp_netbios_name(), + lp_realm()); + W_ERROR_HAVE_NO_MEMORY(str); + + ret = strequal(str, server_name); + talloc_free(str); + if (ret) return WERR_OK; + } - ip_str = socket_get_my_addr(dce_call->conn->srv_conn->socket, mem_ctx); - W_ERROR_HAVE_NO_MEMORY(ip_str); + str = socket_get_my_addr(dce_call->conn->srv_conn->socket, mem_ctx); + W_ERROR_HAVE_NO_MEMORY(str); - ret = strequal(ip_str, server_name); + ret = strequal(str, server_name); + talloc_free(str); if (ret) return WERR_OK; return WERR_INVALID_PRINTER_NAME; @@ -650,9 +672,10 @@ static WERROR spoolss_GetForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *me switch (handle->type) { case NTPTR_HANDLE_SERVER: - status = ntptr_GetPrintServerForm(handle, mem_ctx, r); - W_ERROR_NOT_OK_RETURN(status); - break; + /* + * stupid, but w2k3 returns WERR_BADFID here? + */ + return WERR_BADFID; case NTPTR_HANDLE_PRINTER: status = ntptr_GetPrinterForm(handle, mem_ctx, r); W_ERROR_NOT_OK_RETURN(status); -- cgit From 133d41d43dfec5a750cc41cf4daadb8e25fce6b3 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Fri, 1 Jul 2005 12:14:42 +0000 Subject: r8052: that looks nicer:-) metze (This used to be commit dad0371a9fea0de080650cb081beafdaa773ceda) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index dfa935b750..c15a7f1d8a 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -172,7 +172,7 @@ static WERROR spoolss_check_server_name(struct dcesrv_call_state *dce_call, /* DNS NAME is ok * TODO: we need to check if aliases are also ok */ - if (lp_realm() != NULL) { + if (lp_realm()) { str = talloc_asprintf(mem_ctx, "%s.%s", lp_netbios_name(), lp_realm()); -- cgit From d611dd941f5b1b113697cf91193f0a8418f21b36 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sun, 9 Oct 2005 21:30:41 +0000 Subject: r10854: talloc_get_type() can return NULL.. (This used to be commit 8f7070055fc577cb4234654420539c68992d9671) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index c15a7f1d8a..6936866fcc 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -538,6 +538,8 @@ static WERROR spoolss_GetPrinterData(struct dcesrv_call_state *dce_call, TALLOC_ DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY); handle = talloc_get_type(h->data, struct ntptr_GenericHandle); + if (!handle) + return WERR_BADFID; switch (handle->type) { case NTPTR_HANDLE_SERVER: @@ -609,6 +611,8 @@ static WERROR spoolss_AddForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *me DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY); handle = talloc_get_type(h->data, struct ntptr_GenericHandle); + if (!handle) + return WERR_BADFID; switch (handle->type) { case NTPTR_HANDLE_SERVER: @@ -639,6 +643,8 @@ static WERROR spoolss_DeleteForm(struct dcesrv_call_state *dce_call, TALLOC_CTX DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY); handle = talloc_get_type(h->data, struct ntptr_GenericHandle); + if (!handle) + return WERR_BADFID; switch (handle->type) { case NTPTR_HANDLE_SERVER: @@ -669,6 +675,8 @@ static WERROR spoolss_GetForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *me DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY); handle = talloc_get_type(h->data, struct ntptr_GenericHandle); + if (!handle) + return WERR_BADFID; switch (handle->type) { case NTPTR_HANDLE_SERVER: @@ -702,6 +710,8 @@ static WERROR spoolss_SetForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *me DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY); handle = talloc_get_type(h->data, struct ntptr_GenericHandle); + if (!handle) + return WERR_BADFID; switch (handle->type) { case NTPTR_HANDLE_SERVER: @@ -732,6 +742,8 @@ static WERROR spoolss_EnumForms(struct dcesrv_call_state *dce_call, TALLOC_CTX * DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY); handle = talloc_get_type(h->data, struct ntptr_GenericHandle); + if (!handle) + return WERR_BADFID; switch (handle->type) { case NTPTR_HANDLE_SERVER: -- cgit From 5c9590587197dcb95007fdc54318187d5716c7c6 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Tue, 8 Nov 2005 00:11:45 +0000 Subject: r11567: Ldb API change patch. This patch changes the way lsb_search is called and the meaning of the returned integer. The last argument of ldb_search is changed from struct ldb_message to struct ldb_result which contains a pointer to a struct ldb_message list and a count of the number of messages. The return is not the count of messages anymore but instead it is an ldb error value. I tryed to keep the patch as tiny as possible bu as you can guess I had to change a good amount of places. I also tried to double check all my changes being sure that the calling functions would still behave as before. But this patch is big enough that I fear some bug may have been introduced anyway even if it passes the test suite. So if you are currently working on any file being touched please give it a deep look and blame me for any error. Simo. (This used to be commit 22c8c97e6fb466b41859e090e959d7f1134be780) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 12 ------------ 1 file changed, 12 deletions(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index 6936866fcc..c15a7f1d8a 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -538,8 +538,6 @@ static WERROR spoolss_GetPrinterData(struct dcesrv_call_state *dce_call, TALLOC_ DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY); handle = talloc_get_type(h->data, struct ntptr_GenericHandle); - if (!handle) - return WERR_BADFID; switch (handle->type) { case NTPTR_HANDLE_SERVER: @@ -611,8 +609,6 @@ static WERROR spoolss_AddForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *me DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY); handle = talloc_get_type(h->data, struct ntptr_GenericHandle); - if (!handle) - return WERR_BADFID; switch (handle->type) { case NTPTR_HANDLE_SERVER: @@ -643,8 +639,6 @@ static WERROR spoolss_DeleteForm(struct dcesrv_call_state *dce_call, TALLOC_CTX DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY); handle = talloc_get_type(h->data, struct ntptr_GenericHandle); - if (!handle) - return WERR_BADFID; switch (handle->type) { case NTPTR_HANDLE_SERVER: @@ -675,8 +669,6 @@ static WERROR spoolss_GetForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *me DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY); handle = talloc_get_type(h->data, struct ntptr_GenericHandle); - if (!handle) - return WERR_BADFID; switch (handle->type) { case NTPTR_HANDLE_SERVER: @@ -710,8 +702,6 @@ static WERROR spoolss_SetForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *me DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY); handle = talloc_get_type(h->data, struct ntptr_GenericHandle); - if (!handle) - return WERR_BADFID; switch (handle->type) { case NTPTR_HANDLE_SERVER: @@ -742,8 +732,6 @@ static WERROR spoolss_EnumForms(struct dcesrv_call_state *dce_call, TALLOC_CTX * DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY); handle = talloc_get_type(h->data, struct ntptr_GenericHandle); - if (!handle) - return WERR_BADFID; switch (handle->type) { case NTPTR_HANDLE_SERVER: -- cgit From 56415ccacb8bc40ef8aab9cf440d5a30badd4eba Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Wed, 9 Nov 2005 08:23:33 +0000 Subject: r11597: revert a commit by mistake (This used to be commit 09e6f494b490127ace1a9d1077c2757d813abc55) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index c15a7f1d8a..6936866fcc 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -538,6 +538,8 @@ static WERROR spoolss_GetPrinterData(struct dcesrv_call_state *dce_call, TALLOC_ DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY); handle = talloc_get_type(h->data, struct ntptr_GenericHandle); + if (!handle) + return WERR_BADFID; switch (handle->type) { case NTPTR_HANDLE_SERVER: @@ -609,6 +611,8 @@ static WERROR spoolss_AddForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *me DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY); handle = talloc_get_type(h->data, struct ntptr_GenericHandle); + if (!handle) + return WERR_BADFID; switch (handle->type) { case NTPTR_HANDLE_SERVER: @@ -639,6 +643,8 @@ static WERROR spoolss_DeleteForm(struct dcesrv_call_state *dce_call, TALLOC_CTX DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY); handle = talloc_get_type(h->data, struct ntptr_GenericHandle); + if (!handle) + return WERR_BADFID; switch (handle->type) { case NTPTR_HANDLE_SERVER: @@ -669,6 +675,8 @@ static WERROR spoolss_GetForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *me DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY); handle = talloc_get_type(h->data, struct ntptr_GenericHandle); + if (!handle) + return WERR_BADFID; switch (handle->type) { case NTPTR_HANDLE_SERVER: @@ -702,6 +710,8 @@ static WERROR spoolss_SetForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *me DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY); handle = talloc_get_type(h->data, struct ntptr_GenericHandle); + if (!handle) + return WERR_BADFID; switch (handle->type) { case NTPTR_HANDLE_SERVER: @@ -732,6 +742,8 @@ static WERROR spoolss_EnumForms(struct dcesrv_call_state *dce_call, TALLOC_CTX * DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY); handle = talloc_get_type(h->data, struct ntptr_GenericHandle); + if (!handle) + return WERR_BADFID; switch (handle->type) { case NTPTR_HANDLE_SERVER: -- cgit From f55ea8bb3dca868e21663cd90eaea7a35cd7886c Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Mon, 9 Jan 2006 22:12:53 +0000 Subject: r12804: This patch reworks the Samba4 sockets layer to use a socket_address structure that is more generic than just 'IP/port'. It now passes make test, and has been reviewed and updated by metze. (Thankyou *very* much). This passes 'make test' as well as kerberos use (not currently in the testsuite). The original purpose of this patch was to have Samba able to pass a socket address stucture from the BSD layer into the kerberos routines and back again. It also removes nbt_peer_addr, which was being used for a similar purpose. It is a large change, but worthwhile I feel. Andrew Bartlett (This used to be commit 88198c4881d8620a37086f80e4da5a5b71c5bbb2) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index 6936866fcc..e5bcc35081 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -144,7 +144,7 @@ static WERROR spoolss_check_server_name(struct dcesrv_call_state *dce_call, const char *server_name) { BOOL ret; - char *str; + struct socket_address *myaddr; /* NULL is ok */ if (!server_name) return WERR_OK; @@ -173,6 +173,8 @@ static WERROR spoolss_check_server_name(struct dcesrv_call_state *dce_call, * TODO: we need to check if aliases are also ok */ if (lp_realm()) { + char *str; + str = talloc_asprintf(mem_ctx, "%s.%s", lp_netbios_name(), lp_realm()); @@ -183,11 +185,11 @@ static WERROR spoolss_check_server_name(struct dcesrv_call_state *dce_call, if (ret) return WERR_OK; } - str = socket_get_my_addr(dce_call->conn->srv_conn->socket, mem_ctx); - W_ERROR_HAVE_NO_MEMORY(str); + myaddr = socket_get_my_addr(dce_call->conn->srv_conn->socket, mem_ctx); + W_ERROR_HAVE_NO_MEMORY(myaddr); - ret = strequal(str, server_name); - talloc_free(str); + ret = strequal(myaddr->addr, server_name); + talloc_free(myaddr); if (ret) return WERR_OK; return WERR_INVALID_PRINTER_NAME; -- cgit From a949db7c6d4bd35df59ba066111e6566172d4814 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Thu, 16 Mar 2006 18:46:49 +0000 Subject: r14486: remove the need of a stream_connection on a dcesrv_connection, and let the transport set callbacks for getting the own and peer socket_address metze (This used to be commit 56fac3ddbbeecb834e5c7a439df344e11fe12a7b) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index e5bcc35081..c8c0594612 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -185,7 +185,7 @@ static WERROR spoolss_check_server_name(struct dcesrv_call_state *dce_call, if (ret) return WERR_OK; } - myaddr = socket_get_my_addr(dce_call->conn->srv_conn->socket, mem_ctx); + myaddr = dcesrv_connection_get_my_addr(dce_call->conn, mem_ctx); W_ERROR_HAVE_NO_MEMORY(myaddr); ret = strequal(myaddr->addr, server_name); -- cgit From 9628e714ccc935c7c90c36c071c9193020c96155 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Sat, 25 Mar 2006 01:02:10 +0000 Subject: r14702: Accept our netbios aliases as valid names in the SPOOLSS server. (Suggested by metze) Andrew Bartlett (This used to be commit 3dff2a0078e541392f585d81f7aea987c87edbf1) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index c8c0594612..9ff2bcf635 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -145,6 +145,8 @@ static WERROR spoolss_check_server_name(struct dcesrv_call_state *dce_call, { BOOL ret; struct socket_address *myaddr; + const char **aliases; + int i; /* NULL is ok */ if (!server_name) return WERR_OK; @@ -169,6 +171,14 @@ static WERROR spoolss_check_server_name(struct dcesrv_call_state *dce_call, ret = strequal(lp_netbios_name(), server_name); if (ret) return WERR_OK; + aliases = lp_netbios_aliases(); + + for (i=0; aliases && aliases[i]; i++) { + if (strequal(aliases[i], server_name)) { + return WERR_OK; + } + } + /* DNS NAME is ok * TODO: we need to check if aliases are also ok */ -- cgit From b22ddfd61d5a3e477ea4401b3800d44709d56f82 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Mon, 26 Jun 2006 18:31:39 +0000 Subject: r16523: pass spoolss_XcvData calls to the ntptr backends... I wrote this code last year and found it in a working tree... metze (This used to be commit 9a685c5beff6936d354d541e875899d33b735ba9) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 37 +++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 4 deletions(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index 9ff2bcf635..7c821032ab 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -1379,12 +1379,41 @@ static WERROR spoolss_57(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx /* - spoolss_58 + spoolss_XcvData */ -static WERROR spoolss_58(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, - struct spoolss_58 *r) +static WERROR spoolss_XcvData(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, + struct spoolss_XcvData *r) { - DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); + struct ntptr_GenericHandle *handle; + struct dcesrv_handle *h; + WERROR status; + + DCESRV_PULL_HANDLE_WERR(h, r->in.handle, DCESRV_HANDLE_ANY); + handle = talloc_get_type(h->data, struct ntptr_GenericHandle); + + switch (handle->type) { + case NTPTR_HANDLE_SERVER: + status = ntptr_XcvDataPrintServer(handle, mem_ctx, r); + W_ERROR_NOT_OK_RETURN(status); + break; + case NTPTR_HANDLE_PRINTER: + status = ntptr_XcvDataPrinter(handle, mem_ctx, r); + W_ERROR_NOT_OK_RETURN(status); + break; + case NTPTR_HANDLE_PORT: + status = ntptr_XcvDataPort(handle, mem_ctx, r); + W_ERROR_NOT_OK_RETURN(status); + break; + case NTPTR_HANDLE_MONITOR: + status = ntptr_XcvDataMonitor(handle, mem_ctx, r); + W_ERROR_NOT_OK_RETURN(status); + break; + default: + return WERR_FOOBAR; + } + + /* TODO: handle the buffer sizes here! */ + return WERR_OK; } -- cgit From 64e88a8ccf2faa34ee9d182f4e89fa6e44c609a6 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Wed, 17 Jan 2007 14:49:36 +0000 Subject: r20850: Prefix all server calls with dcesrv_ (This used to be commit 76c78b0339cd88c61a13745f7f4e037f400db21b) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 214 ++++++++++++++-------------- 1 file changed, 107 insertions(+), 107 deletions(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index 7c821032ab..e89dc35a67 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -37,7 +37,7 @@ #define SPOOLSS_BUFFER_OK(val_true,val_false) ((r->in.offered >= r->out.needed)?val_true:val_false) -static WERROR spoolss_parse_printer_name(TALLOC_CTX *mem_ctx, const char *name, +static WERROR dcesrv_spoolss_parse_printer_name(TALLOC_CTX *mem_ctx, const char *name, const char **_server_name, const char **_object_name, enum ntptr_HandleType *_object_type) @@ -139,7 +139,7 @@ static WERROR spoolss_parse_printer_name(TALLOC_CTX *mem_ctx, const char *name, * - our ip address of the current use socket * otherwise return WERR_INVALID_PRINTER_NAME */ -static WERROR spoolss_check_server_name(struct dcesrv_call_state *dce_call, +static WERROR dcesrv_spoolss_check_server_name(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, const char *server_name) { @@ -223,13 +223,13 @@ static NTSTATUS dcerpc_spoolss_bind(struct dcesrv_call_state *dce_call, const st /* spoolss_EnumPrinters */ -static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_EnumPrinters *r) { struct ntptr_context *ntptr = talloc_get_type(dce_call->context->private, struct ntptr_context); WERROR status; - status = spoolss_check_server_name(dce_call, mem_ctx, r->in.server); + status = dcesrv_spoolss_check_server_name(dce_call, mem_ctx, r->in.server); W_ERROR_NOT_OK_RETURN(status); status = ntptr_EnumPrinters(ntptr, mem_ctx, r); @@ -241,12 +241,12 @@ static WERROR spoolss_EnumPrinters(struct dcesrv_call_state *dce_call, TALLOC_CT return SPOOLSS_BUFFER_OK(WERR_OK, WERR_INSUFFICIENT_BUFFER); } -static WERROR spoolss_OpenPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_OpenPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_OpenPrinterEx *r); /* spoolss_OpenPrinter */ -static WERROR spoolss_OpenPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_OpenPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_OpenPrinter *r) { WERROR status; @@ -267,7 +267,7 @@ static WERROR spoolss_OpenPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX /* TODO: we should take care about async replies here, if spoolss_OpenPrinterEx() would be async! */ - status = spoolss_OpenPrinterEx(dce_call, mem_ctx, r2); + status = dcesrv_spoolss_OpenPrinterEx(dce_call, mem_ctx, r2); r->out.handle = r2->out.handle; @@ -278,7 +278,7 @@ static WERROR spoolss_OpenPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX /* spoolss_SetJob */ -static WERROR spoolss_SetJob(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_SetJob(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_SetJob *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -288,7 +288,7 @@ static WERROR spoolss_SetJob(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem /* spoolss_GetJob */ -static WERROR spoolss_GetJob(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_GetJob(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_GetJob *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -298,7 +298,7 @@ static WERROR spoolss_GetJob(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem /* spoolss_EnumJobs */ -static WERROR spoolss_EnumJobs(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_EnumJobs(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_EnumJobs *r) { return WERR_OK; @@ -308,7 +308,7 @@ static WERROR spoolss_EnumJobs(struct dcesrv_call_state *dce_call, TALLOC_CTX *m /* spoolss_AddPrinter */ -static WERROR spoolss_AddPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_AddPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_AddPrinter *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -318,7 +318,7 @@ static WERROR spoolss_AddPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX /* spoolss_DeletePrinter */ -static WERROR spoolss_DeletePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_DeletePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_DeletePrinter *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -328,7 +328,7 @@ static WERROR spoolss_DeletePrinter(struct dcesrv_call_state *dce_call, TALLOC_C /* spoolss_SetPrinter */ -static WERROR spoolss_SetPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_SetPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_SetPrinter *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -338,7 +338,7 @@ static WERROR spoolss_SetPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX /* spoolss_GetPrinter */ -static WERROR spoolss_GetPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_GetPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_GetPrinter *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -348,7 +348,7 @@ static WERROR spoolss_GetPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX /* spoolss_AddPrinterDriver */ -static WERROR spoolss_AddPrinterDriver(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_AddPrinterDriver(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_AddPrinterDriver *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -358,13 +358,13 @@ static WERROR spoolss_AddPrinterDriver(struct dcesrv_call_state *dce_call, TALLO /* spoolss_EnumPrinterDrivers */ -static WERROR spoolss_EnumPrinterDrivers(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_EnumPrinterDrivers(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_EnumPrinterDrivers *r) { struct ntptr_context *ntptr = talloc_get_type(dce_call->context->private, struct ntptr_context); WERROR status; - status = spoolss_check_server_name(dce_call, mem_ctx, r->in.server); + status = dcesrv_spoolss_check_server_name(dce_call, mem_ctx, r->in.server); W_ERROR_NOT_OK_RETURN(status); status = ntptr_EnumPrinterDrivers(ntptr, mem_ctx, r); @@ -380,7 +380,7 @@ static WERROR spoolss_EnumPrinterDrivers(struct dcesrv_call_state *dce_call, TAL /* spoolss_GetPrinterDriver */ -static WERROR spoolss_GetPrinterDriver(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_GetPrinterDriver(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_GetPrinterDriver *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -390,13 +390,13 @@ static WERROR spoolss_GetPrinterDriver(struct dcesrv_call_state *dce_call, TALLO /* spoolss_GetPrinterDriverDirectory */ -static WERROR spoolss_GetPrinterDriverDirectory(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_GetPrinterDriverDirectory(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_GetPrinterDriverDirectory *r) { struct ntptr_context *ntptr = talloc_get_type(dce_call->context->private, struct ntptr_context); WERROR status; - status = spoolss_check_server_name(dce_call, mem_ctx, r->in.server); + status = dcesrv_spoolss_check_server_name(dce_call, mem_ctx, r->in.server); W_ERROR_NOT_OK_RETURN(status); status = ntptr_GetPrinterDriverDirectory(ntptr, mem_ctx, r); @@ -411,7 +411,7 @@ static WERROR spoolss_GetPrinterDriverDirectory(struct dcesrv_call_state *dce_ca /* spoolss_DeletePrinterDriver */ -static WERROR spoolss_DeletePrinterDriver(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_DeletePrinterDriver(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_DeletePrinterDriver *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -421,7 +421,7 @@ static WERROR spoolss_DeletePrinterDriver(struct dcesrv_call_state *dce_call, TA /* spoolss_AddPrintProcessor */ -static WERROR spoolss_AddPrintProcessor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_AddPrintProcessor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_AddPrintProcessor *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -431,7 +431,7 @@ static WERROR spoolss_AddPrintProcessor(struct dcesrv_call_state *dce_call, TALL /* spoolss_EnumPrintProcessors */ -static WERROR spoolss_EnumPrintProcessors(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_EnumPrintProcessors(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_EnumPrintProcessors *r) { return WERR_OK; @@ -441,7 +441,7 @@ static WERROR spoolss_EnumPrintProcessors(struct dcesrv_call_state *dce_call, TA /* spoolss_GetPrintProcessorDirectory */ -static WERROR spoolss_GetPrintProcessorDirectory(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_GetPrintProcessorDirectory(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_GetPrintProcessorDirectory *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -451,7 +451,7 @@ static WERROR spoolss_GetPrintProcessorDirectory(struct dcesrv_call_state *dce_c /* spoolss_StartDocPrinter */ -static WERROR spoolss_StartDocPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_StartDocPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_StartDocPrinter *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -461,7 +461,7 @@ static WERROR spoolss_StartDocPrinter(struct dcesrv_call_state *dce_call, TALLOC /* spoolss_StartPagePrinter */ -static WERROR spoolss_StartPagePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_StartPagePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_StartPagePrinter *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -471,7 +471,7 @@ static WERROR spoolss_StartPagePrinter(struct dcesrv_call_state *dce_call, TALLO /* spoolss_WritePrinter */ -static WERROR spoolss_WritePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_WritePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_WritePrinter *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -481,7 +481,7 @@ static WERROR spoolss_WritePrinter(struct dcesrv_call_state *dce_call, TALLOC_CT /* spoolss_EndPagePrinter */ -static WERROR spoolss_EndPagePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_EndPagePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_EndPagePrinter *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -491,7 +491,7 @@ static WERROR spoolss_EndPagePrinter(struct dcesrv_call_state *dce_call, TALLOC_ /* spoolss_AbortPrinter */ -static WERROR spoolss_AbortPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_AbortPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_AbortPrinter *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -501,7 +501,7 @@ static WERROR spoolss_AbortPrinter(struct dcesrv_call_state *dce_call, TALLOC_CT /* spoolss_ReadPrinter */ -static WERROR spoolss_ReadPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_ReadPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_ReadPrinter *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -511,7 +511,7 @@ static WERROR spoolss_ReadPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX /* spoolss_EndDocPrinter */ -static WERROR spoolss_EndDocPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_EndDocPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_EndDocPrinter *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -521,7 +521,7 @@ static WERROR spoolss_EndDocPrinter(struct dcesrv_call_state *dce_call, TALLOC_C /* spoolss_AddJob */ -static WERROR spoolss_AddJob(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_AddJob(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_AddJob *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -531,7 +531,7 @@ static WERROR spoolss_AddJob(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem /* spoolss_ScheduleJob */ -static WERROR spoolss_ScheduleJob(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_ScheduleJob(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_ScheduleJob *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -541,7 +541,7 @@ static WERROR spoolss_ScheduleJob(struct dcesrv_call_state *dce_call, TALLOC_CTX /* spoolss_GetPrinterData */ -static WERROR spoolss_GetPrinterData(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_GetPrinterData(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_GetPrinterData *r) { struct ntptr_GenericHandle *handle; @@ -574,7 +574,7 @@ static WERROR spoolss_GetPrinterData(struct dcesrv_call_state *dce_call, TALLOC_ /* spoolss_SetPrinterData */ -static WERROR spoolss_SetPrinterData(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_SetPrinterData(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_SetPrinterData *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -584,7 +584,7 @@ static WERROR spoolss_SetPrinterData(struct dcesrv_call_state *dce_call, TALLOC_ /* spoolss_WaitForPrinterChange */ -static WERROR spoolss_WaitForPrinterChange(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_WaitForPrinterChange(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_WaitForPrinterChange *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -594,7 +594,7 @@ static WERROR spoolss_WaitForPrinterChange(struct dcesrv_call_state *dce_call, T /* spoolss_ClosePrinter */ -static WERROR spoolss_ClosePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_ClosePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_ClosePrinter *r) { struct dcesrv_handle *h; @@ -614,7 +614,7 @@ static WERROR spoolss_ClosePrinter(struct dcesrv_call_state *dce_call, TALLOC_CT /* spoolss_AddForm */ -static WERROR spoolss_AddForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_AddForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_AddForm *r) { struct ntptr_GenericHandle *handle; @@ -646,7 +646,7 @@ static WERROR spoolss_AddForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *me /* spoolss_DeleteForm */ -static WERROR spoolss_DeleteForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_DeleteForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_DeleteForm *r) { struct ntptr_GenericHandle *handle; @@ -678,7 +678,7 @@ static WERROR spoolss_DeleteForm(struct dcesrv_call_state *dce_call, TALLOC_CTX /* spoolss_GetForm */ -static WERROR spoolss_GetForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_GetForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_GetForm *r) { struct ntptr_GenericHandle *handle; @@ -713,7 +713,7 @@ static WERROR spoolss_GetForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *me /* spoolss_SetForm */ -static WERROR spoolss_SetForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_SetForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_SetForm *r) { struct ntptr_GenericHandle *handle; @@ -745,7 +745,7 @@ static WERROR spoolss_SetForm(struct dcesrv_call_state *dce_call, TALLOC_CTX *me /* spoolss_EnumForms */ -static WERROR spoolss_EnumForms(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_EnumForms(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_EnumForms *r) { struct ntptr_GenericHandle *handle; @@ -780,13 +780,13 @@ static WERROR spoolss_EnumForms(struct dcesrv_call_state *dce_call, TALLOC_CTX * /* spoolss_EnumPorts */ -static WERROR spoolss_EnumPorts(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_EnumPorts(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_EnumPorts *r) { struct ntptr_context *ntptr = talloc_get_type(dce_call->context->private, struct ntptr_context); WERROR status; - status = spoolss_check_server_name(dce_call, mem_ctx, r->in.servername); + status = dcesrv_spoolss_check_server_name(dce_call, mem_ctx, r->in.servername); W_ERROR_NOT_OK_RETURN(status); status = ntptr_EnumPorts(ntptr, mem_ctx, r); @@ -802,13 +802,13 @@ static WERROR spoolss_EnumPorts(struct dcesrv_call_state *dce_call, TALLOC_CTX * /* spoolss_EnumMonitors */ -static WERROR spoolss_EnumMonitors(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_EnumMonitors(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_EnumMonitors *r) { struct ntptr_context *ntptr = talloc_get_type(dce_call->context->private, struct ntptr_context); WERROR status; - status = spoolss_check_server_name(dce_call, mem_ctx, r->in.servername); + status = dcesrv_spoolss_check_server_name(dce_call, mem_ctx, r->in.servername); W_ERROR_NOT_OK_RETURN(status); status = ntptr_EnumMonitors(ntptr, mem_ctx, r); @@ -824,7 +824,7 @@ static WERROR spoolss_EnumMonitors(struct dcesrv_call_state *dce_call, TALLOC_CT /* spoolss_AddPort */ -static WERROR spoolss_AddPort(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_AddPort(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_AddPort *r) { return WERR_NOT_SUPPORTED; @@ -834,7 +834,7 @@ static WERROR spoolss_AddPort(struct dcesrv_call_state *dce_call, TALLOC_CTX *me /* spoolss_ConfigurePort */ -static WERROR spoolss_ConfigurePort(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_ConfigurePort(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_ConfigurePort *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -844,7 +844,7 @@ static WERROR spoolss_ConfigurePort(struct dcesrv_call_state *dce_call, TALLOC_C /* spoolss_DeletePort */ -static WERROR spoolss_DeletePort(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_DeletePort(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_DeletePort *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -854,7 +854,7 @@ static WERROR spoolss_DeletePort(struct dcesrv_call_state *dce_call, TALLOC_CTX /* spoolss_CreatePrinterIC */ -static WERROR spoolss_CreatePrinterIC(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_CreatePrinterIC(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_CreatePrinterIC *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -864,7 +864,7 @@ static WERROR spoolss_CreatePrinterIC(struct dcesrv_call_state *dce_call, TALLOC /* spoolss_PlayGDIScriptOnPrinterIC */ -static WERROR spoolss_PlayGDIScriptOnPrinterIC(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_PlayGDIScriptOnPrinterIC(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_PlayGDIScriptOnPrinterIC *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -874,7 +874,7 @@ static WERROR spoolss_PlayGDIScriptOnPrinterIC(struct dcesrv_call_state *dce_cal /* spoolss_DeletePrinterIC */ -static WERROR spoolss_DeletePrinterIC(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_DeletePrinterIC(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_DeletePrinterIC *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -884,7 +884,7 @@ static WERROR spoolss_DeletePrinterIC(struct dcesrv_call_state *dce_call, TALLOC /* spoolss_AddPrinterConnection */ -static WERROR spoolss_AddPrinterConnection(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_AddPrinterConnection(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_AddPrinterConnection *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -894,7 +894,7 @@ static WERROR spoolss_AddPrinterConnection(struct dcesrv_call_state *dce_call, T /* spoolss_DeletePrinterConnection */ -static WERROR spoolss_DeletePrinterConnection(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_DeletePrinterConnection(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_DeletePrinterConnection *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -904,7 +904,7 @@ static WERROR spoolss_DeletePrinterConnection(struct dcesrv_call_state *dce_call /* spoolss_PrinterMessageBox */ -static WERROR spoolss_PrinterMessageBox(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_PrinterMessageBox(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_PrinterMessageBox *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -914,7 +914,7 @@ static WERROR spoolss_PrinterMessageBox(struct dcesrv_call_state *dce_call, TALL /* spoolss_AddMonitor */ -static WERROR spoolss_AddMonitor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_AddMonitor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_AddMonitor *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -924,7 +924,7 @@ static WERROR spoolss_AddMonitor(struct dcesrv_call_state *dce_call, TALLOC_CTX /* spoolss_DeleteMonitor */ -static WERROR spoolss_DeleteMonitor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_DeleteMonitor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_DeleteMonitor *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -934,7 +934,7 @@ static WERROR spoolss_DeleteMonitor(struct dcesrv_call_state *dce_call, TALLOC_C /* spoolss_DeletePrintProcessor */ -static WERROR spoolss_DeletePrintProcessor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_DeletePrintProcessor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_DeletePrintProcessor *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -944,7 +944,7 @@ static WERROR spoolss_DeletePrintProcessor(struct dcesrv_call_state *dce_call, T /* spoolss_AddPrintProvidor */ -static WERROR spoolss_AddPrintProvidor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_AddPrintProvidor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_AddPrintProvidor *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -954,7 +954,7 @@ static WERROR spoolss_AddPrintProvidor(struct dcesrv_call_state *dce_call, TALLO /* spoolss_DeletePrintProvidor */ -static WERROR spoolss_DeletePrintProvidor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_DeletePrintProvidor(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_DeletePrintProvidor *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -964,7 +964,7 @@ static WERROR spoolss_DeletePrintProvidor(struct dcesrv_call_state *dce_call, TA /* spoolss_EnumPrintProcDataTypes */ -static WERROR spoolss_EnumPrintProcDataTypes(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_EnumPrintProcDataTypes(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_EnumPrintProcDataTypes *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -974,7 +974,7 @@ static WERROR spoolss_EnumPrintProcDataTypes(struct dcesrv_call_state *dce_call, /* spoolss_ResetPrinter */ -static WERROR spoolss_ResetPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_ResetPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_ResetPrinter *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -984,7 +984,7 @@ static WERROR spoolss_ResetPrinter(struct dcesrv_call_state *dce_call, TALLOC_CT /* spoolss_GetPrinterDriver2 */ -static WERROR spoolss_GetPrinterDriver2(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_GetPrinterDriver2(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_GetPrinterDriver2 *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -994,7 +994,7 @@ static WERROR spoolss_GetPrinterDriver2(struct dcesrv_call_state *dce_call, TALL /* spoolss_FindFirstPrinterChangeNotification */ -static WERROR spoolss_FindFirstPrinterChangeNotification(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_FindFirstPrinterChangeNotification(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_FindFirstPrinterChangeNotification *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -1004,7 +1004,7 @@ static WERROR spoolss_FindFirstPrinterChangeNotification(struct dcesrv_call_stat /* spoolss_FindNextPrinterChangeNotification */ -static WERROR spoolss_FindNextPrinterChangeNotification(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_FindNextPrinterChangeNotification(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_FindNextPrinterChangeNotification *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -1014,7 +1014,7 @@ static WERROR spoolss_FindNextPrinterChangeNotification(struct dcesrv_call_state /* spoolss_FindClosePrinterNotify */ -static WERROR spoolss_FindClosePrinterNotify(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_FindClosePrinterNotify(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_FindClosePrinterNotify *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -1024,7 +1024,7 @@ static WERROR spoolss_FindClosePrinterNotify(struct dcesrv_call_state *dce_call, /* spoolss_RouterFindFirstPrinterChangeNotificationOld */ -static WERROR spoolss_RouterFindFirstPrinterChangeNotificationOld(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_RouterFindFirstPrinterChangeNotificationOld(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_RouterFindFirstPrinterChangeNotificationOld *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -1034,7 +1034,7 @@ static WERROR spoolss_RouterFindFirstPrinterChangeNotificationOld(struct dcesrv_ /* spoolss_ReplyOpenPrinter */ -static WERROR spoolss_ReplyOpenPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_ReplyOpenPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_ReplyOpenPrinter *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -1044,7 +1044,7 @@ static WERROR spoolss_ReplyOpenPrinter(struct dcesrv_call_state *dce_call, TALLO /* spoolss_RouterReplyPrinter */ -static WERROR spoolss_RouterReplyPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_RouterReplyPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_RouterReplyPrinter *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -1054,7 +1054,7 @@ static WERROR spoolss_RouterReplyPrinter(struct dcesrv_call_state *dce_call, TAL /* spoolss_ReplyClosePrinter */ -static WERROR spoolss_ReplyClosePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_ReplyClosePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_ReplyClosePrinter *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -1064,7 +1064,7 @@ static WERROR spoolss_ReplyClosePrinter(struct dcesrv_call_state *dce_call, TALL /* spoolss_AddPortEx */ -static WERROR spoolss_AddPortEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_AddPortEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_AddPortEx *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -1074,7 +1074,7 @@ static WERROR spoolss_AddPortEx(struct dcesrv_call_state *dce_call, TALLOC_CTX * /* spoolss_RouterFindFirstPrinterChangeNotification */ -static WERROR spoolss_RouterFindFirstPrinterChangeNotification(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_RouterFindFirstPrinterChangeNotification(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_RouterFindFirstPrinterChangeNotification *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -1084,7 +1084,7 @@ static WERROR spoolss_RouterFindFirstPrinterChangeNotification(struct dcesrv_cal /* spoolss_SpoolerInit */ -static WERROR spoolss_SpoolerInit(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_SpoolerInit(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_SpoolerInit *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -1094,7 +1094,7 @@ static WERROR spoolss_SpoolerInit(struct dcesrv_call_state *dce_call, TALLOC_CTX /* spoolss_ResetPrinterEx */ -static WERROR spoolss_ResetPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_ResetPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_ResetPrinterEx *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -1104,7 +1104,7 @@ static WERROR spoolss_ResetPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_ /* spoolss_RemoteFindFirstPrinterChangeNotifyEx */ -static WERROR spoolss_RemoteFindFirstPrinterChangeNotifyEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_RemoteFindFirstPrinterChangeNotifyEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_RemoteFindFirstPrinterChangeNotifyEx *r) { /* @@ -1119,7 +1119,7 @@ static WERROR spoolss_RemoteFindFirstPrinterChangeNotifyEx(struct dcesrv_call_st /* spoolss_RouterRefreshPrinterChangeNotification */ -static WERROR spoolss_RouterRefreshPrinterChangeNotification(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_RouterRefreshPrinterChangeNotification(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_RouterRefreshPrinterChangeNotification *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -1129,7 +1129,7 @@ static WERROR spoolss_RouterRefreshPrinterChangeNotification(struct dcesrv_call_ /* spoolss_RemoteFindNextPrinterChangeNotifyEx */ -static WERROR spoolss_RemoteFindNextPrinterChangeNotifyEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_RemoteFindNextPrinterChangeNotifyEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_RemoteFindNextPrinterChangeNotifyEx *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -1139,7 +1139,7 @@ static WERROR spoolss_RemoteFindNextPrinterChangeNotifyEx(struct dcesrv_call_sta /* spoolss_44 */ -static WERROR spoolss_44(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_44(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_44 *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -1148,7 +1148,7 @@ static WERROR spoolss_44(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx /* spoolss_OpenPrinterEx */ -static WERROR spoolss_OpenPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_OpenPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_OpenPrinterEx *r) { struct ntptr_context *ntptr = talloc_get_type(dce_call->context->private, struct ntptr_context); @@ -1161,10 +1161,10 @@ static WERROR spoolss_OpenPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_C ZERO_STRUCTP(r->out.handle); - status = spoolss_parse_printer_name(mem_ctx, r->in.printername, &server, &object, &type); + status = dcesrv_spoolss_parse_printer_name(mem_ctx, r->in.printername, &server, &object, &type); W_ERROR_NOT_OK_RETURN(status); - status = spoolss_check_server_name(dce_call, mem_ctx, server); + status = dcesrv_spoolss_check_server_name(dce_call, mem_ctx, server); W_ERROR_NOT_OK_RETURN(status); switch (type) { @@ -1201,7 +1201,7 @@ static WERROR spoolss_OpenPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_C /* spoolss_AddPrinterEx */ -static WERROR spoolss_AddPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_AddPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_AddPrinterEx *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -1211,7 +1211,7 @@ static WERROR spoolss_AddPrinterEx(struct dcesrv_call_state *dce_call, TALLOC_CT /* spoolss_47 */ -static WERROR spoolss_47(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_47(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_47 *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -1221,7 +1221,7 @@ static WERROR spoolss_47(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx /* spoolss_EnumPrinterData */ -static WERROR spoolss_EnumPrinterData(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_EnumPrinterData(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_EnumPrinterData *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -1231,7 +1231,7 @@ static WERROR spoolss_EnumPrinterData(struct dcesrv_call_state *dce_call, TALLOC /* spoolss_DeletePrinterData */ -static WERROR spoolss_DeletePrinterData(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_DeletePrinterData(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_DeletePrinterData *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -1241,7 +1241,7 @@ static WERROR spoolss_DeletePrinterData(struct dcesrv_call_state *dce_call, TALL /* spoolss_4a */ -static WERROR spoolss_4a(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_4a(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_4a *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -1251,7 +1251,7 @@ static WERROR spoolss_4a(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx /* spoolss_4b */ -static WERROR spoolss_4b(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_4b(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_4b *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -1261,7 +1261,7 @@ static WERROR spoolss_4b(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx /* spoolss_4c */ -static WERROR spoolss_4c(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_4c(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_4c *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -1271,7 +1271,7 @@ static WERROR spoolss_4c(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx /* spoolss_SetPrinterDataEx */ -static WERROR spoolss_SetPrinterDataEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_SetPrinterDataEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_SetPrinterDataEx *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -1281,7 +1281,7 @@ static WERROR spoolss_SetPrinterDataEx(struct dcesrv_call_state *dce_call, TALLO /* spoolss_GetPrinterDataEx */ -static WERROR spoolss_GetPrinterDataEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_GetPrinterDataEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_GetPrinterDataEx *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -1291,7 +1291,7 @@ static WERROR spoolss_GetPrinterDataEx(struct dcesrv_call_state *dce_call, TALLO /* spoolss_EnumPrinterDataEx */ -static WERROR spoolss_EnumPrinterDataEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_EnumPrinterDataEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_EnumPrinterDataEx *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -1301,7 +1301,7 @@ static WERROR spoolss_EnumPrinterDataEx(struct dcesrv_call_state *dce_call, TALL /* spoolss_EnumPrinterKey */ -static WERROR spoolss_EnumPrinterKey(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_EnumPrinterKey(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_EnumPrinterKey *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -1311,7 +1311,7 @@ static WERROR spoolss_EnumPrinterKey(struct dcesrv_call_state *dce_call, TALLOC_ /* spoolss_DeletePrinterDataEx */ -static WERROR spoolss_DeletePrinterDataEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_DeletePrinterDataEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_DeletePrinterDataEx *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -1321,7 +1321,7 @@ static WERROR spoolss_DeletePrinterDataEx(struct dcesrv_call_state *dce_call, TA /* spoolss_DeletePrinterKey */ -static WERROR spoolss_DeletePrinterKey(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_DeletePrinterKey(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_DeletePrinterKey *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -1331,7 +1331,7 @@ static WERROR spoolss_DeletePrinterKey(struct dcesrv_call_state *dce_call, TALLO /* spoolss_53 */ -static WERROR spoolss_53(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_53(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_53 *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -1341,7 +1341,7 @@ static WERROR spoolss_53(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx /* spoolss_DeletePrinterDriverEx */ -static WERROR spoolss_DeletePrinterDriverEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_DeletePrinterDriverEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_DeletePrinterDriverEx *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -1351,7 +1351,7 @@ static WERROR spoolss_DeletePrinterDriverEx(struct dcesrv_call_state *dce_call, /* spoolss_55 */ -static WERROR spoolss_55(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_55(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_55 *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -1361,7 +1361,7 @@ static WERROR spoolss_55(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx /* spoolss_56 */ -static WERROR spoolss_56(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_56(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_56 *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -1371,7 +1371,7 @@ static WERROR spoolss_56(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx /* spoolss_57 */ -static WERROR spoolss_57(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_57(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_57 *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -1381,7 +1381,7 @@ static WERROR spoolss_57(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx /* spoolss_XcvData */ -static WERROR spoolss_XcvData(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_XcvData(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_XcvData *r) { struct ntptr_GenericHandle *handle; @@ -1420,7 +1420,7 @@ static WERROR spoolss_XcvData(struct dcesrv_call_state *dce_call, TALLOC_CTX *me /* spoolss_AddPrinterDriverEx */ -static WERROR spoolss_AddPrinterDriverEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_AddPrinterDriverEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_AddPrinterDriverEx *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -1430,7 +1430,7 @@ static WERROR spoolss_AddPrinterDriverEx(struct dcesrv_call_state *dce_call, TAL /* spoolss_5a */ -static WERROR spoolss_5a(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_5a(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_5a *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -1440,7 +1440,7 @@ static WERROR spoolss_5a(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx /* spoolss_5b */ -static WERROR spoolss_5b(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_5b(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_5b *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -1450,7 +1450,7 @@ static WERROR spoolss_5b(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx /* spoolss_5c */ -static WERROR spoolss_5c(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_5c(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_5c *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -1460,7 +1460,7 @@ static WERROR spoolss_5c(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx /* spoolss_5d */ -static WERROR spoolss_5d(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_5d(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_5d *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -1470,7 +1470,7 @@ static WERROR spoolss_5d(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx /* spoolss_5e */ -static WERROR spoolss_5e(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_5e(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_5e *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); @@ -1480,7 +1480,7 @@ static WERROR spoolss_5e(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx /* spoolss_5f */ -static WERROR spoolss_5f(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, +static WERROR dcesrv_spoolss_5f(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_5f *r) { DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); -- cgit From 0479a2f1cbae51fcd8dbdc3c148c808421fb4d25 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Tue, 10 Jul 2007 02:07:03 +0000 Subject: r23792: convert Samba4 to GPLv3 There are still a few tidyups of old FSF addresses to come (in both s3 and s4). More commits soon. (This used to be commit fcf38a38ac691abd0fa51b89dc951a08e89fdafa) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index e89dc35a67..2dca178245 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -8,7 +8,7 @@ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or + the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, @@ -17,8 +17,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + along with this program. If not, see . */ #include "includes.h" -- cgit From 8e2d624a588552f5d06f21fe37281615f3ec6296 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Mon, 3 Sep 2007 13:13:25 +0000 Subject: r24937: Merge tests spoolss RPC callbacks. (This used to be commit 9b256a0ca232ea6e89771bf73a1adf877273a752) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 75 +++++++++++++++++++++++++++-- 1 file changed, 71 insertions(+), 4 deletions(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index 2dca178245..cd39bcda3d 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -27,6 +27,12 @@ #include "ntptr/ntptr.h" #include "lib/socket/socket.h" #include "smbd/service_stream.h" +#include "librpc/gen_ndr/ndr_spoolss_c.h" +#include "auth/credentials/credentials.h" + +enum spoolss_handle { + SPOOLSS_NOTIFY +}; #define SPOOLSS_BUFFER_UNION(fn,info,level) \ ((info)?ndr_size_##fn(info, level, 0):0) @@ -1036,7 +1042,16 @@ static WERROR dcesrv_spoolss_RouterFindFirstPrinterChangeNotificationOld(struct static WERROR dcesrv_spoolss_ReplyOpenPrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_ReplyOpenPrinter *r) { - DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); + struct dcesrv_handle *handle; + + handle = dcesrv_handle_new(dce_call->context, SPOOLSS_NOTIFY); + W_ERROR_HAVE_NO_MEMORY(handle); + + /* For now, just return a handle */ + + *r->out.handle = handle->wire_handle; + + return WERR_OK; } @@ -1056,9 +1071,16 @@ static WERROR dcesrv_spoolss_RouterReplyPrinter(struct dcesrv_call_state *dce_ca static WERROR dcesrv_spoolss_ReplyClosePrinter(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_ReplyClosePrinter *r) { - DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR); -} + struct dcesrv_handle *handle; + + DCESRV_PULL_HANDLE_WERR(handle, r->in.handle, SPOOLSS_NOTIFY); + talloc_free(handle); + + ZERO_STRUCTP(r->out.handle); + + return WERR_OK; +} /* spoolss_AddPortEx @@ -1106,11 +1128,56 @@ static WERROR dcesrv_spoolss_ResetPrinterEx(struct dcesrv_call_state *dce_call, static WERROR dcesrv_spoolss_RemoteFindFirstPrinterChangeNotifyEx(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct spoolss_RemoteFindFirstPrinterChangeNotifyEx *r) { + struct dcerpc_pipe *p; + struct dcerpc_binding *binding; + NTSTATUS status; + struct spoolss_ReplyOpenPrinter rop; + struct cli_credentials *creds; + struct policy_handle notify_handle; + + DEBUG(2, ("Received RFFPCNex from %s\n", r->in.str)); + /* - * TODO: for now just return ok, + * TODO: for now just open a connection to the client and drop it again * to keep the w2k3 PrintServer * happy to allow to open the Add Printer GUI + * and the torture suite passing */ + + binding = talloc_zero(mem_ctx, struct dcerpc_binding); + + binding->transport = NCACN_NP; + if (strncmp(r->in.str, "\\\\", 2)) + return WERR_INVALID_COMPUTERNAME; + binding->host = r->in.str+2; + + creds = cli_credentials_init_anon(mem_ctx); /* FIXME: Use machine credentials instead ? */ + + status = dcerpc_pipe_connect_b(mem_ctx, &p, binding, &ndr_table_spoolss, + creds, NULL); + + if (NT_STATUS_IS_ERR(status)) { + DEBUG(0, ("unable to call back to %s\n", r->in.str)); + return WERR_SERVER_UNAVAILABLE; + } + + ZERO_STRUCT(rop); + rop.in.server_name = lp_netbios_name(); + W_ERROR_HAVE_NO_MEMORY(rop.in.server_name); + rop.in.printer_local = 0; + rop.in.type = REG_NONE; + rop.in.unknown1 = 0; + rop.in.unknown2 = 0; + rop.out.handle = ¬ify_handle; + + status = dcerpc_spoolss_ReplyOpenPrinter(p, mem_ctx, &rop); + if (NT_STATUS_IS_ERR(status)) { + DEBUG(0, ("unable to open remote printer %s\n", r->in.str)); + return WERR_SERVER_UNAVAILABLE; + } + + talloc_free(p); + return WERR_OK; } -- cgit From ffeee68e4b72dd94fee57366bd8d38b8c284c3d4 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sat, 8 Sep 2007 12:42:09 +0000 Subject: r25026: Move param/param.h out of includes.h (This used to be commit abe8349f9b4387961ff3665d8c589d61cd2edf31) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 1 + 1 file changed, 1 insertion(+) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index cd39bcda3d..d6c8d864aa 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -29,6 +29,7 @@ #include "smbd/service_stream.h" #include "librpc/gen_ndr/ndr_spoolss_c.h" #include "auth/credentials/credentials.h" +#include "param/param.h" enum spoolss_handle { SPOOLSS_NOTIFY -- cgit From 37d53832a4623653f706e77985a79d84bd7c6694 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Fri, 28 Sep 2007 01:17:46 +0000 Subject: r25398: Parse loadparm context to all lp_*() functions. (This used to be commit 3fcc960839c6e5ca4de2c3c042f12f369ac5f238) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index d6c8d864aa..3d7a5319ca 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -174,10 +174,10 @@ static WERROR dcesrv_spoolss_check_server_name(struct dcesrv_call_state *dce_cal server_name += 2; /* NETBIOS NAME is ok */ - ret = strequal(lp_netbios_name(), server_name); + ret = strequal(lp_netbios_name(global_loadparm), server_name); if (ret) return WERR_OK; - aliases = lp_netbios_aliases(); + aliases = lp_netbios_aliases(global_loadparm); for (i=0; aliases && aliases[i]; i++) { if (strequal(aliases[i], server_name)) { @@ -188,12 +188,12 @@ static WERROR dcesrv_spoolss_check_server_name(struct dcesrv_call_state *dce_cal /* DNS NAME is ok * TODO: we need to check if aliases are also ok */ - if (lp_realm()) { + if (lp_realm(global_loadparm)) { char *str; str = talloc_asprintf(mem_ctx, "%s.%s", - lp_netbios_name(), - lp_realm()); + lp_netbios_name(global_loadparm), + lp_realm(global_loadparm)); W_ERROR_HAVE_NO_MEMORY(str); ret = strequal(str, server_name); @@ -216,7 +216,7 @@ static NTSTATUS dcerpc_spoolss_bind(struct dcesrv_call_state *dce_call, const st NTSTATUS status; struct ntptr_context *ntptr; - status = ntptr_init_context(dce_call->context, lp_ntptr_providor(), &ntptr); + status = ntptr_init_context(dce_call->context, lp_ntptr_providor(global_loadparm), &ntptr); NT_STATUS_NOT_OK_RETURN(status); dce_call->context->private = ntptr; @@ -1163,7 +1163,7 @@ static WERROR dcesrv_spoolss_RemoteFindFirstPrinterChangeNotifyEx(struct dcesrv_ } ZERO_STRUCT(rop); - rop.in.server_name = lp_netbios_name(); + rop.in.server_name = lp_netbios_name(global_loadparm); W_ERROR_HAVE_NO_MEMORY(rop.in.server_name); rop.in.printer_local = 0; rop.in.type = REG_NONE; -- cgit From 05e7c481465e3065effaf21b43636d6605d7c313 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sat, 6 Oct 2007 22:25:41 +0000 Subject: r25553: Convert to standard bool type. (This used to be commit b7371f1a191fb86834c0d586d094f39f0b04544b) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index 3d7a5319ca..09409b1514 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -149,7 +149,7 @@ static WERROR dcesrv_spoolss_check_server_name(struct dcesrv_call_state *dce_cal TALLOC_CTX *mem_ctx, const char *server_name) { - BOOL ret; + bool ret; struct socket_address *myaddr; const char **aliases; int i; -- cgit From 57f20ccd242e45ff91850341594aa040d113c19e Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Tue, 4 Dec 2007 20:05:00 +0100 Subject: r26296: Store loadparm context in DCE/RPC server context. (This used to be commit fc1f4d2d65d4c983cba5421e7ffb64dd75482860) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index 09409b1514..bd30f231bf 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -174,10 +174,10 @@ static WERROR dcesrv_spoolss_check_server_name(struct dcesrv_call_state *dce_cal server_name += 2; /* NETBIOS NAME is ok */ - ret = strequal(lp_netbios_name(global_loadparm), server_name); + ret = strequal(lp_netbios_name(dce_call->conn->dce_ctx->lp_ctx), server_name); if (ret) return WERR_OK; - aliases = lp_netbios_aliases(global_loadparm); + aliases = lp_netbios_aliases(dce_call->conn->dce_ctx->lp_ctx); for (i=0; aliases && aliases[i]; i++) { if (strequal(aliases[i], server_name)) { @@ -188,12 +188,12 @@ static WERROR dcesrv_spoolss_check_server_name(struct dcesrv_call_state *dce_cal /* DNS NAME is ok * TODO: we need to check if aliases are also ok */ - if (lp_realm(global_loadparm)) { + if (lp_realm(dce_call->conn->dce_ctx->lp_ctx)) { char *str; str = talloc_asprintf(mem_ctx, "%s.%s", - lp_netbios_name(global_loadparm), - lp_realm(global_loadparm)); + lp_netbios_name(dce_call->conn->dce_ctx->lp_ctx), + lp_realm(dce_call->conn->dce_ctx->lp_ctx)); W_ERROR_HAVE_NO_MEMORY(str); ret = strequal(str, server_name); @@ -216,7 +216,7 @@ static NTSTATUS dcerpc_spoolss_bind(struct dcesrv_call_state *dce_call, const st NTSTATUS status; struct ntptr_context *ntptr; - status = ntptr_init_context(dce_call->context, lp_ntptr_providor(global_loadparm), &ntptr); + status = ntptr_init_context(dce_call->context, lp_ntptr_providor(dce_call->conn->dce_ctx->lp_ctx), &ntptr); NT_STATUS_NOT_OK_RETURN(status); dce_call->context->private = ntptr; @@ -1163,7 +1163,7 @@ static WERROR dcesrv_spoolss_RemoteFindFirstPrinterChangeNotifyEx(struct dcesrv_ } ZERO_STRUCT(rop); - rop.in.server_name = lp_netbios_name(global_loadparm); + rop.in.server_name = lp_netbios_name(dce_call->conn->dce_ctx->lp_ctx); W_ERROR_HAVE_NO_MEMORY(rop.in.server_name); rop.in.printer_local = 0; rop.in.type = REG_NONE; -- cgit From 4c4323009fa83f00ed319de59a3aad48fcd65994 Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Fri, 7 Dec 2007 02:37:04 +0100 Subject: r26327: Explicit loadparm_context for RPC client functions. (This used to be commit eeb2251d22b3d6e0379444a73af69d1014692b07) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index bd30f231bf..33a42dddab 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -1155,7 +1155,7 @@ static WERROR dcesrv_spoolss_RemoteFindFirstPrinterChangeNotifyEx(struct dcesrv_ creds = cli_credentials_init_anon(mem_ctx); /* FIXME: Use machine credentials instead ? */ status = dcerpc_pipe_connect_b(mem_ctx, &p, binding, &ndr_table_spoolss, - creds, NULL); + creds, NULL, dce_call->conn->dce_ctx->lp_ctx); if (NT_STATUS_IS_ERR(status)) { DEBUG(0, ("unable to call back to %s\n", r->in.str)); -- cgit From a72c5053c587f0ed6113ef514fe3739cb81e7abf Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Sat, 8 Dec 2007 23:32:43 +0100 Subject: r26353: Remove use of global_loadparm. (This used to be commit 17637e4490e42db6cdef619286c4d5a0982e9d1a) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index 33a42dddab..7c701ec50a 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -216,7 +216,8 @@ static NTSTATUS dcerpc_spoolss_bind(struct dcesrv_call_state *dce_call, const st NTSTATUS status; struct ntptr_context *ntptr; - status = ntptr_init_context(dce_call->context, lp_ntptr_providor(dce_call->conn->dce_ctx->lp_ctx), &ntptr); + status = ntptr_init_context(dce_call->context, dce_call->conn->dce_ctx->lp_ctx, + lp_ntptr_providor(dce_call->conn->dce_ctx->lp_ctx), &ntptr); NT_STATUS_NOT_OK_RETURN(status); dce_call->context->private = ntptr; -- cgit From 21fc7673780aa1d7c0caab7b17ff9171238913ba Mon Sep 17 00:00:00 2001 From: Jelmer Vernooij Date: Thu, 17 Apr 2008 12:23:44 +0200 Subject: Specify event_context to ldb_wrap_connect explicitly. (This used to be commit b4e1ae07a284c044704322446c94351c2decff91) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index 7c701ec50a..46270727a4 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -216,7 +216,7 @@ static NTSTATUS dcerpc_spoolss_bind(struct dcesrv_call_state *dce_call, const st NTSTATUS status; struct ntptr_context *ntptr; - status = ntptr_init_context(dce_call->context, dce_call->conn->dce_ctx->lp_ctx, + status = ntptr_init_context(dce_call->context, dce_call->conn->event_ctx, dce_call->conn->dce_ctx->lp_ctx, lp_ntptr_providor(dce_call->conn->dce_ctx->lp_ctx), &ntptr); NT_STATUS_NOT_OK_RETURN(status); -- cgit From 4e83011f72ba3df387512755a17760b42a7bf2f2 Mon Sep 17 00:00:00 2001 From: Simo Sorce Date: Mon, 21 Apr 2008 17:58:23 -0400 Subject: Remove more event_context_init() uses from function calls within deep down the code. Make sure we pass around the event_context where we need it instead. All test but a few python ones fail. Jelmer promised to fix them. (This used to be commit 3045d391626fba169aa26be52174883e18d323e9) --- source4/rpc_server/spoolss/dcesrv_spoolss.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'source4/rpc_server/spoolss/dcesrv_spoolss.c') diff --git a/source4/rpc_server/spoolss/dcesrv_spoolss.c b/source4/rpc_server/spoolss/dcesrv_spoolss.c index 46270727a4..28e30002e2 100644 --- a/source4/rpc_server/spoolss/dcesrv_spoolss.c +++ b/source4/rpc_server/spoolss/dcesrv_spoolss.c @@ -1156,7 +1156,8 @@ static WERROR dcesrv_spoolss_RemoteFindFirstPrinterChangeNotifyEx(struct dcesrv_ creds = cli_credentials_init_anon(mem_ctx); /* FIXME: Use machine credentials instead ? */ status = dcerpc_pipe_connect_b(mem_ctx, &p, binding, &ndr_table_spoolss, - creds, NULL, dce_call->conn->dce_ctx->lp_ctx); + creds, dce_call->event_ctx, + dce_call->conn->dce_ctx->lp_ctx); if (NT_STATUS_IS_ERR(status)) { DEBUG(0, ("unable to call back to %s\n", r->in.str)); -- cgit