[SCM] Samba Shared Repository - branch v3-4-stable updated

Karolin Seeger kseeger at samba.org
Mon Feb 22 08:04:48 MST 2010


The branch, v3-4-stable has been updated
       via  64bf3f9... WHATSNEW: Update changes since 3.4.5.
       via  ce2cc2a... librpc/ndr: don't overwrite the content in ndr_push_relative_ptr2_end()
       via  8f0bf27... spoolss: use ndr_push_spoolss_PrinterInfo2 hand-marshalled version (moves devmode relative pointer down to sd).
       via  52ca1fc... spoolss: add spoolss_security_descriptor.
       via  b2e2187... s3: re-run make samba3-idl.
       via  6403c71... security: make two bitmaps public.
       via  424b229... spoolss: make two bitmaps public.
       via  d05a2fa... spoolss: make all security descriptors and devicemodes 4 byte aligned and add missing subcontexts.
       via  9bdbef0... spoolss: set NDR_RELATIVE_REVERSE flag for various unions that have relative pointers.
       via  8f1cbd0... ndr_spoolss_buf: use LIBNDR_FLAG_NO_NDR_SIZE in NDR_SPOOLSS_SIZE_*
       via  1a7af3c... spoolss: use subcontext in NDR_SPOOLSS_PUSH_ENUM_OUT macro.
       via  a328122... libndr: fix ndr_size_* calculation with relative reverse buffers
       via  dd467c0... libndr: for now align reverse relative pointers to 2 bytes by default.
       via  fdaeec9... libndr: implement LIBNDR_RELATIVE_REVERSE handling
       via  3ee3d4d... libndr: store a subcontext buffer size in ndr_push_subcontext_start.
       via  6b50cd6... libndr: give an error when ndr_push_relative_ptr2_start()/_end() is used with the RELATIVE_REVERSE flag
       via  dec87d0... libndr: add LIBNDR_FLAG_NO_RELATIVE_REVERSE so that relative reverse processing can be disabled for single structure elements.
       via  f587a0f... libndr: add LIBNDR_FLAG_RELATIVE_REVERSE flag.
       via  c1d2213... libndr: change subcontext buffer allocation to allocate on subcontext_start.
       via  a122b5f... librpc/ndr: make ndr_push_relative_ptr2() static
       via  2e6013d... librpc/ndr_krb5pac: use ndr_push_relative_ptr2_start()/_end()
       via  82f600e... librpc/ndr_drsblobs: use ndr_push_relative_ptr2_start()/_end()
       via  aa9650e... spoolss: fix relative pointers in ndr_push_spoolss_DriverInfo101.
       via  fd826a9... s3: re-run make full_idl.
       via  0e8111d... pidl: use ndr_push_relative_ptr2_start and ndr_push_relative_ptr2_end.
       via  0877733... libndr: add ndr_push_relative_ptr2_start and ndr_push_relative_ptr2_end.
       via  678672b... Fix bug #7154 - mangling method = hash can crash storing a name not containing a '.'
       via  cf78912... Fix bug #7155 - valgrind Conditional jump or move depends on uninitialised value(s) error when "mangling method = hash"
       via  615a5e8... Fix bug #6557 - Do not work VFS full_audit
      from  34d5071... WHATSNEW: Update changes since 3.4.5.

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=v3-4-stable


- Log -----------------------------------------------------------------
commit 64bf3f967c996abea8f8a1436863fa866179b3dd
Author: Karolin Seeger <kseeger at samba.org>
Date:   Mon Feb 22 15:57:46 2010 +0100

    WHATSNEW: Update changes since 3.4.5.
    
    Karolin
    (cherry picked from commit 7b195c33584ed1c8125c174518fe8e3cd5337ded)

commit ce2cc2a615b684cd997fb970ba3eea72c943d921
Author: Stefan Metzmacher <metze at samba.org>
Date:   Fri Feb 19 08:11:24 2010 +0100

    librpc/ndr: don't overwrite the content in ndr_push_relative_ptr2_end()
    
    metze
    (cherry picked from commit 76aa37f653fec2d511921768381db7da661750cb)
    
    The last 25 patches address bug #6888 (REGRESSION: printing support for 64 bit
    windows clients broken).
    (cherry picked from commit 58b089f2176e564bf5563fbffa034cd22525ed6e)

