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)
committerJeremy Allison <jra@samba.org>
Fri, 11 Nov 2016 21:57:22 +0000 (22:57 +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>
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 df19bee6334a3a723ff41a3645818abd6728c6e7..6ab8f0331d0fedc3728ca696bdce3df704e0fc6a 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 512cc567aae44a02c2b1b0eafac4e31f6aeb2ed9..d80d453fb23eaaf415dc4f388dd4ca13d2c5b565 100644 (file)
@@ -157,12 +157,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 55d41c8342c8306fe8db51b291f1e057e8f89b96..00dc2e0e817cfadb43db8b7c6a9b237dc0455f44 100644 (file)
@@ -1893,8 +1893,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 dc3391788fd84033f481e064f236d8f618eb4933..28abd14b7de7467bbc4faeaff6c79349365fdb05 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;
@@ -1459,8 +1459,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;
        }
 }
 
@@ -1933,7 +1933,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;
@@ -2104,7 +2104,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;
@@ -8231,7 +8231,7 @@ static bool test_set_printer_printserverhandle(struct torture_context *tctx,
 
        secdesc_ctr.sd = sd;
 
-       info3.sec_desc_ptr = NULL;
+       info3.sec_desc_ptr = 0;
 
        info_ctr.level = 3;
        info_ctr.info.info3 = &info3;
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;