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;
 }
 
 

Reply via email to