commit 8f0bf2747e3b711931d968c0f5004d99bb5b05e3
Author: Günther Deschner <gd at samba.org>
Date:   Sat Feb 13 03:45:25 2010 +0100

    spoolss: use ndr_push_spoolss_PrinterInfo2 hand-marshalled version (moves devmode relative pointer down to sd).
    
    Guenther
    (cherry picked from commit 31a097560efddfabf31c4cc54e683603ee24521f)

commit 52ca1fc349f4b6ab92f96fce9aaae07768d86641
Author: Günther Deschner <gd at samba.org>
Date:   Tue Feb 16 02:48:01 2010 +0100

    spoolss: add spoolss_security_descriptor.
    
    Guenther
    (cherry picked from commit 18564787e2f169cac26d361201c1a954b7e263b7)

commit b2e2187b7523332cd35c2d8c3b8e67135c00be46
Author: Günther Deschner <gd at samba.org>
Date:   Tue Feb 9 16:47:32 2010 +0100

    s3: re-run make samba3-idl.
    
    Guenther
    (cherry picked from commit d35eb81c50340ed2ac14cdb9965fd13876ea8e64)

commit 6403c717f43f32cb43591aba0ba8754450586d4e
Author: Günther Deschner <gd at samba.org>
Date:   Tue Feb 16 10:46:07 2010 +0100

    security: make two bitmaps public.
    
    Guenther
    (cherry picked from commit f10a2d773d141f67319e19b45c40101bb9cb6cf4)
    (cherry picked from commit b9748d59c09ffe9de7cbb953939cf89017dc8087)

commit 424b229085fc4521712d93a42fa867c0db01bc1e
Author: Günther Deschner <gd at samba.org>
Date:   Sat Feb 13 04:27:05 2010 +0100

    spoolss: make two bitmaps public.
    
    Guenther
    (cherry picked from commit b64cd9857086f56e1e698ae34e51413b6414eb0b)

commit d05a2faf43dceacf519eeda0e618b66a1a05fb5e
Author: Stefan Metzmacher <metze at samba.org>
Date:   Thu Feb 18 15:36:08 2010 +0100

    spoolss: make all security descriptors and devicemodes 4 byte aligned and add missing subcontexts.
    
    Guenther
    (cherry picked from commit 8f52957369bf8ce7591d5d9a1436ccb7e384c612)
    (cherry picked from commit a4cb14987143c2c1f28e82e5b6476e079ea051d3)

commit 9bdbef03a9235c27b8233c90bc91b64de4a9a828
Author: Günther Deschner <gd at samba.org>
Date:   Mon Dec 14 17:22:39 2009 +0100

    spoolss: set NDR_RELATIVE_REVERSE flag for various unions that have relative pointers.
    
    Guenther
    (cherry picked from commit 6d0a39741dacd81e33b25a91fa28cdf983d10d84)
    (cherry picked from commit 93aab77e24ecdd95ced8efe0c0f7bcdfb5ed2a1b)

commit 8f1cbd0ff07f64e13253a02c341061abaccf59f6
Author: Stefan Metzmacher <metze at samba.org>
Date:   Thu Feb 18 15:17:42 2010 +0100

    ndr_spoolss_buf: use LIBNDR_FLAG_NO_NDR_SIZE in NDR_SPOOLSS_SIZE_*
    
    metze
    (cherry picked from commit 2059a165ee6f4d231aa4075d8ddea70b8df8944f)
    (cherry picked from commit 3174acb66089b649ec2b859c1ef673814c44ffa4)

commit 1a7af3c15771581c09c3f414503a0a5d6d724d74
Author: Stefan Metzmacher <metze at samba.org>
Date:   Wed Dec 23 15:52:39 2009 +0100

    spoolss: use subcontext in NDR_SPOOLSS_PUSH_ENUM_OUT macro.
    
    metze
    (cherry picked from commit a4c3aeb79306190b09e284a6a28e3b40fbc5823b)
    (cherry picked from commit 4a8dda5b149a82b83d22dc7b0cf77573ef35580d)

commit a3281228f9acfb4565a8ce5b2a952187be891dae
Author: Stefan Metzmacher <metze at samba.org>
Date:   Thu Feb 18 15:13:20 2010 +0100

    libndr: fix ndr_size_* calculation with relative reverse buffers
    
    metze
    (cherry picked from commit 8310f02414efd3b792857ed20c636c4c114e1ba2)
    (cherry picked from commit 56a6011221aec94b64ac4499b825ff96d1ed22b4)

commit dd467c0aefdfc23dcadbf85b1a7aad77c2ecaf86
Author: Stefan Metzmacher <metze at samba.org>
Date:   Thu Feb 18 13:40:44 2010 +0100

    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)
    (cherry picked from commit 00d97b0a06bd1c2d0cb6d15b5560f2850323c1a9)

