svn commit: samba r16523 - in branches/SAMBA_4_0/source: librpc/idl ntptr ntptr/simple_ldb rpc_server/spoolss

metze at samba.org metze at samba.org
Mon Jun 26 18:31:39 GMT 2006


Author: metze
Date: 2006-06-26 18:31:39 +0000 (Mon, 26 Jun 2006)
New Revision: 16523

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=16523

Log:
pass spoolss_XcvData calls to the ntptr backends...
I wrote this code last year and found it in a working tree...

metze
Modified:
   branches/SAMBA_4_0/source/librpc/idl/spoolss.idl
   branches/SAMBA_4_0/source/ntptr/ntptr.h
   branches/SAMBA_4_0/source/ntptr/ntptr_interface.c
   branches/SAMBA_4_0/source/ntptr/simple_ldb/ntptr_simple_ldb.c
   branches/SAMBA_4_0/source/rpc_server/spoolss/dcesrv_spoolss.c


Changeset:
Modified: branches/SAMBA_4_0/source/librpc/idl/spoolss.idl
===================================================================
--- branches/SAMBA_4_0/source/librpc/idl/spoolss.idl	2006-06-26 17:43:39 UTC (rev 16522)
+++ branches/SAMBA_4_0/source/librpc/idl/spoolss.idl	2006-06-26 18:31:39 UTC (rev 16523)
@@ -1368,7 +1368,16 @@
 
 	/******************/
 	/* Function: 0x58 */
-	WERROR spoolss_58(
+	WERROR spoolss_XcvData(
+		[in,ref] policy_handle *handle,
+		[in] [string,charset(UTF16)] uint16 function_name[],
+		[in] DATA_BLOB in_data,
+		[in,value(r->in.in_data.length)] uint32 _in_data_length,
+		[in] uint32 offered,
+		[in] uint32 unknown1,
+		[out] DATA_BLOB out_data,
+		[out] uint32 needed,
+		[out] uint32 unknown2
 	);
 
 	/******************/

Modified: branches/SAMBA_4_0/source/ntptr/ntptr.h
===================================================================
--- branches/SAMBA_4_0/source/ntptr/ntptr.h	2006-06-26 17:43:39 UTC (rev 16522)
+++ branches/SAMBA_4_0/source/ntptr/ntptr.h	2006-06-26 18:31:39 UTC (rev 16523)
@@ -74,6 +74,7 @@
 struct spoolss_EnumForms;
 struct spoolss_EnumPorts;
 struct spoolss_EnumPrintProcessors;
+struct spoolss_XcvData;
 
 /* the ntptr operations structure - contains function pointers to 
    the backend implementations of each operation */
@@ -88,6 +89,8 @@
 				  struct spoolss_OpenPrinterEx *r,
 				  const char *printer_name,
 				  struct ntptr_GenericHandle **server);
+	WERROR (*XcvDataPrintServer)(struct ntptr_GenericHandle *server, TALLOC_CTX *mem_ctx,
+				     struct spoolss_XcvData *r);
 
 	/* PrintServer PrinterData functions */
 	WERROR (*EnumPrintServerData)(struct ntptr_GenericHandle *server, TALLOC_CTX *mem_ctx,
@@ -125,8 +128,10 @@
 	WERROR (*OpenPort)(struct ntptr_context *ntptr, TALLOC_CTX *mem_ctx,
 			   struct spoolss_OpenPrinterEx *r,
 			   const char *port_name,
-			   struct ntptr_GenericHandle **prt);
-
+			   struct ntptr_GenericHandle **port);
+	WERROR (*XcvDataPort)(struct ntptr_GenericHandle *port, TALLOC_CTX *mem_ctx,
+			      struct spoolss_XcvData *r);
+	
 	/* Monitor functions */
 	WERROR (*EnumMonitors)(struct ntptr_context *ntptr, TALLOC_CTX *mem_ctx,
 			       struct spoolss_EnumMonitors *r);
@@ -134,6 +139,8 @@
 			      struct spoolss_OpenPrinterEx *r,
 			      const char *monitor_name,
 			      struct ntptr_GenericHandle **monitor);
