librpc: fix IDL for spoolss_GetCorePrinterDrivers()
authorGünther Deschner <gd@samba.org>
Tue, 7 Jan 2020 14:52:40 +0000 (15:52 +0100)
committerJeremy Allison <jra@samba.org>
Wed, 8 Jan 2020 23:51:30 +0000 (23:51 +0000)
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 <gd@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
librpc/idl/spoolss.idl
source4/torture/rpc/spoolss.c

index 9d294969a0ab48f3d777e2e9676078ea91a5ac48..f2e30ebdf3d16d5d7374d0f84ece96925a4ae8b2 100644 (file)
@@ -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
        );
index bf3a93773225528cfc65089eb1e13369232e996c..317cdbfd466113576797b0b5b25870464c65aca7 100644 (file)
@@ -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);