From: Günther Deschner Date: Mon, 23 Dec 2019 15:53:37 +0000 (+0100) Subject: librpc: pidlify spoolss_EnumPerMachineConnections X-Git-Tag: ldb-2.1.0~74 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c433dac59818d580bdccb0d0e0daac71ccf01ee2;p=thirdparty%2Fsamba.git librpc: pidlify spoolss_EnumPerMachineConnections Guenther Signed-off-by: Guenther Deschner Reviewed-by: Jeremy Allison --- diff --git a/librpc/idl/spoolss.idl b/librpc/idl/spoolss.idl index 0e7ae333001..afe60d2faf0 100644 --- a/librpc/idl/spoolss.idl +++ b/librpc/idl/spoolss.idl @@ -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 */ diff --git a/librpc/ndr/ndr_spoolss_buf.c b/librpc/ndr/ndr_spoolss_buf.c index 1efbdf1ea4c..393d7addeb5 100644 --- a/librpc/ndr/ndr_spoolss_buf.c +++ b/librpc/ndr/ndr_spoolss_buf.c @@ -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 */ diff --git a/librpc/ndr/ndr_spoolss_buf.h b/librpc/ndr/ndr_spoolss_buf.h index b0fde305c3e..2ede07ac79f 100644 --- a/librpc/ndr/ndr_spoolss_buf.h +++ b/librpc/ndr/ndr_spoolss_buf.h @@ -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) diff --git a/source3/rpcclient/cmd_spoolss.c b/source3/rpcclient/cmd_spoolss.c index 700813eaa9e..bc37393291a 100644 --- a/source3/rpcclient/cmd_spoolss.c +++ b/source3/rpcclient/cmd_spoolss.c @@ -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); } diff --git a/source4/torture/rpc/spoolss.c b/source4/torture/rpc/spoolss.c index cb5eb9f4033..9dc52dcfd14 100644 --- a/source4/torture/rpc/spoolss.c +++ b/source4/torture/rpc/spoolss.c @@ -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;