commit fdaeec990d69455dd12b7d3713d9957fd81daaf4
Author: Stefan Metzmacher <metze at samba.org>
Date:   Wed Feb 17 21:24:40 2010 +0100

    libndr: implement LIBNDR_RELATIVE_REVERSE handling
    
    This is based on Guenther's initial code.
    
    metze
    (cherry picked from commit 31c7780c16651b284009874cf3da04587dc36d19)
    (cherry picked from commit 33d03a884eefad8d8c43f3dbe457866282219965)

commit 3ee3d4db5fc5c0d205f5f7dbe8dac5e5cdada68b
Author: Günther Deschner <gd at samba.org>
Date:   Mon Dec 14 15:33:32 2009 +0100

    libndr: store a subcontext buffer size in ndr_push_subcontext_start.
    
    Guenther
    (cherry picked from commit 05347754ee61f06466d6d9b7f390001992f793ce)
    (cherry picked from commit 4efead4bea29aee555473e1350c3f5671b56c829)

commit 6b50cd60dd642d58d9e2f5166d18d8d75355b241
Author: Stefan Metzmacher <metze at samba.org>
Date:   Wed Feb 17 20:27:08 2010 +0100

    libndr: give an error when ndr_push_relative_ptr2_start()/_end() is used with the RELATIVE_REVERSE flag
    
    metze
    (cherry picked from commit b5f9c44da55abb28222441a7e064a2a25891981f)
    (cherry picked from commit 2f8872bdff4f193043f5195f11ec6a8b44e0f8f1)

commit dec87d05b2f3257a8c016d67de4fbeb2d93f93b5
Author: Günther Deschner <gd at samba.org>
Date:   Tue Feb 9 18:27:37 2010 +0100

    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)
    (cherry picked from commit a026311c81bc8d7f154dad96b77c6121432384a3)

commit f587a0f182ff560be506d0f1d284cd8a712a10a9
Author: Günther Deschner <gd at samba.org>
Date:   Mon Dec 14 15:09:00 2009 +0100

    libndr: add LIBNDR_FLAG_RELATIVE_REVERSE flag.
    
    Guenther
    (cherry picked from commit ee13a51b0514ec3ac4ca9c532c2b101a08ec9784)
    (cherry picked from commit d0eb23b3cd9dbdd174d2c0cdbcdb41fbf2a6df53)

commit c1d2213d8f1b163dc0852f748fe4bef60e87aed4
Author: Günther Deschner <gd at samba.org>
Date:   Wed Dec 16 22:54:02 2009 +0100

    libndr: change subcontext buffer allocation to allocate on subcontext_start.
    
    Guenther
    (cherry picked from commit c9fa97b01774d767acfabaf1eec7a6aad1510440)
    (cherry picked from commit d2bb2f150a8cf4e18c0bbbc357e237261942dccb)

commit a122b5fa29d242218c1b38e992578dedb7b2737d
Author: Stefan Metzmacher <metze at samba.org>
Date:   Wed Feb 17 20:00:36 2010 +0100

    librpc/ndr: make ndr_push_relative_ptr2() static
    
    metze
    (cherry picked from commit d4606cd2663823831d61a98ee719d6121cdcf450)

commit 2e6013da79155ef3d7df7895bad87a1bc18f26d2
Author: Stefan Metzmacher <metze at samba.org>
Date:   Wed Feb 17 20:00:04 2010 +0100

    librpc/ndr_krb5pac: use ndr_push_relative_ptr2_start()/_end()
    
    metze
    (cherry picked from commit e03591111a1b9c2f05c29a7afac4641f23f455f4)
    (cherry picked from commit 8abc4b5dc5e06e846f0966c74a75f22e27504287)

commit 82f600ef86eb721c20d952dc02cad13c0b4a08ed
Author: Stefan Metzmacher <metze at samba.org>
Date:   Wed Feb 17 19:59:19 2010 +0100

    librpc/ndr_drsblobs: use ndr_push_relative_ptr2_start()/_end()
    
    metze
    (cherry picked from commit b423bd2115e006f9af5d40cf5b651e03739d53a0)
    (cherry picked from commit c495dd164771cfc8358713c5b07ddd07642fd33c)

