The Samba-Bugzilla – Attachment 5392 Details for
Bug 6888
REGRESSION: printing support for 64 bit windows clients broken
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
patch for 3.4
spoolss_64bit-v3-4-test.patch (text/plain), 292.16 KB, created by
Guenther Deschner
on 2010-02-18 20:55:54 UTC
(
hide
)
Description:
patch for 3.4
Filename:
MIME Type:
Creator:
Guenther Deschner
Created:
2010-02-18 20:55:54 UTC
Size:
292.16 KB
patch
obsolete
>From e7461778805aa966e7f02400cbf47456e99a4a45 Mon Sep 17 00:00:00 2001 >From: =?UTF-8?q?G=C3=BCnther=20Deschner?= <gd@samba.org> >Date: Mon, 14 Dec 2009 14:08:34 +0100 >Subject: [PATCH 01/24] libndr: add ndr_push_relative_ptr2_start and ndr_push_relative_ptr2_end. > >Guenther >--- > librpc/ndr/libndr.h | 2 ++ > librpc/ndr/ndr.c | 24 ++++++++++++++++++++++++ > 2 files changed, 26 insertions(+), 0 deletions(-) > >diff --git a/librpc/ndr/libndr.h b/librpc/ndr/libndr.h >index 7109b73..9b71efb 100644 >--- a/librpc/ndr/libndr.h >+++ b/librpc/ndr/libndr.h >@@ -370,6 +370,8 @@ enum ndr_err_code ndr_push_setup_relative_base_offset1(struct ndr_push *ndr, con > enum ndr_err_code ndr_push_setup_relative_base_offset2(struct ndr_push *ndr, const void *p); > enum ndr_err_code ndr_push_relative_ptr1(struct ndr_push *ndr, const void *p); > enum ndr_err_code ndr_push_relative_ptr2(struct ndr_push *ndr, const void *p); >+enum ndr_err_code ndr_push_relative_ptr2_start(struct ndr_push *ndr, const void *p); >+enum ndr_err_code ndr_push_relative_ptr2_end(struct ndr_push *ndr, const void *p); > uint32_t ndr_pull_get_relative_base_offset(struct ndr_pull *ndr); > void ndr_pull_restore_relative_base_offset(struct ndr_pull *ndr, uint32_t offset); > enum ndr_err_code ndr_pull_setup_relative_base_offset1(struct ndr_pull *ndr, const void *p, uint32_t offset); >diff --git a/librpc/ndr/ndr.c b/librpc/ndr/ndr.c >index 8188ec9..9b4edac 100644 >--- a/librpc/ndr/ndr.c >+++ b/librpc/ndr/ndr.c >@@ -1063,6 +1063,30 @@ _PUBLIC_ enum ndr_err_code ndr_push_relative_ptr2(struct ndr_push *ndr, const vo > } > > /* >+ push a relative object - stage2 start >+ this is called during buffers processing >+*/ >+_PUBLIC_ enum ndr_err_code ndr_push_relative_ptr2_start(struct ndr_push *ndr, const void *p) >+{ >+ if (p == NULL) { >+ return NDR_ERR_SUCCESS; >+ } >+ return ndr_push_relative_ptr2(ndr, p); >+} >+ >+/* >+ push a relative object - stage2 end >+ this is called during buffers processing >+*/ >+_PUBLIC_ enum ndr_err_code ndr_push_relative_ptr2_end(struct ndr_push *ndr, const void *p) >+{ >+ if (p == NULL) { >+ return NDR_ERR_SUCCESS; >+ } >+ return NDR_ERR_SUCCESS; >+} >+ >+/* > get the current base for relative pointers for the pull > */ > _PUBLIC_ uint32_t ndr_pull_get_relative_base_offset(struct ndr_pull *ndr) >-- >1.6.6 > > >From 6a403142cf34dbc3ef760e7453b3d2c74e86ac50 Mon Sep 17 00:00:00 2001 >From: =?UTF-8?q?G=C3=BCnther=20Deschner?= <gd@samba.org> >Date: Mon, 14 Dec 2009 14:09:22 +0100 >Subject: [PATCH 02/24] pidl: use ndr_push_relative_ptr2_start and ndr_push_relative_ptr2_end. > >Guenther >(cherry picked from commit a049d75193b284fe9efb28d303ea46ba407e5a7a) >--- > pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm | 6 +++++- > 1 files changed, 5 insertions(+), 1 deletions(-) > >diff --git a/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm b/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm >index a5ee948..c822d67 100644 >--- a/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm >+++ b/pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm >@@ -567,17 +567,21 @@ sub ParseElementPushLevel > } > > if ($l->{TYPE} eq "POINTER" and $deferred) { >+ my $rel_var_name = $var_name; > if ($l->{POINTER_TYPE} ne "ref") { > $self->pidl("if ($var_name) {"); > $self->indent; > if ($l->{POINTER_TYPE} eq "relative") { >- $self->pidl("NDR_CHECK(ndr_push_relative_ptr2($ndr, $var_name));"); >+ $self->pidl("NDR_CHECK(ndr_push_relative_ptr2_start($ndr, $rel_var_name));"); > } > } > $var_name = get_value_of($var_name); > $self->ParseElementPushLevel($e, GetNextLevel($e, $l), $ndr, $var_name, $env, 1, 1); > > if ($l->{POINTER_TYPE} ne "ref") { >+ if ($l->{POINTER_TYPE} eq "relative") { >+ $self->pidl("NDR_CHECK(ndr_push_relative_ptr2_end($ndr, $rel_var_name));"); >+ } > $self->deindent; > $self->pidl("}"); > } >-- >1.6.6 > > >From 9df2c9cbda898b251ff6ad8919de31a17f7fd38f Mon Sep 17 00:00:00 2001 >From: =?UTF-8?q?G=C3=BCnther=20Deschner?= <gd@samba.org> >Date: Mon, 14 Dec 2009 14:17:05 +0100 >Subject: [PATCH 03/24] s3: re-run make full_idl. > >Guenther >--- > librpc/gen_ndr/ndr_drsblobs.c | 15 +- > librpc/gen_ndr/ndr_krb5pac.c | 3 +- > librpc/gen_ndr/ndr_security.c | 12 +- > librpc/gen_ndr/ndr_spoolss.c | 414 +++++++++++++++++++++++++++-------------- > librpc/gen_ndr/ndr_svcctl.c | 24 ++- > 5 files changed, 312 insertions(+), 156 deletions(-) > >diff --git a/librpc/gen_ndr/ndr_drsblobs.c b/librpc/gen_ndr/ndr_drsblobs.c >index 426ade2..78baa98 100644 >--- a/librpc/gen_ndr/ndr_drsblobs.c >+++ b/librpc/gen_ndr/ndr_drsblobs.c >@@ -515,8 +515,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_repsFromTo1(struct ndr_push *ndr, int ndr_fl > } > if (ndr_flags & NDR_BUFFERS) { > if (r->other_info) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->other_info)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->other_info)); > NDR_CHECK(ndr_push_repsFromTo1OtherInfo(ndr, NDR_SCALARS, r->other_info)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->other_info)); > } > } > ndr->flags = _flags_save_STRUCT; >@@ -1452,13 +1453,14 @@ static enum ndr_err_code ndr_push_package_PrimaryKerberosString(struct ndr_push > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NOTERM|LIBNDR_FLAG_REMAINING); > if (r->string) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->string)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->string)); > { > struct ndr_push *_ndr_string; > NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_string, 0, 2 * strlen_m(r->string))); > NDR_CHECK(ndr_push_string(_ndr_string, NDR_SCALARS, r->string)); > NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_string, 0, 2 * strlen_m(r->string))); > } >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->string)); > } > ndr->flags = _flags_save_string; > } >@@ -1548,13 +1550,14 @@ static enum ndr_err_code ndr_push_package_PrimaryKerberosKey3(struct ndr_push *n > uint32_t _flags_save_DATA_BLOB = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING); > if (r->value) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->value)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->value)); > { > struct ndr_push *_ndr_value; > NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_value, 0, (r->value?r->value->length:0))); > NDR_CHECK(ndr_push_DATA_BLOB(_ndr_value, NDR_SCALARS, *r->value)); > NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_value, 0, (r->value?r->value->length:0))); > } >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->value)); > } > ndr->flags = _flags_save_DATA_BLOB; > } >@@ -1770,13 +1773,14 @@ static enum ndr_err_code ndr_push_package_PrimaryKerberosKey4(struct ndr_push *n > uint32_t _flags_save_DATA_BLOB = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_REMAINING); > if (r->value) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->value)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->value)); > { > struct ndr_push *_ndr_value; > NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_value, 0, (r->value?r->value->length:0))); > NDR_CHECK(ndr_push_DATA_BLOB(_ndr_value, NDR_SCALARS, *r->value)); > NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_value, 0, (r->value?r->value->length:0))); > } >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->value)); > } > ndr->flags = _flags_save_DATA_BLOB; > } >@@ -2627,8 +2631,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_trustCurrentPasswords(struct ndr_push *ndr, > if (ndr_flags & NDR_BUFFERS) { > for (cntr_current_0 = 0; cntr_current_0 < r->count; cntr_current_0++) { > if (r->current[cntr_current_0]) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->current[cntr_current_0])); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->current[cntr_current_0])); > NDR_CHECK(ndr_push_AuthenticationInformation(ndr, NDR_SCALARS, r->current[cntr_current_0])); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->current[cntr_current_0])); > } > } > } >diff --git a/librpc/gen_ndr/ndr_krb5pac.c b/librpc/gen_ndr/ndr_krb5pac.c >index 27025c0..7a2a476 100644 >--- a/librpc/gen_ndr/ndr_krb5pac.c >+++ b/librpc/gen_ndr/ndr_krb5pac.c >@@ -520,13 +520,14 @@ _PUBLIC_ enum ndr_err_code ndr_push_PAC_BUFFER_RAW(struct ndr_push *ndr, int ndr > uint32_t _flags_save_DATA_BLOB_REM = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN8); > if (r->info) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->info)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->info)); > { > struct ndr_push *_ndr_info; > NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_info, 0, NDR_ROUND(r->ndr_size, 8))); > NDR_CHECK(ndr_push_DATA_BLOB_REM(_ndr_info, NDR_SCALARS, r->info)); > NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_info, 0, NDR_ROUND(r->ndr_size, 8))); > } >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->info)); > } > ndr->flags = _flags_save_DATA_BLOB_REM; > } >diff --git a/librpc/gen_ndr/ndr_security.c b/librpc/gen_ndr/ndr_security.c >index c227170..6b6b262 100644 >--- a/librpc/gen_ndr/ndr_security.c >+++ b/librpc/gen_ndr/ndr_security.c >@@ -618,20 +618,24 @@ _PUBLIC_ enum ndr_err_code ndr_push_security_descriptor(struct ndr_push *ndr, in > } > if (ndr_flags & NDR_BUFFERS) { > if (r->owner_sid) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->owner_sid)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->owner_sid)); > NDR_CHECK(ndr_push_dom_sid(ndr, NDR_SCALARS, r->owner_sid)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->owner_sid)); > } > if (r->group_sid) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->group_sid)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->group_sid)); > NDR_CHECK(ndr_push_dom_sid(ndr, NDR_SCALARS, r->group_sid)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->group_sid)); > } > if (r->sacl) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->sacl)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->sacl)); > NDR_CHECK(ndr_push_security_acl(ndr, NDR_SCALARS|NDR_BUFFERS, r->sacl)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->sacl)); > } > if (r->dacl) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->dacl)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->dacl)); > NDR_CHECK(ndr_push_security_acl(ndr, NDR_SCALARS|NDR_BUFFERS, r->dacl)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->dacl)); > } > } > ndr->flags = _flags_save_STRUCT; >diff --git a/librpc/gen_ndr/ndr_spoolss.c b/librpc/gen_ndr/ndr_spoolss.c >index d531cbf..5c2f28c 100644 >--- a/librpc/gen_ndr/ndr_spoolss.c >+++ b/librpc/gen_ndr/ndr_spoolss.c >@@ -353,8 +353,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo0(struct ndr_push *ndr, i > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->printername) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->printername)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->printername)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->printername)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->printername)); > } > ndr->flags = _flags_save_string; > } >@@ -362,8 +363,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo0(struct ndr_push *ndr, i > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->servername) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->servername)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->servername)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->servername)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->servername)); > } > ndr->flags = _flags_save_string; > } >@@ -792,8 +794,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo1(struct ndr_push *ndr, i > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->description) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->description)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->description)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->description)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->description)); > } > ndr->flags = _flags_save_string; > } >@@ -801,8 +804,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo1(struct ndr_push *ndr, i > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->name)); > } > ndr->flags = _flags_save_string; > } >@@ -810,8 +814,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo1(struct ndr_push *ndr, i > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->comment) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->comment)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->comment)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->comment)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->comment)); > } > ndr->flags = _flags_save_string; > } >@@ -1071,8 +1076,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo2(struct ndr_push *ndr, i > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->servername) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->servername)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->servername)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->servername)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->servername)); > } > ndr->flags = _flags_save_string; > } >@@ -1080,8 +1086,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo2(struct ndr_push *ndr, i > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->printername) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->printername)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->printername)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->printername)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->printername)); > } > ndr->flags = _flags_save_string; > } >@@ -1089,8 +1096,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo2(struct ndr_push *ndr, i > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->sharename) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->sharename)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->sharename)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->sharename)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->sharename)); > } > ndr->flags = _flags_save_string; > } >@@ -1098,8 +1106,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo2(struct ndr_push *ndr, i > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->portname) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->portname)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->portname)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->portname)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->portname)); > } > ndr->flags = _flags_save_string; > } >@@ -1107,8 +1116,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo2(struct ndr_push *ndr, i > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->drivername) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->drivername)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->drivername)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->drivername)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->drivername)); > } > ndr->flags = _flags_save_string; > } >@@ -1116,8 +1126,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo2(struct ndr_push *ndr, i > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->comment) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->comment)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->comment)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->comment)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->comment)); > } > ndr->flags = _flags_save_string; > } >@@ -1125,26 +1136,29 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo2(struct ndr_push *ndr, i > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->location) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->location)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->location)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->location)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->location)); > } > ndr->flags = _flags_save_string; > } > if (r->devmode) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, 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)); > } > { > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->sepfile) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->sepfile)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->sepfile)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->sepfile)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->sepfile)); > } > ndr->flags = _flags_save_string; > } >@@ -1152,8 +1166,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo2(struct ndr_push *ndr, i > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->printprocessor) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->printprocessor)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->printprocessor)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->printprocessor)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->printprocessor)); > } > ndr->flags = _flags_save_string; > } >@@ -1161,8 +1176,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo2(struct ndr_push *ndr, i > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->datatype) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->datatype)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->datatype)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->datatype)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->datatype)); > } > ndr->flags = _flags_save_string; > } >@@ -1170,19 +1186,21 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo2(struct ndr_push *ndr, i > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->parameters) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->parameters)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->parameters)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->parameters)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->parameters)); > } > ndr->flags = _flags_save_string; > } > if (r->secdesc) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, 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_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)); > } > } > return NDR_ERR_SUCCESS; >@@ -1682,13 +1700,14 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo3(struct ndr_push *ndr, i > } > if (ndr_flags & NDR_BUFFERS) { > if (r->secdesc) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, 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_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)); > } > } > return NDR_ERR_SUCCESS; >@@ -1769,8 +1788,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo4(struct ndr_push *ndr, i > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->printername) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->printername)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->printername)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->printername)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->printername)); > } > ndr->flags = _flags_save_string; > } >@@ -1778,8 +1798,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo4(struct ndr_push *ndr, i > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->servername) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->servername)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->servername)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->servername)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->servername)); > } > ndr->flags = _flags_save_string; > } >@@ -1906,8 +1927,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo5(struct ndr_push *ndr, i > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->printername) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->printername)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->printername)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->printername)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->printername)); > } > ndr->flags = _flags_save_string; > } >@@ -1915,8 +1937,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo5(struct ndr_push *ndr, i > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->portname) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->portname)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->portname)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->portname)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->portname)); > } > ndr->flags = _flags_save_string; > } >@@ -2100,8 +2123,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo7(struct ndr_push *ndr, i > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->guid) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->guid)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->guid)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->guid)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->guid)); > } > ndr->flags = _flags_save_string; > } >@@ -2176,13 +2200,14 @@ static enum ndr_err_code ndr_push_spoolss_DeviceModeInfo(struct ndr_push *ndr, i > } > if (ndr_flags & NDR_BUFFERS) { > if (r->devmode) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, 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)); > } > } > return NDR_ERR_SUCCESS; >@@ -2655,8 +2680,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo1(struct ndr_push *ndr, int n > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->printer_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->printer_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->printer_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->printer_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->printer_name)); > } > ndr->flags = _flags_save_string; > } >@@ -2664,8 +2690,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo1(struct ndr_push *ndr, int n > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->server_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->server_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->server_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->server_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->server_name)); > } > ndr->flags = _flags_save_string; > } >@@ -2673,8 +2700,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo1(struct ndr_push *ndr, int n > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->user_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->user_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->user_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->user_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->user_name)); > } > ndr->flags = _flags_save_string; > } >@@ -2682,8 +2710,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo1(struct ndr_push *ndr, int n > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->document_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->document_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->document_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->document_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->document_name)); > } > ndr->flags = _flags_save_string; > } >@@ -2691,8 +2720,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo1(struct ndr_push *ndr, int n > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->data_type) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->data_type)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->data_type)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->data_type)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->data_type)); > } > ndr->flags = _flags_save_string; > } >@@ -2700,8 +2730,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo1(struct ndr_push *ndr, int n > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->text_status) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->text_status)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->text_status)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->text_status)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->text_status)); > } > ndr->flags = _flags_save_string; > } >@@ -3041,8 +3072,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo2(struct ndr_push *ndr, int n > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->printer_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->printer_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->printer_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->printer_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->printer_name)); > } > ndr->flags = _flags_save_string; > } >@@ -3050,8 +3082,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo2(struct ndr_push *ndr, int n > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->server_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->server_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->server_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->server_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->server_name)); > } > ndr->flags = _flags_save_string; > } >@@ -3059,8 +3092,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo2(struct ndr_push *ndr, int n > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->user_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->user_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->user_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->user_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->user_name)); > } > ndr->flags = _flags_save_string; > } >@@ -3068,8 +3102,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo2(struct ndr_push *ndr, int n > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->document_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->document_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->document_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->document_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->document_name)); > } > ndr->flags = _flags_save_string; > } >@@ -3077,8 +3112,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo2(struct ndr_push *ndr, int n > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->notify_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->notify_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->notify_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->notify_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->notify_name)); > } > ndr->flags = _flags_save_string; > } >@@ -3086,8 +3122,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo2(struct ndr_push *ndr, int n > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->data_type) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->data_type)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->data_type)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->data_type)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->data_type)); > } > ndr->flags = _flags_save_string; > } >@@ -3095,8 +3132,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo2(struct ndr_push *ndr, int n > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->print_processor) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->print_processor)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->print_processor)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->print_processor)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->print_processor)); > } > ndr->flags = _flags_save_string; > } >@@ -3104,8 +3142,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo2(struct ndr_push *ndr, int n > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->parameters) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->parameters)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->parameters)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->parameters)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->parameters)); > } > ndr->flags = _flags_save_string; > } >@@ -3113,27 +3152,31 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo2(struct ndr_push *ndr, int n > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->driver_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->driver_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->driver_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->driver_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->driver_name)); > } > ndr->flags = _flags_save_string; > } > if (r->devmode) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->devmode)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->devmode)); > NDR_CHECK(ndr_push_spoolss_DeviceMode(ndr, NDR_SCALARS, r->devmode)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->devmode)); > } > { > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->text_status) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->text_status)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->text_status)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->text_status)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->text_status)); > } > ndr->flags = _flags_save_string; > } > if (r->secdesc) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->secdesc)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->secdesc)); > NDR_CHECK(ndr_push_security_descriptor(ndr, NDR_SCALARS|NDR_BUFFERS, r->secdesc)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->secdesc)); > } > } > return NDR_ERR_SUCCESS; >@@ -3711,8 +3754,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo4(struct ndr_push *ndr, int n > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->printer_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->printer_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->printer_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->printer_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->printer_name)); > } > ndr->flags = _flags_save_string; > } >@@ -3720,8 +3764,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo4(struct ndr_push *ndr, int n > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->server_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->server_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->server_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->server_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->server_name)); > } > ndr->flags = _flags_save_string; > } >@@ -3729,8 +3774,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo4(struct ndr_push *ndr, int n > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->user_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->user_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->user_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->user_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->user_name)); > } > ndr->flags = _flags_save_string; > } >@@ -3738,8 +3784,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo4(struct ndr_push *ndr, int n > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->document_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->document_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->document_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->document_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->document_name)); > } > ndr->flags = _flags_save_string; > } >@@ -3747,8 +3794,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo4(struct ndr_push *ndr, int n > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->notify_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->notify_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->notify_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->notify_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->notify_name)); > } > ndr->flags = _flags_save_string; > } >@@ -3756,8 +3804,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo4(struct ndr_push *ndr, int n > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->data_type) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->data_type)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->data_type)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->data_type)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->data_type)); > } > ndr->flags = _flags_save_string; > } >@@ -3765,8 +3814,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo4(struct ndr_push *ndr, int n > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->print_processor) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->print_processor)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->print_processor)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->print_processor)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->print_processor)); > } > ndr->flags = _flags_save_string; > } >@@ -3774,8 +3824,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo4(struct ndr_push *ndr, int n > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->parameters) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->parameters)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->parameters)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->parameters)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->parameters)); > } > ndr->flags = _flags_save_string; > } >@@ -3783,27 +3834,31 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo4(struct ndr_push *ndr, int n > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->driver_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->driver_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->driver_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->driver_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->driver_name)); > } > ndr->flags = _flags_save_string; > } > if (r->devmode) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->devmode)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->devmode)); > NDR_CHECK(ndr_push_spoolss_DeviceMode(ndr, NDR_SCALARS, r->devmode)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->devmode)); > } > { > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->text_status) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->text_status)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->text_status)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->text_status)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->text_status)); > } > ndr->flags = _flags_save_string; > } > if (r->secdesc) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->secdesc)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->secdesc)); > NDR_CHECK(ndr_push_security_descriptor(ndr, NDR_SCALARS|NDR_BUFFERS, r->secdesc)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->secdesc)); > } > } > return NDR_ERR_SUCCESS; >@@ -9871,8 +9926,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo1(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->driver_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->driver_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->driver_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->driver_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->driver_name)); > } > ndr->flags = _flags_save_string; > } >@@ -9978,8 +10034,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo2(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->driver_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->driver_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->driver_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->driver_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->driver_name)); > } > ndr->flags = _flags_save_string; > } >@@ -9987,8 +10044,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo2(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->architecture) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->architecture)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->architecture)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->architecture)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->architecture)); > } > ndr->flags = _flags_save_string; > } >@@ -9996,8 +10054,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo2(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->driver_path) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->driver_path)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->driver_path)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->driver_path)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->driver_path)); > } > ndr->flags = _flags_save_string; > } >@@ -10005,8 +10064,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo2(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->data_file) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->data_file)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->data_file)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->data_file)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->data_file)); > } > ndr->flags = _flags_save_string; > } >@@ -10014,8 +10074,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo2(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->config_file) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->config_file)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->config_file)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->config_file)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->config_file)); > } > ndr->flags = _flags_save_string; > } >@@ -10287,8 +10348,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo3(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->driver_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->driver_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->driver_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->driver_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->driver_name)); > } > ndr->flags = _flags_save_string; > } >@@ -10296,8 +10358,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo3(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->architecture) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->architecture)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->architecture)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->architecture)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->architecture)); > } > ndr->flags = _flags_save_string; > } >@@ -10305,8 +10368,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo3(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->driver_path) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->driver_path)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->driver_path)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->driver_path)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->driver_path)); > } > ndr->flags = _flags_save_string; > } >@@ -10314,8 +10378,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo3(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->data_file) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->data_file)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->data_file)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->data_file)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->data_file)); > } > ndr->flags = _flags_save_string; > } >@@ -10323,8 +10388,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo3(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->config_file) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->config_file)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->config_file)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->config_file)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->config_file)); > } > ndr->flags = _flags_save_string; > } >@@ -10332,8 +10398,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo3(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->help_file) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->help_file)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->help_file)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->help_file)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->help_file)); > } > ndr->flags = _flags_save_string; > } >@@ -10341,8 +10408,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo3(struct ndr_push *ndr, in > uint32_t _flags_save_string_array = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->dependent_files) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->dependent_files)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->dependent_files)); > NDR_CHECK(ndr_push_string_array(ndr, NDR_SCALARS, r->dependent_files)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->dependent_files)); > } > ndr->flags = _flags_save_string_array; > } >@@ -10350,8 +10418,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo3(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->monitor_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->monitor_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->monitor_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->monitor_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->monitor_name)); > } > ndr->flags = _flags_save_string; > } >@@ -10359,8 +10428,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo3(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->default_datatype) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->default_datatype)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->default_datatype)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->default_datatype)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->default_datatype)); > } > ndr->flags = _flags_save_string; > } >@@ -10778,8 +10848,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo4(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->driver_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->driver_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->driver_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->driver_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->driver_name)); > } > ndr->flags = _flags_save_string; > } >@@ -10787,8 +10858,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo4(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->architecture) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->architecture)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->architecture)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->architecture)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->architecture)); > } > ndr->flags = _flags_save_string; > } >@@ -10796,8 +10868,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo4(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->driver_path) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->driver_path)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->driver_path)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->driver_path)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->driver_path)); > } > ndr->flags = _flags_save_string; > } >@@ -10805,8 +10878,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo4(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->data_file) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->data_file)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->data_file)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->data_file)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->data_file)); > } > ndr->flags = _flags_save_string; > } >@@ -10814,8 +10888,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo4(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->config_file) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->config_file)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->config_file)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->config_file)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->config_file)); > } > ndr->flags = _flags_save_string; > } >@@ -10823,8 +10898,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo4(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->help_file) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->help_file)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->help_file)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->help_file)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->help_file)); > } > ndr->flags = _flags_save_string; > } >@@ -10832,8 +10908,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo4(struct ndr_push *ndr, in > uint32_t _flags_save_string_array = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->dependent_files) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->dependent_files)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->dependent_files)); > NDR_CHECK(ndr_push_string_array(ndr, NDR_SCALARS, r->dependent_files)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->dependent_files)); > } > ndr->flags = _flags_save_string_array; > } >@@ -10841,8 +10918,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo4(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->monitor_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->monitor_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->monitor_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->monitor_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->monitor_name)); > } > ndr->flags = _flags_save_string; > } >@@ -10850,8 +10928,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo4(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->default_datatype) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->default_datatype)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->default_datatype)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->default_datatype)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->default_datatype)); > } > ndr->flags = _flags_save_string; > } >@@ -10859,8 +10938,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo4(struct ndr_push *ndr, in > uint32_t _flags_save_string_array = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->previous_names) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->previous_names)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->previous_names)); > NDR_CHECK(ndr_push_string_array(ndr, NDR_SCALARS, r->previous_names)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->previous_names)); > } > ndr->flags = _flags_save_string_array; > } >@@ -11286,8 +11366,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo5(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->driver_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->driver_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->driver_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->driver_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->driver_name)); > } > ndr->flags = _flags_save_string; > } >@@ -11295,8 +11376,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo5(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->architecture) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->architecture)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->architecture)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->architecture)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->architecture)); > } > ndr->flags = _flags_save_string; > } >@@ -11304,8 +11386,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo5(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->driver_path) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->driver_path)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->driver_path)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->driver_path)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->driver_path)); > } > ndr->flags = _flags_save_string; > } >@@ -11313,8 +11396,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo5(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->data_file) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->data_file)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->data_file)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->data_file)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->data_file)); > } > ndr->flags = _flags_save_string; > } >@@ -11322,8 +11406,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo5(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->config_file) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->config_file)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->config_file)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->config_file)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->config_file)); > } > ndr->flags = _flags_save_string; > } >@@ -11633,8 +11718,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo6(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->driver_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->driver_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->driver_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->driver_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->driver_name)); > } > ndr->flags = _flags_save_string; > } >@@ -11642,8 +11728,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo6(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->architecture) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->architecture)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->architecture)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->architecture)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->architecture)); > } > ndr->flags = _flags_save_string; > } >@@ -11651,8 +11738,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo6(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->driver_path) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->driver_path)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->driver_path)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->driver_path)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->driver_path)); > } > ndr->flags = _flags_save_string; > } >@@ -11660,8 +11748,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo6(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->data_file) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->data_file)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->data_file)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->data_file)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->data_file)); > } > ndr->flags = _flags_save_string; > } >@@ -11669,8 +11758,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo6(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->config_file) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->config_file)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->config_file)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->config_file)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->config_file)); > } > ndr->flags = _flags_save_string; > } >@@ -11678,8 +11768,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo6(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->help_file) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->help_file)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->help_file)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->help_file)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->help_file)); > } > ndr->flags = _flags_save_string; > } >@@ -11687,8 +11778,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo6(struct ndr_push *ndr, in > uint32_t _flags_save_string_array = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->dependent_files) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->dependent_files)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->dependent_files)); > NDR_CHECK(ndr_push_string_array(ndr, NDR_SCALARS, r->dependent_files)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->dependent_files)); > } > ndr->flags = _flags_save_string_array; > } >@@ -11696,8 +11788,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo6(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->monitor_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->monitor_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->monitor_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->monitor_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->monitor_name)); > } > ndr->flags = _flags_save_string; > } >@@ -11705,8 +11798,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo6(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->default_datatype) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->default_datatype)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->default_datatype)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->default_datatype)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->default_datatype)); > } > ndr->flags = _flags_save_string; > } >@@ -11714,8 +11808,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo6(struct ndr_push *ndr, in > uint32_t _flags_save_string_array = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->previous_names) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->previous_names)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->previous_names)); > NDR_CHECK(ndr_push_string_array(ndr, NDR_SCALARS, r->previous_names)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->previous_names)); > } > ndr->flags = _flags_save_string_array; > } >@@ -11723,8 +11818,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo6(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->manufacturer_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->manufacturer_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->manufacturer_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->manufacturer_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->manufacturer_name)); > } > ndr->flags = _flags_save_string; > } >@@ -11732,8 +11828,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo6(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->manufacturer_url) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->manufacturer_url)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->manufacturer_url)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->manufacturer_url)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->manufacturer_url)); > } > ndr->flags = _flags_save_string; > } >@@ -11741,8 +11838,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo6(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->hardware_id) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->hardware_id)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->hardware_id)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->hardware_id)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->hardware_id)); > } > ndr->flags = _flags_save_string; > } >@@ -11750,8 +11848,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo6(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->provider) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->provider)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->provider)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->provider)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->provider)); > } > ndr->flags = _flags_save_string; > } >@@ -12407,8 +12506,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo8(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->driver_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->driver_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->driver_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->driver_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->driver_name)); > } > ndr->flags = _flags_save_string; > } >@@ -12416,8 +12516,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo8(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->architecture) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->architecture)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->architecture)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->architecture)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->architecture)); > } > ndr->flags = _flags_save_string; > } >@@ -12425,8 +12526,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo8(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->driver_path) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->driver_path)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->driver_path)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->driver_path)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->driver_path)); > } > ndr->flags = _flags_save_string; > } >@@ -12434,8 +12536,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo8(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->data_file) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->data_file)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->data_file)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->data_file)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->data_file)); > } > ndr->flags = _flags_save_string; > } >@@ -12443,8 +12546,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo8(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->config_file) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->config_file)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->config_file)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->config_file)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->config_file)); > } > ndr->flags = _flags_save_string; > } >@@ -12452,8 +12556,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo8(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->help_file) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->help_file)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->help_file)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->help_file)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->help_file)); > } > ndr->flags = _flags_save_string; > } >@@ -12461,8 +12566,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo8(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->monitor_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->monitor_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->monitor_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->monitor_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->monitor_name)); > } > ndr->flags = _flags_save_string; > } >@@ -12470,8 +12576,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo8(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->default_datatype) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->default_datatype)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->default_datatype)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->default_datatype)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->default_datatype)); > } > ndr->flags = _flags_save_string; > } >@@ -12479,8 +12586,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo8(struct ndr_push *ndr, in > uint32_t _flags_save_string_array = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->dependent_files) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->dependent_files)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->dependent_files)); > NDR_CHECK(ndr_push_string_array(ndr, NDR_SCALARS, r->dependent_files)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->dependent_files)); > } > ndr->flags = _flags_save_string_array; > } >@@ -12488,8 +12596,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo8(struct ndr_push *ndr, in > uint32_t _flags_save_string_array = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->previous_names) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->previous_names)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->previous_names)); > NDR_CHECK(ndr_push_string_array(ndr, NDR_SCALARS, r->previous_names)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->previous_names)); > } > ndr->flags = _flags_save_string_array; > } >@@ -12497,8 +12606,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo8(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->manufacturer_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->manufacturer_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->manufacturer_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->manufacturer_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->manufacturer_name)); > } > ndr->flags = _flags_save_string; > } >@@ -12506,8 +12616,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo8(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->manufacturer_url) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->manufacturer_url)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->manufacturer_url)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->manufacturer_url)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->manufacturer_url)); > } > ndr->flags = _flags_save_string; > } >@@ -12515,8 +12626,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo8(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->hardware_id) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->hardware_id)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->hardware_id)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->hardware_id)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->hardware_id)); > } > ndr->flags = _flags_save_string; > } >@@ -12524,8 +12636,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo8(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->provider) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->provider)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->provider)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->provider)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->provider)); > } > ndr->flags = _flags_save_string; > } >@@ -12533,8 +12646,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo8(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->print_processor) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->print_processor)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->print_processor)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->print_processor)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->print_processor)); > } > ndr->flags = _flags_save_string; > } >@@ -12542,8 +12656,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo8(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->vendor_setup) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->vendor_setup)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->vendor_setup)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->vendor_setup)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->vendor_setup)); > } > ndr->flags = _flags_save_string; > } >@@ -12551,8 +12666,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo8(struct ndr_push *ndr, in > uint32_t _flags_save_string_array = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->color_profiles) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->color_profiles)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->color_profiles)); > NDR_CHECK(ndr_push_string_array(ndr, NDR_SCALARS, r->color_profiles)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->color_profiles)); > } > ndr->flags = _flags_save_string_array; > } >@@ -12560,8 +12676,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo8(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->inf_path) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->inf_path)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->inf_path)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->inf_path)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->inf_path)); > } > ndr->flags = _flags_save_string; > } >@@ -12569,8 +12686,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo8(struct ndr_push *ndr, in > uint32_t _flags_save_string_array = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->core_driver_dependencies) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->core_driver_dependencies)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->core_driver_dependencies)); > NDR_CHECK(ndr_push_string_array(ndr, NDR_SCALARS, r->core_driver_dependencies)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->core_driver_dependencies)); > } > ndr->flags = _flags_save_string_array; > } >@@ -13323,8 +13441,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverFileInfo(struct ndr_push *ndr, > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->file_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->file_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->file_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->file_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->file_name)); > } > ndr->flags = _flags_save_string; > } >@@ -13886,8 +14005,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrintProcessorInfo1(struct ndr_push > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->print_processor_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->print_processor_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->print_processor_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->print_processor_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->print_processor_name)); > } > ndr->flags = _flags_save_string; > } >@@ -14882,8 +15002,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_FormInfo1(struct ndr_push *ndr, int > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->form_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->form_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->form_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->form_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->form_name)); > } > ndr->flags = _flags_save_string; > } >@@ -15018,8 +15139,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_FormInfo2(struct ndr_push *ndr, int > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->form_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->form_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->form_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->form_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->form_name)); > } > ndr->flags = _flags_save_string; > } >@@ -15027,8 +15149,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_FormInfo2(struct ndr_push *ndr, int > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM); > if (r->keyword) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->keyword)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->keyword)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->keyword)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->keyword)); > } > ndr->flags = _flags_save_string; > } >@@ -15036,8 +15159,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_FormInfo2(struct ndr_push *ndr, int > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->mui_dll) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->mui_dll)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->mui_dll)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->mui_dll)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->mui_dll)); > } > ndr->flags = _flags_save_string; > } >@@ -15045,8 +15169,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_FormInfo2(struct ndr_push *ndr, int > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->display_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->display_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->display_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->display_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->display_name)); > } > ndr->flags = _flags_save_string; > } >@@ -15736,8 +15861,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PortInfo1(struct ndr_push *ndr, int > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->port_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->port_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->port_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->port_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->port_name)); > } > ndr->flags = _flags_save_string; > } >@@ -15857,8 +15983,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PortInfo2(struct ndr_push *ndr, int > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->port_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->port_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->port_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->port_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->port_name)); > } > ndr->flags = _flags_save_string; > } >@@ -15866,8 +15993,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PortInfo2(struct ndr_push *ndr, int > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->monitor_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->monitor_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->monitor_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->monitor_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->monitor_name)); > } > ndr->flags = _flags_save_string; > } >@@ -15875,8 +16003,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PortInfo2(struct ndr_push *ndr, int > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->description) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->description)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->description)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->description)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->description)); > } > ndr->flags = _flags_save_string; > } >@@ -16095,8 +16224,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PortInfo3(struct ndr_push *ndr, int > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->status_string) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->status_string)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->status_string)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->status_string)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->status_string)); > } > ndr->flags = _flags_save_string; > } >@@ -16182,8 +16312,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PortInfoFF(struct ndr_push *ndr, int > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->port_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->port_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->port_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->port_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->port_name)); > } > ndr->flags = _flags_save_string; > } >@@ -16422,8 +16553,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_MonitorInfo1(struct ndr_push *ndr, i > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->monitor_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->monitor_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->monitor_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->monitor_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->monitor_name)); > } > ndr->flags = _flags_save_string; > } >@@ -16516,8 +16648,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_MonitorInfo2(struct ndr_push *ndr, i > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->monitor_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->monitor_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->monitor_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->monitor_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->monitor_name)); > } > ndr->flags = _flags_save_string; > } >@@ -16525,8 +16658,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_MonitorInfo2(struct ndr_push *ndr, i > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->environment) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->environment)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->environment)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->environment)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->environment)); > } > ndr->flags = _flags_save_string; > } >@@ -16534,8 +16668,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_MonitorInfo2(struct ndr_push *ndr, i > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->dll_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->dll_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->dll_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->dll_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->dll_name)); > } > ndr->flags = _flags_save_string; > } >@@ -16794,8 +16929,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrintProcDataTypesInfo1(struct ndr_p > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->name_array) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->name_array)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->name_array)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->name_array)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->name_array)); > } > ndr->flags = _flags_save_string; > } >@@ -18403,13 +18539,14 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterEnumValues(struct ndr_push *n > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->value_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->value_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->value_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->value_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->value_name)); > } > ndr->flags = _flags_save_string; > } > if (r->data) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->data)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->data)); > { > struct ndr_push *_ndr_data; > NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_data, 0, r->data_length)); >@@ -18417,6 +18554,7 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterEnumValues(struct ndr_push *n > NDR_CHECK(ndr_push_spoolss_PrinterData(_ndr_data, NDR_SCALARS|NDR_BUFFERS, r->data)); > NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_data, 0, r->data_length)); > } >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->data)); > } > } > ndr_push_restore_relative_base_offset(ndr, _save_relative_base_offset); >diff --git a/librpc/gen_ndr/ndr_svcctl.c b/librpc/gen_ndr/ndr_svcctl.c >index 1770e1f..60ccda0 100644 >--- a/librpc/gen_ndr/ndr_svcctl.c >+++ b/librpc/gen_ndr/ndr_svcctl.c >@@ -237,8 +237,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_ENUM_SERVICE_STATUSW(struct ndr_push *ndr, i > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->service_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->service_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->service_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->service_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->service_name)); > } > ndr->flags = _flags_save_string; > } >@@ -246,8 +247,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_ENUM_SERVICE_STATUSW(struct ndr_push *ndr, i > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->display_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->display_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->display_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->display_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->display_name)); > } > ndr->flags = _flags_save_string; > } >@@ -372,8 +374,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_ENUM_SERVICE_STATUSA(struct ndr_push *ndr, i > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM); > if (r->service_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->service_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->service_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->service_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->service_name)); > } > ndr->flags = _flags_save_string; > } >@@ -381,8 +384,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_ENUM_SERVICE_STATUSA(struct ndr_push *ndr, i > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_ASCII|LIBNDR_FLAG_STR_NULLTERM); > if (r->display_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->display_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->display_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->display_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->display_name)); > } > ndr->flags = _flags_save_string; > } >@@ -1008,8 +1012,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_SERVICE_DESCRIPTION(struct ndr_push *ndr, in > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->description) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->description)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->description)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->description)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->description)); > } > ndr->flags = _flags_save_string; > } >@@ -1160,8 +1165,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_SERVICE_FAILURE_ACTIONS(struct ndr_push *ndr > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->rebootmsg) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->rebootmsg)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->rebootmsg)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->rebootmsg)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->rebootmsg)); > } > ndr->flags = _flags_save_string; > } >@@ -1169,17 +1175,19 @@ _PUBLIC_ enum ndr_err_code ndr_push_SERVICE_FAILURE_ACTIONS(struct ndr_push *ndr > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->command) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->command)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->command)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->command)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->command)); > } > ndr->flags = _flags_save_string; > } > if (r->actions) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->actions)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->actions)); > NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->num_actions)); > for (cntr_actions_1 = 0; cntr_actions_1 < r->num_actions; cntr_actions_1++) { > NDR_CHECK(ndr_push_SC_ACTION(ndr, NDR_SCALARS, &r->actions[cntr_actions_1])); > } >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->actions)); > } > } > return NDR_ERR_SUCCESS; >-- >1.6.6 > > >From 580521af22b4efd1e84a7eb1ce0552521125fe71 Mon Sep 17 00:00:00 2001 >From: =?UTF-8?q?G=C3=BCnther=20Deschner?= <gd@samba.org> >Date: Thu, 11 Feb 2010 18:54:31 +0100 >Subject: [PATCH 04/24] spoolss: fix relative pointers in ndr_push_spoolss_DriverInfo101. > >Guenther >(cherry picked from commit bfd6edb3e9339d602eb6514ff50c3bb6c671174e) >--- > librpc/ndr/ndr_spoolss_buf.c | 30 ++++++++++++++++++++---------- > 1 files changed, 20 insertions(+), 10 deletions(-) > >diff --git a/librpc/ndr/ndr_spoolss_buf.c b/librpc/ndr/ndr_spoolss_buf.c >index 0acae3d..ca1ac99 100644 >--- a/librpc/ndr/ndr_spoolss_buf.c >+++ b/librpc/ndr/ndr_spoolss_buf.c >@@ -781,8 +781,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo101(struct ndr_push *ndr, > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->driver_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->driver_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->driver_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->driver_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->driver_name)); > } > ndr->flags = _flags_save_string; > } >@@ -790,13 +791,14 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo101(struct ndr_push *ndr, > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->architecture) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->architecture)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->architecture)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->architecture)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->architecture)); > } > ndr->flags = _flags_save_string; > } > if (r->file_info) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->file_info)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->file_info)); > #if 0 > NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->file_count)); > #endif >@@ -806,13 +808,15 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo101(struct ndr_push *ndr, > for (cntr_file_info_1 = 0; cntr_file_info_1 < r->file_count; cntr_file_info_1++) { > NDR_CHECK(ndr_push_spoolss_DriverFileInfo(ndr, NDR_BUFFERS, &r->file_info[cntr_file_info_1])); > } >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->file_info)); > } > { > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->monitor_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->monitor_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->monitor_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->monitor_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->monitor_name)); > } > ndr->flags = _flags_save_string; > } >@@ -820,8 +824,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo101(struct ndr_push *ndr, > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->default_datatype) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->default_datatype)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->default_datatype)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->default_datatype)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->default_datatype)); > } > ndr->flags = _flags_save_string; > } >@@ -829,8 +834,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo101(struct ndr_push *ndr, > uint32_t _flags_save_string_array = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->previous_names) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->previous_names)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->previous_names)); > NDR_CHECK(ndr_push_string_array(ndr, NDR_SCALARS, r->previous_names)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->previous_names)); > } > ndr->flags = _flags_save_string_array; > } >@@ -838,8 +844,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo101(struct ndr_push *ndr, > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->manufacturer_name) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->manufacturer_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->manufacturer_name)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->manufacturer_name)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->manufacturer_name)); > } > ndr->flags = _flags_save_string; > } >@@ -847,8 +854,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo101(struct ndr_push *ndr, > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->manufacturer_url) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->manufacturer_url)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->manufacturer_url)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->manufacturer_url)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->manufacturer_url)); > } > ndr->flags = _flags_save_string; > } >@@ -856,8 +864,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo101(struct ndr_push *ndr, > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->hardware_id) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->hardware_id)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->hardware_id)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->hardware_id)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->hardware_id)); > } > ndr->flags = _flags_save_string; > } >@@ -865,8 +874,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo101(struct ndr_push *ndr, > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > if (r->provider) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->provider)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->provider)); > NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->provider)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->provider)); > } > ndr->flags = _flags_save_string; > } >-- >1.6.6 > > >From 5645c16a6ff79120bcd6aebc2c8fce1557f0c509 Mon Sep 17 00:00:00 2001 >From: Stefan Metzmacher <metze@samba.org> >Date: Wed, 17 Feb 2010 19:59:19 +0100 >Subject: [PATCH 05/24] librpc/ndr_drsblobs: use ndr_push_relative_ptr2_start()/_end() > >metze >(cherry picked from commit b423bd2115e006f9af5d40cf5b651e03739d53a0) >--- > librpc/ndr/ndr_drsblobs.c | 6 ++++-- > 1 files changed, 4 insertions(+), 2 deletions(-) > >diff --git a/librpc/ndr/ndr_drsblobs.c b/librpc/ndr/ndr_drsblobs.c >index aecb0c3..0f7bd75 100644 >--- a/librpc/ndr/ndr_drsblobs.c >+++ b/librpc/ndr/ndr_drsblobs.c >@@ -96,12 +96,14 @@ _PUBLIC_ enum ndr_err_code ndr_push_trustAuthInOutBlob(struct ndr_push *ndr, int > } > if (ndr_flags & NDR_BUFFERS) { > if (r->current) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->current)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->current)); > NDR_CHECK(ndr_push_AuthenticationInformationArray_with_count(ndr, NDR_SCALARS|NDR_BUFFERS, r->count, r->current)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->current)); > } > if (r->previous) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->previous)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->previous)); > NDR_CHECK(ndr_push_AuthenticationInformationArray_with_count(ndr, NDR_SCALARS|NDR_BUFFERS, r->count, r->previous)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->previous)); > } > } > return NDR_ERR_SUCCESS; >-- >1.6.6 > > >From 8665c7644be667742721bcd4788a4f9b5a7d5bdf Mon Sep 17 00:00:00 2001 >From: Stefan Metzmacher <metze@samba.org> >Date: Wed, 17 Feb 2010 20:00:04 +0100 >Subject: [PATCH 06/24] librpc/ndr_krb5pac: use ndr_push_relative_ptr2_start()/_end() > >metze >(cherry picked from commit e03591111a1b9c2f05c29a7afac4641f23f455f4) >--- > librpc/ndr/ndr_krb5pac.c | 3 ++- > 1 files changed, 2 insertions(+), 1 deletions(-) > >diff --git a/librpc/ndr/ndr_krb5pac.c b/librpc/ndr/ndr_krb5pac.c >index f6654f7..34a2ef8 100644 >--- a/librpc/ndr/ndr_krb5pac.c >+++ b/librpc/ndr/ndr_krb5pac.c >@@ -59,7 +59,7 @@ enum ndr_err_code ndr_push_PAC_BUFFER(struct ndr_push *ndr, int ndr_flags, const > uint32_t _flags_save_PAC_INFO = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN8); > if (r->info) { >- NDR_CHECK(ndr_push_relative_ptr2(ndr, r->info)); >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->info)); > { > struct ndr_push *_ndr_info; > NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_info, 0, _subcontext_size_PAC_INFO(r->info,r->type,ndr->iconv_convenience, 0))); >@@ -67,6 +67,7 @@ enum ndr_err_code ndr_push_PAC_BUFFER(struct ndr_push *ndr, int ndr_flags, const > NDR_CHECK(ndr_push_PAC_INFO(_ndr_info, NDR_SCALARS|NDR_BUFFERS, r->info)); > NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_info, 0, _subcontext_size_PAC_INFO(r->info,r->type,ndr->iconv_convenience,0))); > } >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->info)); > } > ndr->flags = _flags_save_PAC_INFO; > } >-- >1.6.6 > > >From 383eccaffcead7d09ae47d13a96f9f1a4ae45318 Mon Sep 17 00:00:00 2001 >From: Stefan Metzmacher <metze@samba.org> >Date: Wed, 17 Feb 2010 20:00:36 +0100 >Subject: [PATCH 07/24] librpc/ndr: make ndr_push_relative_ptr2() static > >metze >--- > librpc/ndr/libndr.h | 1 - > librpc/ndr/ndr.c | 2 +- > 2 files changed, 1 insertions(+), 2 deletions(-) > >diff --git a/librpc/ndr/libndr.h b/librpc/ndr/libndr.h >index 9b71efb..91feb5a 100644 >--- a/librpc/ndr/libndr.h >+++ b/librpc/ndr/libndr.h >@@ -369,7 +369,6 @@ void ndr_push_restore_relative_base_offset(struct ndr_push *ndr, uint32_t offset > enum ndr_err_code ndr_push_setup_relative_base_offset1(struct ndr_push *ndr, const void *p, uint32_t offset); > enum ndr_err_code ndr_push_setup_relative_base_offset2(struct ndr_push *ndr, const void *p); > enum ndr_err_code ndr_push_relative_ptr1(struct ndr_push *ndr, const void *p); >-enum ndr_err_code ndr_push_relative_ptr2(struct ndr_push *ndr, const void *p); > enum ndr_err_code ndr_push_relative_ptr2_start(struct ndr_push *ndr, const void *p); > enum ndr_err_code ndr_push_relative_ptr2_end(struct ndr_push *ndr, const void *p); > uint32_t ndr_pull_get_relative_base_offset(struct ndr_pull *ndr); >diff --git a/librpc/ndr/ndr.c b/librpc/ndr/ndr.c >index 9b4edac..17eb5e5 100644 >--- a/librpc/ndr/ndr.c >+++ b/librpc/ndr/ndr.c >@@ -1037,7 +1037,7 @@ _PUBLIC_ enum ndr_err_code ndr_push_relative_ptr1(struct ndr_push *ndr, const vo > push a relative object - stage2 > this is called during buffers processing > */ >-_PUBLIC_ enum ndr_err_code ndr_push_relative_ptr2(struct ndr_push *ndr, const void *p) >+static enum ndr_err_code ndr_push_relative_ptr2(struct ndr_push *ndr, const void *p) > { > uint32_t save_offset; > uint32_t ptr_offset = 0xFFFFFFFF; >-- >1.6.6 > > >From 4e61bb4ef1c15b159ef6f825fda9eb9014e30755 Mon Sep 17 00:00:00 2001 >From: =?UTF-8?q?G=C3=BCnther=20Deschner?= <gd@samba.org> >Date: Wed, 16 Dec 2009 22:54:02 +0100 >Subject: [PATCH 08/24] libndr: change subcontext buffer allocation to allocate on subcontext_start. > >Guenther >(cherry picked from commit c9fa97b01774d767acfabaf1eec7a6aad1510440) >--- > librpc/ndr/ndr.c | 10 +++++++--- > 1 files changed, 7 insertions(+), 3 deletions(-) > >diff --git a/librpc/ndr/ndr.c b/librpc/ndr/ndr.c >index 17eb5e5..521d4ec 100644 >--- a/librpc/ndr/ndr.c >+++ b/librpc/ndr/ndr.c >@@ -572,6 +572,11 @@ _PUBLIC_ enum ndr_err_code ndr_push_subcontext_start(struct ndr_push *ndr, > NDR_ERR_HAVE_NO_MEMORY(subndr); > subndr->flags = ndr->flags; > >+ if (size_is > 0) { >+ NDR_CHECK(ndr_push_zero(subndr, size_is)); >+ subndr->offset = 0; >+ } >+ > *_subndr = subndr; > return NDR_ERR_SUCCESS; > } >@@ -588,12 +593,11 @@ _PUBLIC_ enum ndr_err_code ndr_push_subcontext_end(struct ndr_push *ndr, > > if (size_is >= 0) { > padding_len = size_is - subndr->offset; >- if (padding_len > 0) { >- NDR_CHECK(ndr_push_zero(subndr, padding_len)); >- } else if (padding_len < 0) { >+ if (padding_len < 0) { > return ndr_push_error(ndr, NDR_ERR_SUBCONTEXT, "Bad subcontext (PUSH) content_size %d is larger than size_is(%d)", > (int)subndr->offset, (int)size_is); > } >+ subndr->offset = size_is; > } > > switch (header_size) { >-- >1.6.6 > > >From 05bddcfcdbf5e33a47776e3f5c0cc92d6015b064 Mon Sep 17 00:00:00 2001 >From: =?UTF-8?q?G=C3=BCnther=20Deschner?= <gd@samba.org> >Date: Mon, 14 Dec 2009 15:09:00 +0100 >Subject: [PATCH 09/24] libndr: add LIBNDR_FLAG_RELATIVE_REVERSE flag. > >Guenther >(cherry picked from commit ee13a51b0514ec3ac4ca9c532c2b101a08ec9784) >--- > librpc/idl/idl_types.h | 2 ++ > librpc/ndr/libndr.h | 2 ++ > 2 files changed, 4 insertions(+), 0 deletions(-) > >diff --git a/librpc/idl/idl_types.h b/librpc/idl/idl_types.h >index 9885ca5..193a1f6 100644 >--- a/librpc/idl/idl_types.h >+++ b/librpc/idl/idl_types.h >@@ -67,3 +67,5 @@ > this is used to control formatting of uint8 arrays > */ > #define NDR_PAHEX LIBNDR_PRINT_ARRAY_HEX >+ >+#define NDR_RELATIVE_REVERSE LIBNDR_FLAG_RELATIVE_REVERSE >diff --git a/librpc/ndr/libndr.h b/librpc/ndr/libndr.h >index 91feb5a..bd97e4c 100644 >--- a/librpc/ndr/libndr.h >+++ b/librpc/ndr/libndr.h >@@ -123,6 +123,8 @@ struct ndr_print { > #define LIBNDR_FLAG_STR_UTF8 (1<<12) > #define LIBNDR_STRING_FLAGS (0x7FFC) > >+/* set if relative pointers are marshalled in reverse order */ >+#define LIBNDR_FLAG_RELATIVE_REVERSE (1<<19) > > #define LIBNDR_FLAG_REF_ALLOC (1<<20) > #define LIBNDR_FLAG_REMAINING (1<<21) >-- >1.6.6 > > >From e48e293e7648188dc690ad984738ec5319f74564 Mon Sep 17 00:00:00 2001 >From: =?UTF-8?q?G=C3=BCnther=20Deschner?= <gd@samba.org> >Date: Tue, 9 Feb 2010 18:27:37 +0100 >Subject: [PATCH 10/24] libndr: add LIBNDR_FLAG_NO_RELATIVE_REVERSE so that relative reverse processing > can be disabled for single structure elements. > >Guenther >(cherry picked from commit a2c34296fa6ca2ffb69cb69698a9b5f81803e8a8) >--- > librpc/idl/idl_types.h | 1 + > librpc/ndr/libndr.h | 3 +++ > librpc/ndr/ndr.c | 3 +++ > 3 files changed, 7 insertions(+), 0 deletions(-) > >diff --git a/librpc/idl/idl_types.h b/librpc/idl/idl_types.h >index 193a1f6..3c6c12c 100644 >--- a/librpc/idl/idl_types.h >+++ b/librpc/idl/idl_types.h >@@ -69,3 +69,4 @@ > #define NDR_PAHEX LIBNDR_PRINT_ARRAY_HEX > > #define NDR_RELATIVE_REVERSE LIBNDR_FLAG_RELATIVE_REVERSE >+#define NDR_NO_RELATIVE_REVERSE LIBNDR_FLAG_NO_RELATIVE_REVERSE >diff --git a/librpc/ndr/libndr.h b/librpc/ndr/libndr.h >index bd97e4c..27aeec5 100644 >--- a/librpc/ndr/libndr.h >+++ b/librpc/ndr/libndr.h >@@ -123,6 +123,9 @@ struct ndr_print { > #define LIBNDR_FLAG_STR_UTF8 (1<<12) > #define LIBNDR_STRING_FLAGS (0x7FFC) > >+/* set if relative pointers should *not* be marshalled in reverse order */ >+#define LIBNDR_FLAG_NO_RELATIVE_REVERSE (1<<18) >+ > /* set if relative pointers are marshalled in reverse order */ > #define LIBNDR_FLAG_RELATIVE_REVERSE (1<<19) > >diff --git a/librpc/ndr/ndr.c b/librpc/ndr/ndr.c >index 521d4ec..c375998 100644 >--- a/librpc/ndr/ndr.c >+++ b/librpc/ndr/ndr.c >@@ -349,6 +349,9 @@ _PUBLIC_ void ndr_set_flags(uint32_t *pflags, uint32_t new_flags) > if (new_flags & LIBNDR_ALIGN_FLAGS) { > (*pflags) &= ~LIBNDR_FLAG_REMAINING; > } >+ if (new_flags & LIBNDR_FLAG_NO_RELATIVE_REVERSE) { >+ (*pflags) &= ~LIBNDR_FLAG_RELATIVE_REVERSE; >+ } > (*pflags) |= new_flags; > } > >-- >1.6.6 > > >From 868fd155e80332816dd8e55d699b9efdf8fdb3cf Mon Sep 17 00:00:00 2001 >From: Stefan Metzmacher <metze@samba.org> >Date: Wed, 17 Feb 2010 20:27:08 +0100 >Subject: [PATCH 11/24] libndr: give an error when ndr_push_relative_ptr2_start()/_end() is used with the RELATIVE_REVERSE flag > >metze >(cherry picked from commit b5f9c44da55abb28222441a7e064a2a25891981f) >--- > librpc/ndr/ndr.c | 7 ++++++- > 1 files changed, 6 insertions(+), 1 deletions(-) > >diff --git a/librpc/ndr/ndr.c b/librpc/ndr/ndr.c >index c375998..15510d6 100644 >--- a/librpc/ndr/ndr.c >+++ b/librpc/ndr/ndr.c >@@ -1078,7 +1078,12 @@ _PUBLIC_ enum ndr_err_code ndr_push_relative_ptr2_start(struct ndr_push *ndr, co > if (p == NULL) { > return NDR_ERR_SUCCESS; > } >- return ndr_push_relative_ptr2(ndr, p); >+ if (!(ndr->flags & LIBNDR_FLAG_RELATIVE_REVERSE)) { >+ return ndr_push_relative_ptr2(ndr, p); >+ } >+ >+ return ndr_push_error(ndr, NDR_ERR_RELATIVE, >+ "ndr_push_relative_ptr2_start RELATIVE_REVERSE flag set, but not supported"); > } > > /* >-- >1.6.6 > > >From 878a034afc58f6380c7f9701620e56b508b6faab Mon Sep 17 00:00:00 2001 >From: =?UTF-8?q?G=C3=BCnther=20Deschner?= <gd@samba.org> >Date: Mon, 14 Dec 2009 15:33:32 +0100 >Subject: [PATCH 12/24] libndr: store a subcontext buffer size in ndr_push_subcontext_start. > >Guenther >(cherry picked from commit 05347754ee61f06466d6d9b7f390001992f793ce) >--- > librpc/ndr/libndr.h | 1 + > librpc/ndr/ndr.c | 1 + > 2 files changed, 2 insertions(+), 0 deletions(-) > >diff --git a/librpc/ndr/libndr.h b/librpc/ndr/libndr.h >index 27aeec5..00f4c3e 100644 >--- a/librpc/ndr/libndr.h >+++ b/librpc/ndr/libndr.h >@@ -85,6 +85,7 @@ struct ndr_push { > uint32_t offset; > > uint32_t relative_base_offset; >+ uint32_t relative_end_offset; > struct ndr_token_list *relative_base_list; > > struct ndr_token_list *switch_list; >diff --git a/librpc/ndr/ndr.c b/librpc/ndr/ndr.c >index 15510d6..171e50b 100644 >--- a/librpc/ndr/ndr.c >+++ b/librpc/ndr/ndr.c >@@ -578,6 +578,7 @@ _PUBLIC_ enum ndr_err_code ndr_push_subcontext_start(struct ndr_push *ndr, > if (size_is > 0) { > NDR_CHECK(ndr_push_zero(subndr, size_is)); > subndr->offset = 0; >+ subndr->relative_end_offset = size_is; > } > > *_subndr = subndr; >-- >1.6.6 > > >From 96d4ca7e8e49baadc79697a2fbcb66ed8a359d0f Mon Sep 17 00:00:00 2001 >From: Stefan Metzmacher <metze@samba.org> >Date: Wed, 17 Feb 2010 21:24:40 +0100 >Subject: [PATCH 13/24] libndr: implement LIBNDR_RELATIVE_REVERSE handling > >This is based on Guenther's initial code. > >metze >(cherry picked from commit 31c7780c16651b284009874cf3da04587dc36d19) >--- > librpc/ndr/libndr.h | 1 + > librpc/ndr/ndr.c | 89 +++++++++++++++++++++++++++++++++++++++++++++++++-- > 2 files changed, 87 insertions(+), 3 deletions(-) > >diff --git a/librpc/ndr/libndr.h b/librpc/ndr/libndr.h >index 00f4c3e..f730ed8 100644 >--- a/librpc/ndr/libndr.h >+++ b/librpc/ndr/libndr.h >@@ -90,6 +90,7 @@ struct ndr_push { > > struct ndr_token_list *switch_list; > struct ndr_token_list *relative_list; >+ struct ndr_token_list *relative_begin_list; > struct ndr_token_list *nbt_string_list; > struct ndr_token_list *full_ptr_list; > >diff --git a/librpc/ndr/ndr.c b/librpc/ndr/ndr.c >index 171e50b..05d6cce 100644 >--- a/librpc/ndr/ndr.c >+++ b/librpc/ndr/ndr.c >@@ -1082,9 +1082,13 @@ _PUBLIC_ enum ndr_err_code ndr_push_relative_ptr2_start(struct ndr_push *ndr, co > if (!(ndr->flags & LIBNDR_FLAG_RELATIVE_REVERSE)) { > return ndr_push_relative_ptr2(ndr, p); > } >- >- return ndr_push_error(ndr, NDR_ERR_RELATIVE, >- "ndr_push_relative_ptr2_start RELATIVE_REVERSE flag set, but not supported"); >+ if (ndr->relative_end_offset == -1) { >+ return ndr_push_error(ndr, NDR_ERR_RELATIVE, >+ "ndr_push_relative_ptr2_start RELATIVE_REVERSE flag set and relative_end_offset %d", >+ ndr->relative_end_offset); >+ } >+ NDR_CHECK(ndr_token_store(ndr, &ndr->relative_begin_list, p, ndr->offset)); >+ return NDR_ERR_SUCCESS; > } > > /* >@@ -1093,9 +1097,88 @@ _PUBLIC_ enum ndr_err_code ndr_push_relative_ptr2_start(struct ndr_push *ndr, co > */ > _PUBLIC_ enum ndr_err_code ndr_push_relative_ptr2_end(struct ndr_push *ndr, const void *p) > { >+ uint32_t begin_offset = 0xFFFFFFFF; >+ ssize_t len; >+ uint32_t correct_offset = 0; >+ uint32_t align = 1; >+ uint32_t pad = 0; >+ > if (p == NULL) { > return NDR_ERR_SUCCESS; > } >+ >+ if (!(ndr->flags & LIBNDR_FLAG_RELATIVE_REVERSE)) { >+ return NDR_ERR_SUCCESS; >+ } >+ >+ if (ndr->relative_end_offset < ndr->offset) { >+ return ndr_push_error(ndr, NDR_ERR_RELATIVE, >+ "ndr_push_relative_ptr2_end:" >+ "relative_end_offset %u < offset %u", >+ ndr->relative_end_offset, ndr->offset); >+ } >+ >+ NDR_CHECK(ndr_token_retrieve(&ndr->relative_begin_list, p, &begin_offset)); >+ >+ /* we have marshalled a buffer, see how long it was */ >+ len = ndr->offset - begin_offset; >+ >+ if (len < 0) { >+ return ndr_push_error(ndr, NDR_ERR_RELATIVE, >+ "ndr_push_relative_ptr2_end:" >+ "offset %u - begin_offset %u < 0", >+ ndr->offset, begin_offset); >+ } >+ >+ if (ndr->relative_end_offset < len) { >+ return ndr_push_error(ndr, NDR_ERR_RELATIVE, >+ "ndr_push_relative_ptr2_end:" >+ "relative_end_offset %u < len %lld", >+ ndr->offset, (long long)len); >+ } >+ >+ /* the reversed offset is at the end of the main buffer */ >+ correct_offset = ndr->relative_end_offset - len; >+ >+ if (ndr->flags & LIBNDR_FLAG_ALIGN2) { >+ align = 2; >+ } else if (ndr->flags & LIBNDR_FLAG_ALIGN4) { >+ align = 4; >+ } else if (ndr->flags & LIBNDR_FLAG_ALIGN8) { >+ align = 8; >+ } >+ >+ pad = ndr_align_size(correct_offset, align); >+ if (pad) { >+ correct_offset += pad; >+ correct_offset -= align; >+ } >+ >+ if (correct_offset < begin_offset) { >+ return ndr_push_error(ndr, NDR_ERR_RELATIVE, >+ "ndr_push_relative_ptr2_end: " >+ "correct_offset %u < begin_offset %u", >+ correct_offset, begin_offset); >+ } >+ >+ if (len > 0) { >+ /* now move the marshalled buffer to the end of the main buffer */ >+ memmove(ndr->data + correct_offset, ndr->data + begin_offset, len); >+ >+ /* and wipe out old buffer within the main buffer */ >+ memset(ndr->data + begin_offset, '\0', len); >+ } >+ >+ /* and set the end offset for the next buffer */ >+ ndr->relative_end_offset = correct_offset; >+ >+ /* finally write the offset to the main buffer */ >+ ndr->offset = correct_offset; >+ NDR_CHECK(ndr_push_relative_ptr2(ndr, p)); >+ >+ /* restore to where we were in the main buffer */ >+ ndr->offset = begin_offset; >+ > return NDR_ERR_SUCCESS; > } > >-- >1.6.6 > > >From 11252ecd9bdadd7b79f99cde38b6546e9995e1df Mon Sep 17 00:00:00 2001 >From: Stefan Metzmacher <metze@samba.org> >Date: Thu, 18 Feb 2010 13:40:44 +0100 >Subject: [PATCH 14/24] libndr: for now align reverse relative pointers to 2 bytes by default. > >This is just a hack and we should let the callers use FLAG_ALIGN2 >explicit in future. > >metze >(cherry picked from commit 4a76d29374769ba4c075b8d5767498848d2e17d6) >--- > librpc/ndr/ndr.c | 3 +++ > 1 files changed, 3 insertions(+), 0 deletions(-) > >diff --git a/librpc/ndr/ndr.c b/librpc/ndr/ndr.c >index 05d6cce..f1ff597 100644 >--- a/librpc/ndr/ndr.c >+++ b/librpc/ndr/ndr.c >@@ -1140,6 +1140,9 @@ _PUBLIC_ enum ndr_err_code ndr_push_relative_ptr2_end(struct ndr_push *ndr, cons > /* the reversed offset is at the end of the main buffer */ > correct_offset = ndr->relative_end_offset - len; > >+ /* TODO: remove this hack and let the idl use FLAG_ALIGN2 explicit */ >+ align = 2; >+ > if (ndr->flags & LIBNDR_FLAG_ALIGN2) { > align = 2; > } else if (ndr->flags & LIBNDR_FLAG_ALIGN4) { >-- >1.6.6 > > >From 0a3ea218bdcaec61e14a039833d8669f8d336793 Mon Sep 17 00:00:00 2001 >From: Stefan Metzmacher <metze@samba.org> >Date: Thu, 18 Feb 2010 15:13:20 +0100 >Subject: [PATCH 15/24] libndr: fix ndr_size_* calculation with relative reverse buffers > >metze >(cherry picked from commit 8310f02414efd3b792857ed20c636c4c114e1ba2) >--- > librpc/ndr/ndr.c | 6 ++++++ > 1 files changed, 6 insertions(+), 0 deletions(-) > >diff --git a/librpc/ndr/ndr.c b/librpc/ndr/ndr.c >index f1ff597..ab4168a 100644 >--- a/librpc/ndr/ndr.c >+++ b/librpc/ndr/ndr.c >@@ -1111,6 +1111,12 @@ _PUBLIC_ enum ndr_err_code ndr_push_relative_ptr2_end(struct ndr_push *ndr, cons > return NDR_ERR_SUCCESS; > } > >+ if (ndr->flags & LIBNDR_FLAG_NO_NDR_SIZE) { >+ /* better say more than calculation a too small buffer */ >+ NDR_PUSH_ALIGN(ndr, 8); >+ return NDR_ERR_SUCCESS; >+ } >+ > if (ndr->relative_end_offset < ndr->offset) { > return ndr_push_error(ndr, NDR_ERR_RELATIVE, > "ndr_push_relative_ptr2_end:" >-- >1.6.6 > > >From 83137458ca73241659d513eef20bf79ac2ab66dc Mon Sep 17 00:00:00 2001 >From: Stefan Metzmacher <metze@samba.org> >Date: Wed, 23 Dec 2009 15:52:39 +0100 >Subject: [PATCH 16/24] spoolss: use subcontext in NDR_SPOOLSS_PUSH_ENUM_OUT macro. > >metze >(cherry picked from commit a4c3aeb79306190b09e284a6a28e3b40fbc5823b) >--- > librpc/ndr/ndr_spoolss_buf.c | 5 ++++- > 1 files changed, 4 insertions(+), 1 deletions(-) > >diff --git a/librpc/ndr/ndr_spoolss_buf.c b/librpc/ndr/ndr_spoolss_buf.c >index ca1ac99..80b661f 100644 >--- a/librpc/ndr/ndr_spoolss_buf.c >+++ b/librpc/ndr/ndr_spoolss_buf.c >@@ -63,11 +63,14 @@ > NDR_ERR_HAVE_NO_MEMORY(_ndr_info);\ > _ndr_info->flags= ndr->flags;\ > if (r->out.info) {\ >+ struct ndr_push *_subndr_info;\ > struct __##fn __r;\ > __r.in.level = r->in.level;\ > __r.in.count = *r->out.count;\ > __r.out.info = *r->out.info;\ >- NDR_CHECK(ndr_push___##fn(_ndr_info, flags, &__r)); \ >+ NDR_CHECK(ndr_push_subcontext_start(_ndr_info, &_subndr_info, 0, r->in.offered));\ >+ NDR_CHECK(ndr_push___##fn(_subndr_info, flags, &__r)); \ >+ NDR_CHECK(ndr_push_subcontext_end(_ndr_info, _subndr_info, 0, r->in.offered));\ > }\ > if (r->in.offered > _ndr_info->offset) {\ > uint32_t _padding_len = r->in.offered - _ndr_info->offset;\ >-- >1.6.6 > > >From 8ba132a71e2bf1381be88addf5540be6516ded4a Mon Sep 17 00:00:00 2001 >From: Stefan Metzmacher <metze@samba.org> >Date: Thu, 18 Feb 2010 15:17:42 +0100 >Subject: [PATCH 17/24] ndr_spoolss_buf: use LIBNDR_FLAG_NO_NDR_SIZE in NDR_SPOOLSS_SIZE_* > >metze >(cherry picked from commit 2059a165ee6f4d231aa4075d8ddea70b8df8944f) >--- > librpc/ndr/ndr_spoolss_buf.c | 4 ++-- > 1 files changed, 2 insertions(+), 2 deletions(-) > >diff --git a/librpc/ndr/ndr_spoolss_buf.c b/librpc/ndr/ndr_spoolss_buf.c >index 80b661f..1a58ac1 100644 >--- a/librpc/ndr/ndr_spoolss_buf.c >+++ b/librpc/ndr/ndr_spoolss_buf.c >@@ -182,7 +182,7 @@ > DATA_BLOB _data_blob_info;\ > struct ndr_push *_ndr_info = ndr_push_init_ctx(mem_ctx, iconv_convenience);\ > if (!_ndr_info) return 0;\ >- _ndr_info->flags|=0;\ >+ _ndr_info->flags|=LIBNDR_FLAG_NO_NDR_SIZE;\ > __r.in.level = level;\ > __r.in.count = count;\ > __r.out.info = info;\ >@@ -197,7 +197,7 @@ > DATA_BLOB _data_blob_info;\ > struct ndr_push *_ndr_info = ndr_push_init_ctx(mem_ctx, iconv_convenience);\ > if (!_ndr_info) return 0;\ >- _ndr_info->flags|=0;\ >+ _ndr_info->flags|=LIBNDR_FLAG_NO_NDR_SIZE;\ > __r.in.count = count;\ > __r.out.info = info;\ > _NDR_CHECK_UINT32(ndr_push___##fn(_ndr_info, NDR_OUT, &__r)); \ >-- >1.6.6 > > >From bbe37b02b4f7650d5bb5475390a7f8dbb882c226 Mon Sep 17 00:00:00 2001 >From: =?UTF-8?q?G=C3=BCnther=20Deschner?= <gd@samba.org> >Date: Mon, 14 Dec 2009 17:22:39 +0100 >Subject: [PATCH 18/24] spoolss: set NDR_RELATIVE_REVERSE flag for various unions that have relative pointers. > >Guenther >(cherry picked from commit 6d0a39741dacd81e33b25a91fa28cdf983d10d84) >--- > librpc/idl/spoolss.idl | 20 ++++++++++---------- > 1 files changed, 10 insertions(+), 10 deletions(-) > >diff --git a/librpc/idl/spoolss.idl b/librpc/idl/spoolss.idl >index 1bea82e..d4ca3c6 100644 >--- a/librpc/idl/spoolss.idl >+++ b/librpc/idl/spoolss.idl >@@ -337,7 +337,7 @@ import "misc.idl", "security.idl", "winreg.idl"; > [relative,subcontext(0)] spoolss_DeviceMode *devmode; > } spoolss_DeviceModeInfo; > >- typedef [nodiscriminant,relative_base,public,gensize] union { >+ typedef [nodiscriminant,relative_base,public,gensize,flag(NDR_RELATIVE_REVERSE)] union { > [case(0)] spoolss_PrinterInfo0 info0; > [case(1)] spoolss_PrinterInfo1 info1; > [case(2)] spoolss_PrinterInfo2 info2; >@@ -476,7 +476,7 @@ import "misc.idl", "security.idl", "winreg.idl"; > uint32 size_high; > } spoolss_JobInfo4; > >- typedef [nodiscriminant,relative_base,public,gensize] union { >+ typedef [nodiscriminant,relative_base,public,gensize,flag(NDR_RELATIVE_REVERSE)] union { > [case(1)] spoolss_JobInfo1 info1; > [case(2)] spoolss_JobInfo2 info2; > [case(3)] spoolss_JobInfo3 info3; >@@ -1056,7 +1056,7 @@ import "misc.idl", "security.idl", "winreg.idl"; > [relative] nstring *provider; > } spoolss_DriverInfo101; > >- typedef [nodiscriminant,relative_base,public,gensize] union { >+ typedef [nodiscriminant,relative_base,public,gensize,flag(NDR_RELATIVE_REVERSE)] union { > [case(1)] spoolss_DriverInfo1 info1; > [case(2)] spoolss_DriverInfo2 info2; > [case(3)] spoolss_DriverInfo3 info3; >@@ -1110,7 +1110,7 @@ import "misc.idl", "security.idl", "winreg.idl"; > /* NOTE: it's seems that w2k3 completly ignores the level > in its server code > */ >- typedef [nodiscriminant,relative_base,gensize,public] union { >+ typedef [nodiscriminant,relative_base,public,gensize,flag(NDR_RELATIVE_REVERSE)] union { > [case(1)] spoolss_DriverDirectoryInfo1 info1; > [default] spoolss_DriverDirectoryInfo1 info1; > } spoolss_DriverDirectoryInfo; >@@ -1148,7 +1148,7 @@ import "misc.idl", "security.idl", "winreg.idl"; > [relative] nstring *print_processor_name; > } spoolss_PrintProcessorInfo1; > >- typedef [nodiscriminant,relative_base,public] union { >+ typedef [nodiscriminant,relative_base,public,flag(NDR_RELATIVE_REVERSE)] union { > [case(1)] spoolss_PrintProcessorInfo1 info1; > [default]; > } spoolss_PrintProcessorInfo; >@@ -1185,7 +1185,7 @@ import "misc.idl", "security.idl", "winreg.idl"; > nstring directory_name; > } spoolss_PrintProcessorDirectoryInfo1; > >- typedef [nodiscriminant,relative_base,gensize,public] union { >+ typedef [nodiscriminant,relative_base,public,gensize,flag(NDR_RELATIVE_REVERSE)] union { > [case(1)] spoolss_PrintProcessorDirectoryInfo1 info1; > [default] spoolss_PrintProcessorDirectoryInfo1 info1; > } spoolss_PrintProcessorDirectoryInfo; >@@ -1424,7 +1424,7 @@ import "misc.idl", "security.idl", "winreg.idl"; > uint32 lang_id; > } spoolss_FormInfo2; > >- typedef [nodiscriminant,relative_base,public,gensize] union { >+ typedef [nodiscriminant,relative_base,public,gensize,flag(NDR_RELATIVE_REVERSE)] union { > [case(1)] spoolss_FormInfo1 info1; > [case(2)] spoolss_FormInfo2 info2; > [default]; >@@ -1577,7 +1577,7 @@ import "misc.idl", "security.idl", "winreg.idl"; > DATA_BLOB monitor_data; /* relative ?? */ > } spoolss_PortInfoFF; > >- typedef [nodiscriminant,relative_base,public] union { >+ typedef [nodiscriminant,relative_base,public,flag(NDR_RELATIVE_REVERSE)] union { > [case(1)] spoolss_PortInfo1 info1; > [case(2)] spoolss_PortInfo2 info2; > [case(3)] spoolss_PortInfo3 info3; >@@ -1623,7 +1623,7 @@ import "misc.idl", "security.idl", "winreg.idl"; > [relative] nstring *dll_name; > } spoolss_MonitorInfo2; > >- typedef [nodiscriminant,relative_base,public] union { >+ typedef [nodiscriminant,relative_base,public,flag(NDR_RELATIVE_REVERSE)] union { > [case(1)] spoolss_MonitorInfo1 info1; > [case(2)] spoolss_MonitorInfo2 info2; > [default]; >@@ -1735,7 +1735,7 @@ import "misc.idl", "security.idl", "winreg.idl"; > [relative] nstring *name_array; > } spoolss_PrintProcDataTypesInfo1; > >- typedef [nodiscriminant,relative_base,public] union { >+ typedef [nodiscriminant,relative_base,public,flag(NDR_RELATIVE_REVERSE)] union { > [case(1)] spoolss_PrintProcDataTypesInfo1 info1; > [default]; > } spoolss_PrintProcDataTypesInfo; >-- >1.6.6 > > >From 5031a6eb8f4c35b054fbfd3d4a2b5749c4cda63a Mon Sep 17 00:00:00 2001 >From: Stefan Metzmacher <metze@samba.org> >Date: Thu, 18 Feb 2010 15:36:08 +0100 >Subject: [PATCH 19/24] spoolss: make all security descriptors and devicemodes 4 byte aligned and add missing subcontexts. > >Guenther >(cherry picked from commit 8f52957369bf8ce7591d5d9a1436ccb7e384c612) >--- > librpc/idl/spoolss.idl | 16 ++++++++-------- > 1 files changed, 8 insertions(+), 8 deletions(-) > >diff --git a/librpc/idl/spoolss.idl b/librpc/idl/spoolss.idl >index d4ca3c6..6983b36 100644 >--- a/librpc/idl/spoolss.idl >+++ b/librpc/idl/spoolss.idl >@@ -282,12 +282,12 @@ import "misc.idl", "security.idl", "winreg.idl"; > [relative] nstring *drivername; > [relative] nstring *comment; > [relative] nstring *location; >- [relative,subcontext(0)] spoolss_DeviceMode *devmode; >+ [relative,subcontext(0),flag(NDR_ALIGN4)] spoolss_DeviceMode *devmode; > [relative] nstring *sepfile; > [relative] nstring *printprocessor; > [relative] nstring *datatype; > [relative] nstring *parameters; >- [relative,subcontext(0)] security_descriptor *secdesc; >+ [relative,subcontext(0),flag(NDR_ALIGN4)] security_descriptor *secdesc; > spoolss_PrinterAttributes attributes; > [range(0,99)] uint32 priority; > uint32 defaultpriority; >@@ -299,7 +299,7 @@ import "misc.idl", "security.idl", "winreg.idl"; > } spoolss_PrinterInfo2; > > typedef [public,gensize] struct { >- [relative,subcontext(0)] security_descriptor *secdesc; >+ [relative,subcontext(0),flag(NDR_ALIGN4)] security_descriptor *secdesc; > } spoolss_PrinterInfo3; > > typedef [public,gensize] struct { >@@ -334,7 +334,7 @@ import "misc.idl", "security.idl", "winreg.idl"; > } spoolss_PrinterInfo7; > > typedef struct { >- [relative,subcontext(0)] spoolss_DeviceMode *devmode; >+ [relative,subcontext(0),flag(NDR_ALIGN4)] spoolss_DeviceMode *devmode; > } spoolss_DeviceModeInfo; > > typedef [nodiscriminant,relative_base,public,gensize,flag(NDR_RELATIVE_REVERSE)] union { >@@ -428,9 +428,9 @@ import "misc.idl", "security.idl", "winreg.idl"; > [relative] nstring *print_processor; > [relative] nstring *parameters; > [relative] nstring *driver_name; >- [relative] spoolss_DeviceMode *devmode; >+ [relative,subcontext(0),flag(NDR_ALIGN4)] spoolss_DeviceMode *devmode; > [relative] nstring *text_status; >- [relative] security_descriptor *secdesc; >+ [relative,subcontext(0),flag(NDR_ALIGN4)] security_descriptor *secdesc; > spoolss_JobStatus status; > [range(0,99)] uint32 priority; > uint32 position; >@@ -460,9 +460,9 @@ import "misc.idl", "security.idl", "winreg.idl"; > [relative] nstring *print_processor; > [relative] nstring *parameters; > [relative] nstring *driver_name; >- [relative] spoolss_DeviceMode *devmode; >+ [relative,subcontext(0),flag(NDR_ALIGN4)] spoolss_DeviceMode *devmode; > [relative] nstring *text_status; >- [relative] security_descriptor *secdesc; >+ [relative,subcontext(0),flag(NDR_ALIGN4)] security_descriptor *secdesc; > spoolss_JobStatus status; > [range(0,99)] uint32 priority; > uint32 position; >-- >1.6.6 > > >From e317882824ef0fce0904ce5a74fe302f4075a75f Mon Sep 17 00:00:00 2001 >From: =?UTF-8?q?G=C3=BCnther=20Deschner?= <gd@samba.org> >Date: Sat, 13 Feb 2010 04:27:05 +0100 >Subject: [PATCH 20/24] spoolss: make two bitmaps public. > >Guenther >--- > librpc/idl/spoolss.idl | 4 ++-- > 1 files changed, 2 insertions(+), 2 deletions(-) > >diff --git a/librpc/idl/spoolss.idl b/librpc/idl/spoolss.idl >index 6983b36..d69e9f3 100644 >--- a/librpc/idl/spoolss.idl >+++ b/librpc/idl/spoolss.idl >@@ -68,7 +68,7 @@ import "misc.idl", "security.idl", "winreg.idl"; > > const int PRINTER_STATUS_OK = 0x00000000; > >- typedef bitmap { >+ typedef [public] bitmap { > PRINTER_STATUS_PAUSED = 0x00000001, > PRINTER_STATUS_ERROR = 0x00000002, > PRINTER_STATUS_PENDING_DELETION = 0x00000004, >@@ -255,7 +255,7 @@ import "misc.idl", "security.idl", "winreg.idl"; > [relative] nstring *comment; > } spoolss_PrinterInfo1; > >- typedef bitmap { >+ typedef [public] bitmap { > PRINTER_ATTRIBUTE_QUEUED = 0x00000001, > PRINTER_ATTRIBUTE_DIRECT = 0x00000002, > PRINTER_ATTRIBUTE_DEFAULT = 0x00000004, >-- >1.6.6 > > >From bacaeaef25580053156e320fbb21ba040d08352f Mon Sep 17 00:00:00 2001 >From: =?UTF-8?q?G=C3=BCnther=20Deschner?= <gd@samba.org> >Date: Tue, 16 Feb 2010 10:46:07 +0100 >Subject: [PATCH 21/24] security: make two bitmaps public. > >Guenther >(cherry picked from commit f10a2d773d141f67319e19b45c40101bb9cb6cf4) >--- > librpc/idl/security.idl | 4 ++-- > 1 files changed, 2 insertions(+), 2 deletions(-) > >diff --git a/librpc/idl/security.idl b/librpc/idl/security.idl >index caad08e..b5c7907 100644 >--- a/librpc/idl/security.idl >+++ b/librpc/idl/security.idl >@@ -345,14 +345,14 @@ interface security > } security_acl; > > /* default revision for new ACLs */ >- typedef [enum8bit] enum { >+ typedef [public,enum8bit] enum { > SECURITY_DESCRIPTOR_REVISION_1 = 1 > } security_descriptor_revision; > > const int SD_REVISION = SECURITY_DESCRIPTOR_REVISION_1; > > /* security_descriptor->type bits */ >- typedef [bitmap16bit] bitmap { >+ typedef [public,bitmap16bit] bitmap { > SEC_DESC_OWNER_DEFAULTED = 0x0001, > SEC_DESC_GROUP_DEFAULTED = 0x0002, > SEC_DESC_DACL_PRESENT = 0x0004, >-- >1.6.6 > > >From 57e4d44d56589cdd03256687bd0baeb783869a4f Mon Sep 17 00:00:00 2001 >From: =?UTF-8?q?G=C3=BCnther=20Deschner?= <gd@samba.org> >Date: Tue, 9 Feb 2010 16:47:32 +0100 >Subject: [PATCH 22/24] s3: re-run make samba3-idl. > >Guenther >--- > librpc/gen_ndr/ndr_security.c | 8 +- > librpc/gen_ndr/ndr_security.h | 4 + > librpc/gen_ndr/ndr_spoolss.c | 2720 +++++++++++++++++++++++------------------ > librpc/gen_ndr/ndr_spoolss.h | 4 + > librpc/gen_ndr/spoolss.h | 36 +- > 5 files changed, 1568 insertions(+), 1204 deletions(-) > >diff --git a/librpc/gen_ndr/ndr_security.c b/librpc/gen_ndr/ndr_security.c >index 6b6b262..3ae6ec3 100644 >--- a/librpc/gen_ndr/ndr_security.c >+++ b/librpc/gen_ndr/ndr_security.c >@@ -541,13 +541,13 @@ _PUBLIC_ void ndr_print_security_acl(struct ndr_print *ndr, const char *name, co > ndr->depth--; > } > >-static enum ndr_err_code ndr_push_security_descriptor_revision(struct ndr_push *ndr, int ndr_flags, enum security_descriptor_revision r) >+_PUBLIC_ enum ndr_err_code ndr_push_security_descriptor_revision(struct ndr_push *ndr, int ndr_flags, enum security_descriptor_revision r) > { > NDR_CHECK(ndr_push_uint8(ndr, NDR_SCALARS, r)); > return NDR_ERR_SUCCESS; > } > >-static enum ndr_err_code ndr_pull_security_descriptor_revision(struct ndr_pull *ndr, int ndr_flags, enum security_descriptor_revision *r) >+_PUBLIC_ enum ndr_err_code ndr_pull_security_descriptor_revision(struct ndr_pull *ndr, int ndr_flags, enum security_descriptor_revision *r) > { > uint8_t v; > NDR_CHECK(ndr_pull_uint8(ndr, NDR_SCALARS, &v)); >@@ -565,13 +565,13 @@ _PUBLIC_ void ndr_print_security_descriptor_revision(struct ndr_print *ndr, cons > ndr_print_enum(ndr, name, "ENUM", val, r); > } > >-static enum ndr_err_code ndr_push_security_descriptor_type(struct ndr_push *ndr, int ndr_flags, uint16_t r) >+_PUBLIC_ enum ndr_err_code ndr_push_security_descriptor_type(struct ndr_push *ndr, int ndr_flags, uint16_t r) > { > NDR_CHECK(ndr_push_uint16(ndr, NDR_SCALARS, r)); > return NDR_ERR_SUCCESS; > } > >-static enum ndr_err_code ndr_pull_security_descriptor_type(struct ndr_pull *ndr, int ndr_flags, uint16_t *r) >+_PUBLIC_ enum ndr_err_code ndr_pull_security_descriptor_type(struct ndr_pull *ndr, int ndr_flags, uint16_t *r) > { > uint16_t v; > NDR_CHECK(ndr_pull_uint16(ndr, NDR_SCALARS, &v)); >diff --git a/librpc/gen_ndr/ndr_security.h b/librpc/gen_ndr/ndr_security.h >index eddd3c3..6613cce 100644 >--- a/librpc/gen_ndr/ndr_security.h >+++ b/librpc/gen_ndr/ndr_security.h >@@ -33,7 +33,11 @@ enum ndr_err_code ndr_push_security_acl(struct ndr_push *ndr, int ndr_flags, con > enum ndr_err_code ndr_pull_security_acl(struct ndr_pull *ndr, int ndr_flags, struct security_acl *r); > void ndr_print_security_acl(struct ndr_print *ndr, const char *name, const struct security_acl *r); > size_t ndr_size_security_acl(const struct security_acl *r, struct smb_iconv_convenience *ic, int flags); >+enum ndr_err_code ndr_push_security_descriptor_revision(struct ndr_push *ndr, int ndr_flags, enum security_descriptor_revision r); >+enum ndr_err_code ndr_pull_security_descriptor_revision(struct ndr_pull *ndr, int ndr_flags, enum security_descriptor_revision *r); > void ndr_print_security_descriptor_revision(struct ndr_print *ndr, const char *name, enum security_descriptor_revision r); >+enum ndr_err_code ndr_push_security_descriptor_type(struct ndr_push *ndr, int ndr_flags, uint16_t r); >+enum ndr_err_code ndr_pull_security_descriptor_type(struct ndr_pull *ndr, int ndr_flags, uint16_t *r); > void ndr_print_security_descriptor_type(struct ndr_print *ndr, const char *name, uint16_t r); > enum ndr_err_code ndr_push_security_descriptor(struct ndr_push *ndr, int ndr_flags, const struct security_descriptor *r); > enum ndr_err_code ndr_pull_security_descriptor(struct ndr_pull *ndr, int ndr_flags, struct security_descriptor *r); >diff --git a/librpc/gen_ndr/ndr_spoolss.c b/librpc/gen_ndr/ndr_spoolss.c >index 5c2f28c..59919cc 100644 >--- a/librpc/gen_ndr/ndr_spoolss.c >+++ b/librpc/gen_ndr/ndr_spoolss.c >@@ -224,13 +224,13 @@ _PUBLIC_ void ndr_print_spoolss_MinorVersion(struct ndr_print *ndr, const char * > ndr_print_enum(ndr, name, "ENUM", val, r); > } > >-static enum ndr_err_code ndr_push_spoolss_PrinterStatus(struct ndr_push *ndr, int ndr_flags, uint32_t r) >+_PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterStatus(struct ndr_push *ndr, int ndr_flags, uint32_t r) > { > NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r)); > return NDR_ERR_SUCCESS; > } > >-static enum ndr_err_code ndr_pull_spoolss_PrinterStatus(struct ndr_pull *ndr, int ndr_flags, uint32_t *r) >+_PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterStatus(struct ndr_pull *ndr, int ndr_flags, uint32_t *r) > { > uint32_t v; > NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v)); >@@ -953,13 +953,13 @@ _PUBLIC_ size_t ndr_size_spoolss_PrinterInfo1(const struct spoolss_PrinterInfo1 > return ndr_size_struct(r, flags, (ndr_push_flags_fn_t)ndr_push_spoolss_PrinterInfo1, ic); > } > >-static enum ndr_err_code ndr_push_spoolss_PrinterAttributes(struct ndr_push *ndr, int ndr_flags, uint32_t r) >+_PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterAttributes(struct ndr_push *ndr, int ndr_flags, uint32_t r) > { > NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r)); > return NDR_ERR_SUCCESS; > } > >-static enum ndr_err_code ndr_pull_spoolss_PrinterAttributes(struct ndr_pull *ndr, int ndr_flags, uint32_t *r) >+_PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterAttributes(struct ndr_pull *ndr, int ndr_flags, uint32_t *r) > { > uint32_t v; > NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &v)); >@@ -1036,7 +1036,12 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo2(struct ndr_push *ndr, i > NDR_CHECK(ndr_push_relative_ptr1(ndr, r->location)); > ndr->flags = _flags_save_string; > } >- NDR_CHECK(ndr_push_relative_ptr1(ndr, r->devmode)); >+ { >+ 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; >+ } > { > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >@@ -1061,7 +1066,12 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo2(struct ndr_push *ndr, i > NDR_CHECK(ndr_push_relative_ptr1(ndr, r->parameters)); > ndr->flags = _flags_save_string; > } >- NDR_CHECK(ndr_push_relative_ptr1(ndr, r->secdesc)); >+ { >+ uint32_t _flags_save_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_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)); >@@ -1142,15 +1152,20 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo2(struct ndr_push *ndr, i > } > ndr->flags = _flags_save_string; > } >- 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)); >+ { >+ 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_CHECK(ndr_push_relative_ptr2_end(ndr, r->devmode)); >+ ndr->flags = _flags_save_spoolss_DeviceMode; > } > { > uint32_t _flags_save_string = ndr->flags; >@@ -1192,15 +1207,20 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo2(struct ndr_push *ndr, i > } > ndr->flags = _flags_save_string; > } >- 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_security_descriptor(_ndr_secdesc, NDR_SCALARS|NDR_BUFFERS, r->secdesc)); >- NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_secdesc, 0, -1)); >+ { >+ uint32_t _flags_save_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_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_CHECK(ndr_push_relative_ptr2_end(ndr, r->secdesc)); >+ ndr->flags = _flags_save_security_descriptor; > } > } > return NDR_ERR_SUCCESS; >@@ -1320,12 +1340,17 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterInfo2(struct ndr_pull *ndr, i > } > ndr->flags = _flags_save_string; > } >- 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; >+ { >+ 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; > } > { > uint32_t _flags_save_string = ndr->flags; >@@ -1375,12 +1400,17 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterInfo2(struct ndr_pull *ndr, i > } > ndr->flags = _flags_save_string; > } >- 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; >+ { >+ uint32_t _flags_save_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_security_descriptor; > } > NDR_CHECK(ndr_pull_spoolss_PrinterAttributes(ndr, NDR_SCALARS, &r->attributes)); > NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->priority)); >@@ -1500,20 +1530,25 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterInfo2(struct ndr_pull *ndr, i > } > ndr->flags = _flags_save_string; > } >- 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)); >+ { >+ 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_PULL_SET_MEM_CTX(ndr, _mem_save_devmode_0, 0); >- ndr->offset = _relative_save_offset; >+ ndr->flags = _flags_save_spoolss_DeviceMode; > } > { > uint32_t _flags_save_string = ndr->flags; >@@ -1575,20 +1610,25 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterInfo2(struct ndr_pull *ndr, i > } > ndr->flags = _flags_save_string; > } >- 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_security_descriptor(_ndr_secdesc, NDR_SCALARS|NDR_BUFFERS, r->secdesc)); >- NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_secdesc, 0, -1)); >+ { >+ uint32_t _flags_save_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_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_PULL_SET_MEM_CTX(ndr, _mem_save_secdesc_0, 0); >- ndr->offset = _relative_save_offset; >+ ndr->flags = _flags_save_security_descriptor; > } > } > return NDR_ERR_SUCCESS; >@@ -1696,18 +1736,28 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo3(struct ndr_push *ndr, i > { > if (ndr_flags & NDR_SCALARS) { > NDR_CHECK(ndr_push_align(ndr, 4)); >- NDR_CHECK(ndr_push_relative_ptr1(ndr, r->secdesc)); >+ { >+ uint32_t _flags_save_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_security_descriptor; >+ } > } > if (ndr_flags & NDR_BUFFERS) { >- 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_security_descriptor(_ndr_secdesc, NDR_SCALARS|NDR_BUFFERS, r->secdesc)); >- NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_secdesc, 0, -1)); >+ { >+ uint32_t _flags_save_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_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_CHECK(ndr_push_relative_ptr2_end(ndr, r->secdesc)); >+ ndr->flags = _flags_save_security_descriptor; > } > } > return NDR_ERR_SUCCESS; >@@ -1719,29 +1769,39 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterInfo3(struct ndr_pull *ndr, i > TALLOC_CTX *_mem_save_secdesc_0; > if (ndr_flags & NDR_SCALARS) { > NDR_CHECK(ndr_pull_align(ndr, 4)); >- 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; >+ { >+ uint32_t _flags_save_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_security_descriptor; > } > } > if (ndr_flags & NDR_BUFFERS) { >- 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_security_descriptor(_ndr_secdesc, NDR_SCALARS|NDR_BUFFERS, r->secdesc)); >- NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_secdesc, 0, -1)); >+ { >+ uint32_t _flags_save_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_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_PULL_SET_MEM_CTX(ndr, _mem_save_secdesc_0, 0); >- ndr->offset = _relative_save_offset; >+ ndr->flags = _flags_save_security_descriptor; > } > } > return NDR_ERR_SUCCESS; >@@ -2196,18 +2256,28 @@ static enum ndr_err_code ndr_push_spoolss_DeviceModeInfo(struct ndr_push *ndr, i > { > if (ndr_flags & NDR_SCALARS) { > NDR_CHECK(ndr_push_align(ndr, 4)); >- NDR_CHECK(ndr_push_relative_ptr1(ndr, r->devmode)); >+ { >+ 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; >+ } > } > if (ndr_flags & NDR_BUFFERS) { >- 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)); >+ { >+ 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_CHECK(ndr_push_relative_ptr2_end(ndr, r->devmode)); >+ ndr->flags = _flags_save_spoolss_DeviceMode; > } > } > return NDR_ERR_SUCCESS; >@@ -2219,29 +2289,39 @@ static enum ndr_err_code ndr_pull_spoolss_DeviceModeInfo(struct ndr_pull *ndr, i > TALLOC_CTX *_mem_save_devmode_0; > if (ndr_flags & NDR_SCALARS) { > NDR_CHECK(ndr_pull_align(ndr, 4)); >- 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; >+ { >+ 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; > } > } > if (ndr_flags & NDR_BUFFERS) { >- 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)); >+ { >+ 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_PULL_SET_MEM_CTX(ndr, _mem_save_devmode_0, 0); >- ndr->offset = _relative_save_offset; >+ ndr->flags = _flags_save_spoolss_DeviceMode; > } > } > return NDR_ERR_SUCCESS; >@@ -2263,121 +2343,126 @@ _PUBLIC_ void ndr_print_spoolss_DeviceModeInfo(struct ndr_print *ndr, const char > _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo(struct ndr_push *ndr, int ndr_flags, const union spoolss_PrinterInfo *r) > { > uint32_t _save_relative_base_offset = ndr_push_get_relative_base_offset(ndr); >- if (ndr_flags & NDR_SCALARS) { >- int level = ndr_push_get_switch_value(ndr, r); >- switch (level) { >- case 0: { >- NDR_CHECK(ndr_push_align(ndr, 4)); >- NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_push_spoolss_PrinterInfo0(ndr, NDR_SCALARS, &r->info0)); >- break; } >- >- case 1: { >- NDR_CHECK(ndr_push_align(ndr, 4)); >- NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_push_spoolss_PrinterInfo1(ndr, NDR_SCALARS, &r->info1)); >- break; } >- >- case 2: { >- NDR_CHECK(ndr_push_align(ndr, 4)); >- NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_push_spoolss_PrinterInfo2(ndr, NDR_SCALARS, &r->info2)); >- break; } >- >- case 3: { >- NDR_CHECK(ndr_push_align(ndr, 4)); >- NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_push_spoolss_PrinterInfo3(ndr, NDR_SCALARS, &r->info3)); >- break; } >- >- case 4: { >- NDR_CHECK(ndr_push_align(ndr, 4)); >- NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_push_spoolss_PrinterInfo4(ndr, NDR_SCALARS, &r->info4)); >- break; } >- >- case 5: { >- NDR_CHECK(ndr_push_align(ndr, 4)); >- NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_push_spoolss_PrinterInfo5(ndr, NDR_SCALARS, &r->info5)); >- break; } >- >- case 6: { >- NDR_CHECK(ndr_push_align(ndr, 4)); >- NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_push_spoolss_PrinterInfo6(ndr, NDR_SCALARS, &r->info6)); >- break; } >- >- case 7: { >- NDR_CHECK(ndr_push_align(ndr, 4)); >- NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_push_spoolss_PrinterInfo7(ndr, NDR_SCALARS, &r->info7)); >- break; } >- >- case 8: { >- NDR_CHECK(ndr_push_align(ndr, 4)); >- NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_push_spoolss_DeviceModeInfo(ndr, NDR_SCALARS, &r->info8)); >- break; } >- >- case 9: { >- NDR_CHECK(ndr_push_align(ndr, 4)); >- NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_push_spoolss_DeviceModeInfo(ndr, NDR_SCALARS, &r->info9)); >- break; } >- >- default: { >- break; } >- >- } >- } >- if (ndr_flags & NDR_BUFFERS) { >- int level = ndr_push_get_switch_value(ndr, r); >- NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r)); >- switch (level) { >- case 0: >- NDR_CHECK(ndr_push_spoolss_PrinterInfo0(ndr, NDR_BUFFERS, &r->info0)); >- break; >- >- case 1: >- NDR_CHECK(ndr_push_spoolss_PrinterInfo1(ndr, NDR_BUFFERS, &r->info1)); >- break; >- >- case 2: >- NDR_CHECK(ndr_push_spoolss_PrinterInfo2(ndr, NDR_BUFFERS, &r->info2)); >- break; >- >- case 3: >- NDR_CHECK(ndr_push_spoolss_PrinterInfo3(ndr, NDR_BUFFERS, &r->info3)); >- break; >- >- case 4: >- NDR_CHECK(ndr_push_spoolss_PrinterInfo4(ndr, NDR_BUFFERS, &r->info4)); >- break; >- >- case 5: >- NDR_CHECK(ndr_push_spoolss_PrinterInfo5(ndr, NDR_BUFFERS, &r->info5)); >- break; >- >- case 6: >- break; >- >- case 7: >- NDR_CHECK(ndr_push_spoolss_PrinterInfo7(ndr, NDR_BUFFERS, &r->info7)); >- break; >- >- case 8: >- NDR_CHECK(ndr_push_spoolss_DeviceModeInfo(ndr, NDR_BUFFERS, &r->info8)); >- break; >- >- case 9: >- NDR_CHECK(ndr_push_spoolss_DeviceModeInfo(ndr, NDR_BUFFERS, &r->info9)); >- break; >- >- default: >- break; >+ { >+ uint32_t _flags_save_UNION = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE); >+ if (ndr_flags & NDR_SCALARS) { >+ int level = ndr_push_get_switch_value(ndr, r); >+ switch (level) { >+ case 0: { >+ NDR_CHECK(ndr_push_align(ndr, 4)); >+ NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_push_spoolss_PrinterInfo0(ndr, NDR_SCALARS, &r->info0)); >+ break; } >+ >+ case 1: { >+ NDR_CHECK(ndr_push_align(ndr, 4)); >+ NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_push_spoolss_PrinterInfo1(ndr, NDR_SCALARS, &r->info1)); >+ break; } >+ >+ case 2: { >+ NDR_CHECK(ndr_push_align(ndr, 4)); >+ NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_push_spoolss_PrinterInfo2(ndr, NDR_SCALARS, &r->info2)); >+ break; } >+ >+ case 3: { >+ NDR_CHECK(ndr_push_align(ndr, 4)); >+ NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_push_spoolss_PrinterInfo3(ndr, NDR_SCALARS, &r->info3)); >+ break; } >+ >+ case 4: { >+ NDR_CHECK(ndr_push_align(ndr, 4)); >+ NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_push_spoolss_PrinterInfo4(ndr, NDR_SCALARS, &r->info4)); >+ break; } >+ >+ case 5: { >+ NDR_CHECK(ndr_push_align(ndr, 4)); >+ NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_push_spoolss_PrinterInfo5(ndr, NDR_SCALARS, &r->info5)); >+ break; } >+ >+ case 6: { >+ NDR_CHECK(ndr_push_align(ndr, 4)); >+ NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_push_spoolss_PrinterInfo6(ndr, NDR_SCALARS, &r->info6)); >+ break; } >+ >+ case 7: { >+ NDR_CHECK(ndr_push_align(ndr, 4)); >+ NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_push_spoolss_PrinterInfo7(ndr, NDR_SCALARS, &r->info7)); >+ break; } >+ >+ case 8: { >+ NDR_CHECK(ndr_push_align(ndr, 4)); >+ NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_push_spoolss_DeviceModeInfo(ndr, NDR_SCALARS, &r->info8)); >+ break; } >+ >+ case 9: { >+ NDR_CHECK(ndr_push_align(ndr, 4)); >+ NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_push_spoolss_DeviceModeInfo(ndr, NDR_SCALARS, &r->info9)); >+ break; } >+ >+ default: { >+ break; } >+ >+ } >+ } >+ if (ndr_flags & NDR_BUFFERS) { >+ int level = ndr_push_get_switch_value(ndr, r); >+ NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r)); >+ switch (level) { >+ case 0: >+ NDR_CHECK(ndr_push_spoolss_PrinterInfo0(ndr, NDR_BUFFERS, &r->info0)); >+ break; >+ >+ case 1: >+ NDR_CHECK(ndr_push_spoolss_PrinterInfo1(ndr, NDR_BUFFERS, &r->info1)); >+ break; >+ >+ case 2: >+ NDR_CHECK(ndr_push_spoolss_PrinterInfo2(ndr, NDR_BUFFERS, &r->info2)); >+ break; >+ >+ case 3: >+ NDR_CHECK(ndr_push_spoolss_PrinterInfo3(ndr, NDR_BUFFERS, &r->info3)); >+ break; >+ >+ case 4: >+ NDR_CHECK(ndr_push_spoolss_PrinterInfo4(ndr, NDR_BUFFERS, &r->info4)); >+ break; >+ >+ case 5: >+ NDR_CHECK(ndr_push_spoolss_PrinterInfo5(ndr, NDR_BUFFERS, &r->info5)); >+ break; >+ >+ case 6: >+ break; >+ >+ case 7: >+ NDR_CHECK(ndr_push_spoolss_PrinterInfo7(ndr, NDR_BUFFERS, &r->info7)); >+ break; >+ >+ case 8: >+ NDR_CHECK(ndr_push_spoolss_DeviceModeInfo(ndr, NDR_BUFFERS, &r->info8)); >+ break; >+ >+ case 9: >+ NDR_CHECK(ndr_push_spoolss_DeviceModeInfo(ndr, NDR_BUFFERS, &r->info9)); >+ break; >+ >+ default: >+ break; > >+ } > } >+ ndr->flags = _flags_save_UNION; > } > ndr_push_restore_relative_base_offset(ndr, _save_relative_base_offset); > return NDR_ERR_SUCCESS; >@@ -2387,179 +2472,190 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterInfo(struct ndr_pull *ndr, in > { > uint32_t _save_relative_base_offset = ndr_pull_get_relative_base_offset(ndr); > int level; >- level = ndr_pull_get_switch_value(ndr, r); >- if (ndr_flags & NDR_SCALARS) { >- switch (level) { >- case 0: { >- NDR_CHECK(ndr_pull_align(ndr, 4)); >- NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_pull_spoolss_PrinterInfo0(ndr, NDR_SCALARS, &r->info0)); >- break; } >- >- case 1: { >- NDR_CHECK(ndr_pull_align(ndr, 4)); >- NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_pull_spoolss_PrinterInfo1(ndr, NDR_SCALARS, &r->info1)); >- break; } >- >- case 2: { >- NDR_CHECK(ndr_pull_align(ndr, 4)); >- NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_pull_spoolss_PrinterInfo2(ndr, NDR_SCALARS, &r->info2)); >- break; } >- >- case 3: { >- NDR_CHECK(ndr_pull_align(ndr, 4)); >- NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_pull_spoolss_PrinterInfo3(ndr, NDR_SCALARS, &r->info3)); >- break; } >- >- case 4: { >- NDR_CHECK(ndr_pull_align(ndr, 4)); >- NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_pull_spoolss_PrinterInfo4(ndr, NDR_SCALARS, &r->info4)); >- break; } >- >- case 5: { >- NDR_CHECK(ndr_pull_align(ndr, 4)); >- NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_pull_spoolss_PrinterInfo5(ndr, NDR_SCALARS, &r->info5)); >- break; } >- >- case 6: { >- NDR_CHECK(ndr_pull_align(ndr, 4)); >- NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_pull_spoolss_PrinterInfo6(ndr, NDR_SCALARS, &r->info6)); >- break; } >- >- case 7: { >- NDR_CHECK(ndr_pull_align(ndr, 4)); >- NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_pull_spoolss_PrinterInfo7(ndr, NDR_SCALARS, &r->info7)); >- break; } >- >- case 8: { >- NDR_CHECK(ndr_pull_align(ndr, 4)); >- NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_pull_spoolss_DeviceModeInfo(ndr, NDR_SCALARS, &r->info8)); >- break; } >- >- case 9: { >- NDR_CHECK(ndr_pull_align(ndr, 4)); >- NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_pull_spoolss_DeviceModeInfo(ndr, NDR_SCALARS, &r->info9)); >- break; } >- >- default: { >- break; } >+ { >+ uint32_t _flags_save_UNION = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE); >+ level = ndr_pull_get_switch_value(ndr, r); >+ if (ndr_flags & NDR_SCALARS) { >+ switch (level) { >+ case 0: { >+ NDR_CHECK(ndr_pull_align(ndr, 4)); >+ NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_pull_spoolss_PrinterInfo0(ndr, NDR_SCALARS, &r->info0)); >+ break; } >+ >+ case 1: { >+ NDR_CHECK(ndr_pull_align(ndr, 4)); >+ NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_pull_spoolss_PrinterInfo1(ndr, NDR_SCALARS, &r->info1)); >+ break; } >+ >+ case 2: { >+ NDR_CHECK(ndr_pull_align(ndr, 4)); >+ NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_pull_spoolss_PrinterInfo2(ndr, NDR_SCALARS, &r->info2)); >+ break; } >+ >+ case 3: { >+ NDR_CHECK(ndr_pull_align(ndr, 4)); >+ NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_pull_spoolss_PrinterInfo3(ndr, NDR_SCALARS, &r->info3)); >+ break; } >+ >+ case 4: { >+ NDR_CHECK(ndr_pull_align(ndr, 4)); >+ NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_pull_spoolss_PrinterInfo4(ndr, NDR_SCALARS, &r->info4)); >+ break; } >+ >+ case 5: { >+ NDR_CHECK(ndr_pull_align(ndr, 4)); >+ NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_pull_spoolss_PrinterInfo5(ndr, NDR_SCALARS, &r->info5)); >+ break; } >+ >+ case 6: { >+ NDR_CHECK(ndr_pull_align(ndr, 4)); >+ NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_pull_spoolss_PrinterInfo6(ndr, NDR_SCALARS, &r->info6)); >+ break; } >+ >+ case 7: { >+ NDR_CHECK(ndr_pull_align(ndr, 4)); >+ NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_pull_spoolss_PrinterInfo7(ndr, NDR_SCALARS, &r->info7)); >+ break; } >+ >+ case 8: { >+ NDR_CHECK(ndr_pull_align(ndr, 4)); >+ NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_pull_spoolss_DeviceModeInfo(ndr, NDR_SCALARS, &r->info8)); >+ break; } >+ >+ case 9: { >+ NDR_CHECK(ndr_pull_align(ndr, 4)); >+ NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_pull_spoolss_DeviceModeInfo(ndr, NDR_SCALARS, &r->info9)); >+ break; } >+ >+ default: { >+ break; } >+ >+ } >+ } >+ if (ndr_flags & NDR_BUFFERS) { >+ NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r)); >+ switch (level) { >+ case 0: >+ NDR_CHECK(ndr_pull_spoolss_PrinterInfo0(ndr, NDR_BUFFERS, &r->info0)); >+ break; >+ >+ case 1: >+ NDR_CHECK(ndr_pull_spoolss_PrinterInfo1(ndr, NDR_BUFFERS, &r->info1)); >+ break; >+ >+ case 2: >+ NDR_CHECK(ndr_pull_spoolss_PrinterInfo2(ndr, NDR_BUFFERS, &r->info2)); >+ break; >+ >+ case 3: >+ NDR_CHECK(ndr_pull_spoolss_PrinterInfo3(ndr, NDR_BUFFERS, &r->info3)); >+ break; >+ >+ case 4: >+ NDR_CHECK(ndr_pull_spoolss_PrinterInfo4(ndr, NDR_BUFFERS, &r->info4)); >+ break; >+ >+ case 5: >+ NDR_CHECK(ndr_pull_spoolss_PrinterInfo5(ndr, NDR_BUFFERS, &r->info5)); >+ break; >+ >+ case 6: >+ break; >+ >+ case 7: >+ NDR_CHECK(ndr_pull_spoolss_PrinterInfo7(ndr, NDR_BUFFERS, &r->info7)); >+ break; >+ >+ case 8: >+ NDR_CHECK(ndr_pull_spoolss_DeviceModeInfo(ndr, NDR_BUFFERS, &r->info8)); >+ break; >+ >+ case 9: >+ NDR_CHECK(ndr_pull_spoolss_DeviceModeInfo(ndr, NDR_BUFFERS, &r->info9)); >+ break; >+ >+ default: >+ break; > >+ } > } >+ ndr->flags = _flags_save_UNION; > } >- if (ndr_flags & NDR_BUFFERS) { >- NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r)); >+ ndr_pull_restore_relative_base_offset(ndr, _save_relative_base_offset); >+ return NDR_ERR_SUCCESS; >+} >+ >+_PUBLIC_ void ndr_print_spoolss_PrinterInfo(struct ndr_print *ndr, const char *name, const union spoolss_PrinterInfo *r) >+{ >+ int level; >+ { >+ uint32_t _flags_save_UNION = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE); >+ level = ndr_print_get_switch_value(ndr, r); >+ ndr_print_union(ndr, name, level, "spoolss_PrinterInfo"); > switch (level) { > case 0: >- NDR_CHECK(ndr_pull_spoolss_PrinterInfo0(ndr, NDR_BUFFERS, &r->info0)); >+ ndr_print_spoolss_PrinterInfo0(ndr, "info0", &r->info0); > break; > > case 1: >- NDR_CHECK(ndr_pull_spoolss_PrinterInfo1(ndr, NDR_BUFFERS, &r->info1)); >+ ndr_print_spoolss_PrinterInfo1(ndr, "info1", &r->info1); > break; > > case 2: >- NDR_CHECK(ndr_pull_spoolss_PrinterInfo2(ndr, NDR_BUFFERS, &r->info2)); >+ ndr_print_spoolss_PrinterInfo2(ndr, "info2", &r->info2); > break; > > case 3: >- NDR_CHECK(ndr_pull_spoolss_PrinterInfo3(ndr, NDR_BUFFERS, &r->info3)); >+ ndr_print_spoolss_PrinterInfo3(ndr, "info3", &r->info3); > break; > > case 4: >- NDR_CHECK(ndr_pull_spoolss_PrinterInfo4(ndr, NDR_BUFFERS, &r->info4)); >+ ndr_print_spoolss_PrinterInfo4(ndr, "info4", &r->info4); > break; > > case 5: >- NDR_CHECK(ndr_pull_spoolss_PrinterInfo5(ndr, NDR_BUFFERS, &r->info5)); >+ ndr_print_spoolss_PrinterInfo5(ndr, "info5", &r->info5); > break; > > case 6: >+ ndr_print_spoolss_PrinterInfo6(ndr, "info6", &r->info6); > break; > > case 7: >- NDR_CHECK(ndr_pull_spoolss_PrinterInfo7(ndr, NDR_BUFFERS, &r->info7)); >+ ndr_print_spoolss_PrinterInfo7(ndr, "info7", &r->info7); > break; > > case 8: >- NDR_CHECK(ndr_pull_spoolss_DeviceModeInfo(ndr, NDR_BUFFERS, &r->info8)); >+ ndr_print_spoolss_DeviceModeInfo(ndr, "info8", &r->info8); > break; > > case 9: >- NDR_CHECK(ndr_pull_spoolss_DeviceModeInfo(ndr, NDR_BUFFERS, &r->info9)); >+ ndr_print_spoolss_DeviceModeInfo(ndr, "info9", &r->info9); > break; > > default: > break; > > } >- } >- ndr_pull_restore_relative_base_offset(ndr, _save_relative_base_offset); >- return NDR_ERR_SUCCESS; >-} >- >-_PUBLIC_ void ndr_print_spoolss_PrinterInfo(struct ndr_print *ndr, const char *name, const union spoolss_PrinterInfo *r) >-{ >- int level; >- level = ndr_print_get_switch_value(ndr, r); >- ndr_print_union(ndr, name, level, "spoolss_PrinterInfo"); >- switch (level) { >- case 0: >- ndr_print_spoolss_PrinterInfo0(ndr, "info0", &r->info0); >- break; >- >- case 1: >- ndr_print_spoolss_PrinterInfo1(ndr, "info1", &r->info1); >- break; >- >- case 2: >- ndr_print_spoolss_PrinterInfo2(ndr, "info2", &r->info2); >- break; >- >- case 3: >- ndr_print_spoolss_PrinterInfo3(ndr, "info3", &r->info3); >- break; >- >- case 4: >- ndr_print_spoolss_PrinterInfo4(ndr, "info4", &r->info4); >- break; >- >- case 5: >- ndr_print_spoolss_PrinterInfo5(ndr, "info5", &r->info5); >- break; >- >- case 6: >- ndr_print_spoolss_PrinterInfo6(ndr, "info6", &r->info6); >- break; >- >- case 7: >- ndr_print_spoolss_PrinterInfo7(ndr, "info7", &r->info7); >- break; >- >- case 8: >- ndr_print_spoolss_DeviceModeInfo(ndr, "info8", &r->info8); >- break; >- >- case 9: >- ndr_print_spoolss_DeviceModeInfo(ndr, "info9", &r->info9); >- break; >- >- default: >- break; >- >+ ndr->flags = _flags_save_UNION; > } > } > > _PUBLIC_ size_t ndr_size_spoolss_PrinterInfo(const union spoolss_PrinterInfo *r, uint32_t level, struct smb_iconv_convenience *ic, int flags) > { >+ flags |= LIBNDR_FLAG_RELATIVE_REVERSE; > return ndr_size_union(r, flags, level, (ndr_push_flags_fn_t)ndr_push_spoolss_PrinterInfo, ic); > } > >@@ -3048,14 +3144,24 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo2(struct ndr_push *ndr, int n > NDR_CHECK(ndr_push_relative_ptr1(ndr, r->driver_name)); > ndr->flags = _flags_save_string; > } >- NDR_CHECK(ndr_push_relative_ptr1(ndr, r->devmode)); >+ { >+ 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; >+ } > { > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > NDR_CHECK(ndr_push_relative_ptr1(ndr, r->text_status)); > ndr->flags = _flags_save_string; > } >- NDR_CHECK(ndr_push_relative_ptr1(ndr, r->secdesc)); >+ { >+ uint32_t _flags_save_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_security_descriptor; >+ } > NDR_CHECK(ndr_push_spoolss_JobStatus(ndr, NDR_SCALARS, r->status)); > NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->priority)); > NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->position)); >@@ -3158,10 +3264,20 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo2(struct ndr_push *ndr, int n > } > ndr->flags = _flags_save_string; > } >- if (r->devmode) { >- NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->devmode)); >- NDR_CHECK(ndr_push_spoolss_DeviceMode(ndr, NDR_SCALARS, r->devmode)); >- NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->devmode)); >+ { >+ 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; > } > { > uint32_t _flags_save_string = ndr->flags; >@@ -3173,10 +3289,20 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo2(struct ndr_push *ndr, int n > } > ndr->flags = _flags_save_string; > } >- if (r->secdesc) { >- NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->secdesc)); >- NDR_CHECK(ndr_push_security_descriptor(ndr, NDR_SCALARS|NDR_BUFFERS, r->secdesc)); >- NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->secdesc)); >+ { >+ uint32_t _flags_save_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_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_security_descriptor; > } > } > return NDR_ERR_SUCCESS; >@@ -3319,12 +3445,17 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_JobInfo2(struct ndr_pull *ndr, int n > } > ndr->flags = _flags_save_string; > } >- 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; >+ { >+ 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; > } > { > uint32_t _flags_save_string = ndr->flags; >@@ -3338,12 +3469,17 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_JobInfo2(struct ndr_pull *ndr, int n > } > ndr->flags = _flags_save_string; > } >- 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; >+ { >+ uint32_t _flags_save_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_security_descriptor; > } > NDR_CHECK(ndr_pull_spoolss_JobStatus(ndr, NDR_SCALARS, &r->status)); > NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->priority)); >@@ -3495,15 +3631,25 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_JobInfo2(struct ndr_pull *ndr, int n > } > ndr->flags = _flags_save_string; > } >- 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); >- NDR_CHECK(ndr_pull_spoolss_DeviceMode(ndr, NDR_SCALARS, r->devmode)); >- NDR_PULL_SET_MEM_CTX(ndr, _mem_save_devmode_0, 0); >- ndr->offset = _relative_save_offset; >+ { >+ 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; > } > { > uint32_t _flags_save_string = ndr->flags; >@@ -3520,15 +3666,25 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_JobInfo2(struct ndr_pull *ndr, int n > } > ndr->flags = _flags_save_string; > } >- 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); >- NDR_CHECK(ndr_pull_security_descriptor(ndr, NDR_SCALARS|NDR_BUFFERS, r->secdesc)); >- NDR_PULL_SET_MEM_CTX(ndr, _mem_save_secdesc_0, 0); >- ndr->offset = _relative_save_offset; >+ { >+ uint32_t _flags_save_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_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_security_descriptor; > } > } > return NDR_ERR_SUCCESS; >@@ -3729,14 +3885,24 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo4(struct ndr_push *ndr, int n > NDR_CHECK(ndr_push_relative_ptr1(ndr, r->driver_name)); > ndr->flags = _flags_save_string; > } >- NDR_CHECK(ndr_push_relative_ptr1(ndr, r->devmode)); >+ { >+ 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; >+ } > { > uint32_t _flags_save_string = ndr->flags; > ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); > NDR_CHECK(ndr_push_relative_ptr1(ndr, r->text_status)); > ndr->flags = _flags_save_string; > } >- NDR_CHECK(ndr_push_relative_ptr1(ndr, r->secdesc)); >+ { >+ uint32_t _flags_save_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_security_descriptor; >+ } > NDR_CHECK(ndr_push_spoolss_JobStatus(ndr, NDR_SCALARS, r->status)); > NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->priority)); > NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->position)); >@@ -3840,10 +4006,20 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo4(struct ndr_push *ndr, int n > } > ndr->flags = _flags_save_string; > } >- if (r->devmode) { >- NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->devmode)); >- NDR_CHECK(ndr_push_spoolss_DeviceMode(ndr, NDR_SCALARS, r->devmode)); >- NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->devmode)); >+ { >+ 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; > } > { > uint32_t _flags_save_string = ndr->flags; >@@ -3855,10 +4031,20 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo4(struct ndr_push *ndr, int n > } > ndr->flags = _flags_save_string; > } >- if (r->secdesc) { >- NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->secdesc)); >- NDR_CHECK(ndr_push_security_descriptor(ndr, NDR_SCALARS|NDR_BUFFERS, r->secdesc)); >- NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->secdesc)); >+ { >+ uint32_t _flags_save_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_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_security_descriptor; > } > } > return NDR_ERR_SUCCESS; >@@ -4001,12 +4187,17 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_JobInfo4(struct ndr_pull *ndr, int n > } > ndr->flags = _flags_save_string; > } >- 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; >+ { >+ 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; > } > { > uint32_t _flags_save_string = ndr->flags; >@@ -4020,12 +4211,17 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_JobInfo4(struct ndr_pull *ndr, int n > } > ndr->flags = _flags_save_string; > } >- 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; >+ { >+ uint32_t _flags_save_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_security_descriptor; > } > NDR_CHECK(ndr_pull_spoolss_JobStatus(ndr, NDR_SCALARS, &r->status)); > NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->priority)); >@@ -4178,15 +4374,25 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_JobInfo4(struct ndr_pull *ndr, int n > } > ndr->flags = _flags_save_string; > } >- 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); >- NDR_CHECK(ndr_pull_spoolss_DeviceMode(ndr, NDR_SCALARS, r->devmode)); >- NDR_PULL_SET_MEM_CTX(ndr, _mem_save_devmode_0, 0); >- ndr->offset = _relative_save_offset; >+ { >+ 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; > } > { > uint32_t _flags_save_string = ndr->flags; >@@ -4203,15 +4409,25 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_JobInfo4(struct ndr_pull *ndr, int n > } > ndr->flags = _flags_save_string; > } >- 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); >- NDR_CHECK(ndr_pull_security_descriptor(ndr, NDR_SCALARS|NDR_BUFFERS, r->secdesc)); >- NDR_PULL_SET_MEM_CTX(ndr, _mem_save_secdesc_0, 0); >- ndr->offset = _relative_save_offset; >+ { >+ uint32_t _flags_save_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_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_security_descriptor; > } > } > return NDR_ERR_SUCCESS; >@@ -4316,61 +4532,66 @@ _PUBLIC_ size_t ndr_size_spoolss_JobInfo4(const struct spoolss_JobInfo4 *r, stru > _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo(struct ndr_push *ndr, int ndr_flags, const union spoolss_JobInfo *r) > { > uint32_t _save_relative_base_offset = ndr_push_get_relative_base_offset(ndr); >- if (ndr_flags & NDR_SCALARS) { >- int level = ndr_push_get_switch_value(ndr, r); >- switch (level) { >- case 1: { >- NDR_CHECK(ndr_push_align(ndr, 4)); >- NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_push_spoolss_JobInfo1(ndr, NDR_SCALARS, &r->info1)); >- break; } >+ { >+ uint32_t _flags_save_UNION = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE); >+ if (ndr_flags & NDR_SCALARS) { >+ int level = ndr_push_get_switch_value(ndr, r); >+ switch (level) { >+ case 1: { >+ NDR_CHECK(ndr_push_align(ndr, 4)); >+ NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_push_spoolss_JobInfo1(ndr, NDR_SCALARS, &r->info1)); >+ break; } > >- case 2: { >- NDR_CHECK(ndr_push_align(ndr, 4)); >- NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_push_spoolss_JobInfo2(ndr, NDR_SCALARS, &r->info2)); >- break; } >+ case 2: { >+ NDR_CHECK(ndr_push_align(ndr, 4)); >+ NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_push_spoolss_JobInfo2(ndr, NDR_SCALARS, &r->info2)); >+ break; } > >- case 3: { >- NDR_CHECK(ndr_push_align(ndr, 4)); >- NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_push_spoolss_JobInfo3(ndr, NDR_SCALARS, &r->info3)); >- break; } >+ case 3: { >+ NDR_CHECK(ndr_push_align(ndr, 4)); >+ NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_push_spoolss_JobInfo3(ndr, NDR_SCALARS, &r->info3)); >+ break; } > >- case 4: { >- NDR_CHECK(ndr_push_align(ndr, 4)); >- NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_push_spoolss_JobInfo4(ndr, NDR_SCALARS, &r->info4)); >- break; } >+ case 4: { >+ NDR_CHECK(ndr_push_align(ndr, 4)); >+ NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_push_spoolss_JobInfo4(ndr, NDR_SCALARS, &r->info4)); >+ break; } > >- default: { >- break; } >+ default: { >+ break; } > >+ } > } >- } >- if (ndr_flags & NDR_BUFFERS) { >- int level = ndr_push_get_switch_value(ndr, r); >- NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r)); >- switch (level) { >- case 1: >- NDR_CHECK(ndr_push_spoolss_JobInfo1(ndr, NDR_BUFFERS, &r->info1)); >- break; >+ if (ndr_flags & NDR_BUFFERS) { >+ int level = ndr_push_get_switch_value(ndr, r); >+ NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r)); >+ switch (level) { >+ case 1: >+ NDR_CHECK(ndr_push_spoolss_JobInfo1(ndr, NDR_BUFFERS, &r->info1)); >+ break; > >- case 2: >- NDR_CHECK(ndr_push_spoolss_JobInfo2(ndr, NDR_BUFFERS, &r->info2)); >- break; >+ case 2: >+ NDR_CHECK(ndr_push_spoolss_JobInfo2(ndr, NDR_BUFFERS, &r->info2)); >+ break; > >- case 3: >- break; >+ case 3: >+ break; > >- case 4: >- NDR_CHECK(ndr_push_spoolss_JobInfo4(ndr, NDR_BUFFERS, &r->info4)); >- break; >+ case 4: >+ NDR_CHECK(ndr_push_spoolss_JobInfo4(ndr, NDR_BUFFERS, &r->info4)); >+ break; > >- default: >- break; >+ default: >+ break; > >+ } > } >+ ndr->flags = _flags_save_UNION; > } > ndr_push_restore_relative_base_offset(ndr, _save_relative_base_offset); > return NDR_ERR_SUCCESS; >@@ -4380,60 +4601,65 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_JobInfo(struct ndr_pull *ndr, int nd > { > uint32_t _save_relative_base_offset = ndr_pull_get_relative_base_offset(ndr); > int level; >- level = ndr_pull_get_switch_value(ndr, r); >- if (ndr_flags & NDR_SCALARS) { >- switch (level) { >- case 1: { >- NDR_CHECK(ndr_pull_align(ndr, 4)); >- NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_pull_spoolss_JobInfo1(ndr, NDR_SCALARS, &r->info1)); >- break; } >+ { >+ uint32_t _flags_save_UNION = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE); >+ level = ndr_pull_get_switch_value(ndr, r); >+ if (ndr_flags & NDR_SCALARS) { >+ switch (level) { >+ case 1: { >+ NDR_CHECK(ndr_pull_align(ndr, 4)); >+ NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_pull_spoolss_JobInfo1(ndr, NDR_SCALARS, &r->info1)); >+ break; } > >- case 2: { >- NDR_CHECK(ndr_pull_align(ndr, 4)); >- NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_pull_spoolss_JobInfo2(ndr, NDR_SCALARS, &r->info2)); >- break; } >+ case 2: { >+ NDR_CHECK(ndr_pull_align(ndr, 4)); >+ NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_pull_spoolss_JobInfo2(ndr, NDR_SCALARS, &r->info2)); >+ break; } > >- case 3: { >- NDR_CHECK(ndr_pull_align(ndr, 4)); >- NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_pull_spoolss_JobInfo3(ndr, NDR_SCALARS, &r->info3)); >- break; } >+ case 3: { >+ NDR_CHECK(ndr_pull_align(ndr, 4)); >+ NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_pull_spoolss_JobInfo3(ndr, NDR_SCALARS, &r->info3)); >+ break; } > >- case 4: { >- NDR_CHECK(ndr_pull_align(ndr, 4)); >- NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_pull_spoolss_JobInfo4(ndr, NDR_SCALARS, &r->info4)); >- break; } >+ case 4: { >+ NDR_CHECK(ndr_pull_align(ndr, 4)); >+ NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_pull_spoolss_JobInfo4(ndr, NDR_SCALARS, &r->info4)); >+ break; } > >- default: { >- break; } >+ default: { >+ break; } > >+ } > } >- } >- if (ndr_flags & NDR_BUFFERS) { >- NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r)); >- switch (level) { >- case 1: >- NDR_CHECK(ndr_pull_spoolss_JobInfo1(ndr, NDR_BUFFERS, &r->info1)); >- break; >+ if (ndr_flags & NDR_BUFFERS) { >+ NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r)); >+ switch (level) { >+ case 1: >+ NDR_CHECK(ndr_pull_spoolss_JobInfo1(ndr, NDR_BUFFERS, &r->info1)); >+ break; > >- case 2: >- NDR_CHECK(ndr_pull_spoolss_JobInfo2(ndr, NDR_BUFFERS, &r->info2)); >- break; >+ case 2: >+ NDR_CHECK(ndr_pull_spoolss_JobInfo2(ndr, NDR_BUFFERS, &r->info2)); >+ break; > >- case 3: >- break; >+ case 3: >+ break; > >- case 4: >- NDR_CHECK(ndr_pull_spoolss_JobInfo4(ndr, NDR_BUFFERS, &r->info4)); >- break; >+ case 4: >+ NDR_CHECK(ndr_pull_spoolss_JobInfo4(ndr, NDR_BUFFERS, &r->info4)); >+ break; > >- default: >- break; >+ default: >+ break; > >+ } > } >+ ndr->flags = _flags_save_UNION; > } > ndr_pull_restore_relative_base_offset(ndr, _save_relative_base_offset); > return NDR_ERR_SUCCESS; >@@ -4442,33 +4668,39 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_JobInfo(struct ndr_pull *ndr, int nd > _PUBLIC_ void ndr_print_spoolss_JobInfo(struct ndr_print *ndr, const char *name, const union spoolss_JobInfo *r) > { > int level; >- level = ndr_print_get_switch_value(ndr, r); >- ndr_print_union(ndr, name, level, "spoolss_JobInfo"); >- switch (level) { >- case 1: >- ndr_print_spoolss_JobInfo1(ndr, "info1", &r->info1); >- break; >+ { >+ uint32_t _flags_save_UNION = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE); >+ level = ndr_print_get_switch_value(ndr, r); >+ ndr_print_union(ndr, name, level, "spoolss_JobInfo"); >+ switch (level) { >+ case 1: >+ ndr_print_spoolss_JobInfo1(ndr, "info1", &r->info1); >+ break; > >- case 2: >- ndr_print_spoolss_JobInfo2(ndr, "info2", &r->info2); >- break; >+ case 2: >+ ndr_print_spoolss_JobInfo2(ndr, "info2", &r->info2); >+ break; > >- case 3: >- ndr_print_spoolss_JobInfo3(ndr, "info3", &r->info3); >- break; >+ case 3: >+ ndr_print_spoolss_JobInfo3(ndr, "info3", &r->info3); >+ break; > >- case 4: >- ndr_print_spoolss_JobInfo4(ndr, "info4", &r->info4); >- break; >+ case 4: >+ ndr_print_spoolss_JobInfo4(ndr, "info4", &r->info4); >+ break; > >- default: >- break; >+ default: >+ break; > >+ } >+ ndr->flags = _flags_save_UNION; > } > } > > _PUBLIC_ size_t ndr_size_spoolss_JobInfo(const union spoolss_JobInfo *r, uint32_t level, struct smb_iconv_convenience *ic, int flags) > { >+ flags |= LIBNDR_FLAG_RELATIVE_REVERSE; > return ndr_size_union(r, flags, level, (ndr_push_flags_fn_t)ndr_push_spoolss_JobInfo, ic); > } > >@@ -13596,102 +13828,107 @@ _PUBLIC_ size_t ndr_size_spoolss_DriverInfo101(const struct spoolss_DriverInfo10 > _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo(struct ndr_push *ndr, int ndr_flags, const union spoolss_DriverInfo *r) > { > uint32_t _save_relative_base_offset = ndr_push_get_relative_base_offset(ndr); >- if (ndr_flags & NDR_SCALARS) { >- int level = ndr_push_get_switch_value(ndr, r); >- switch (level) { >- case 1: { >- NDR_CHECK(ndr_push_align(ndr, 4)); >- NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_push_spoolss_DriverInfo1(ndr, NDR_SCALARS, &r->info1)); >- break; } >- >- case 2: { >- NDR_CHECK(ndr_push_align(ndr, 4)); >- NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_push_spoolss_DriverInfo2(ndr, NDR_SCALARS, &r->info2)); >- break; } >- >- case 3: { >- NDR_CHECK(ndr_push_align(ndr, 4)); >- NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_push_spoolss_DriverInfo3(ndr, NDR_SCALARS, &r->info3)); >- break; } >- >- case 4: { >- NDR_CHECK(ndr_push_align(ndr, 4)); >- NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_push_spoolss_DriverInfo4(ndr, NDR_SCALARS, &r->info4)); >- break; } >- >- case 5: { >- NDR_CHECK(ndr_push_align(ndr, 4)); >- NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_push_spoolss_DriverInfo5(ndr, NDR_SCALARS, &r->info5)); >- break; } >- >- case 6: { >- NDR_CHECK(ndr_push_align(ndr, 8)); >- NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_push_spoolss_DriverInfo6(ndr, NDR_SCALARS, &r->info6)); >- break; } >- >- case 8: { >- NDR_CHECK(ndr_push_align(ndr, 8)); >- NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_push_spoolss_DriverInfo8(ndr, NDR_SCALARS, &r->info8)); >- break; } >- >- case 101: { >- NDR_CHECK(ndr_push_align(ndr, 8)); >- NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_push_spoolss_DriverInfo101(ndr, NDR_SCALARS, &r->info101)); >- break; } >- >- default: { >- break; } >- >- } >- } >- if (ndr_flags & NDR_BUFFERS) { >- int level = ndr_push_get_switch_value(ndr, r); >- NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r)); >- switch (level) { >- case 1: >- NDR_CHECK(ndr_push_spoolss_DriverInfo1(ndr, NDR_BUFFERS, &r->info1)); >- break; >- >- case 2: >- NDR_CHECK(ndr_push_spoolss_DriverInfo2(ndr, NDR_BUFFERS, &r->info2)); >- break; >- >- case 3: >- NDR_CHECK(ndr_push_spoolss_DriverInfo3(ndr, NDR_BUFFERS, &r->info3)); >- break; >- >- case 4: >- NDR_CHECK(ndr_push_spoolss_DriverInfo4(ndr, NDR_BUFFERS, &r->info4)); >- break; >- >- case 5: >- NDR_CHECK(ndr_push_spoolss_DriverInfo5(ndr, NDR_BUFFERS, &r->info5)); >- break; >- >- case 6: >- NDR_CHECK(ndr_push_spoolss_DriverInfo6(ndr, NDR_BUFFERS, &r->info6)); >- break; >- >- case 8: >- NDR_CHECK(ndr_push_spoolss_DriverInfo8(ndr, NDR_BUFFERS, &r->info8)); >- break; >- >- case 101: >- NDR_CHECK(ndr_push_spoolss_DriverInfo101(ndr, NDR_BUFFERS, &r->info101)); >- break; >- >- default: >- break; >- >- } >+ { >+ uint32_t _flags_save_UNION = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE); >+ if (ndr_flags & NDR_SCALARS) { >+ int level = ndr_push_get_switch_value(ndr, r); >+ switch (level) { >+ case 1: { >+ NDR_CHECK(ndr_push_align(ndr, 4)); >+ NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_push_spoolss_DriverInfo1(ndr, NDR_SCALARS, &r->info1)); >+ break; } >+ >+ case 2: { >+ NDR_CHECK(ndr_push_align(ndr, 4)); >+ NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_push_spoolss_DriverInfo2(ndr, NDR_SCALARS, &r->info2)); >+ break; } >+ >+ case 3: { >+ NDR_CHECK(ndr_push_align(ndr, 4)); >+ NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_push_spoolss_DriverInfo3(ndr, NDR_SCALARS, &r->info3)); >+ break; } >+ >+ case 4: { >+ NDR_CHECK(ndr_push_align(ndr, 4)); >+ NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_push_spoolss_DriverInfo4(ndr, NDR_SCALARS, &r->info4)); >+ break; } >+ >+ case 5: { >+ NDR_CHECK(ndr_push_align(ndr, 4)); >+ NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_push_spoolss_DriverInfo5(ndr, NDR_SCALARS, &r->info5)); >+ break; } >+ >+ case 6: { >+ NDR_CHECK(ndr_push_align(ndr, 8)); >+ NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_push_spoolss_DriverInfo6(ndr, NDR_SCALARS, &r->info6)); >+ break; } >+ >+ case 8: { >+ NDR_CHECK(ndr_push_align(ndr, 8)); >+ NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_push_spoolss_DriverInfo8(ndr, NDR_SCALARS, &r->info8)); >+ break; } >+ >+ case 101: { >+ NDR_CHECK(ndr_push_align(ndr, 8)); >+ NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_push_spoolss_DriverInfo101(ndr, NDR_SCALARS, &r->info101)); >+ break; } >+ >+ default: { >+ break; } >+ >+ } >+ } >+ if (ndr_flags & NDR_BUFFERS) { >+ int level = ndr_push_get_switch_value(ndr, r); >+ NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r)); >+ switch (level) { >+ case 1: >+ NDR_CHECK(ndr_push_spoolss_DriverInfo1(ndr, NDR_BUFFERS, &r->info1)); >+ break; >+ >+ case 2: >+ NDR_CHECK(ndr_push_spoolss_DriverInfo2(ndr, NDR_BUFFERS, &r->info2)); >+ break; >+ >+ case 3: >+ NDR_CHECK(ndr_push_spoolss_DriverInfo3(ndr, NDR_BUFFERS, &r->info3)); >+ break; >+ >+ case 4: >+ NDR_CHECK(ndr_push_spoolss_DriverInfo4(ndr, NDR_BUFFERS, &r->info4)); >+ break; >+ >+ case 5: >+ NDR_CHECK(ndr_push_spoolss_DriverInfo5(ndr, NDR_BUFFERS, &r->info5)); >+ break; >+ >+ case 6: >+ NDR_CHECK(ndr_push_spoolss_DriverInfo6(ndr, NDR_BUFFERS, &r->info6)); >+ break; >+ >+ case 8: >+ NDR_CHECK(ndr_push_spoolss_DriverInfo8(ndr, NDR_BUFFERS, &r->info8)); >+ break; >+ >+ case 101: >+ NDR_CHECK(ndr_push_spoolss_DriverInfo101(ndr, NDR_BUFFERS, &r->info101)); >+ break; >+ >+ default: >+ break; >+ >+ } >+ } >+ ndr->flags = _flags_save_UNION; > } > ndr_push_restore_relative_base_offset(ndr, _save_relative_base_offset); > return NDR_ERR_SUCCESS; >@@ -13701,152 +13938,163 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_DriverInfo(struct ndr_pull *ndr, int > { > uint32_t _save_relative_base_offset = ndr_pull_get_relative_base_offset(ndr); > int level; >- level = ndr_pull_get_switch_value(ndr, r); >- if (ndr_flags & NDR_SCALARS) { >- switch (level) { >- case 1: { >- NDR_CHECK(ndr_pull_align(ndr, 4)); >- NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_pull_spoolss_DriverInfo1(ndr, NDR_SCALARS, &r->info1)); >- break; } >- >- case 2: { >- NDR_CHECK(ndr_pull_align(ndr, 4)); >- NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_pull_spoolss_DriverInfo2(ndr, NDR_SCALARS, &r->info2)); >- break; } >- >- case 3: { >- NDR_CHECK(ndr_pull_align(ndr, 4)); >- NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_pull_spoolss_DriverInfo3(ndr, NDR_SCALARS, &r->info3)); >- break; } >- >- case 4: { >- NDR_CHECK(ndr_pull_align(ndr, 4)); >- NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_pull_spoolss_DriverInfo4(ndr, NDR_SCALARS, &r->info4)); >- break; } >- >- case 5: { >- NDR_CHECK(ndr_pull_align(ndr, 4)); >- NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_pull_spoolss_DriverInfo5(ndr, NDR_SCALARS, &r->info5)); >- break; } >- >- case 6: { >- NDR_CHECK(ndr_pull_align(ndr, 8)); >- NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_pull_spoolss_DriverInfo6(ndr, NDR_SCALARS, &r->info6)); >- break; } >- >- case 8: { >- NDR_CHECK(ndr_pull_align(ndr, 8)); >- NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_pull_spoolss_DriverInfo8(ndr, NDR_SCALARS, &r->info8)); >- break; } >- >- case 101: { >- NDR_CHECK(ndr_pull_align(ndr, 8)); >- NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_pull_spoolss_DriverInfo101(ndr, NDR_SCALARS, &r->info101)); >- break; } >- >- default: { >- break; } >- >- } >+ { >+ uint32_t _flags_save_UNION = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE); >+ level = ndr_pull_get_switch_value(ndr, r); >+ if (ndr_flags & NDR_SCALARS) { >+ switch (level) { >+ case 1: { >+ NDR_CHECK(ndr_pull_align(ndr, 4)); >+ NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_pull_spoolss_DriverInfo1(ndr, NDR_SCALARS, &r->info1)); >+ break; } >+ >+ case 2: { >+ NDR_CHECK(ndr_pull_align(ndr, 4)); >+ NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_pull_spoolss_DriverInfo2(ndr, NDR_SCALARS, &r->info2)); >+ break; } >+ >+ case 3: { >+ NDR_CHECK(ndr_pull_align(ndr, 4)); >+ NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_pull_spoolss_DriverInfo3(ndr, NDR_SCALARS, &r->info3)); >+ break; } >+ >+ case 4: { >+ NDR_CHECK(ndr_pull_align(ndr, 4)); >+ NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_pull_spoolss_DriverInfo4(ndr, NDR_SCALARS, &r->info4)); >+ break; } >+ >+ case 5: { >+ NDR_CHECK(ndr_pull_align(ndr, 4)); >+ NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_pull_spoolss_DriverInfo5(ndr, NDR_SCALARS, &r->info5)); >+ break; } >+ >+ case 6: { >+ NDR_CHECK(ndr_pull_align(ndr, 8)); >+ NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_pull_spoolss_DriverInfo6(ndr, NDR_SCALARS, &r->info6)); >+ break; } >+ >+ case 8: { >+ NDR_CHECK(ndr_pull_align(ndr, 8)); >+ NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_pull_spoolss_DriverInfo8(ndr, NDR_SCALARS, &r->info8)); >+ break; } >+ >+ case 101: { >+ NDR_CHECK(ndr_pull_align(ndr, 8)); >+ NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_pull_spoolss_DriverInfo101(ndr, NDR_SCALARS, &r->info101)); >+ break; } >+ >+ default: { >+ break; } >+ >+ } >+ } >+ if (ndr_flags & NDR_BUFFERS) { >+ NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r)); >+ switch (level) { >+ case 1: >+ NDR_CHECK(ndr_pull_spoolss_DriverInfo1(ndr, NDR_BUFFERS, &r->info1)); >+ break; >+ >+ case 2: >+ NDR_CHECK(ndr_pull_spoolss_DriverInfo2(ndr, NDR_BUFFERS, &r->info2)); >+ break; >+ >+ case 3: >+ NDR_CHECK(ndr_pull_spoolss_DriverInfo3(ndr, NDR_BUFFERS, &r->info3)); >+ break; >+ >+ case 4: >+ NDR_CHECK(ndr_pull_spoolss_DriverInfo4(ndr, NDR_BUFFERS, &r->info4)); >+ break; >+ >+ case 5: >+ NDR_CHECK(ndr_pull_spoolss_DriverInfo5(ndr, NDR_BUFFERS, &r->info5)); >+ break; >+ >+ case 6: >+ NDR_CHECK(ndr_pull_spoolss_DriverInfo6(ndr, NDR_BUFFERS, &r->info6)); >+ break; >+ >+ case 8: >+ NDR_CHECK(ndr_pull_spoolss_DriverInfo8(ndr, NDR_BUFFERS, &r->info8)); >+ break; >+ >+ case 101: >+ NDR_CHECK(ndr_pull_spoolss_DriverInfo101(ndr, NDR_BUFFERS, &r->info101)); >+ break; >+ >+ default: >+ break; >+ >+ } >+ } >+ ndr->flags = _flags_save_UNION; > } >- if (ndr_flags & NDR_BUFFERS) { >- NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r)); >+ ndr_pull_restore_relative_base_offset(ndr, _save_relative_base_offset); >+ return NDR_ERR_SUCCESS; >+} >+ >+_PUBLIC_ void ndr_print_spoolss_DriverInfo(struct ndr_print *ndr, const char *name, const union spoolss_DriverInfo *r) >+{ >+ int level; >+ { >+ uint32_t _flags_save_UNION = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE); >+ level = ndr_print_get_switch_value(ndr, r); >+ ndr_print_union(ndr, name, level, "spoolss_DriverInfo"); > switch (level) { > case 1: >- NDR_CHECK(ndr_pull_spoolss_DriverInfo1(ndr, NDR_BUFFERS, &r->info1)); >+ ndr_print_spoolss_DriverInfo1(ndr, "info1", &r->info1); > break; > > case 2: >- NDR_CHECK(ndr_pull_spoolss_DriverInfo2(ndr, NDR_BUFFERS, &r->info2)); >+ ndr_print_spoolss_DriverInfo2(ndr, "info2", &r->info2); > break; > > case 3: >- NDR_CHECK(ndr_pull_spoolss_DriverInfo3(ndr, NDR_BUFFERS, &r->info3)); >+ ndr_print_spoolss_DriverInfo3(ndr, "info3", &r->info3); > break; > > case 4: >- NDR_CHECK(ndr_pull_spoolss_DriverInfo4(ndr, NDR_BUFFERS, &r->info4)); >+ ndr_print_spoolss_DriverInfo4(ndr, "info4", &r->info4); > break; > > case 5: >- NDR_CHECK(ndr_pull_spoolss_DriverInfo5(ndr, NDR_BUFFERS, &r->info5)); >+ ndr_print_spoolss_DriverInfo5(ndr, "info5", &r->info5); > break; > > case 6: >- NDR_CHECK(ndr_pull_spoolss_DriverInfo6(ndr, NDR_BUFFERS, &r->info6)); >+ ndr_print_spoolss_DriverInfo6(ndr, "info6", &r->info6); > break; > > case 8: >- NDR_CHECK(ndr_pull_spoolss_DriverInfo8(ndr, NDR_BUFFERS, &r->info8)); >+ ndr_print_spoolss_DriverInfo8(ndr, "info8", &r->info8); > break; > > case 101: >- NDR_CHECK(ndr_pull_spoolss_DriverInfo101(ndr, NDR_BUFFERS, &r->info101)); >+ ndr_print_spoolss_DriverInfo101(ndr, "info101", &r->info101); > break; > > default: > break; > > } >- } >- ndr_pull_restore_relative_base_offset(ndr, _save_relative_base_offset); >- return NDR_ERR_SUCCESS; >-} >- >-_PUBLIC_ void ndr_print_spoolss_DriverInfo(struct ndr_print *ndr, const char *name, const union spoolss_DriverInfo *r) >-{ >- int level; >- level = ndr_print_get_switch_value(ndr, r); >- ndr_print_union(ndr, name, level, "spoolss_DriverInfo"); >- switch (level) { >- case 1: >- ndr_print_spoolss_DriverInfo1(ndr, "info1", &r->info1); >- break; >- >- case 2: >- ndr_print_spoolss_DriverInfo2(ndr, "info2", &r->info2); >- break; >- >- case 3: >- ndr_print_spoolss_DriverInfo3(ndr, "info3", &r->info3); >- break; >- >- case 4: >- ndr_print_spoolss_DriverInfo4(ndr, "info4", &r->info4); >- break; >- >- case 5: >- ndr_print_spoolss_DriverInfo5(ndr, "info5", &r->info5); >- break; >- >- case 6: >- ndr_print_spoolss_DriverInfo6(ndr, "info6", &r->info6); >- break; >- >- case 8: >- ndr_print_spoolss_DriverInfo8(ndr, "info8", &r->info8); >- break; >- >- case 101: >- ndr_print_spoolss_DriverInfo101(ndr, "info101", &r->info101); >- break; >- >- default: >- break; >- >+ ndr->flags = _flags_save_UNION; > } > } > > _PUBLIC_ size_t ndr_size_spoolss_DriverInfo(const union spoolss_DriverInfo *r, uint32_t level, struct smb_iconv_convenience *ic, int flags) > { >+ flags |= LIBNDR_FLAG_RELATIVE_REVERSE; > return ndr_size_union(r, flags, level, (ndr_push_flags_fn_t)ndr_push_spoolss_DriverInfo, ic); > } > >@@ -13898,34 +14146,39 @@ _PUBLIC_ size_t ndr_size_spoolss_DriverDirectoryInfo1(const struct spoolss_Drive > _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverDirectoryInfo(struct ndr_push *ndr, int ndr_flags, const union spoolss_DriverDirectoryInfo *r) > { > uint32_t _save_relative_base_offset = ndr_push_get_relative_base_offset(ndr); >- if (ndr_flags & NDR_SCALARS) { >- int level = ndr_push_get_switch_value(ndr, r); >- switch (level) { >- case 1: { >- NDR_CHECK(ndr_push_align(ndr, 4)); >- NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_push_spoolss_DriverDirectoryInfo1(ndr, NDR_SCALARS, &r->info1)); >- break; } >+ { >+ uint32_t _flags_save_UNION = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE); >+ if (ndr_flags & NDR_SCALARS) { >+ int level = ndr_push_get_switch_value(ndr, r); >+ switch (level) { >+ case 1: { >+ NDR_CHECK(ndr_push_align(ndr, 4)); >+ NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_push_spoolss_DriverDirectoryInfo1(ndr, NDR_SCALARS, &r->info1)); >+ break; } > >- default: { >- NDR_CHECK(ndr_push_align(ndr, 4)); >- NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_push_spoolss_DriverDirectoryInfo1(ndr, NDR_SCALARS, &r->info1)); >- break; } >+ default: { >+ NDR_CHECK(ndr_push_align(ndr, 4)); >+ NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_push_spoolss_DriverDirectoryInfo1(ndr, NDR_SCALARS, &r->info1)); >+ break; } > >+ } > } >- } >- if (ndr_flags & NDR_BUFFERS) { >- int level = ndr_push_get_switch_value(ndr, r); >- NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r)); >- switch (level) { >- case 1: >- break; >+ if (ndr_flags & NDR_BUFFERS) { >+ int level = ndr_push_get_switch_value(ndr, r); >+ NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r)); >+ switch (level) { >+ case 1: >+ break; > >- default: >- break; >+ default: >+ break; > >+ } > } >+ ndr->flags = _flags_save_UNION; > } > ndr_push_restore_relative_base_offset(ndr, _save_relative_base_offset); > return NDR_ERR_SUCCESS; >@@ -13935,33 +14188,38 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_DriverDirectoryInfo(struct ndr_pull > { > uint32_t _save_relative_base_offset = ndr_pull_get_relative_base_offset(ndr); > int level; >- level = ndr_pull_get_switch_value(ndr, r); >- if (ndr_flags & NDR_SCALARS) { >- switch (level) { >- case 1: { >- NDR_CHECK(ndr_pull_align(ndr, 4)); >- NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_pull_spoolss_DriverDirectoryInfo1(ndr, NDR_SCALARS, &r->info1)); >- break; } >+ { >+ uint32_t _flags_save_UNION = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE); >+ level = ndr_pull_get_switch_value(ndr, r); >+ if (ndr_flags & NDR_SCALARS) { >+ switch (level) { >+ case 1: { >+ NDR_CHECK(ndr_pull_align(ndr, 4)); >+ NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_pull_spoolss_DriverDirectoryInfo1(ndr, NDR_SCALARS, &r->info1)); >+ break; } > >- default: { >- NDR_CHECK(ndr_pull_align(ndr, 4)); >- NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_pull_spoolss_DriverDirectoryInfo1(ndr, NDR_SCALARS, &r->info1)); >- break; } >+ default: { >+ NDR_CHECK(ndr_pull_align(ndr, 4)); >+ NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_pull_spoolss_DriverDirectoryInfo1(ndr, NDR_SCALARS, &r->info1)); >+ break; } > >+ } > } >- } >- if (ndr_flags & NDR_BUFFERS) { >- NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r)); >- switch (level) { >- case 1: >- break; >+ if (ndr_flags & NDR_BUFFERS) { >+ NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r)); >+ switch (level) { >+ case 1: >+ break; > >- default: >- break; >+ default: >+ break; > >+ } > } >+ ndr->flags = _flags_save_UNION; > } > ndr_pull_restore_relative_base_offset(ndr, _save_relative_base_offset); > return NDR_ERR_SUCCESS; >@@ -13970,22 +14228,28 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_DriverDirectoryInfo(struct ndr_pull > _PUBLIC_ void ndr_print_spoolss_DriverDirectoryInfo(struct ndr_print *ndr, const char *name, const union spoolss_DriverDirectoryInfo *r) > { > int level; >- level = ndr_print_get_switch_value(ndr, r); >- ndr_print_union(ndr, name, level, "spoolss_DriverDirectoryInfo"); >- switch (level) { >- case 1: >- ndr_print_spoolss_DriverDirectoryInfo1(ndr, "info1", &r->info1); >- break; >+ { >+ uint32_t _flags_save_UNION = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE); >+ level = ndr_print_get_switch_value(ndr, r); >+ ndr_print_union(ndr, name, level, "spoolss_DriverDirectoryInfo"); >+ switch (level) { >+ case 1: >+ ndr_print_spoolss_DriverDirectoryInfo1(ndr, "info1", &r->info1); >+ break; > >- default: >- ndr_print_spoolss_DriverDirectoryInfo1(ndr, "info1", &r->info1); >- break; >+ default: >+ ndr_print_spoolss_DriverDirectoryInfo1(ndr, "info1", &r->info1); >+ break; > >+ } >+ ndr->flags = _flags_save_UNION; > } > } > > _PUBLIC_ size_t ndr_size_spoolss_DriverDirectoryInfo(const union spoolss_DriverDirectoryInfo *r, uint32_t level, struct smb_iconv_convenience *ic, int flags) > { >+ flags |= LIBNDR_FLAG_RELATIVE_REVERSE; > return ndr_size_union(r, flags, level, (ndr_push_flags_fn_t)ndr_push_spoolss_DriverDirectoryInfo, ic); > } > >@@ -14075,32 +14339,37 @@ _PUBLIC_ size_t ndr_size_spoolss_PrintProcessorInfo1(const struct spoolss_PrintP > _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrintProcessorInfo(struct ndr_push *ndr, int ndr_flags, const union spoolss_PrintProcessorInfo *r) > { > uint32_t _save_relative_base_offset = ndr_push_get_relative_base_offset(ndr); >- if (ndr_flags & NDR_SCALARS) { >- int level = ndr_push_get_switch_value(ndr, r); >- switch (level) { >- case 1: { >- NDR_CHECK(ndr_push_align(ndr, 4)); >- NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_push_spoolss_PrintProcessorInfo1(ndr, NDR_SCALARS, &r->info1)); >- break; } >+ { >+ uint32_t _flags_save_UNION = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE); >+ if (ndr_flags & NDR_SCALARS) { >+ int level = ndr_push_get_switch_value(ndr, r); >+ switch (level) { >+ case 1: { >+ NDR_CHECK(ndr_push_align(ndr, 4)); >+ NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_push_spoolss_PrintProcessorInfo1(ndr, NDR_SCALARS, &r->info1)); >+ break; } > >- default: { >- break; } >+ default: { >+ break; } > >+ } > } >- } >- if (ndr_flags & NDR_BUFFERS) { >- int level = ndr_push_get_switch_value(ndr, r); >- NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r)); >- switch (level) { >- case 1: >- NDR_CHECK(ndr_push_spoolss_PrintProcessorInfo1(ndr, NDR_BUFFERS, &r->info1)); >- break; >+ if (ndr_flags & NDR_BUFFERS) { >+ int level = ndr_push_get_switch_value(ndr, r); >+ NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r)); >+ switch (level) { >+ case 1: >+ NDR_CHECK(ndr_push_spoolss_PrintProcessorInfo1(ndr, NDR_BUFFERS, &r->info1)); >+ break; > >- default: >- break; >+ default: >+ break; > >+ } > } >+ ndr->flags = _flags_save_UNION; > } > ndr_push_restore_relative_base_offset(ndr, _save_relative_base_offset); > return NDR_ERR_SUCCESS; >@@ -14110,31 +14379,36 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrintProcessorInfo(struct ndr_pull * > { > uint32_t _save_relative_base_offset = ndr_pull_get_relative_base_offset(ndr); > int level; >- level = ndr_pull_get_switch_value(ndr, r); >- if (ndr_flags & NDR_SCALARS) { >- switch (level) { >- case 1: { >- NDR_CHECK(ndr_pull_align(ndr, 4)); >- NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_pull_spoolss_PrintProcessorInfo1(ndr, NDR_SCALARS, &r->info1)); >- break; } >+ { >+ uint32_t _flags_save_UNION = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE); >+ level = ndr_pull_get_switch_value(ndr, r); >+ if (ndr_flags & NDR_SCALARS) { >+ switch (level) { >+ case 1: { >+ NDR_CHECK(ndr_pull_align(ndr, 4)); >+ NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_pull_spoolss_PrintProcessorInfo1(ndr, NDR_SCALARS, &r->info1)); >+ break; } > >- default: { >- break; } >+ default: { >+ break; } > >+ } > } >- } >- if (ndr_flags & NDR_BUFFERS) { >- NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r)); >- switch (level) { >- case 1: >- NDR_CHECK(ndr_pull_spoolss_PrintProcessorInfo1(ndr, NDR_BUFFERS, &r->info1)); >- break; >+ if (ndr_flags & NDR_BUFFERS) { >+ NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r)); >+ switch (level) { >+ case 1: >+ NDR_CHECK(ndr_pull_spoolss_PrintProcessorInfo1(ndr, NDR_BUFFERS, &r->info1)); >+ break; > >- default: >- break; >+ default: >+ break; > >+ } > } >+ ndr->flags = _flags_save_UNION; > } > ndr_pull_restore_relative_base_offset(ndr, _save_relative_base_offset); > return NDR_ERR_SUCCESS; >@@ -14143,16 +14417,21 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrintProcessorInfo(struct ndr_pull * > _PUBLIC_ void ndr_print_spoolss_PrintProcessorInfo(struct ndr_print *ndr, const char *name, const union spoolss_PrintProcessorInfo *r) > { > int level; >- level = ndr_print_get_switch_value(ndr, r); >- ndr_print_union(ndr, name, level, "spoolss_PrintProcessorInfo"); >- switch (level) { >- case 1: >- ndr_print_spoolss_PrintProcessorInfo1(ndr, "info1", &r->info1); >- break; >+ { >+ uint32_t _flags_save_UNION = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE); >+ level = ndr_print_get_switch_value(ndr, r); >+ ndr_print_union(ndr, name, level, "spoolss_PrintProcessorInfo"); >+ switch (level) { >+ case 1: >+ ndr_print_spoolss_PrintProcessorInfo1(ndr, "info1", &r->info1); >+ break; > >- default: >- break; >+ default: >+ break; > >+ } >+ ndr->flags = _flags_save_UNION; > } > } > >@@ -14204,34 +14483,39 @@ _PUBLIC_ size_t ndr_size_spoolss_PrintProcessorDirectoryInfo1(const struct spool > _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrintProcessorDirectoryInfo(struct ndr_push *ndr, int ndr_flags, const union spoolss_PrintProcessorDirectoryInfo *r) > { > uint32_t _save_relative_base_offset = ndr_push_get_relative_base_offset(ndr); >- if (ndr_flags & NDR_SCALARS) { >- int level = ndr_push_get_switch_value(ndr, r); >- switch (level) { >- case 1: { >- NDR_CHECK(ndr_push_align(ndr, 4)); >- NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_push_spoolss_PrintProcessorDirectoryInfo1(ndr, NDR_SCALARS, &r->info1)); >- break; } >+ { >+ uint32_t _flags_save_UNION = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE); >+ if (ndr_flags & NDR_SCALARS) { >+ int level = ndr_push_get_switch_value(ndr, r); >+ switch (level) { >+ case 1: { >+ NDR_CHECK(ndr_push_align(ndr, 4)); >+ NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_push_spoolss_PrintProcessorDirectoryInfo1(ndr, NDR_SCALARS, &r->info1)); >+ break; } > >- default: { >- NDR_CHECK(ndr_push_align(ndr, 4)); >- NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_push_spoolss_PrintProcessorDirectoryInfo1(ndr, NDR_SCALARS, &r->info1)); >- break; } >+ default: { >+ NDR_CHECK(ndr_push_align(ndr, 4)); >+ NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_push_spoolss_PrintProcessorDirectoryInfo1(ndr, NDR_SCALARS, &r->info1)); >+ break; } > >+ } > } >- } >- if (ndr_flags & NDR_BUFFERS) { >- int level = ndr_push_get_switch_value(ndr, r); >- NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r)); >- switch (level) { >- case 1: >- break; >+ if (ndr_flags & NDR_BUFFERS) { >+ int level = ndr_push_get_switch_value(ndr, r); >+ NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r)); >+ switch (level) { >+ case 1: >+ break; > >- default: >- break; >+ default: >+ break; > >+ } > } >+ ndr->flags = _flags_save_UNION; > } > ndr_push_restore_relative_base_offset(ndr, _save_relative_base_offset); > return NDR_ERR_SUCCESS; >@@ -14241,33 +14525,38 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrintProcessorDirectoryInfo(struct n > { > uint32_t _save_relative_base_offset = ndr_pull_get_relative_base_offset(ndr); > int level; >- level = ndr_pull_get_switch_value(ndr, r); >- if (ndr_flags & NDR_SCALARS) { >- switch (level) { >- case 1: { >- NDR_CHECK(ndr_pull_align(ndr, 4)); >- NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_pull_spoolss_PrintProcessorDirectoryInfo1(ndr, NDR_SCALARS, &r->info1)); >- break; } >+ { >+ uint32_t _flags_save_UNION = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE); >+ level = ndr_pull_get_switch_value(ndr, r); >+ if (ndr_flags & NDR_SCALARS) { >+ switch (level) { >+ case 1: { >+ NDR_CHECK(ndr_pull_align(ndr, 4)); >+ NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_pull_spoolss_PrintProcessorDirectoryInfo1(ndr, NDR_SCALARS, &r->info1)); >+ break; } > >- default: { >- NDR_CHECK(ndr_pull_align(ndr, 4)); >- NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_pull_spoolss_PrintProcessorDirectoryInfo1(ndr, NDR_SCALARS, &r->info1)); >- break; } >+ default: { >+ NDR_CHECK(ndr_pull_align(ndr, 4)); >+ NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_pull_spoolss_PrintProcessorDirectoryInfo1(ndr, NDR_SCALARS, &r->info1)); >+ break; } > >+ } > } >- } >- if (ndr_flags & NDR_BUFFERS) { >- NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r)); >- switch (level) { >- case 1: >- break; >+ if (ndr_flags & NDR_BUFFERS) { >+ NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r)); >+ switch (level) { >+ case 1: >+ break; > >- default: >- break; >+ default: >+ break; > >+ } > } >+ ndr->flags = _flags_save_UNION; > } > ndr_pull_restore_relative_base_offset(ndr, _save_relative_base_offset); > return NDR_ERR_SUCCESS; >@@ -14276,22 +14565,28 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrintProcessorDirectoryInfo(struct n > _PUBLIC_ void ndr_print_spoolss_PrintProcessorDirectoryInfo(struct ndr_print *ndr, const char *name, const union spoolss_PrintProcessorDirectoryInfo *r) > { > int level; >- level = ndr_print_get_switch_value(ndr, r); >- ndr_print_union(ndr, name, level, "spoolss_PrintProcessorDirectoryInfo"); >- switch (level) { >- case 1: >- ndr_print_spoolss_PrintProcessorDirectoryInfo1(ndr, "info1", &r->info1); >- break; >+ { >+ uint32_t _flags_save_UNION = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE); >+ level = ndr_print_get_switch_value(ndr, r); >+ ndr_print_union(ndr, name, level, "spoolss_PrintProcessorDirectoryInfo"); >+ switch (level) { >+ case 1: >+ ndr_print_spoolss_PrintProcessorDirectoryInfo1(ndr, "info1", &r->info1); >+ break; > >- default: >- ndr_print_spoolss_PrintProcessorDirectoryInfo1(ndr, "info1", &r->info1); >- break; >+ default: >+ ndr_print_spoolss_PrintProcessorDirectoryInfo1(ndr, "info1", &r->info1); >+ break; > >+ } >+ ndr->flags = _flags_save_UNION; > } > } > > _PUBLIC_ size_t ndr_size_spoolss_PrintProcessorDirectoryInfo(const union spoolss_PrintProcessorDirectoryInfo *r, uint32_t level, struct smb_iconv_convenience *ic, int flags) > { >+ flags |= LIBNDR_FLAG_RELATIVE_REVERSE; > return ndr_size_union(r, flags, level, (ndr_push_flags_fn_t)ndr_push_spoolss_PrintProcessorDirectoryInfo, ic); > } > >@@ -15356,42 +15651,47 @@ _PUBLIC_ size_t ndr_size_spoolss_FormInfo2(const struct spoolss_FormInfo2 *r, st > _PUBLIC_ enum ndr_err_code ndr_push_spoolss_FormInfo(struct ndr_push *ndr, int ndr_flags, const union spoolss_FormInfo *r) > { > uint32_t _save_relative_base_offset = ndr_push_get_relative_base_offset(ndr); >- if (ndr_flags & NDR_SCALARS) { >- int level = ndr_push_get_switch_value(ndr, r); >- switch (level) { >- case 1: { >- NDR_CHECK(ndr_push_align(ndr, 4)); >- NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_push_spoolss_FormInfo1(ndr, NDR_SCALARS, &r->info1)); >- break; } >+ { >+ uint32_t _flags_save_UNION = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE); >+ if (ndr_flags & NDR_SCALARS) { >+ int level = ndr_push_get_switch_value(ndr, r); >+ switch (level) { >+ case 1: { >+ NDR_CHECK(ndr_push_align(ndr, 4)); >+ NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_push_spoolss_FormInfo1(ndr, NDR_SCALARS, &r->info1)); >+ break; } > >- case 2: { >- NDR_CHECK(ndr_push_align(ndr, 4)); >- NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_push_spoolss_FormInfo2(ndr, NDR_SCALARS, &r->info2)); >- break; } >+ case 2: { >+ NDR_CHECK(ndr_push_align(ndr, 4)); >+ NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_push_spoolss_FormInfo2(ndr, NDR_SCALARS, &r->info2)); >+ break; } > >- default: { >- break; } >+ default: { >+ break; } > >+ } > } >- } >- if (ndr_flags & NDR_BUFFERS) { >- int level = ndr_push_get_switch_value(ndr, r); >- NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r)); >- switch (level) { >- case 1: >- NDR_CHECK(ndr_push_spoolss_FormInfo1(ndr, NDR_BUFFERS, &r->info1)); >- break; >+ if (ndr_flags & NDR_BUFFERS) { >+ int level = ndr_push_get_switch_value(ndr, r); >+ NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r)); >+ switch (level) { >+ case 1: >+ NDR_CHECK(ndr_push_spoolss_FormInfo1(ndr, NDR_BUFFERS, &r->info1)); >+ break; > >- case 2: >- NDR_CHECK(ndr_push_spoolss_FormInfo2(ndr, NDR_BUFFERS, &r->info2)); >- break; >+ case 2: >+ NDR_CHECK(ndr_push_spoolss_FormInfo2(ndr, NDR_BUFFERS, &r->info2)); >+ break; > >- default: >- break; >+ default: >+ break; > >+ } > } >+ ndr->flags = _flags_save_UNION; > } > ndr_push_restore_relative_base_offset(ndr, _save_relative_base_offset); > return NDR_ERR_SUCCESS; >@@ -15401,41 +15701,46 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_FormInfo(struct ndr_pull *ndr, int n > { > uint32_t _save_relative_base_offset = ndr_pull_get_relative_base_offset(ndr); > int level; >- level = ndr_pull_get_switch_value(ndr, r); >- if (ndr_flags & NDR_SCALARS) { >- switch (level) { >- case 1: { >- NDR_CHECK(ndr_pull_align(ndr, 4)); >- NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_pull_spoolss_FormInfo1(ndr, NDR_SCALARS, &r->info1)); >- break; } >+ { >+ uint32_t _flags_save_UNION = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE); >+ level = ndr_pull_get_switch_value(ndr, r); >+ if (ndr_flags & NDR_SCALARS) { >+ switch (level) { >+ case 1: { >+ NDR_CHECK(ndr_pull_align(ndr, 4)); >+ NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_pull_spoolss_FormInfo1(ndr, NDR_SCALARS, &r->info1)); >+ break; } > >- case 2: { >- NDR_CHECK(ndr_pull_align(ndr, 4)); >- NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_pull_spoolss_FormInfo2(ndr, NDR_SCALARS, &r->info2)); >- break; } >+ case 2: { >+ NDR_CHECK(ndr_pull_align(ndr, 4)); >+ NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_pull_spoolss_FormInfo2(ndr, NDR_SCALARS, &r->info2)); >+ break; } > >- default: { >- break; } >+ default: { >+ break; } > >+ } > } >- } >- if (ndr_flags & NDR_BUFFERS) { >- NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r)); >- switch (level) { >- case 1: >- NDR_CHECK(ndr_pull_spoolss_FormInfo1(ndr, NDR_BUFFERS, &r->info1)); >- break; >+ if (ndr_flags & NDR_BUFFERS) { >+ NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r)); >+ switch (level) { >+ case 1: >+ NDR_CHECK(ndr_pull_spoolss_FormInfo1(ndr, NDR_BUFFERS, &r->info1)); >+ break; > >- case 2: >- NDR_CHECK(ndr_pull_spoolss_FormInfo2(ndr, NDR_BUFFERS, &r->info2)); >- break; >+ case 2: >+ NDR_CHECK(ndr_pull_spoolss_FormInfo2(ndr, NDR_BUFFERS, &r->info2)); >+ break; > >- default: >- break; >+ default: >+ break; > >+ } > } >+ ndr->flags = _flags_save_UNION; > } > ndr_pull_restore_relative_base_offset(ndr, _save_relative_base_offset); > return NDR_ERR_SUCCESS; >@@ -15444,25 +15749,31 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_FormInfo(struct ndr_pull *ndr, int n > _PUBLIC_ void ndr_print_spoolss_FormInfo(struct ndr_print *ndr, const char *name, const union spoolss_FormInfo *r) > { > int level; >- level = ndr_print_get_switch_value(ndr, r); >- ndr_print_union(ndr, name, level, "spoolss_FormInfo"); >- switch (level) { >- case 1: >- ndr_print_spoolss_FormInfo1(ndr, "info1", &r->info1); >- break; >+ { >+ uint32_t _flags_save_UNION = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE); >+ level = ndr_print_get_switch_value(ndr, r); >+ ndr_print_union(ndr, name, level, "spoolss_FormInfo"); >+ switch (level) { >+ case 1: >+ ndr_print_spoolss_FormInfo1(ndr, "info1", &r->info1); >+ break; > >- case 2: >- ndr_print_spoolss_FormInfo2(ndr, "info2", &r->info2); >- break; >+ case 2: >+ ndr_print_spoolss_FormInfo2(ndr, "info2", &r->info2); >+ break; > >- default: >- break; >+ default: >+ break; > >+ } >+ ndr->flags = _flags_save_UNION; > } > } > > _PUBLIC_ size_t ndr_size_spoolss_FormInfo(const union spoolss_FormInfo *r, uint32_t level, struct smb_iconv_convenience *ic, int flags) > { >+ flags |= LIBNDR_FLAG_RELATIVE_REVERSE; > return ndr_size_union(r, flags, level, (ndr_push_flags_fn_t)ndr_push_spoolss_FormInfo, ic); > } > >@@ -16384,62 +16695,67 @@ _PUBLIC_ size_t ndr_size_spoolss_PortInfoFF(const struct spoolss_PortInfoFF *r, > _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PortInfo(struct ndr_push *ndr, int ndr_flags, const union spoolss_PortInfo *r) > { > uint32_t _save_relative_base_offset = ndr_push_get_relative_base_offset(ndr); >- if (ndr_flags & NDR_SCALARS) { >- int level = ndr_push_get_switch_value(ndr, r); >- switch (level) { >- case 1: { >- NDR_CHECK(ndr_push_align(ndr, 4)); >- NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_push_spoolss_PortInfo1(ndr, NDR_SCALARS, &r->info1)); >- break; } >+ { >+ uint32_t _flags_save_UNION = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE); >+ if (ndr_flags & NDR_SCALARS) { >+ int level = ndr_push_get_switch_value(ndr, r); >+ switch (level) { >+ case 1: { >+ NDR_CHECK(ndr_push_align(ndr, 4)); >+ NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_push_spoolss_PortInfo1(ndr, NDR_SCALARS, &r->info1)); >+ break; } > >- case 2: { >- NDR_CHECK(ndr_push_align(ndr, 4)); >- NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_push_spoolss_PortInfo2(ndr, NDR_SCALARS, &r->info2)); >- break; } >+ case 2: { >+ NDR_CHECK(ndr_push_align(ndr, 4)); >+ NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_push_spoolss_PortInfo2(ndr, NDR_SCALARS, &r->info2)); >+ break; } > >- case 3: { >- NDR_CHECK(ndr_push_align(ndr, 4)); >- NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_push_spoolss_PortInfo3(ndr, NDR_SCALARS, &r->info3)); >- break; } >+ case 3: { >+ NDR_CHECK(ndr_push_align(ndr, 4)); >+ NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_push_spoolss_PortInfo3(ndr, NDR_SCALARS, &r->info3)); >+ break; } > >- case 0xff: { >- NDR_CHECK(ndr_push_align(ndr, 4)); >- NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_push_spoolss_PortInfoFF(ndr, NDR_SCALARS, &r->infoFF)); >- break; } >+ case 0xff: { >+ NDR_CHECK(ndr_push_align(ndr, 4)); >+ NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_push_spoolss_PortInfoFF(ndr, NDR_SCALARS, &r->infoFF)); >+ break; } > >- default: { >- break; } >+ default: { >+ break; } > >+ } > } >- } >- if (ndr_flags & NDR_BUFFERS) { >- int level = ndr_push_get_switch_value(ndr, r); >- NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r)); >- switch (level) { >- case 1: >- NDR_CHECK(ndr_push_spoolss_PortInfo1(ndr, NDR_BUFFERS, &r->info1)); >- break; >+ if (ndr_flags & NDR_BUFFERS) { >+ int level = ndr_push_get_switch_value(ndr, r); >+ NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r)); >+ switch (level) { >+ case 1: >+ NDR_CHECK(ndr_push_spoolss_PortInfo1(ndr, NDR_BUFFERS, &r->info1)); >+ break; > >- case 2: >- NDR_CHECK(ndr_push_spoolss_PortInfo2(ndr, NDR_BUFFERS, &r->info2)); >- break; >+ case 2: >+ NDR_CHECK(ndr_push_spoolss_PortInfo2(ndr, NDR_BUFFERS, &r->info2)); >+ break; > >- case 3: >- NDR_CHECK(ndr_push_spoolss_PortInfo3(ndr, NDR_BUFFERS, &r->info3)); >- break; >+ case 3: >+ NDR_CHECK(ndr_push_spoolss_PortInfo3(ndr, NDR_BUFFERS, &r->info3)); >+ break; > >- case 0xff: >- NDR_CHECK(ndr_push_spoolss_PortInfoFF(ndr, NDR_BUFFERS, &r->infoFF)); >- break; >+ case 0xff: >+ NDR_CHECK(ndr_push_spoolss_PortInfoFF(ndr, NDR_BUFFERS, &r->infoFF)); >+ break; > >- default: >- break; >+ default: >+ break; > >+ } > } >+ ndr->flags = _flags_save_UNION; > } > ndr_push_restore_relative_base_offset(ndr, _save_relative_base_offset); > return NDR_ERR_SUCCESS; >@@ -16449,61 +16765,66 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PortInfo(struct ndr_pull *ndr, int n > { > uint32_t _save_relative_base_offset = ndr_pull_get_relative_base_offset(ndr); > int level; >- level = ndr_pull_get_switch_value(ndr, r); >- if (ndr_flags & NDR_SCALARS) { >- switch (level) { >- case 1: { >- NDR_CHECK(ndr_pull_align(ndr, 4)); >- NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_pull_spoolss_PortInfo1(ndr, NDR_SCALARS, &r->info1)); >- break; } >+ { >+ uint32_t _flags_save_UNION = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE); >+ level = ndr_pull_get_switch_value(ndr, r); >+ if (ndr_flags & NDR_SCALARS) { >+ switch (level) { >+ case 1: { >+ NDR_CHECK(ndr_pull_align(ndr, 4)); >+ NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_pull_spoolss_PortInfo1(ndr, NDR_SCALARS, &r->info1)); >+ break; } > >- case 2: { >- NDR_CHECK(ndr_pull_align(ndr, 4)); >- NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_pull_spoolss_PortInfo2(ndr, NDR_SCALARS, &r->info2)); >- break; } >+ case 2: { >+ NDR_CHECK(ndr_pull_align(ndr, 4)); >+ NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_pull_spoolss_PortInfo2(ndr, NDR_SCALARS, &r->info2)); >+ break; } > >- case 3: { >- NDR_CHECK(ndr_pull_align(ndr, 4)); >- NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_pull_spoolss_PortInfo3(ndr, NDR_SCALARS, &r->info3)); >- break; } >+ case 3: { >+ NDR_CHECK(ndr_pull_align(ndr, 4)); >+ NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_pull_spoolss_PortInfo3(ndr, NDR_SCALARS, &r->info3)); >+ break; } > >- case 0xff: { >- NDR_CHECK(ndr_pull_align(ndr, 4)); >- NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_pull_spoolss_PortInfoFF(ndr, NDR_SCALARS, &r->infoFF)); >- break; } >+ case 0xff: { >+ NDR_CHECK(ndr_pull_align(ndr, 4)); >+ NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_pull_spoolss_PortInfoFF(ndr, NDR_SCALARS, &r->infoFF)); >+ break; } > >- default: { >- break; } >+ default: { >+ break; } > >+ } > } >- } >- if (ndr_flags & NDR_BUFFERS) { >- NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r)); >- switch (level) { >- case 1: >- NDR_CHECK(ndr_pull_spoolss_PortInfo1(ndr, NDR_BUFFERS, &r->info1)); >- break; >+ if (ndr_flags & NDR_BUFFERS) { >+ NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r)); >+ switch (level) { >+ case 1: >+ NDR_CHECK(ndr_pull_spoolss_PortInfo1(ndr, NDR_BUFFERS, &r->info1)); >+ break; > >- case 2: >- NDR_CHECK(ndr_pull_spoolss_PortInfo2(ndr, NDR_BUFFERS, &r->info2)); >- break; >+ case 2: >+ NDR_CHECK(ndr_pull_spoolss_PortInfo2(ndr, NDR_BUFFERS, &r->info2)); >+ break; > >- case 3: >- NDR_CHECK(ndr_pull_spoolss_PortInfo3(ndr, NDR_BUFFERS, &r->info3)); >- break; >+ case 3: >+ NDR_CHECK(ndr_pull_spoolss_PortInfo3(ndr, NDR_BUFFERS, &r->info3)); >+ break; > >- case 0xff: >- NDR_CHECK(ndr_pull_spoolss_PortInfoFF(ndr, NDR_BUFFERS, &r->infoFF)); >- break; >+ case 0xff: >+ NDR_CHECK(ndr_pull_spoolss_PortInfoFF(ndr, NDR_BUFFERS, &r->infoFF)); >+ break; > >- default: >- break; >+ default: >+ break; > >+ } > } >+ ndr->flags = _flags_save_UNION; > } > ndr_pull_restore_relative_base_offset(ndr, _save_relative_base_offset); > return NDR_ERR_SUCCESS; >@@ -16512,28 +16833,33 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PortInfo(struct ndr_pull *ndr, int n > _PUBLIC_ void ndr_print_spoolss_PortInfo(struct ndr_print *ndr, const char *name, const union spoolss_PortInfo *r) > { > int level; >- level = ndr_print_get_switch_value(ndr, r); >- ndr_print_union(ndr, name, level, "spoolss_PortInfo"); >- switch (level) { >- case 1: >- ndr_print_spoolss_PortInfo1(ndr, "info1", &r->info1); >- break; >+ { >+ uint32_t _flags_save_UNION = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE); >+ level = ndr_print_get_switch_value(ndr, r); >+ ndr_print_union(ndr, name, level, "spoolss_PortInfo"); >+ switch (level) { >+ case 1: >+ ndr_print_spoolss_PortInfo1(ndr, "info1", &r->info1); >+ break; > >- case 2: >- ndr_print_spoolss_PortInfo2(ndr, "info2", &r->info2); >- break; >+ case 2: >+ ndr_print_spoolss_PortInfo2(ndr, "info2", &r->info2); >+ break; > >- case 3: >- ndr_print_spoolss_PortInfo3(ndr, "info3", &r->info3); >- break; >+ case 3: >+ ndr_print_spoolss_PortInfo3(ndr, "info3", &r->info3); >+ break; > >- case 0xff: >- ndr_print_spoolss_PortInfoFF(ndr, "infoFF", &r->infoFF); >- break; >+ case 0xff: >+ ndr_print_spoolss_PortInfoFF(ndr, "infoFF", &r->infoFF); >+ break; > >- default: >- break; >+ default: >+ break; > >+ } >+ ndr->flags = _flags_save_UNION; > } > } > >@@ -16808,42 +17134,47 @@ _PUBLIC_ size_t ndr_size_spoolss_MonitorInfo2(const struct spoolss_MonitorInfo2 > _PUBLIC_ enum ndr_err_code ndr_push_spoolss_MonitorInfo(struct ndr_push *ndr, int ndr_flags, const union spoolss_MonitorInfo *r) > { > uint32_t _save_relative_base_offset = ndr_push_get_relative_base_offset(ndr); >- if (ndr_flags & NDR_SCALARS) { >- int level = ndr_push_get_switch_value(ndr, r); >- switch (level) { >- case 1: { >- NDR_CHECK(ndr_push_align(ndr, 4)); >- NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_push_spoolss_MonitorInfo1(ndr, NDR_SCALARS, &r->info1)); >- break; } >+ { >+ uint32_t _flags_save_UNION = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE); >+ if (ndr_flags & NDR_SCALARS) { >+ int level = ndr_push_get_switch_value(ndr, r); >+ switch (level) { >+ case 1: { >+ NDR_CHECK(ndr_push_align(ndr, 4)); >+ NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_push_spoolss_MonitorInfo1(ndr, NDR_SCALARS, &r->info1)); >+ break; } > >- case 2: { >- NDR_CHECK(ndr_push_align(ndr, 4)); >- NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_push_spoolss_MonitorInfo2(ndr, NDR_SCALARS, &r->info2)); >- break; } >+ case 2: { >+ NDR_CHECK(ndr_push_align(ndr, 4)); >+ NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_push_spoolss_MonitorInfo2(ndr, NDR_SCALARS, &r->info2)); >+ break; } > >- default: { >- break; } >+ default: { >+ break; } > >+ } > } >- } >- if (ndr_flags & NDR_BUFFERS) { >- int level = ndr_push_get_switch_value(ndr, r); >- NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r)); >- switch (level) { >- case 1: >- NDR_CHECK(ndr_push_spoolss_MonitorInfo1(ndr, NDR_BUFFERS, &r->info1)); >- break; >+ if (ndr_flags & NDR_BUFFERS) { >+ int level = ndr_push_get_switch_value(ndr, r); >+ NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r)); >+ switch (level) { >+ case 1: >+ NDR_CHECK(ndr_push_spoolss_MonitorInfo1(ndr, NDR_BUFFERS, &r->info1)); >+ break; > >- case 2: >- NDR_CHECK(ndr_push_spoolss_MonitorInfo2(ndr, NDR_BUFFERS, &r->info2)); >- break; >+ case 2: >+ NDR_CHECK(ndr_push_spoolss_MonitorInfo2(ndr, NDR_BUFFERS, &r->info2)); >+ break; > >- default: >- break; >+ default: >+ break; > >+ } > } >+ ndr->flags = _flags_save_UNION; > } > ndr_push_restore_relative_base_offset(ndr, _save_relative_base_offset); > return NDR_ERR_SUCCESS; >@@ -16853,41 +17184,46 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_MonitorInfo(struct ndr_pull *ndr, in > { > uint32_t _save_relative_base_offset = ndr_pull_get_relative_base_offset(ndr); > int level; >- level = ndr_pull_get_switch_value(ndr, r); >- if (ndr_flags & NDR_SCALARS) { >- switch (level) { >- case 1: { >- NDR_CHECK(ndr_pull_align(ndr, 4)); >- NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_pull_spoolss_MonitorInfo1(ndr, NDR_SCALARS, &r->info1)); >- break; } >+ { >+ uint32_t _flags_save_UNION = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE); >+ level = ndr_pull_get_switch_value(ndr, r); >+ if (ndr_flags & NDR_SCALARS) { >+ switch (level) { >+ case 1: { >+ NDR_CHECK(ndr_pull_align(ndr, 4)); >+ NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_pull_spoolss_MonitorInfo1(ndr, NDR_SCALARS, &r->info1)); >+ break; } > >- case 2: { >- NDR_CHECK(ndr_pull_align(ndr, 4)); >- NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_pull_spoolss_MonitorInfo2(ndr, NDR_SCALARS, &r->info2)); >- break; } >+ case 2: { >+ NDR_CHECK(ndr_pull_align(ndr, 4)); >+ NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_pull_spoolss_MonitorInfo2(ndr, NDR_SCALARS, &r->info2)); >+ break; } > >- default: { >- break; } >+ default: { >+ break; } > >+ } > } >- } >- if (ndr_flags & NDR_BUFFERS) { >- NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r)); >- switch (level) { >- case 1: >- NDR_CHECK(ndr_pull_spoolss_MonitorInfo1(ndr, NDR_BUFFERS, &r->info1)); >- break; >+ if (ndr_flags & NDR_BUFFERS) { >+ NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r)); >+ switch (level) { >+ case 1: >+ NDR_CHECK(ndr_pull_spoolss_MonitorInfo1(ndr, NDR_BUFFERS, &r->info1)); >+ break; > >- case 2: >- NDR_CHECK(ndr_pull_spoolss_MonitorInfo2(ndr, NDR_BUFFERS, &r->info2)); >- break; >+ case 2: >+ NDR_CHECK(ndr_pull_spoolss_MonitorInfo2(ndr, NDR_BUFFERS, &r->info2)); >+ break; > >- default: >- break; >+ default: >+ break; > >+ } > } >+ ndr->flags = _flags_save_UNION; > } > ndr_pull_restore_relative_base_offset(ndr, _save_relative_base_offset); > return NDR_ERR_SUCCESS; >@@ -16896,20 +17232,25 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_MonitorInfo(struct ndr_pull *ndr, in > _PUBLIC_ void ndr_print_spoolss_MonitorInfo(struct ndr_print *ndr, const char *name, const union spoolss_MonitorInfo *r) > { > int level; >- level = ndr_print_get_switch_value(ndr, r); >- ndr_print_union(ndr, name, level, "spoolss_MonitorInfo"); >- switch (level) { >- case 1: >- ndr_print_spoolss_MonitorInfo1(ndr, "info1", &r->info1); >- break; >+ { >+ uint32_t _flags_save_UNION = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE); >+ level = ndr_print_get_switch_value(ndr, r); >+ ndr_print_union(ndr, name, level, "spoolss_MonitorInfo"); >+ switch (level) { >+ case 1: >+ ndr_print_spoolss_MonitorInfo1(ndr, "info1", &r->info1); >+ break; > >- case 2: >- ndr_print_spoolss_MonitorInfo2(ndr, "info2", &r->info2); >- break; >+ case 2: >+ ndr_print_spoolss_MonitorInfo2(ndr, "info2", &r->info2); >+ break; > >- default: >- break; >+ default: >+ break; > >+ } >+ ndr->flags = _flags_save_UNION; > } > } > >@@ -16999,32 +17340,37 @@ _PUBLIC_ size_t ndr_size_spoolss_PrintProcDataTypesInfo1(const struct spoolss_Pr > _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrintProcDataTypesInfo(struct ndr_push *ndr, int ndr_flags, const union spoolss_PrintProcDataTypesInfo *r) > { > uint32_t _save_relative_base_offset = ndr_push_get_relative_base_offset(ndr); >- if (ndr_flags & NDR_SCALARS) { >- int level = ndr_push_get_switch_value(ndr, r); >- switch (level) { >- case 1: { >- NDR_CHECK(ndr_push_align(ndr, 4)); >- NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_push_spoolss_PrintProcDataTypesInfo1(ndr, NDR_SCALARS, &r->info1)); >- break; } >+ { >+ uint32_t _flags_save_UNION = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE); >+ if (ndr_flags & NDR_SCALARS) { >+ int level = ndr_push_get_switch_value(ndr, r); >+ switch (level) { >+ case 1: { >+ NDR_CHECK(ndr_push_align(ndr, 4)); >+ NDR_CHECK(ndr_push_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_push_spoolss_PrintProcDataTypesInfo1(ndr, NDR_SCALARS, &r->info1)); >+ break; } > >- default: { >- break; } >+ default: { >+ break; } > >+ } > } >- } >- if (ndr_flags & NDR_BUFFERS) { >- int level = ndr_push_get_switch_value(ndr, r); >- NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r)); >- switch (level) { >- case 1: >- NDR_CHECK(ndr_push_spoolss_PrintProcDataTypesInfo1(ndr, NDR_BUFFERS, &r->info1)); >- break; >+ if (ndr_flags & NDR_BUFFERS) { >+ int level = ndr_push_get_switch_value(ndr, r); >+ NDR_CHECK(ndr_push_setup_relative_base_offset2(ndr, r)); >+ switch (level) { >+ case 1: >+ NDR_CHECK(ndr_push_spoolss_PrintProcDataTypesInfo1(ndr, NDR_BUFFERS, &r->info1)); >+ break; > >- default: >- break; >+ default: >+ break; > >+ } > } >+ ndr->flags = _flags_save_UNION; > } > ndr_push_restore_relative_base_offset(ndr, _save_relative_base_offset); > return NDR_ERR_SUCCESS; >@@ -17034,31 +17380,36 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrintProcDataTypesInfo(struct ndr_pu > { > uint32_t _save_relative_base_offset = ndr_pull_get_relative_base_offset(ndr); > int level; >- level = ndr_pull_get_switch_value(ndr, r); >- if (ndr_flags & NDR_SCALARS) { >- switch (level) { >- case 1: { >- NDR_CHECK(ndr_pull_align(ndr, 4)); >- NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >- NDR_CHECK(ndr_pull_spoolss_PrintProcDataTypesInfo1(ndr, NDR_SCALARS, &r->info1)); >- break; } >+ { >+ uint32_t _flags_save_UNION = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE); >+ level = ndr_pull_get_switch_value(ndr, r); >+ if (ndr_flags & NDR_SCALARS) { >+ switch (level) { >+ case 1: { >+ NDR_CHECK(ndr_pull_align(ndr, 4)); >+ NDR_CHECK(ndr_pull_setup_relative_base_offset1(ndr, r, ndr->offset)); >+ NDR_CHECK(ndr_pull_spoolss_PrintProcDataTypesInfo1(ndr, NDR_SCALARS, &r->info1)); >+ break; } > >- default: { >- break; } >+ default: { >+ break; } > >+ } > } >- } >- if (ndr_flags & NDR_BUFFERS) { >- NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r)); >- switch (level) { >- case 1: >- NDR_CHECK(ndr_pull_spoolss_PrintProcDataTypesInfo1(ndr, NDR_BUFFERS, &r->info1)); >- break; >+ if (ndr_flags & NDR_BUFFERS) { >+ NDR_CHECK(ndr_pull_setup_relative_base_offset2(ndr, r)); >+ switch (level) { >+ case 1: >+ NDR_CHECK(ndr_pull_spoolss_PrintProcDataTypesInfo1(ndr, NDR_BUFFERS, &r->info1)); >+ break; > >- default: >- break; >+ default: >+ break; > >+ } > } >+ ndr->flags = _flags_save_UNION; > } > ndr_pull_restore_relative_base_offset(ndr, _save_relative_base_offset); > return NDR_ERR_SUCCESS; >@@ -17067,16 +17418,21 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrintProcDataTypesInfo(struct ndr_pu > _PUBLIC_ void ndr_print_spoolss_PrintProcDataTypesInfo(struct ndr_print *ndr, const char *name, const union spoolss_PrintProcDataTypesInfo *r) > { > int level; >- level = ndr_print_get_switch_value(ndr, r); >- ndr_print_union(ndr, name, level, "spoolss_PrintProcDataTypesInfo"); >- switch (level) { >- case 1: >- ndr_print_spoolss_PrintProcDataTypesInfo1(ndr, "info1", &r->info1); >- break; >+ { >+ uint32_t _flags_save_UNION = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_RELATIVE_REVERSE); >+ level = ndr_print_get_switch_value(ndr, r); >+ ndr_print_union(ndr, name, level, "spoolss_PrintProcDataTypesInfo"); >+ switch (level) { >+ case 1: >+ ndr_print_spoolss_PrintProcDataTypesInfo1(ndr, "info1", &r->info1); >+ break; > >- default: >- break; >+ default: >+ break; > >+ } >+ ndr->flags = _flags_save_UNION; > } > } > >diff --git a/librpc/gen_ndr/ndr_spoolss.h b/librpc/gen_ndr/ndr_spoolss.h >index 1b94124..00f89b6 100644 >--- a/librpc/gen_ndr/ndr_spoolss.h >+++ b/librpc/gen_ndr/ndr_spoolss.h >@@ -211,6 +211,8 @@ void ndr_print_spoolss_ProcessorArchitecture(struct ndr_print *ndr, const char * > void ndr_print_spoolss_ProcessorType(struct ndr_print *ndr, const char *name, enum spoolss_ProcessorType r); > void ndr_print_spoolss_MajorVersion(struct ndr_print *ndr, const char *name, enum spoolss_MajorVersion r); > void ndr_print_spoolss_MinorVersion(struct ndr_print *ndr, const char *name, enum spoolss_MinorVersion r); >+enum ndr_err_code ndr_push_spoolss_PrinterStatus(struct ndr_push *ndr, int ndr_flags, uint32_t r); >+enum ndr_err_code ndr_pull_spoolss_PrinterStatus(struct ndr_pull *ndr, int ndr_flags, uint32_t *r); > void ndr_print_spoolss_PrinterStatus(struct ndr_print *ndr, const char *name, uint32_t r); > void ndr_print_spoolss_JobStatus(struct ndr_print *ndr, const char *name, uint32_t r); > enum ndr_err_code ndr_push_spoolss_PrinterInfo0(struct ndr_push *ndr, int ndr_flags, const struct spoolss_PrinterInfo0 *r); >@@ -229,6 +231,8 @@ enum ndr_err_code ndr_push_spoolss_PrinterInfo1(struct ndr_push *ndr, int ndr_fl > enum ndr_err_code ndr_pull_spoolss_PrinterInfo1(struct ndr_pull *ndr, int ndr_flags, struct spoolss_PrinterInfo1 *r); > void ndr_print_spoolss_PrinterInfo1(struct ndr_print *ndr, const char *name, const struct spoolss_PrinterInfo1 *r); > size_t ndr_size_spoolss_PrinterInfo1(const struct spoolss_PrinterInfo1 *r, struct smb_iconv_convenience *ic, int flags); >+enum ndr_err_code ndr_push_spoolss_PrinterAttributes(struct ndr_push *ndr, int ndr_flags, uint32_t r); >+enum ndr_err_code ndr_pull_spoolss_PrinterAttributes(struct ndr_pull *ndr, int ndr_flags, uint32_t *r); > void ndr_print_spoolss_PrinterAttributes(struct ndr_print *ndr, const char *name, uint32_t r); > enum ndr_err_code ndr_push_spoolss_PrinterInfo2(struct ndr_push *ndr, int ndr_flags, const struct spoolss_PrinterInfo2 *r); > enum ndr_err_code ndr_pull_spoolss_PrinterInfo2(struct ndr_pull *ndr, int ndr_flags, struct spoolss_PrinterInfo2 *r); >diff --git a/librpc/gen_ndr/spoolss.h b/librpc/gen_ndr/spoolss.h >index bd63485..f346697 100644 >--- a/librpc/gen_ndr/spoolss.h >+++ b/librpc/gen_ndr/spoolss.h >@@ -329,12 +329,12 @@ struct spoolss_PrinterInfo2 { > const char * drivername;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */ > const char * comment;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */ > const char * location;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */ >- struct spoolss_DeviceMode *devmode;/* [relative,subcontext(0)] */ >+ struct spoolss_DeviceMode *devmode;/* [relative,subcontext(0),flag(LIBNDR_FLAG_ALIGN4)] */ > const char * sepfile;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */ > const char * printprocessor;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */ > const char * datatype;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */ > const char * parameters;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */ >- struct security_descriptor *secdesc;/* [relative,subcontext(0)] */ >+ struct security_descriptor *secdesc;/* [relative,subcontext(0),flag(LIBNDR_FLAG_ALIGN4)] */ > uint32_t attributes; > uint32_t priority;/* [range(0,99)] */ > uint32_t defaultpriority; >@@ -346,7 +346,7 @@ struct spoolss_PrinterInfo2 { > }/* [gensize,public] */; > > struct spoolss_PrinterInfo3 { >- struct security_descriptor *secdesc;/* [relative,subcontext(0)] */ >+ struct security_descriptor *secdesc;/* [relative,subcontext(0),flag(LIBNDR_FLAG_ALIGN4)] */ > }/* [gensize,public] */; > > struct spoolss_PrinterInfo4 { >@@ -380,7 +380,7 @@ struct spoolss_PrinterInfo7 { > }/* [gensize,public] */; > > struct spoolss_DeviceModeInfo { >- struct spoolss_DeviceMode *devmode;/* [relative,subcontext(0)] */ >+ struct spoolss_DeviceMode *devmode;/* [relative,subcontext(0),flag(LIBNDR_FLAG_ALIGN4)] */ > }; > > union spoolss_PrinterInfo { >@@ -394,7 +394,7 @@ union spoolss_PrinterInfo { > struct spoolss_PrinterInfo7 info7;/* [case(7)] */ > struct spoolss_DeviceModeInfo info8;/* [case(8)] */ > struct spoolss_DeviceModeInfo info9;/* [case(9)] */ >-}/* [relative_base,gensize,public,nodiscriminant] */; >+}/* [gensize,relative_base,nodiscriminant,public,flag(LIBNDR_FLAG_RELATIVE_REVERSE)] */; > > struct spoolss_DevmodeContainer { > uint32_t _ndr_size;/* [value(_ndr_size_spoolss_DeviceMode(devmode,ndr->iconv_convenience,ndr->flags))] */ >@@ -428,9 +428,9 @@ struct spoolss_JobInfo2 { > const char * print_processor;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */ > const char * parameters;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */ > const char * driver_name;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */ >- struct spoolss_DeviceMode *devmode;/* [relative] */ >+ struct spoolss_DeviceMode *devmode;/* [relative,subcontext(0),flag(LIBNDR_FLAG_ALIGN4)] */ > const char * text_status;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */ >- struct security_descriptor *secdesc;/* [relative] */ >+ struct security_descriptor *secdesc;/* [relative,subcontext(0),flag(LIBNDR_FLAG_ALIGN4)] */ > uint32_t status; > uint32_t priority;/* [range(0,99)] */ > uint32_t position; >@@ -460,9 +460,9 @@ struct spoolss_JobInfo4 { > const char * print_processor;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */ > const char * parameters;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */ > const char * driver_name;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */ >- struct spoolss_DeviceMode *devmode;/* [relative] */ >+ struct spoolss_DeviceMode *devmode;/* [relative,subcontext(0),flag(LIBNDR_FLAG_ALIGN4)] */ > const char * text_status;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */ >- struct security_descriptor *secdesc;/* [relative] */ >+ struct security_descriptor *secdesc;/* [relative,subcontext(0),flag(LIBNDR_FLAG_ALIGN4)] */ > uint32_t status; > uint32_t priority;/* [range(0,99)] */ > uint32_t position; >@@ -481,7 +481,7 @@ union spoolss_JobInfo { > struct spoolss_JobInfo2 info2;/* [case(2)] */ > struct spoolss_JobInfo3 info3;/* [case(3)] */ > struct spoolss_JobInfo4 info4;/* [case(4)] */ >-}/* [relative_base,gensize,public,nodiscriminant] */; >+}/* [gensize,relative_base,nodiscriminant,public,flag(LIBNDR_FLAG_RELATIVE_REVERSE)] */; > > struct spoolss_SetJobInfo1 { > uint32_t job_id; >@@ -1017,7 +1017,7 @@ union spoolss_DriverInfo { > struct spoolss_DriverInfo6 info6;/* [case(6)] */ > struct spoolss_DriverInfo8 info8;/* [case(8)] */ > struct spoolss_DriverInfo101 info101;/* [case(101)] */ >-}/* [relative_base,gensize,public,nodiscriminant] */; >+}/* [gensize,relative_base,nodiscriminant,public,flag(LIBNDR_FLAG_RELATIVE_REVERSE)] */; > > struct spoolss_DriverDirectoryInfo1 { > const char * directory_name;/* [flag(LIBNDR_FLAG_STR_NULLTERM)] */ >@@ -1025,7 +1025,7 @@ struct spoolss_DriverDirectoryInfo1 { > > union spoolss_DriverDirectoryInfo { > struct spoolss_DriverDirectoryInfo1 info1;/* [case] */ >-}/* [gensize,relative_base,nodiscriminant,public] */; >+}/* [gensize,relative_base,nodiscriminant,public,flag(LIBNDR_FLAG_RELATIVE_REVERSE)] */; > > struct spoolss_PrintProcessorInfo1 { > const char * print_processor_name;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */ >@@ -1033,7 +1033,7 @@ struct spoolss_PrintProcessorInfo1 { > > union spoolss_PrintProcessorInfo { > struct spoolss_PrintProcessorInfo1 info1;/* [case] */ >-}/* [relative_base,nodiscriminant,public] */; >+}/* [relative_base,public,nodiscriminant,flag(LIBNDR_FLAG_RELATIVE_REVERSE)] */; > > struct spoolss_PrintProcessorDirectoryInfo1 { > const char * directory_name;/* [flag(LIBNDR_FLAG_STR_NULLTERM)] */ >@@ -1041,7 +1041,7 @@ struct spoolss_PrintProcessorDirectoryInfo1 { > > union spoolss_PrintProcessorDirectoryInfo { > struct spoolss_PrintProcessorDirectoryInfo1 info1;/* [case] */ >-}/* [gensize,relative_base,nodiscriminant,public] */; >+}/* [gensize,relative_base,nodiscriminant,public,flag(LIBNDR_FLAG_RELATIVE_REVERSE)] */; > > struct spoolss_DocumentInfo1 { > const char *document_name;/* [unique,charset(UTF16)] */ >@@ -1136,7 +1136,7 @@ struct spoolss_FormInfo2 { > union spoolss_FormInfo { > struct spoolss_FormInfo1 info1;/* [case] */ > struct spoolss_FormInfo2 info2;/* [case(2)] */ >-}/* [relative_base,gensize,public,nodiscriminant] */; >+}/* [gensize,relative_base,nodiscriminant,public,flag(LIBNDR_FLAG_RELATIVE_REVERSE)] */; > > struct spoolss_AddFormInfo1 { > enum spoolss_FormFlags flags; >@@ -1247,7 +1247,7 @@ union spoolss_PortInfo { > struct spoolss_PortInfo2 info2;/* [case(2)] */ > struct spoolss_PortInfo3 info3;/* [case(3)] */ > struct spoolss_PortInfoFF infoFF;/* [case(0xff)] */ >-}/* [relative_base,nodiscriminant,public] */; >+}/* [relative_base,public,nodiscriminant,flag(LIBNDR_FLAG_RELATIVE_REVERSE)] */; > > struct spoolss_MonitorInfo1 { > const char * monitor_name;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */ >@@ -1262,7 +1262,7 @@ struct spoolss_MonitorInfo2 { > union spoolss_MonitorInfo { > struct spoolss_MonitorInfo1 info1;/* [case] */ > struct spoolss_MonitorInfo2 info2;/* [case(2)] */ >-}/* [relative_base,nodiscriminant,public] */; >+}/* [relative_base,public,nodiscriminant,flag(LIBNDR_FLAG_RELATIVE_REVERSE)] */; > > struct spoolss_PrintProcDataTypesInfo1 { > const char * name_array;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */ >@@ -1270,7 +1270,7 @@ struct spoolss_PrintProcDataTypesInfo1 { > > union spoolss_PrintProcDataTypesInfo { > struct spoolss_PrintProcDataTypesInfo1 info1;/* [case] */ >-}/* [relative_base,nodiscriminant,public] */; >+}/* [relative_base,public,nodiscriminant,flag(LIBNDR_FLAG_RELATIVE_REVERSE)] */; > > /* bitmap spoolss_PrinterChangeFlags */ > #define PRINTER_CHANGE_ADD_PRINTER ( 0x00000001 ) >-- >1.6.6 > > >From 88c672379ee0a1eea4a914550cac573681bbd326 Mon Sep 17 00:00:00 2001 >From: =?UTF-8?q?G=C3=BCnther=20Deschner?= <gd@samba.org> >Date: Tue, 16 Feb 2010 02:48:01 +0100 >Subject: [PATCH 23/24] spoolss: add spoolss_security_descriptor. > >Guenther >--- > librpc/gen_ndr/ndr_spoolss.c | 88 +++++++++++++++++++++--------------------- > librpc/gen_ndr/spoolss.h | 9 ++-- > librpc/idl/spoolss.idl | 11 +++-- > librpc/ndr/ndr_spoolss_buf.c | 55 ++++++++++++++++++++++++++ > librpc/ndr/ndr_spoolss_buf.h | 3 + > 5 files changed, 114 insertions(+), 52 deletions(-) > >diff --git a/librpc/gen_ndr/ndr_spoolss.c b/librpc/gen_ndr/ndr_spoolss.c >index 59919cc..712c907 100644 >--- a/librpc/gen_ndr/ndr_spoolss.c >+++ b/librpc/gen_ndr/ndr_spoolss.c >@@ -1067,10 +1067,10 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo2(struct ndr_push *ndr, i > ndr->flags = _flags_save_string; > } > { >- uint32_t _flags_save_security_descriptor = ndr->flags; >+ 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_security_descriptor; >+ 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)); >@@ -1208,19 +1208,19 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo2(struct ndr_push *ndr, i > ndr->flags = _flags_save_string; > } > { >- uint32_t _flags_save_security_descriptor = ndr->flags; >+ 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_security_descriptor(_ndr_secdesc, NDR_SCALARS|NDR_BUFFERS, r->secdesc)); >+ 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_security_descriptor; >+ ndr->flags = _flags_save_spoolss_security_descriptor; > } > } > return NDR_ERR_SUCCESS; >@@ -1401,7 +1401,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterInfo2(struct ndr_pull *ndr, i > ndr->flags = _flags_save_string; > } > { >- uint32_t _flags_save_security_descriptor = ndr->flags; >+ 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) { >@@ -1410,7 +1410,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterInfo2(struct ndr_pull *ndr, i > } else { > r->secdesc = NULL; > } >- ndr->flags = _flags_save_security_descriptor; >+ 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)); >@@ -1611,7 +1611,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterInfo2(struct ndr_pull *ndr, i > ndr->flags = _flags_save_string; > } > { >- uint32_t _flags_save_security_descriptor = ndr->flags; >+ 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; >@@ -1622,13 +1622,13 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterInfo2(struct ndr_pull *ndr, i > { > struct ndr_pull *_ndr_secdesc; > NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_secdesc, 0, -1)); >- NDR_CHECK(ndr_pull_security_descriptor(_ndr_secdesc, NDR_SCALARS|NDR_BUFFERS, r->secdesc)); >+ 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_security_descriptor; >+ ndr->flags = _flags_save_spoolss_security_descriptor; > } > } > return NDR_ERR_SUCCESS; >@@ -1713,7 +1713,7 @@ _PUBLIC_ void ndr_print_spoolss_PrinterInfo2(struct ndr_print *ndr, const char * > ndr_print_ptr(ndr, "secdesc", r->secdesc); > ndr->depth++; > if (r->secdesc) { >- ndr_print_security_descriptor(ndr, "secdesc", r->secdesc); >+ ndr_print_spoolss_security_descriptor(ndr, "secdesc", r->secdesc); > } > ndr->depth--; > ndr_print_spoolss_PrinterAttributes(ndr, "attributes", r->attributes); >@@ -1737,27 +1737,27 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo3(struct ndr_push *ndr, i > if (ndr_flags & NDR_SCALARS) { > NDR_CHECK(ndr_push_align(ndr, 4)); > { >- uint32_t _flags_save_security_descriptor = ndr->flags; >+ 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_security_descriptor; >+ ndr->flags = _flags_save_spoolss_security_descriptor; > } > } > if (ndr_flags & NDR_BUFFERS) { > { >- uint32_t _flags_save_security_descriptor = ndr->flags; >+ 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_security_descriptor(_ndr_secdesc, NDR_SCALARS|NDR_BUFFERS, r->secdesc)); >+ 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_security_descriptor; >+ ndr->flags = _flags_save_spoolss_security_descriptor; > } > } > return NDR_ERR_SUCCESS; >@@ -1770,7 +1770,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterInfo3(struct ndr_pull *ndr, i > if (ndr_flags & NDR_SCALARS) { > NDR_CHECK(ndr_pull_align(ndr, 4)); > { >- uint32_t _flags_save_security_descriptor = ndr->flags; >+ 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) { >@@ -1779,12 +1779,12 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterInfo3(struct ndr_pull *ndr, i > } else { > r->secdesc = NULL; > } >- ndr->flags = _flags_save_security_descriptor; >+ ndr->flags = _flags_save_spoolss_security_descriptor; > } > } > if (ndr_flags & NDR_BUFFERS) { > { >- uint32_t _flags_save_security_descriptor = ndr->flags; >+ 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; >@@ -1795,13 +1795,13 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterInfo3(struct ndr_pull *ndr, i > { > struct ndr_pull *_ndr_secdesc; > NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_secdesc, 0, -1)); >- NDR_CHECK(ndr_pull_security_descriptor(_ndr_secdesc, NDR_SCALARS|NDR_BUFFERS, r->secdesc)); >+ 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_security_descriptor; >+ ndr->flags = _flags_save_spoolss_security_descriptor; > } > } > return NDR_ERR_SUCCESS; >@@ -1814,7 +1814,7 @@ _PUBLIC_ void ndr_print_spoolss_PrinterInfo3(struct ndr_print *ndr, const char * > ndr_print_ptr(ndr, "secdesc", r->secdesc); > ndr->depth++; > if (r->secdesc) { >- ndr_print_security_descriptor(ndr, "secdesc", r->secdesc); >+ ndr_print_spoolss_security_descriptor(ndr, "secdesc", r->secdesc); > } > ndr->depth--; > ndr->depth--; >@@ -3157,10 +3157,10 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo2(struct ndr_push *ndr, int n > ndr->flags = _flags_save_string; > } > { >- uint32_t _flags_save_security_descriptor = ndr->flags; >+ 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_security_descriptor; >+ ndr->flags = _flags_save_spoolss_security_descriptor; > } > NDR_CHECK(ndr_push_spoolss_JobStatus(ndr, NDR_SCALARS, r->status)); > NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->priority)); >@@ -3290,19 +3290,19 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo2(struct ndr_push *ndr, int n > ndr->flags = _flags_save_string; > } > { >- uint32_t _flags_save_security_descriptor = ndr->flags; >+ 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_security_descriptor(_ndr_secdesc, NDR_SCALARS|NDR_BUFFERS, r->secdesc)); >+ 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_security_descriptor; >+ ndr->flags = _flags_save_spoolss_security_descriptor; > } > } > return NDR_ERR_SUCCESS; >@@ -3470,7 +3470,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_JobInfo2(struct ndr_pull *ndr, int n > ndr->flags = _flags_save_string; > } > { >- uint32_t _flags_save_security_descriptor = ndr->flags; >+ 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) { >@@ -3479,7 +3479,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_JobInfo2(struct ndr_pull *ndr, int n > } else { > r->secdesc = NULL; > } >- ndr->flags = _flags_save_security_descriptor; >+ ndr->flags = _flags_save_spoolss_security_descriptor; > } > NDR_CHECK(ndr_pull_spoolss_JobStatus(ndr, NDR_SCALARS, &r->status)); > NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->priority)); >@@ -3667,7 +3667,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_JobInfo2(struct ndr_pull *ndr, int n > ndr->flags = _flags_save_string; > } > { >- uint32_t _flags_save_security_descriptor = ndr->flags; >+ 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; >@@ -3678,13 +3678,13 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_JobInfo2(struct ndr_pull *ndr, int n > { > struct ndr_pull *_ndr_secdesc; > NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_secdesc, 0, -1)); >- NDR_CHECK(ndr_pull_security_descriptor(_ndr_secdesc, NDR_SCALARS|NDR_BUFFERS, r->secdesc)); >+ 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_security_descriptor; >+ ndr->flags = _flags_save_spoolss_security_descriptor; > } > } > return NDR_ERR_SUCCESS; >@@ -3764,7 +3764,7 @@ _PUBLIC_ void ndr_print_spoolss_JobInfo2(struct ndr_print *ndr, const char *name > ndr_print_ptr(ndr, "secdesc", r->secdesc); > ndr->depth++; > if (r->secdesc) { >- ndr_print_security_descriptor(ndr, "secdesc", r->secdesc); >+ ndr_print_spoolss_security_descriptor(ndr, "secdesc", r->secdesc); > } > ndr->depth--; > ndr_print_spoolss_JobStatus(ndr, "status", r->status); >@@ -3898,10 +3898,10 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo4(struct ndr_push *ndr, int n > ndr->flags = _flags_save_string; > } > { >- uint32_t _flags_save_security_descriptor = ndr->flags; >+ 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_security_descriptor; >+ ndr->flags = _flags_save_spoolss_security_descriptor; > } > NDR_CHECK(ndr_push_spoolss_JobStatus(ndr, NDR_SCALARS, r->status)); > NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->priority)); >@@ -4032,19 +4032,19 @@ _PUBLIC_ enum ndr_err_code ndr_push_spoolss_JobInfo4(struct ndr_push *ndr, int n > ndr->flags = _flags_save_string; > } > { >- uint32_t _flags_save_security_descriptor = ndr->flags; >+ 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_security_descriptor(_ndr_secdesc, NDR_SCALARS|NDR_BUFFERS, r->secdesc)); >+ 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_security_descriptor; >+ ndr->flags = _flags_save_spoolss_security_descriptor; > } > } > return NDR_ERR_SUCCESS; >@@ -4212,7 +4212,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_JobInfo4(struct ndr_pull *ndr, int n > ndr->flags = _flags_save_string; > } > { >- uint32_t _flags_save_security_descriptor = ndr->flags; >+ 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) { >@@ -4221,7 +4221,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_JobInfo4(struct ndr_pull *ndr, int n > } else { > r->secdesc = NULL; > } >- ndr->flags = _flags_save_security_descriptor; >+ ndr->flags = _flags_save_spoolss_security_descriptor; > } > NDR_CHECK(ndr_pull_spoolss_JobStatus(ndr, NDR_SCALARS, &r->status)); > NDR_CHECK(ndr_pull_uint32(ndr, NDR_SCALARS, &r->priority)); >@@ -4410,7 +4410,7 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_JobInfo4(struct ndr_pull *ndr, int n > ndr->flags = _flags_save_string; > } > { >- uint32_t _flags_save_security_descriptor = ndr->flags; >+ 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; >@@ -4421,13 +4421,13 @@ _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_JobInfo4(struct ndr_pull *ndr, int n > { > struct ndr_pull *_ndr_secdesc; > NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_secdesc, 0, -1)); >- NDR_CHECK(ndr_pull_security_descriptor(_ndr_secdesc, NDR_SCALARS|NDR_BUFFERS, r->secdesc)); >+ 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_security_descriptor; >+ ndr->flags = _flags_save_spoolss_security_descriptor; > } > } > return NDR_ERR_SUCCESS; >@@ -4507,7 +4507,7 @@ _PUBLIC_ void ndr_print_spoolss_JobInfo4(struct ndr_print *ndr, const char *name > ndr_print_ptr(ndr, "secdesc", r->secdesc); > ndr->depth++; > if (r->secdesc) { >- ndr_print_security_descriptor(ndr, "secdesc", r->secdesc); >+ ndr_print_spoolss_security_descriptor(ndr, "secdesc", r->secdesc); > } > ndr->depth--; > ndr_print_spoolss_JobStatus(ndr, "status", r->status); >diff --git a/librpc/gen_ndr/spoolss.h b/librpc/gen_ndr/spoolss.h >index f346697..bc0b104 100644 >--- a/librpc/gen_ndr/spoolss.h >+++ b/librpc/gen_ndr/spoolss.h >@@ -7,6 +7,7 @@ > #include "librpc/gen_ndr/misc.h" > #include "librpc/gen_ndr/security.h" > #include "librpc/gen_ndr/winreg.h" >+#define spoolss_security_descriptor security_descriptor > #ifndef _HEADER_spoolss > #define _HEADER_spoolss > >@@ -334,7 +335,7 @@ struct spoolss_PrinterInfo2 { > const char * printprocessor;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */ > const char * datatype;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */ > const char * parameters;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */ >- struct security_descriptor *secdesc;/* [relative,subcontext(0),flag(LIBNDR_FLAG_ALIGN4)] */ >+ struct spoolss_security_descriptor *secdesc;/* [relative,subcontext(0),flag(LIBNDR_FLAG_ALIGN4)] */ > uint32_t attributes; > uint32_t priority;/* [range(0,99)] */ > uint32_t defaultpriority; >@@ -346,7 +347,7 @@ struct spoolss_PrinterInfo2 { > }/* [gensize,public] */; > > struct spoolss_PrinterInfo3 { >- struct security_descriptor *secdesc;/* [relative,subcontext(0),flag(LIBNDR_FLAG_ALIGN4)] */ >+ struct spoolss_security_descriptor *secdesc;/* [relative,subcontext(0),flag(LIBNDR_FLAG_ALIGN4)] */ > }/* [gensize,public] */; > > struct spoolss_PrinterInfo4 { >@@ -430,7 +431,7 @@ struct spoolss_JobInfo2 { > const char * driver_name;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */ > struct spoolss_DeviceMode *devmode;/* [relative,subcontext(0),flag(LIBNDR_FLAG_ALIGN4)] */ > const char * text_status;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */ >- struct security_descriptor *secdesc;/* [relative,subcontext(0),flag(LIBNDR_FLAG_ALIGN4)] */ >+ struct spoolss_security_descriptor *secdesc;/* [relative,subcontext(0),flag(LIBNDR_FLAG_ALIGN4)] */ > uint32_t status; > uint32_t priority;/* [range(0,99)] */ > uint32_t position; >@@ -462,7 +463,7 @@ struct spoolss_JobInfo4 { > const char * driver_name;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */ > struct spoolss_DeviceMode *devmode;/* [relative,subcontext(0),flag(LIBNDR_FLAG_ALIGN4)] */ > const char * text_status;/* [relative,flag(LIBNDR_FLAG_STR_NULLTERM)] */ >- struct security_descriptor *secdesc;/* [relative,subcontext(0),flag(LIBNDR_FLAG_ALIGN4)] */ >+ struct spoolss_security_descriptor *secdesc;/* [relative,subcontext(0),flag(LIBNDR_FLAG_ALIGN4)] */ > uint32_t status; > uint32_t priority;/* [range(0,99)] */ > uint32_t position; >diff --git a/librpc/idl/spoolss.idl b/librpc/idl/spoolss.idl >index d69e9f3..b55def0 100644 >--- a/librpc/idl/spoolss.idl >+++ b/librpc/idl/spoolss.idl >@@ -5,6 +5,9 @@ > */ > import "misc.idl", "security.idl", "winreg.idl"; > >+ >+cpp_quote("#define spoolss_security_descriptor security_descriptor") >+ > [ uuid("12345678-1234-abcd-ef00-0123456789ab"), > version(1.0), > endpoint("ncacn_np:[\\pipe\\spoolss]"), >@@ -287,7 +290,7 @@ import "misc.idl", "security.idl", "winreg.idl"; > [relative] nstring *printprocessor; > [relative] nstring *datatype; > [relative] nstring *parameters; >- [relative,subcontext(0),flag(NDR_ALIGN4)] security_descriptor *secdesc; >+ [relative,subcontext(0),flag(NDR_ALIGN4)] spoolss_security_descriptor *secdesc; > spoolss_PrinterAttributes attributes; > [range(0,99)] uint32 priority; > uint32 defaultpriority; >@@ -299,7 +302,7 @@ import "misc.idl", "security.idl", "winreg.idl"; > } spoolss_PrinterInfo2; > > typedef [public,gensize] struct { >- [relative,subcontext(0),flag(NDR_ALIGN4)] security_descriptor *secdesc; >+ [relative,subcontext(0),flag(NDR_ALIGN4)] spoolss_security_descriptor *secdesc; > } spoolss_PrinterInfo3; > > typedef [public,gensize] struct { >@@ -430,7 +433,7 @@ import "misc.idl", "security.idl", "winreg.idl"; > [relative] nstring *driver_name; > [relative,subcontext(0),flag(NDR_ALIGN4)] spoolss_DeviceMode *devmode; > [relative] nstring *text_status; >- [relative,subcontext(0),flag(NDR_ALIGN4)] security_descriptor *secdesc; >+ [relative,subcontext(0),flag(NDR_ALIGN4)] spoolss_security_descriptor *secdesc; > spoolss_JobStatus status; > [range(0,99)] uint32 priority; > uint32 position; >@@ -462,7 +465,7 @@ import "misc.idl", "security.idl", "winreg.idl"; > [relative] nstring *driver_name; > [relative,subcontext(0),flag(NDR_ALIGN4)] spoolss_DeviceMode *devmode; > [relative] nstring *text_status; >- [relative,subcontext(0),flag(NDR_ALIGN4)] security_descriptor *secdesc; >+ [relative,subcontext(0),flag(NDR_ALIGN4)] spoolss_security_descriptor *secdesc; > spoolss_JobStatus status; > [range(0,99)] uint32 priority; > uint32 position; >diff --git a/librpc/ndr/ndr_spoolss_buf.c b/librpc/ndr/ndr_spoolss_buf.c >index 1a58ac1..b86f434 100644 >--- a/librpc/ndr/ndr_spoolss_buf.c >+++ b/librpc/ndr/ndr_spoolss_buf.c >@@ -24,6 +24,7 @@ > > #include "includes.h" > #include "librpc/gen_ndr/ndr_spoolss.h" >+#include "librpc/gen_ndr/ndr_security.h" > #if (_SAMBA_BUILD_ >= 4) > #include "param/param.h" > #endif >@@ -1221,3 +1222,57 @@ void ndr_print_spoolss_Field(struct ndr_print *ndr, const char *name, const unio > } > } > >+void ndr_print_spoolss_security_descriptor(struct ndr_print *ndr, const char *name, const struct security_descriptor *r) >+{ >+ ndr_print_security_descriptor(ndr, name, r); >+} >+ >+enum ndr_err_code ndr_pull_spoolss_security_descriptor(struct ndr_pull *ndr, int ndr_flags, struct security_descriptor *r) >+{ >+ uint32_t _flags_save_STRUCT = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NO_RELATIVE_REVERSE); >+ NDR_CHECK(ndr_pull_security_descriptor(ndr, ndr_flags, r)); >+ ndr->flags = _flags_save_STRUCT; >+ return NDR_ERR_SUCCESS; >+} >+ >+enum ndr_err_code ndr_push_spoolss_security_descriptor(struct ndr_push *ndr, int ndr_flags, const struct security_descriptor *r) >+{ >+ { >+ uint32_t _flags_save_STRUCT = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_LITTLE_ENDIAN|LIBNDR_FLAG_NO_RELATIVE_REVERSE); >+ if (ndr_flags & NDR_SCALARS) { >+ NDR_CHECK(ndr_push_align(ndr, 4)); >+ NDR_CHECK(ndr_push_security_descriptor_revision(ndr, NDR_SCALARS, r->revision)); >+ NDR_CHECK(ndr_push_security_descriptor_type(ndr, NDR_SCALARS, r->type)); >+ NDR_CHECK(ndr_push_relative_ptr1(ndr, r->owner_sid)); >+ NDR_CHECK(ndr_push_relative_ptr1(ndr, r->group_sid)); >+ NDR_CHECK(ndr_push_relative_ptr1(ndr, r->sacl)); >+ NDR_CHECK(ndr_push_relative_ptr1(ndr, r->dacl)); >+ } >+ if (ndr_flags & NDR_BUFFERS) { >+ if (r->sacl) { >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->sacl)); >+ NDR_CHECK(ndr_push_security_acl(ndr, NDR_SCALARS|NDR_BUFFERS, r->sacl)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->sacl)); >+ } >+ if (r->dacl) { >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->dacl)); >+ NDR_CHECK(ndr_push_security_acl(ndr, NDR_SCALARS|NDR_BUFFERS, r->dacl)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->dacl)); >+ } >+ if (r->owner_sid) { >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->owner_sid)); >+ NDR_CHECK(ndr_push_dom_sid(ndr, NDR_SCALARS, r->owner_sid)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->owner_sid)); >+ } >+ if (r->group_sid) { >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->group_sid)); >+ NDR_CHECK(ndr_push_dom_sid(ndr, NDR_SCALARS, r->group_sid)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->group_sid)); >+ } >+ } >+ ndr->flags = _flags_save_STRUCT; >+ } >+ return NDR_ERR_SUCCESS; >+} >diff --git a/librpc/ndr/ndr_spoolss_buf.h b/librpc/ndr/ndr_spoolss_buf.h >index aa6e277..e72d16a 100644 >--- a/librpc/ndr/ndr_spoolss_buf.h >+++ b/librpc/ndr/ndr_spoolss_buf.h >@@ -50,6 +50,9 @@ size_t ndr_size_spoolss_StringArray(const struct spoolss_StringArray *r, struct > _PUBLIC_ enum ndr_err_code ndr_push_spoolss_DriverInfo101(struct ndr_push *ndr, int ndr_flags, const struct spoolss_DriverInfo101 *r); > _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_DriverInfo101(struct ndr_pull *ndr, int ndr_flags, struct spoolss_DriverInfo101 *r); > void ndr_print_spoolss_Field(struct ndr_print *ndr, const char *name, const union spoolss_Field *r); >+void ndr_print_spoolss_security_descriptor(struct ndr_print *ndr, const char *name, const struct security_descriptor *r); >+enum ndr_err_code ndr_pull_spoolss_security_descriptor(struct ndr_pull *ndr, int ndr_flags, struct security_descriptor *r); >+enum ndr_err_code ndr_push_spoolss_security_descriptor(struct ndr_push *ndr, int ndr_flags, const struct security_descriptor *r); > > #undef _PRINTF_ATTRIBUTE > #define _PRINTF_ATTRIBUTE(a1, a2) >-- >1.6.6 > > >From c9766eada24bdd428398985fbb3e25fe70b23643 Mon Sep 17 00:00:00 2001 >From: =?UTF-8?q?G=C3=BCnther=20Deschner?= <gd@samba.org> >Date: Sat, 13 Feb 2010 03:45:25 +0100 >Subject: [PATCH 24/24] spoolss: use ndr_push_spoolss_PrinterInfo2 hand-marshalled version (moves devmode relative pointer down to sd). > >Guenther >--- > librpc/gen_ndr/ndr_spoolss.c | 236 ------------------------------------------ > librpc/gen_ndr/spoolss.h | 2 +- > librpc/idl/spoolss.idl | 2 +- > librpc/ndr/ndr_spoolss_buf.c | 236 ++++++++++++++++++++++++++++++++++++++++++ > 4 files changed, 238 insertions(+), 238 deletions(-) > >diff --git a/librpc/gen_ndr/ndr_spoolss.c b/librpc/gen_ndr/ndr_spoolss.c >index 712c907..cca1b12 100644 >--- a/librpc/gen_ndr/ndr_spoolss.c >+++ b/librpc/gen_ndr/ndr_spoolss.c >@@ -990,242 +990,6 @@ _PUBLIC_ void ndr_print_spoolss_PrinterAttributes(struct ndr_print *ndr, const c > ndr->depth--; > } > >-_PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo2(struct ndr_push *ndr, int ndr_flags, const struct spoolss_PrinterInfo2 *r) >-{ >- if (ndr_flags & NDR_SCALARS) { >- NDR_CHECK(ndr_push_align(ndr, 4)); >- { >- uint32_t _flags_save_string = ndr->flags; >- ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >- NDR_CHECK(ndr_push_relative_ptr1(ndr, r->servername)); >- ndr->flags = _flags_save_string; >- } >- { >- uint32_t _flags_save_string = ndr->flags; >- ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >- NDR_CHECK(ndr_push_relative_ptr1(ndr, r->printername)); >- ndr->flags = _flags_save_string; >- } >- { >- uint32_t _flags_save_string = ndr->flags; >- ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >- NDR_CHECK(ndr_push_relative_ptr1(ndr, r->sharename)); >- ndr->flags = _flags_save_string; >- } >- { >- uint32_t _flags_save_string = ndr->flags; >- ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >- NDR_CHECK(ndr_push_relative_ptr1(ndr, r->portname)); >- ndr->flags = _flags_save_string; >- } >- { >- uint32_t _flags_save_string = ndr->flags; >- ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >- NDR_CHECK(ndr_push_relative_ptr1(ndr, r->drivername)); >- ndr->flags = _flags_save_string; >- } >- { >- uint32_t _flags_save_string = ndr->flags; >- ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >- NDR_CHECK(ndr_push_relative_ptr1(ndr, r->comment)); >- ndr->flags = _flags_save_string; >- } >- { >- uint32_t _flags_save_string = ndr->flags; >- ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >- NDR_CHECK(ndr_push_relative_ptr1(ndr, r->location)); >- ndr->flags = _flags_save_string; >- } >- { >- 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; >- } >- { >- uint32_t _flags_save_string = ndr->flags; >- ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >- NDR_CHECK(ndr_push_relative_ptr1(ndr, r->sepfile)); >- ndr->flags = _flags_save_string; >- } >- { >- uint32_t _flags_save_string = ndr->flags; >- ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >- NDR_CHECK(ndr_push_relative_ptr1(ndr, r->printprocessor)); >- ndr->flags = _flags_save_string; >- } >- { >- uint32_t _flags_save_string = ndr->flags; >- ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >- NDR_CHECK(ndr_push_relative_ptr1(ndr, r->datatype)); >- ndr->flags = _flags_save_string; >- } >- { >- uint32_t _flags_save_string = ndr->flags; >- ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >- NDR_CHECK(ndr_push_relative_ptr1(ndr, r->parameters)); >- ndr->flags = _flags_save_string; >- } >- { >- 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)); >- NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->starttime)); >- NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->untiltime)); >- NDR_CHECK(ndr_push_spoolss_PrinterStatus(ndr, NDR_SCALARS, r->status)); >- NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->cjobs)); >- NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->averageppm)); >- } >- if (ndr_flags & NDR_BUFFERS) { >- { >- uint32_t _flags_save_string = ndr->flags; >- ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >- if (r->servername) { >- NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->servername)); >- NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->servername)); >- NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->servername)); >- } >- ndr->flags = _flags_save_string; >- } >- { >- uint32_t _flags_save_string = ndr->flags; >- ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >- if (r->printername) { >- NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->printername)); >- NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->printername)); >- NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->printername)); >- } >- ndr->flags = _flags_save_string; >- } >- { >- uint32_t _flags_save_string = ndr->flags; >- ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >- if (r->sharename) { >- NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->sharename)); >- NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->sharename)); >- NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->sharename)); >- } >- ndr->flags = _flags_save_string; >- } >- { >- uint32_t _flags_save_string = ndr->flags; >- ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >- if (r->portname) { >- NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->portname)); >- NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->portname)); >- NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->portname)); >- } >- ndr->flags = _flags_save_string; >- } >- { >- uint32_t _flags_save_string = ndr->flags; >- ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >- if (r->drivername) { >- NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->drivername)); >- NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->drivername)); >- NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->drivername)); >- } >- ndr->flags = _flags_save_string; >- } >- { >- uint32_t _flags_save_string = ndr->flags; >- ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >- if (r->comment) { >- NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->comment)); >- NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->comment)); >- NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->comment)); >- } >- ndr->flags = _flags_save_string; >- } >- { >- uint32_t _flags_save_string = ndr->flags; >- ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >- if (r->location) { >- NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->location)); >- NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->location)); >- NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->location)); >- } >- ndr->flags = _flags_save_string; >- } >- { >- 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; >- } >- { >- uint32_t _flags_save_string = ndr->flags; >- ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >- if (r->sepfile) { >- NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->sepfile)); >- NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->sepfile)); >- NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->sepfile)); >- } >- ndr->flags = _flags_save_string; >- } >- { >- uint32_t _flags_save_string = ndr->flags; >- ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >- if (r->printprocessor) { >- NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->printprocessor)); >- NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->printprocessor)); >- NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->printprocessor)); >- } >- ndr->flags = _flags_save_string; >- } >- { >- uint32_t _flags_save_string = ndr->flags; >- ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >- if (r->datatype) { >- NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->datatype)); >- NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->datatype)); >- NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->datatype)); >- } >- ndr->flags = _flags_save_string; >- } >- { >- uint32_t _flags_save_string = ndr->flags; >- ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >- if (r->parameters) { >- NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->parameters)); >- NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->parameters)); >- NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->parameters)); >- } >- ndr->flags = _flags_save_string; >- } >- { >- 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; >-} >- > _PUBLIC_ enum ndr_err_code ndr_pull_spoolss_PrinterInfo2(struct ndr_pull *ndr, int ndr_flags, struct spoolss_PrinterInfo2 *r) > { > uint32_t _ptr_servername; >diff --git a/librpc/gen_ndr/spoolss.h b/librpc/gen_ndr/spoolss.h >index bc0b104..a2487b2 100644 >--- a/librpc/gen_ndr/spoolss.h >+++ b/librpc/gen_ndr/spoolss.h >@@ -344,7 +344,7 @@ struct spoolss_PrinterInfo2 { > uint32_t status; > uint32_t cjobs; > uint32_t averageppm; >-}/* [gensize,public] */; >+}/* [gensize,public,nopush] */; > > struct spoolss_PrinterInfo3 { > struct spoolss_security_descriptor *secdesc;/* [relative,subcontext(0),flag(LIBNDR_FLAG_ALIGN4)] */ >diff --git a/librpc/idl/spoolss.idl b/librpc/idl/spoolss.idl >index b55def0..0201cba 100644 >--- a/librpc/idl/spoolss.idl >+++ b/librpc/idl/spoolss.idl >@@ -277,7 +277,7 @@ cpp_quote("#define spoolss_security_descriptor security_descriptor") > PRINTER_ATTRIBUTE_TS = 0x00008000 > } spoolss_PrinterAttributes; > >- typedef [public,gensize] struct { >+ typedef [public,gensize,nopush] struct { > [relative] nstring *servername; > [relative] nstring *printername; > [relative] nstring *sharename; >diff --git a/librpc/ndr/ndr_spoolss_buf.c b/librpc/ndr/ndr_spoolss_buf.c >index b86f434..2ce3477 100644 >--- a/librpc/ndr/ndr_spoolss_buf.c >+++ b/librpc/ndr/ndr_spoolss_buf.c >@@ -1276,3 +1276,239 @@ enum ndr_err_code ndr_push_spoolss_security_descriptor(struct ndr_push *ndr, int > } > return NDR_ERR_SUCCESS; > } >+ >+_PUBLIC_ enum ndr_err_code ndr_push_spoolss_PrinterInfo2(struct ndr_push *ndr, int ndr_flags, const struct spoolss_PrinterInfo2 *r) >+{ >+ if (ndr_flags & NDR_SCALARS) { >+ NDR_CHECK(ndr_push_align(ndr, 4)); >+ { >+ uint32_t _flags_save_string = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >+ NDR_CHECK(ndr_push_relative_ptr1(ndr, r->servername)); >+ ndr->flags = _flags_save_string; >+ } >+ { >+ uint32_t _flags_save_string = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >+ NDR_CHECK(ndr_push_relative_ptr1(ndr, r->printername)); >+ ndr->flags = _flags_save_string; >+ } >+ { >+ uint32_t _flags_save_string = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >+ NDR_CHECK(ndr_push_relative_ptr1(ndr, r->sharename)); >+ ndr->flags = _flags_save_string; >+ } >+ { >+ uint32_t _flags_save_string = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >+ NDR_CHECK(ndr_push_relative_ptr1(ndr, r->portname)); >+ ndr->flags = _flags_save_string; >+ } >+ { >+ uint32_t _flags_save_string = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >+ NDR_CHECK(ndr_push_relative_ptr1(ndr, r->drivername)); >+ ndr->flags = _flags_save_string; >+ } >+ { >+ uint32_t _flags_save_string = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >+ NDR_CHECK(ndr_push_relative_ptr1(ndr, r->comment)); >+ ndr->flags = _flags_save_string; >+ } >+ { >+ uint32_t _flags_save_string = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >+ NDR_CHECK(ndr_push_relative_ptr1(ndr, r->location)); >+ ndr->flags = _flags_save_string; >+ } >+ { >+ 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; >+ } >+ { >+ uint32_t _flags_save_string = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >+ NDR_CHECK(ndr_push_relative_ptr1(ndr, r->sepfile)); >+ ndr->flags = _flags_save_string; >+ } >+ { >+ uint32_t _flags_save_string = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >+ NDR_CHECK(ndr_push_relative_ptr1(ndr, r->printprocessor)); >+ ndr->flags = _flags_save_string; >+ } >+ { >+ uint32_t _flags_save_string = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >+ NDR_CHECK(ndr_push_relative_ptr1(ndr, r->datatype)); >+ ndr->flags = _flags_save_string; >+ } >+ { >+ uint32_t _flags_save_string = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >+ NDR_CHECK(ndr_push_relative_ptr1(ndr, r->parameters)); >+ ndr->flags = _flags_save_string; >+ } >+ { >+ 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)); >+ NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->starttime)); >+ NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->untiltime)); >+ NDR_CHECK(ndr_push_spoolss_PrinterStatus(ndr, NDR_SCALARS, r->status)); >+ NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->cjobs)); >+ NDR_CHECK(ndr_push_uint32(ndr, NDR_SCALARS, r->averageppm)); >+ } >+ if (ndr_flags & NDR_BUFFERS) { >+ { >+ uint32_t _flags_save_string = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >+ if (r->servername) { >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->servername)); >+ NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->servername)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->servername)); >+ } >+ ndr->flags = _flags_save_string; >+ } >+ { >+ uint32_t _flags_save_string = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >+ if (r->printername) { >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->printername)); >+ NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->printername)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->printername)); >+ } >+ ndr->flags = _flags_save_string; >+ } >+ { >+ uint32_t _flags_save_string = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >+ if (r->sharename) { >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->sharename)); >+ NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->sharename)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->sharename)); >+ } >+ ndr->flags = _flags_save_string; >+ } >+ { >+ uint32_t _flags_save_string = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >+ if (r->portname) { >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->portname)); >+ NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->portname)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->portname)); >+ } >+ ndr->flags = _flags_save_string; >+ } >+ { >+ uint32_t _flags_save_string = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >+ if (r->drivername) { >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->drivername)); >+ NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->drivername)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->drivername)); >+ } >+ ndr->flags = _flags_save_string; >+ } >+ { >+ uint32_t _flags_save_string = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >+ if (r->comment) { >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->comment)); >+ NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->comment)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->comment)); >+ } >+ ndr->flags = _flags_save_string; >+ } >+ { >+ uint32_t _flags_save_string = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >+ if (r->location) { >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->location)); >+ NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->location)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->location)); >+ } >+ ndr->flags = _flags_save_string; >+ } >+ { >+ uint32_t _flags_save_string = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >+ if (r->sepfile) { >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->sepfile)); >+ NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->sepfile)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->sepfile)); >+ } >+ ndr->flags = _flags_save_string; >+ } >+ { >+ uint32_t _flags_save_string = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >+ if (r->printprocessor) { >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->printprocessor)); >+ NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->printprocessor)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->printprocessor)); >+ } >+ ndr->flags = _flags_save_string; >+ } >+ { >+ uint32_t _flags_save_string = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >+ if (r->datatype) { >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->datatype)); >+ NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->datatype)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->datatype)); >+ } >+ ndr->flags = _flags_save_string; >+ } >+ { >+ uint32_t _flags_save_string = ndr->flags; >+ ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM); >+ if (r->parameters) { >+ NDR_CHECK(ndr_push_relative_ptr2_start(ndr, r->parameters)); >+ NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->parameters)); >+ NDR_CHECK(ndr_push_relative_ptr2_end(ndr, r->parameters)); >+ } >+ ndr->flags = _flags_save_string; >+ } >+ { >+ 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; >+ } >+ { >+ 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; >+} >-- >1.6.6 >
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 6888
:
4940
|
4941
|
5382
|
5391
|
5392
|
5397
|
5398
|
7794