spoolss: Use correct values for secdesc and devmode pointers
authorGünther Deschner <gd@samba.org>
Fri, 11 Nov 2016 15:29:20 +0000 (16:29 +0100)
committerKarolin Seeger <kseeger@samba.org>
Mon, 2 Jan 2017 10:56:51 +0000 (11:56 +0100)
ULONG_PTR needs to be decoded as a uint3264 and not as a 'uint32 *'.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=11197

Guenther

Pair-Programmed-With: Andreas Schneider <asn@samba.org>

Signed-off-by: Guenther Deschner <gd@samba.org>
Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
(cherry picked from commit 73f664710a8c9b312a54d0cf41d2f4440c8b42eb)

librpc/idl/spoolss.idl
source3/rpc_client/init_spoolss.c
source3/rpcclient/cmd_spoolss.c
source4/torture/rpc/spoolss.c
source4/torture/rpc/spoolss_notify.c

index 5bbc2670a06898ced83b9fddc771d064c3279586..d17fcf4e4d89061e7685efde60964a956261b7f2 100644 (file)
@@ -1011,9 +1011,9 @@ cpp_quote("#define spoolss_security_descriptor security_descriptor")
                [string,charset(UTF16)] uint16 *print_processor;
                [string,charset(UTF16)] uint16 *parameters;
                [string,charset(UTF16)] uint16 *driver_name;
-               uint32 *_devmode_ptr; /* pointer to truncated devicemode */
+               uint3264 _devmode_ptr; /* ULONG_PTR */
                [string,charset(UTF16)] uint16 *text_status;
-               uint32 *_secdesc_ptr;
+               uint3264 _secdesc_ptr; /* ULONG_PTR */
                spoolss_JobStatus status;
                [range(0,99)] uint32 priority;
                uint32 position;
@@ -1037,9 +1037,9 @@ cpp_quote("#define spoolss_security_descriptor security_descriptor")
                [string,charset(UTF16)] uint16 *print_processor;
                [string,charset(UTF16)] uint16 *parameters;
                [string,charset(UTF16)] uint16 *driver_name;
-               uint32 *_devmode_ptr; /* pointer to truncated devicemode */
+               uint3264 _devmode_ptr; /* ULONG_PTR */
                [string,charset(UTF16)] uint16 *text_status;
-               uint32 *_secdesc_ptr;
+               uint3264 _secdesc_ptr; /* ULONG_PTR */
                spoolss_JobStatus status;
                [range(0,99)] uint32 priority;
                uint32 position;
@@ -1201,12 +1201,12 @@ cpp_quote("#define spoolss_security_descriptor security_descriptor")
                [string,charset(UTF16)] uint16 *drivername;
                [string,charset(UTF16)] uint16 *comment;
                [string,charset(UTF16)] uint16 *location;
-               uint32 *devmode_ptr;
+               uint3264 devmode_ptr; /* ULONG_PTR */
                [string,charset(UTF16)] uint16 *sepfile;
                [string,charset(UTF16)] uint16 *printprocessor;
                [string,charset(UTF16)] uint16 *datatype;
                [string,charset(UTF16)] uint16 *parameters;
-               uint32 *secdesc_ptr;
+               uint3264 secdesc_ptr; /* ULONG_PTR */
                spoolss_PrinterAttributes attributes;
                [range(0,99)] uint32 priority;
                uint32 defaultpriority;
