The Samba-Bugzilla – Attachment 5634 Details for
Bug 7363
3.5.2: rpcclient -c setdriver fails on 64-bit hosts
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
revert devmode_ptr and secdesc_ptr fields in spoolss_SetPrinterInfo2
patch (text/plain), 11.31 KB, created by
Steven Plite
on 2010-04-15 14:39:25 UTC
(
hide
)
Description:
revert devmode_ptr and secdesc_ptr fields in spoolss_SetPrinterInfo2
Filename:
MIME Type:
Creator:
Steven Plite
Created:
2010-04-15 14:39:25 UTC
Size:
11.31 KB
patch
obsolete
>--- ./source4/torture/rpc/spoolss.c.orig 2010-04-01 09:26:22.000000000 -0400 >+++ ./source4/torture/rpc/spoolss.c 2010-04-15 12:56:53.000000000 -0400 >@@ -1130,8 +1130,8 @@ > static void clear_info2(struct spoolss_SetPrinterInfoCtr *r) > { > if ((r->level == 2) && (r->info.info2)) { >- r->info.info2->secdesc_ptr = 0; >- r->info.info2->devmode_ptr = 0; >+ r->info.info2->secdesc = NULL; >+ r->info.info2->devmode = NULL; > } > } > >@@ -2812,12 +2812,12 @@ > info2.drivername = info.info2.drivername; > info2.comment = "torture_comment"; > info2.location = info.info2.location; >- info2.devmode_ptr = 0; >+ info2.devmode = NULL; > info2.sepfile = info.info2.sepfile; > info2.printprocessor = info.info2.printprocessor; > info2.datatype = info.info2.datatype; > info2.parameters = info.info2.parameters; >- info2.secdesc_ptr = 0; >+ info2.secdesc = NULL; > info2.attributes = info.info2.attributes; > info2.priority = info.info2.priority; > info2.defaultpriority = info.info2.defaultpriority; >--- ./source3/rpcclient/cmd_spoolss.c.orig 2010-04-01 09:26:22.000000000 -0400 >+++ ./source3/rpcclient/cmd_spoolss.c 2010-04-15 12:56:15.000000000 -0400 >@@ -1696,8 +1696,8 @@ > info2.comment = "Created by rpcclient"; > info2.printprocessor = "winprint"; > info2.datatype = "RAW"; >- info2.devmode_ptr = 0; >- info2.secdesc_ptr = 0; >+ info2.devmode = NULL; >+ info2.secdesc = NULL; > info2.attributes = PRINTER_ATTRIBUTE_SHARED; > info2.priority = 0; > info2.defaultpriority = 0; >--- ./librpc/idl/spoolss.idl.orig 2010-04-01 09:26:22.000000000 -0400 >+++ ./librpc/idl/spoolss.idl 2010-04-15 12:54:36.000000000 -0400 >@@ -894,12 +894,12 @@ > [string,charset(UTF16)] uint16 *drivername; > [string,charset(UTF16)] uint16 *comment; > [string,charset(UTF16)] uint16 *location; >- uint32 devmode_ptr; >+ [relative,subcontext(0),flag(NDR_ALIGN4)] spoolss_DeviceMode *devmode; > [string,charset(UTF16)] uint16 *sepfile; > [string,charset(UTF16)] uint16 *printprocessor; > [string,charset(UTF16)] uint16 *datatype; > [string,charset(UTF16)] uint16 *parameters; >- uint32 secdesc_ptr; >+ [relative,subcontext(0),flag(NDR_ALIGN4)] spoolss_security_descriptor *secdesc; > spoolss_PrinterAttributes attributes; > [range(0,99)] uint32 priority; > uint32 defaultpriority; >--- ./librpc/gen_ndr/ndr_spoolss.c.orig 2010-04-01 09:26:22.000000000 -0400 >+++ ./librpc/gen_ndr/ndr_spoolss.c 2010-04-15 13:20:09.000000000 -0400 >@@ -6666,12 +6666,22 @@ > NDR_CHECK(ndr_push_unique_ptr(ndr, r->drivername)); > NDR_CHECK(ndr_push_unique_ptr(ndr, r->comment)); > NDR_CHECK(ndr_push_unique_ptr(ndr, r->location)); >- NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->devmode_ptr)); >+ { >+ uint32_t _flags_save_spoolss_DeviceMode = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4); >+ NDR_CHECK(ndr_push_relative_ptr1(ndr, r->devmode)); >+ ndr->flags = _flags_save_spoolss_DeviceMode; >+ } > NDR_CHECK(ndr_push_unique_ptr(ndr, r->sepfile)); > NDR_CHECK(ndr_push_unique_ptr(ndr, r->printprocessor)); > NDR_CHECK(ndr_push_unique_ptr(ndr, r->datatype)); > NDR_CHECK(ndr_push_unique_ptr(ndr, r->parameters)); >- NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->secdesc_ptr)); >+ { >+ uint32_t _flags_save_spoolss_security_descriptor = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4); >+ NDR_CHECK(ndr_push_relative_ptr1(ndr, r->secdesc)); >+ ndr->flags = _flags_save_spoolss_security_descriptor; >+ } > NDR_CHECK(ndr_push_spoolss_PrinterAttributes(ndr, NDR_SCALARS, r->attributes)); > NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->priority)); > NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->defaultpriority)); >@@ -6725,6 +6735,21 @@ > NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, ndr_charset_length(r->location, CH_UTF16))); > NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->location, ndr_charset_length(r->location, CH_UTF16), sizeof(uint16_t), CH_UTF16)); > } >+ { >+ uint32_t _flags_save_spoolss_DeviceMode = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4); >+ if (r->devmode) { >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->devmode)); >+ { >+ struct ndr_push *_ndr_devmode; >+ NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_devmode, 0, -1)); >+ NDR_CHECK(ndr_push_spoolss_DeviceMode(_ndr_devmode, NDR_SCALARS, r->devmode)); >+ NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_devmode, 0, -1)); >+ } >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->devmode)); >+ } >+ ndr->flags = _flags_save_spoolss_DeviceMode; >+ } > if (r->sepfile) { > NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, ndr_charset_length(r->sepfile, CH_UTF16))); > NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, 0)); >@@ -6749,6 +6774,21 @@ > NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, ndr_charset_length(r->parameters, CH_UTF16))); > NDR_CHECK(ndr_push_charset(ndr, NDR_SCALARS, r->parameters, ndr_charset_length(r->parameters, CH_UTF16), sizeof(uint16_t), CH_UTF16)); > } >+ { >+ uint32_t _flags_save_spoolss_security_descriptor = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4); >+ if (r->secdesc) { >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->secdesc)); >+ { >+ struct ndr_push *_ndr_secdesc; >+ NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_secdesc, 0, -1)); >+ NDR_CHECK(ndr_push_spoolss_security_descriptor(_ndr_secdesc, NDR_SCALARS|NDR_BUFFERS, r->secdesc)); >+ NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_secdesc, 0, -1)); >+ } >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->secdesc)); >+ } >+ ndr->flags = _flags_save_spoolss_security_descriptor; >+ } > } > return NDR_ERR_SUCCESS; > } >@@ -6769,6 +6809,8 @@ > TALLOC_CTX *_mem_save_comment_0; > uint32_t _ptr_location; > TALLOC_CTX *_mem_save_location_0; >+ uint32_t _ptr_devmode; >+ TALLOC_CTX *_mem_save_devmode_0; > uint32_t _ptr_sepfile; > TALLOC_CTX *_mem_save_sepfile_0; > uint32_t _ptr_printprocessor; >@@ -6777,6 +6819,8 @@ > TALLOC_CTX *_mem_save_datatype_0; > uint32_t _ptr_parameters; > TALLOC_CTX *_mem_save_parameters_0; >+ uint32_t _ptr_secdesc; >+ TALLOC_CTX *_mem_save_secdesc_0; > if (ndr_flags & NDR_SCALARS) { > NDR_CHECK(ndr_pull_align(ndr, 5)); > NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_servername)); >@@ -6821,7 +6865,18 @@ > } else { > r->location = NULL; > } >- NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->devmode_ptr)); >+ { >+ uint32_t _flags_save_spoolss_DeviceMode = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4); >+ NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_devmode)); >+ if (_ptr_devmode) { >+ NDR_PULL_ALLOC(ndr, r->devmode); >+ NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->devmode, _ptr_devmode)); >+ } else { >+ r->devmode = NULL; >+ } >+ ndr->flags = _flags_save_spoolss_DeviceMode; >+ } > NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_sepfile)); > if (_ptr_sepfile) { > NDR_PULL_ALLOC(ndr, r->sepfile); >@@ -6846,7 +6901,18 @@ > } else { > r->parameters = NULL; > } >- NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->secdesc_ptr)); >+ { >+ uint32_t _flags_save_spoolss_security_descriptor = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4); >+ NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_secdesc)); >+ if (_ptr_secdesc) { >+ NDR_PULL_ALLOC(ndr, r->secdesc); >+ NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->secdesc, _ptr_secdesc)); >+ } else { >+ r->secdesc = NULL; >+ } >+ ndr->flags = _flags_save_spoolss_security_descriptor; >+ } > NDR_CHECK(ndr_pull_spoolss_PrinterAttributes(ndr, NDR_SCALARS, &r->attributes)); > NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->priority)); > if (r->priority > 99) { >@@ -6945,6 +7011,26 @@ > NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->location, ndr_get_array_length(ndr, &r->location), sizeof(uint16_t), CH_UTF16)); > NDR_PULL_SET_MEM_CTX(ndr, _mem_save_location_0, 0); > } >+ { >+ uint32_t _flags_save_spoolss_DeviceMode = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4); >+ if (r->devmode) { >+ uint32_t _relative_save_offset; >+ _relative_save_offset = ndr->offset; >+ NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->devmode)); >+ _mem_save_devmode_0 = NDR_PULL_GET_MEM_CTX(ndr); >+ NDR_PULL_SET_MEM_CTX(ndr, r->devmode, 0); >+ { >+ struct ndr_pull *_ndr_devmode; >+ NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_devmode, 0, -1)); >+ NDR_CHECK(ndr_pull_spoolss_DeviceMode(_ndr_devmode, NDR_SCALARS, r->devmode)); >+ NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_devmode, 0, -1)); >+ } >+ NDR_PULL_SET_MEM_CTX(ndr, _mem_save_devmode_0, 0); >+ ndr->offset = _relative_save_offset; >+ } >+ ndr->flags = _flags_save_spoolss_DeviceMode; >+ } > if (r->sepfile) { > _mem_save_sepfile_0 = NDR_PULL_GET_MEM_CTX(ndr); > NDR_PULL_SET_MEM_CTX(ndr, r->sepfile, 0); >@@ -6993,6 +7079,26 @@ > NDR_CHECK(ndr_pull_charset(ndr, NDR_SCALARS, &r->parameters, ndr_get_array_length(ndr, &r->parameters), sizeof(uint16_t), CH_UTF16)); > NDR_PULL_SET_MEM_CTX(ndr, _mem_save_parameters_0, 0); > } >+ { >+ uint32_t _flags_save_spoolss_security_descriptor = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4); >+ if (r->secdesc) { >+ uint32_t _relative_save_offset; >+ _relative_save_offset = ndr->offset; >+ NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->secdesc)); >+ _mem_save_secdesc_0 = NDR_PULL_GET_MEM_CTX(ndr); >+ NDR_PULL_SET_MEM_CTX(ndr, r->secdesc, 0); >+ { >+ struct ndr_pull *_ndr_secdesc; >+ NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_secdesc, 0, -1)); >+ NDR_CHECK(ndr_pull_spoolss_security_descriptor(_ndr_secdesc, NDR_SCALARS|NDR_BUFFERS, r->secdesc)); >+ NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_secdesc, 0, -1)); >+ } >+ NDR_PULL_SET_MEM_CTX(ndr, _mem_save_secdesc_0, 0); >+ ndr->offset = _relative_save_offset; >+ } >+ ndr->flags = _flags_save_spoolss_security_descriptor; >+ } > } > return NDR_ERR_SUCCESS; > } >@@ -7043,7 +7149,12 @@ > ndr_print_string(ndr, "location", r->location); > } > ndr->depth--; >- ndr_print_uint32(ndr, "devmode_ptr", r->devmode_ptr); >+ ndr_print_ptr(ndr, "devmode", r->devmode); >+ ndr->depth++; >+ if (r->devmode) { >+ ndr_print_spoolss_DeviceMode(ndr, "devmode", r->devmode); >+ } >+ ndr->depth--; > ndr_print_ptr(ndr, "sepfile", r->sepfile); > ndr->depth++; > if (r->sepfile) { >@@ -7068,7 +7179,12 @@ > ndr_print_string(ndr, "parameters", r->parameters); > } > ndr->depth--; >- ndr_print_uint32(ndr, "secdesc_ptr", r->secdesc_ptr); >+ ndr_print_ptr(ndr, "secdesc", r->secdesc); >+ ndr->depth++; >+ if (r->secdesc) { >+ ndr_print_spoolss_security_descriptor(ndr, "secdesc", r->secdesc); >+ } >+ ndr->depth--; > ndr_print_spoolss_PrinterAttributes(ndr, "attributes", r->attributes); > ndr_print_uint32(ndr, "priority", r->priority); > ndr_print_uint32(ndr, "defaultpriority", r->defaultpriority); >--- ./librpc/gen_ndr/spoolss.h.orig 2010-04-01 09:26:22.000000000 -0400 >+++ ./librpc/gen_ndr/spoolss.h 2010-04-15 13:20:07.000000000 -0400 >@@ -1145,12 +1145,12 @@ > const char *drivername;/* [unique,charset(UTF16)] */ > const char *comment;/* [unique,charset(UTF16)] */ > const char *location;/* [unique,charset(UTF16)] */ >- uint32_t devmode_ptr; >+ struct spoolss_DeviceMode *devmode;/* [relative,subcontext(0),flag(LIBNDR_FLAG_ALIGN4)] */ > const char *sepfile;/* [unique,charset(UTF16)] */ > const char *printprocessor;/* [unique,charset(UTF16)] */ > const char *datatype;/* [unique,charset(UTF16)] */ > const char *parameters;/* [unique,charset(UTF16)] */ >- uint32_t secdesc_ptr; >+ struct spoolss_security_descriptor *secdesc;/* [relative,subcontext(0),flag(LIBNDR_FLAG_ALIGN4)] */ > uint32_t attributes; > uint32_t priority;/* [range(0,99)] */ > uint32_t defaultpriority;
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 7363
: 5634