librpc: pidlify spoolss_EnumPerMachineConnections
authorGünther Deschner <gd@samba.org>
Mon, 23 Dec 2019 15:53:37 +0000 (16:53 +0100)
committerJeremy Allison <jra@samba.org>
Wed, 8 Jan 2020 23:51:31 +0000 (23:51 +0000)
Guenther

Signed-off-by: Guenther Deschner <gd@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
librpc/idl/spoolss.idl
librpc/ndr/ndr_spoolss_buf.c
librpc/ndr/ndr_spoolss_buf.h
source3/rpcclient/cmd_spoolss.c
source4/torture/rpc/spoolss.c

index 0e7ae333001ce8604b5554e9efd3da637a4fc7d7..afe60d2faf05c08ef7ed6605e42d73578ed12691 100644 (file)
@@ -3066,7 +3066,7 @@ cpp_quote("#define spoolss_security_descriptor security_descriptor")
 
        /******************/
        /* Function: 0x57 */
-       WERROR spoolss_EnumPerMachineConnections(
+       [public,noopnum,noprint] WERROR _spoolss_EnumPerMachineConnections(
                [in,unique] [string,charset(UTF16)] uint16 *server,
                [in,unique] DATA_BLOB *buffer,
                [in] uint32 offered,
@@ -3074,6 +3074,18 @@ cpp_quote("#define spoolss_security_descriptor security_descriptor")
                [out,ref] uint32 *needed,
                [out,ref] uint32 *count
        );
+       [public,noopnum,noprint] void __spoolss_EnumPerMachineConnections(
+               [in] uint32 count,
+               [out] spoolss_PrinterInfo4 info[count]
+       );
+       [nopull,nopush] WERROR spoolss_EnumPerMachineConnections(
+               [in,unique] [string,charset(UTF16)] uint16 *server,
+               [in,unique] DATA_BLOB *buffer,
+               [in] uint32 offered,
+               [out,ref] uint32 *count,
+               [out,ref,size_is(,*count)] spoolss_PrinterInfo4 **info,
+               [out,ref] uint32 *needed
+       );
 
        /******************/
        /* Function: 0x58 */
index 1efbdf1ea4c33a67f0ba93a8ee073ce648908ae9..393d7addeb531d9244a068e48ff3c001de891650 100644 (file)
@@ -566,6 +566,34 @@ uint32_t ndr_size_spoolss_EnumPrintProcessorDataTypes_info(TALLOC_CTX *mem_ctx,
        NDR_SPOOLSS_SIZE_ENUM_LEVEL(spoolss_EnumPrintProcessorDataTypes);
 }
 
+/*
+  spoolss_EnumPerMachineConnections
+*/
+enum ndr_err_code ndr_push_spoolss_EnumPerMachineConnections(struct ndr_push *ndr, int flags, const struct spoolss_EnumPerMachineConnections *r)
+{
+       NDR_SPOOLSS_PUSH_ENUM(spoolss_EnumPerMachineConnections,{
+               _r.in.server    = r->in.server;
+       },{
+               _r.in.server    = r->in.server;
+       });
+       return NDR_ERR_SUCCESS;
+}
+
+enum ndr_err_code ndr_pull_spoolss_EnumPerMachineConnections(struct ndr_pull *ndr, int flags, struct spoolss_EnumPerMachineConnections *r)
+{
+       NDR_SPOOLSS_PULL_ENUM(spoolss_EnumPerMachineConnections,{
+               r->in.server    = _r.in.server;
+       },{
+               _r.in.server    = r->in.server;
+       });
+       return NDR_ERR_SUCCESS;
+}
+
+uint32_t ndr_size_spoolss_EnumPerMachineConnections_info(TALLOC_CTX *mem_ctx, uint32_t count, struct spoolss_PrinterInfo4 *info)
+{
+       NDR_SPOOLSS_SIZE_ENUM(spoolss_EnumPerMachineConnections);
+}
+
 /*
   spoolss_EnumPrinterDataEx
 */
index b0fde305c3ee0586935253f27ae40a6d749af756..2ede07ac79fabe0417b2b3878460c6fff84e43ad 100644 (file)
@@ -77,6 +77,7 @@ enum ndr_err_code ndr_push_spoolss_security_descriptor(struct ndr_push *ndr, int
 _PUBLIC_ void ndr_print_spoolss_Time(struct ndr_print *ndr, const char *name, const struct spoolss_Time *r);
 _PUBLIC_ uint32_t ndr_spoolss_PrinterEnumValues_align(enum winreg_Type type);
 
+uint32_t ndr_size_spoolss_EnumPerMachineConnections_info(TALLOC_CTX *mem_ctx, uint32_t count, struct spoolss_PrinterInfo4 *info);
 #undef _PRINTF_ATTRIBUTE
 #define _PRINTF_ATTRIBUTE(a1, a2)
 
index 700813eaa9e6a599f4c1bad388df271ee5e74e47..bc37393291acefa6cabef67d5772eef6743c6b02 100644 (file)
@@ -4003,7 +4003,7 @@ static WERROR cmd_spoolss_enum_permachineconnections(struct rpc_pipe_client *cli
        struct dcerpc_binding_handle *b = cli->binding_handle;
        const char *servername = cli->srv_name_slash;
        DATA_BLOB in = data_blob_null;
-       DATA_BLOB out = data_blob_null;
+       struct spoolss_PrinterInfo4 *info;
        uint32_t needed, count;
 
        if (argc > 2) {
@@ -4019,9 +4019,9 @@ static WERROR cmd_spoolss_enum_permachineconnections(struct rpc_pipe_client *cli
                                                          servername,
                                                          &in,
                                                          in.length,
-                                                         &out,
-                                                         &needed,
                                                          &count,
+                                                         &info,
+                                                         &needed,
                                                          &result);
        if (!NT_STATUS_IS_OK(status)) {
                return ntstatus_to_werror(status);
@@ -4030,13 +4030,13 @@ static WERROR cmd_spoolss_enum_permachineconnections(struct rpc_pipe_client *cli
        if (W_ERROR_EQUAL(result, WERR_INSUFFICIENT_BUFFER)) {
                in = data_blob_talloc_zero(mem_ctx, needed);
                status = dcerpc_spoolss_EnumPerMachineConnections(b, mem_ctx,
-                                                         servername,
-                                                         &in,
-                                                         in.length,
-                                                         &out,
-                                                         &needed,
-                                                         &count,
-                                                         &result);
+                                                                 servername,
+                                                                 &in,
+                                                                 in.length,
+                                                                 &count,
+                                                                 &info,
+                                                                 &needed,
+                                                                 &result);
                if (!NT_STATUS_IS_OK(status)) {
                        return ntstatus_to_werror(status);
                }
index cb5eb9f40335f85e02290e410efb955d38adf769..9dc52dcfd14d19d732cf393fdfdbd4269561ce5d 100644 (file)
@@ -6196,7 +6196,7 @@ static bool test_EnumPerMachineConnections(struct torture_context *tctx,
 {
        struct spoolss_EnumPerMachineConnections r;
        DATA_BLOB blob = data_blob_null;
-       DATA_BLOB info = data_blob_null;
+       struct spoolss_PrinterInfo4 *info;
        uint32_t needed;
        uint32_t count;