@@ -1218,7 +1218,7 @@ cpp_quote("#define spoolss_security_descriptor security_descriptor")
        } spoolss_SetPrinterInfo2;
 
        typedef struct {
-               uint32 *sec_desc_ptr;
+               uint3264 sec_desc_ptr; /* ULONG_PTR */
        } spoolss_SetPrinterInfo3;
 
        typedef struct {
@@ -1245,11 +1245,11 @@ cpp_quote("#define spoolss_security_descriptor security_descriptor")
        } spoolss_SetPrinterInfo7;
 
        typedef struct {
-               uint32 *devmode_ptr;
+               uint3264 devmode_ptr; /* ULONG_PTR */
        } spoolss_SetPrinterInfo8;
 
        typedef struct {
-               uint32 *devmode_ptr;
+               uint3264 devmode_ptr; /* ULONG_PTR */
        } spoolss_SetPrinterInfo9;
 
        typedef [ms_union,switch_type(uint32)] union {
@@ -2307,7 +2307,7 @@ cpp_quote("#define spoolss_security_descriptor security_descriptor")
        /* Function: 0x27 */
        WERROR spoolss_DeletePort(
               [in,unique] [string,charset(UTF16)] uint16 *server_name,
-              [in] uint32 ptr,
+              [in] uint3264 ptr, /* ULONG_PTR */
               [in,ref] [string,charset(UTF16)] uint16 *port_name
        );
 
index 7e29cdc7ca166ee7dd274a2b86cf27c2da44bbbb..8b66227ce78393d7a0dd0030152a7e7165594c60 100644 (file)
@@ -107,12 +107,12 @@ void spoolss_printerinfo2_to_setprinterinfo2(const struct spoolss_PrinterInfo2 *
        s->drivername           = i->drivername;
        s->comment              = i->comment;
        s->location             = i->location;
-       s->devmode_ptr          = NULL;
+       s->devmode_ptr          = 0;
        s->sepfile              = i->sepfile;
        s->printprocessor       = i->printprocessor;
        s->datatype             = i->datatype;
        s->parameters           = i->parameters;
-       s->secdesc_ptr          = NULL;
+       s->secdesc_ptr          = 0;
        s->attributes           = i->attributes;
        s->priority             = i->priority;
        s->defaultpriority      = i->defaultpriority;
index 3191e80ffac59e4bcf320ff29491c8d2bcc129e7..192a4e430b342deb47f284d845e8b814dcf8b463 100644 (file)
@@ -1825,8 +1825,8 @@ static WERROR cmd_spoolss_addprinterex(struct rpc_pipe_client *cli,
        info2.comment           = "Created by rpcclient";
        info2.printprocessor    = "winprint";
        info2.datatype          = "RAW";
-       info2.devmode_ptr       = NULL;
-       info2.secdesc_ptr       = NULL;
+       info2.devmode_ptr       = 0;
+       info2.secdesc_ptr       = 0;
        info2.attributes        = PRINTER_ATTRIBUTE_SHARED;
        info2.priority          = 0;
        info2.defaultpriority   = 0;
index 4bc99f241f984820ba8139fd40b28a10b4402b97..293e3534e8d74c1da8f0b431141dd1a47a7cb3ae 100644 (file)
@@ -244,12 +244,12 @@ static bool PrinterInfo_to_SetPrinterInfo(struct torture_context *tctx,
                s->info2->drivername            = i->info2.drivername;
                s->info2->comment               = i->info2.comment;
                s->info2->location              = i->info2.location;
-               s->info2->devmode_ptr           = NULL;
+               s->info2->devmode_ptr           = 0;
                s->info2->sepfile               = i->info2.sepfile;
                s->info2->printprocessor        = i->info2.printprocessor;
                s->info2->datatype              = i->info2.datatype;
                s->info2->parameters            = i->info2.parameters;
-               s->info2->secdesc_ptr           = NULL;
+               s->info2->secdesc_ptr           = 0;
                s->info2->attributes            = i->info2.attributes;
                s->info2->priority              = i->info2.priority;
                s->info2->defaultpriority       = i->info2.defaultpriority;
@@ -1448,8 +1448,8 @@ static bool test_SetPrinter_errors(struct torture_context *tctx,
 static void clear_info2(struct spoolss_SetPrinterInfoCtr *r)
 {
        if ((r->level == 2) && (r->info.info2)) {
-               r->info.info2->secdesc_ptr = NULL;
-               r->info.info2->devmode_ptr = NULL;
+               r->info.info2->secdesc_ptr = 0;
+               r->info.info2->devmode_ptr = 0;
        }
 }
 
@@ -1922,7 +1922,7 @@ static bool test_sd_set_level(struct torture_context *tctx,
        }
        case 3: {
 
-               info3.sec_desc_ptr = NULL;
+               info3.sec_desc_ptr = 0;
 
                info_ctr.level = 3;
                info_ctr.info.info3 = &info3;
@@ -2093,7 +2093,7 @@ static bool test_devmode_set_level(struct torture_context *tctx,
        case 8: {
                struct spoolss_SetPrinterInfo8 info8;
 
-               info8.devmode_ptr = NULL;
+               info8.devmode_ptr = 0;
 
                info_ctr.level = 8;
                info_ctr.info.info8 = &info8;
index 945e653af75731a30f437d4f3a0983e723cc9f01..928b61935aa34562b841a2a69c690a423f512759 100644 (file)
@@ -391,12 +391,12 @@ static bool test_SetPrinter(struct torture_context *tctx,
        info2.drivername        = info.info2.drivername;
        info2.comment           = talloc_asprintf(tctx, "torture_comment %d\n", (int)time(NULL));
        info2.location          = info.info2.location;
-       info2.devmode_ptr       = NULL;
+       info2.devmode_ptr       = 0;
        info2.sepfile           = info.info2.sepfile;
        info2.printprocessor    = info.info2.printprocessor;
        info2.datatype          = info.info2.datatype;
        info2.parameters        = info.info2.parameters;
-       info2.secdesc_ptr       = NULL;
+       info2.secdesc_ptr       = 0;
        info2.attributes        = info.info2.attributes;
        info2.priority          = info.info2.priority;
        info2.defaultpriority   = info.info2.defaultpriority;