+	WERROR (*XcvDataMonitor)(struct ntptr_GenericHandle *monitor, TALLOC_CTX *mem_ctx,
+				 struct spoolss_XcvData *r);
 
 	/* PrintProcessor functions */
 	WERROR (*EnumPrintProcessors)(struct ntptr_context *ntptr, TALLOC_CTX *mem_ctx,
@@ -155,6 +162,8 @@
 			     struct spoolss_SetPrinter *r);
 	WERROR (*DeletePrinter)(struct ntptr_context *ntptr, TALLOC_CTX *mem_ctx,
 				struct spoolss_DeletePrinter *r);
+	WERROR (*XcvDataPrinter)(struct ntptr_GenericHandle *printer, TALLOC_CTX *mem_ctx,
+				 struct spoolss_XcvData *r);
 
 	/* Printer Driver functions */
 	WERROR (*GetPrinterDriver)(struct ntptr_context *ntptr, TALLOC_CTX *mem_ctx,

Modified: branches/SAMBA_4_0/source/ntptr/ntptr_interface.c
===================================================================
--- branches/SAMBA_4_0/source/ntptr/ntptr_interface.c	2006-06-26 17:43:39 UTC (rev 16522)
+++ branches/SAMBA_4_0/source/ntptr/ntptr_interface.c	2006-06-26 18:31:39 UTC (rev 16523)
@@ -36,7 +36,19 @@
 	return ntptr->ops->OpenPrintServer(ntptr, mem_ctx, r, printer_name, server);
 }
 
+WERROR ntptr_XcvDataPrintServer(struct ntptr_GenericHandle *server, TALLOC_CTX *mem_ctx,
+				struct spoolss_XcvData *r)
+{
+	if (server->type != NTPTR_HANDLE_SERVER) {
+		return WERR_FOOBAR;
+	}
+	if (!server->ntptr->ops->XcvDataPrintServer) {
+		return WERR_NOT_SUPPORTED;
+	}
+	return server->ntptr->ops->XcvDataPrintServer(server, mem_ctx, r);
+}
 
+
 /* PrintServer PrinterData functions */
 WERROR ntptr_EnumPrintServerData(struct ntptr_GenericHandle *server, TALLOC_CTX *mem_ctx,
 				 struct spoolss_EnumPrinterData *r)
@@ -188,14 +200,25 @@
 WERROR ntptr_OpenPort(struct ntptr_context *ntptr, TALLOC_CTX *mem_ctx,
 		      struct spoolss_OpenPrinterEx *r,
 		      const char *port_name,
-		      struct ntptr_GenericHandle **prt)
+		      struct ntptr_GenericHandle **port)
 {
 	if (!ntptr->ops->OpenPort) {
 		return WERR_NOT_SUPPORTED;
 	}
-	return ntptr->ops->OpenPort(ntptr, mem_ctx, r, port_name, prt);
+	return ntptr->ops->OpenPort(ntptr, mem_ctx, r, port_name, port);
 }
 
+WERROR ntptr_XcvDataPort(struct ntptr_GenericHandle *port, TALLOC_CTX *mem_ctx,
+			 struct spoolss_XcvData *r)
+{
+	if (port->type != NTPTR_HANDLE_PORT) {
+		return WERR_FOOBAR;
+	}
+	if (!port->ntptr->ops->XcvDataPort) {
+		return WERR_NOT_SUPPORTED;
+	}
+	return port->ntptr->ops->XcvDataPort(port, mem_ctx, r);
+}
 
 /* Monitor functions */
 WERROR ntptr_EnumMonitors(struct ntptr_context *ntptr, TALLOC_CTX *mem_ctx,
@@ -218,7 +241,19 @@
 	return ntptr->ops->OpenMonitor(ntptr, mem_ctx, r, monitor_name, monitor);
 }
 