commit aa9650e4880f26a6925dcb3b0bfbc027451b3519
Author: Günther Deschner <gd at samba.org>
Date:   Thu Feb 11 18:54:31 2010 +0100

    spoolss: fix relative pointers in ndr_push_spoolss_DriverInfo101.
    
    Guenther
    (cherry picked from commit bfd6edb3e9339d602eb6514ff50c3bb6c671174e)
    (cherry picked from commit 8232ada560194fc967cfcb4cb3d14e55e221c321)

commit fd826a9344da9e7d9547f3927459026e08935ead
Author: Günther Deschner <gd at samba.org>
Date:   Mon Dec 14 14:17:05 2009 +0100

    s3: re-run make full_idl.
    
    Guenther
    (cherry picked from commit 9be36f59cfd1d973feeb045da975aafc869abfbd)

commit 0e8111d7633eccb2655be0c0c3ce3c3a9cdacbad
Author: Günther Deschner <gd at samba.org>
Date:   Mon Dec 14 14:09:22 2009 +0100

    pidl: use ndr_push_relative_ptr2_start and ndr_push_relative_ptr2_end.
    
    Guenther
    (cherry picked from commit a049d75193b284fe9efb28d303ea46ba407e5a7a)
    (cherry picked from commit c1c56a0ebd6a8c777d8aa8b7d45858d03e7dce57)

commit 08777336e85b0df3d0f314dfee1056ce2f0e31f9
Author: Günther Deschner <gd at samba.org>
Date:   Mon Dec 14 14:08:34 2009 +0100

    libndr: add ndr_push_relative_ptr2_start and ndr_push_relative_ptr2_end.
    
    Guenther
    (cherry picked from commit f52de6e2293de4a7ba4726025dd936228b51b5b5)

commit 678672b787cbddf5cf31fd2acf6e11a239d5a57b
Author: Jeremy Allison <jra at samba.org>
Date:   Thu Feb 18 11:22:44 2010 -0800

    Fix bug #7154 - mangling method = hash can crash storing a name not containing a '.'
    
    Fix use of uninitialized variable. This can lead to crashes if
    mangling = hash processes names with no '.'.
    
    Jeremy.
    (cherry picked from commit df13b1303a751962d8f7d5298b39e4a7500fef15)
    (cherry picked from commit 7eaeb891c8aee880fb06733f998b2feb95ef9c36)

commit cf789124b2f29f999de1519df0e8698345104bcb
Author: Jeremy Allison <jra at samba.org>
Date:   Thu Feb 18 12:21:10 2010 -0800

    Fix bug #7155 - valgrind Conditional jump or move depends on uninitialised value(s) error when "mangling method = hash"
    
    The charset array allocated in init_chartest() is allocated
    by MALLOC, but only some elements of it being set after allocation. Fix is to
    memset to zero after allocation.
    
    Jeremy.
    (cherry picked from commit a4e8210ba7d6d471cb9f17754244393b9c1e5930)
    (cherry picked from commit fcca63d5fd0b900bc4bdcfbfb21b14f655abbbf7)

commit 615a5e83ee409fb196252984d697018241e1de62
Author: Jeremy Allison <jra at samba.org>
Date:   Wed Feb 17 10:46:42 2010 -0800

    Fix bug #6557 - Do not work VFS full_audit
    
    Re-arrange the operations order so SMB_VFS_CONNECT is done
    first as root (to allow modules to correctly initialize themselves).
    
    Reviewed modules to check if they needed CONNECT invoked as
    a user (which we previously did) and it turns out any of them
    that cared needed root permissions anyway.
    
    Jeremy.
    (cherry picked from commit 2eb33851a753cbd5594d44243802388cff5ae152)

-----------------------------------------------------------------------

Summary of changes:
 WHATSNEW.txt                             |    7 +
 librpc/gen_ndr/ndr_drsblobs.c            |   15 +-
 librpc/gen_ndr/ndr_krb5pac.c             |    3 +-
 librpc/gen_ndr/ndr_security.c            |   20 +-
 librpc/gen_ndr/ndr_security.h            |    4 +
 librpc/gen_ndr/ndr_spoolss.c             | 3234 ++++++++++++++++--------------
 librpc/gen_ndr/ndr_spoolss.h             |    4 +
 librpc/gen_ndr/ndr_svcctl.c              |   24 +-
 librpc/gen_ndr/spoolss.h                 |   39 +-
 librpc/idl/idl_types.h                   |    3 +
 librpc/idl/security.idl                  |    4 +-
 librpc/idl/spoolss.idl                   |   45 +-
 librpc/ndr/libndr.h                      |   10 +-
 librpc/ndr/ndr.c                         |  143 ++-
 librpc/ndr/ndr_drsblobs.c                |    6 +-
 librpc/ndr/ndr_krb5pac.c                 |    3 +-
 librpc/ndr/ndr_spoolss_buf.c             |  330 +++-
 librpc/ndr/ndr_spoolss_buf.h             |    3 +
 pidl/lib/Parse/Pidl/Samba4/NDR/Parser.pm |    6 +-
 source3/smbd/mangle_hash.c               |    9 +-
 source3/smbd/service.c                   |   34 +-
 21 files changed, 2351 insertions(+), 1595 deletions(-)


