From: Günther Deschner Date: Tue, 7 Jan 2020 14:52:40 +0000 (+0100) Subject: librpc: fix IDL for spoolss_GetCorePrinterDrivers() X-Git-Tag: ldb-2.1.0~85 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e17c8e1b405690d7d38443c8f18c489fc98c1011;p=thirdparty%2Fsamba.git librpc: fix IDL for spoolss_GetCorePrinterDrivers() The charset determination makes it more difficult to deal with the real REG_MULTI_SZ nature of that element. Guenther Signed-off-by: Guenther Deschner Reviewed-by: Jeremy Allison --- diff --git a/librpc/idl/spoolss.idl b/librpc/idl/spoolss.idl index 9d294969a0a..f2e30ebdf3d 100644 --- a/librpc/idl/spoolss.idl +++ b/librpc/idl/spoolss.idl @@ -3296,7 +3296,7 @@ cpp_quote("#define spoolss_security_descriptor security_descriptor") [in,unique] [string,charset(UTF16)] uint16 *servername, [in,ref] [string,charset(UTF16)] uint16 *architecture, [in] uint32 core_driver_size, - [in,size_is(core_driver_size)] [charset(UTF16)] uint16 *core_driver_dependencies, + [in,size_is(core_driver_size)] uint16 *core_driver_dependencies, [in] uint32 core_printer_driver_count, [out,size_is(core_printer_driver_count)] spoolss_CorePrinterDriver *core_printer_drivers ); diff --git a/source4/torture/rpc/spoolss.c b/source4/torture/rpc/spoolss.c index bf3a9377322..317cdbfd466 100644 --- a/source4/torture/rpc/spoolss.c +++ b/source4/torture/rpc/spoolss.c @@ -7968,7 +7968,7 @@ static bool test_get_core_printer_drivers_arch_guid(struct torture_context *tctx { struct spoolss_GetCorePrinterDrivers r; struct spoolss_CorePrinterDriver core_printer_drivers; - DATA_BLOB blob; + DATA_BLOB blob = data_blob_talloc_zero(tctx, 2); const char **s; struct dcerpc_binding_handle *b = p->binding_handle; struct GUID guid; @@ -7978,7 +7978,7 @@ static bool test_get_core_printer_drivers_arch_guid(struct torture_context *tctx r.in.servername = talloc_asprintf(tctx, "\\\\%s", dcerpc_server_name(p)); r.in.architecture = "foobar"; r.in.core_driver_size = 0; - r.in.core_driver_dependencies = ""; + r.in.core_driver_dependencies = (uint16_t *)blob.data; r.in.core_printer_driver_count = 0; r.out.core_printer_drivers = &core_printer_drivers; @@ -7995,8 +7995,8 @@ static bool test_get_core_printer_drivers_arch_guid(struct torture_context *tctx push_reg_multi_sz(tctx, &blob, s), "push_reg_multi_sz failed"); - r.in.core_driver_size = blob.length; - r.in.core_driver_dependencies = s[0]; + r.in.core_driver_size = blob.length/2; + r.in.core_driver_dependencies = (uint16_t *)blob.data; r.in.core_printer_driver_count = 1; r.out.core_printer_drivers = talloc_zero_array(tctx, struct spoolss_CorePrinterDriver, r.in.core_printer_driver_count); @@ -8022,8 +8022,8 @@ static bool test_get_core_printer_drivers_arch_guid(struct torture_context *tctx push_reg_multi_sz(tctx, &blob, s), "push_reg_multi_sz failed"); - r.in.core_driver_size = blob.length; - r.in.core_driver_dependencies = s[0]; + r.in.core_driver_size = blob.length/2; + r.in.core_driver_dependencies = (uint16_t *)blob.data; r.in.core_printer_driver_count = 1; r.out.core_printer_drivers = talloc_zero_array(tctx, struct spoolss_CorePrinterDriver, r.in.core_printer_driver_count);