+WERROR ntptr_XcvDataMonitor(struct ntptr_GenericHandle *monitor, TALLOC_CTX *mem_ctx,
+			    struct spoolss_XcvData *r)
+{
+	if (monitor->type != NTPTR_HANDLE_MONITOR) {
+		return WERR_FOOBAR;
+	}
+	if (!monitor->ntptr->ops->XcvDataMonitor) {
+		return WERR_NOT_SUPPORTED;
+	}
+	return monitor->ntptr->ops->XcvDataMonitor(monitor, mem_ctx, r);
+}
 
+
 /* PrintProcessor functions */
 WERROR ntptr_EnumPrintProcessors(struct ntptr_context *ntptr, TALLOC_CTX *mem_ctx,
 				 struct spoolss_EnumPrintProcessors *r)
@@ -288,7 +323,19 @@
 	return ntptr->ops->DeletePrinter(ntptr, mem_ctx, r);
 }
 
+WERROR ntptr_XcvDataPrinter(struct ntptr_GenericHandle *printer, TALLOC_CTX *mem_ctx,
+			    struct spoolss_XcvData *r)
+{
+	if (printer->type != NTPTR_HANDLE_PRINTER) {
+		return WERR_FOOBAR;
+	}
+	if (!printer->ntptr->ops->XcvDataPrinter) {
+		return WERR_NOT_SUPPORTED;
+	}
+	return printer->ntptr->ops->XcvDataPrinter(printer, mem_ctx, r);
+}
 
+
 /* Printer Driver functions */
 WERROR ntptr_GetPrinterDriver(struct ntptr_context *ntptr, TALLOC_CTX *mem_ctx,
 			      struct spoolss_GetPrinterDriver *r)

Modified: branches/SAMBA_4_0/source/ntptr/simple_ldb/ntptr_simple_ldb.c
===================================================================
--- branches/SAMBA_4_0/source/ntptr/simple_ldb/ntptr_simple_ldb.c	2006-06-26 17:43:39 UTC (rev 16522)
+++ branches/SAMBA_4_0/source/ntptr/simple_ldb/ntptr_simple_ldb.c	2006-06-26 18:31:39 UTC (rev 16523)
@@ -761,7 +761,8 @@
 
 	/* PrintServer functions */
 	.OpenPrintServer		= sptr_OpenPrintServer,
-
+/*	.XcvDataPrintServer		= sptr_XcvDataPrintServer,
+*/
 	/* PrintServer PrinterData functions */
 /*	.EnumPrintServerData		= sptr_EnumPrintServerData,
 */	.GetPrintServerData		= sptr_GetPrintServerData,
@@ -783,10 +784,12 @@
 	/* Port functions */
 	.EnumPorts			= sptr_EnumPorts,
 /*	.OpenPort			= sptr_OpenPort,
+	.XcvDataPort			= sptr_XcvDataPort,
 */
 	/* Monitor functions */
 	.EnumMonitors			= sptr_EnumMonitors,
 /*	.OpenMonitor			= sptr_OpenMonitor,
+	.XcvDataMonitor			= sptr_XcvDataMonitor,
 */
 	/* PrintProcessor functions */
 /*	.EnumPrintProcessors		= sptr_EnumPrintProcessors,
@@ -798,6 +801,7 @@
 	.GetPrinter			= sptr_GetPrinter,
 	.SetPrinter			= sptr_SetPrinter,
 	.DeletePrinter			= sptr_DeletePrinter,
+	.XcvDataPrinter			= sptr_XcvDataPrinter,
 */
 	/* Printer Driver functions */
 /*	.GetPrinterDriver		= sptr_GetPrinterDriver,

Modified: branches/SAMBA_4_0/source/rpc_server/spoolss/dcesrv_spoolss.c
===================================================================
--- branches/SAMBA_4_0/source/rpc_server/spoolss/dcesrv_spoolss.c	2006-06-26 17:43:39 UTC (rev 16522)
+++ branches/SAMBA_4_0/source/rpc_server/spoolss/dcesrv_spoolss.c	2006-06-26 18:31:39 UTC (rev 16523)
@@ -1379,12 +1379,41 @@
 
 
 /* 
-  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;
 }
 
 



More information about the samba-cvs mailing list