Changeset truncated at 500 lines:

diff --git a/WHATSNEW.txt b/WHATSNEW.txt
index a0ddb70..5e7271d 100644
--- a/WHATSNEW.txt
+++ b/WHATSNEW.txt
@@ -9,6 +9,7 @@ This is the latest stable release of Samba 3.4.
 Major enhancements in Samba 3.4.6 include:
 
    o "wide links" and "unix extensions" are incompatible (bug #7104).
+   o Fix printing with 64 bit clients (bug #6888).
    o Fix core dump on Ubuntu 8.04 64 bit (bug #7063).
    o Fix failing of smbd to respond to a read or a write caused by
      Linux asynchronous IO (aio) (bug #7067).
@@ -31,6 +32,7 @@ o   Michael Adam <obnox at samba.org>
 
 
 o   Jeremy Allison <jra at samba.org>
+    * BUG 6557: Fix vfs_full_audit.
     * BUG 7063: Fix core dump on Ubuntu 8.04 64 bit.
     * BUG 7067: Fix failing of smbd to respond to a read or a write caused by
       Linux asynchronous IO (aio).
@@ -38,6 +40,9 @@ o   Jeremy Allison <jra at samba.org>
     * BUG 7081: Fix vfs_expand_msdfs.
     * BUG 7104: "wide links" and "unix extensions" are incompatible.
     * BUG 7122: Fix reading of large browselist.
+    * BUG 7154: "mangling method = hash" can crash storing a name containing a '.'.
+    * BUG 7155: Valgrind Conditional jump or move depends on uninitialised
+      value(s) error when "mangling method = hash".
 
 
 o   Steven Danneman <steven.danneman at isilon.com>
@@ -45,6 +50,7 @@ o   Steven Danneman <steven.danneman at isilon.com>
 
 
 o   Günther Deschner <gd at samba.org>
+    * BUG 6888: Fix printing with 64 bit clients.
     * BUG 7130: Fix listing of printjobs in Windows 7.
     * BUG 7136: Sspoolss getprinterdriver2 level 101 marshalling is bad.
 
@@ -66,6 +72,7 @@ o   Volker Lendecke <vl at samba.org>
 
 o   Stefan Metzmacher <metze at samba.org>
     * BUG 6157: Use the first "uid" value.
+    * BUG 6888: Fix printing with 64 bit clients.
     * BUG 7098: Fix results of 'smbclient -L' with a large browse list.
     * Shortcut gid_to_sid when "ldapsam:trusted = yes".
     * Speed up pdb_get_group_sid().
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..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));
@@ -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_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 d531cbf..cca1b12 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));
@@ -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;
 		}
@@ -948,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));
@@ -985,209 +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;
-		}
-		NDR_CHECK(ndr_push_relative_ptr1(ndr, r->devmode));
-		{
-			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;
-		}
-		NDR_CHECK(ndr_push_relative_ptr1(ndr, r->secdesc));
-		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(ndr, r->servername));
-				NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, 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(ndr, r->printername));
-				NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, 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(ndr, r->sharename));
-				NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, 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(ndr, r->portname));
-				NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, 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(ndr, r->drivername));
-				NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, 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(ndr, r->comment));
-				NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, 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(ndr, r->location));
-				NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->location));
-			}
-			ndr->flags = _flags_save_string;
-		}
-		if (r->devmode) {
-			NDR_CHECK(ndr_push_relative_ptr2(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_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_string(ndr, NDR_SCALARS, 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(ndr, r->printprocessor));
-				NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, 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(ndr, r->datatype));
-				NDR_CHECK(ndr_push_string(ndr, NDR_SCALARS, r->datatype));
-			}
-			ndr->flags = _flags_save_string;
-		}
-		{
-			uint32_t _flags_save_string = ndr->flags;
-			ndr_set_flags(&ndr->flags, LIBNDR_FLAG_STR_NULLTERM);


-- 
Samba Shared Repository


More information about the samba-cvs mailing list