[Pkg-samba-maint] r4184 - in branches/samba/wheezy/debian: . patches

bubulle at alioth.debian.org bubulle at alioth.debian.org
Sun Jan 6 05:46:37 UTC 2013


tags 696675 pending
thanks

Author: bubulle
Date: 2013-01-06 05:46:37 +0000 (Sun, 06 Jan 2013)
New Revision: 4184

Added:
   branches/samba/wheezy/debian/patches/0001-ndr-fix-push-pull-DATA_BLOB-with-NDR_NOALIGN.patch
Modified:
   branches/samba/wheezy/debian/changelog
   branches/samba/wheezy/debian/patches/series
Log:
Fix printers tdb migration by including an upstream fix
from 3.6.7 (upstream bug #9026)
Closes: #696675

Modified: branches/samba/wheezy/debian/changelog
===================================================================
--- branches/samba/wheezy/debian/changelog	2012-12-15 10:55:33 UTC (rev 4183)
+++ branches/samba/wheezy/debian/changelog	2013-01-06 05:46:37 UTC (rev 4184)
@@ -1,3 +1,11 @@
+samba (2:3.6.6-4) unstable; urgency=low
+
+  * Fix printers tdb migration by including an upstream fix
+    from 3.6.7 (upstream bug #9026)
+    Closes: #696675
+
+ -- Christian Perrier <bubulle at debian.org>  Sat, 05 Jan 2013 12:42:02 +0100
+
 samba (2:3.6.6-3) unstable; urgency=low
 
   [ Ansgar Burchardt ]

Added: branches/samba/wheezy/debian/patches/0001-ndr-fix-push-pull-DATA_BLOB-with-NDR_NOALIGN.patch
===================================================================
--- branches/samba/wheezy/debian/patches/0001-ndr-fix-push-pull-DATA_BLOB-with-NDR_NOALIGN.patch	                        (rev 0)
+++ branches/samba/wheezy/debian/patches/0001-ndr-fix-push-pull-DATA_BLOB-with-NDR_NOALIGN.patch	2013-01-06 05:46:37 UTC (rev 4184)
@@ -0,0 +1,134 @@
+Description: ndr: fix push/pull DATA_BLOB with NDR_NOALIGN
+Author: David Disseldorp <ddiss at samba.org>
+Bug-Debian: http://bugs.debian.org/696675
+Forwarded: https://bugzilla.samba.org/show_bug.cgi?id=9026
+
+From 447802bbde046dddf30ed8292bb309cfc92f75d4 Mon Sep 17 00:00:00 2001
+From: David Disseldorp <ddiss at samba.org>
+Date: Fri, 6 Jul 2012 14:00:27 +0200
+Subject: [PATCH] ndr: fix push/pull DATA_BLOB with NDR_NOALIGN
+
+This change addresses bug 9026.
+There are 3 use cases for DATA_BLOB marshalling/unmarshalling:
+
+1)
+ndr_push_DATA_BLOB and ndr_pull_DATA_BLOB when called with
+LIBNDR_FLAG_ALIGN* alignment flags set, are used to push/pull padding
+bytes _only_. The length is determined by the alignment required and
+the current ndr offset.
+e.g. dcerpc.idl:
+        typedef struct {
+...
+                [flag(NDR_ALIGN8)]    DATA_BLOB _pad;
+        } dcerpc_request;
+
+2)
+When called with the LIBNDR_FLAG_REMAINING flag, all remaining bytes in
+the ndr buffer are pushed/pulled.
+e.g. dcerpc.idl:
+        typedef struct {
+...
+                [flag(NDR_REMAINING)] DATA_BLOB stub_and_verifier;
+        } dcerpc_request;
+
+3)
+When called without alignment flags, push/pull a uint32 length _and_ a
+corresponding byte array to/from the ndr buffer.
+e.g. drsblobs.idl
+        typedef [public] struct {
+...
+                DATA_BLOB data;
+        } DsCompressedChunk;
+
+The fix for bug 8373 changed the definition of "alignment flags", such
+that when called with LIBNDR_FLAG_NOALIGN ndr_push/pull_DATA_BLOB
+behaves as (1: padding bytes) rather than (3: uint32 length + byte
+array).
+
+This breaks marshalling/unmarshalling for the following structures.
+eventlog.idl:
+        typedef [flag(NDR_NOALIGN|NDR_PAHEX),public] struct {
+...
+                DATA_BLOB sid;
+...
+        } eventlog_Record_tdb;
+
+ntprinting.idl:
+        typedef [flag(NDR_NOALIGN),public] struct {
+...
+                DATA_BLOB *nt_dev_private;
+        } ntprinting_devicemode;
+
+        typedef [flag(NDR_NOALIGN),public] struct {
+...
+                DATA_BLOB data;
+        } ntprinting_printer_data;
+---
+ librpc/ndr/ndr_basic.c |   34 ++++++++++++++++++++++------------
+ 1 files changed, 22 insertions(+), 12 deletions(-)
+
+diff --git a/librpc/ndr/ndr_basic.c b/librpc/ndr/ndr_basic.c
+index 7a4e22a..1887838 100644
+--- a/librpc/ndr/ndr_basic.c
++++ b/librpc/ndr/ndr_basic.c
+@@ -1247,16 +1247,21 @@ _PUBLIC_ void ndr_print_DATA_BLOB(struct ndr_print *ndr, const char *name, DATA_
+ 
+ 
+ /*
+-  push a DATA_BLOB onto the wire. 
+-*/
++ * Push a DATA_BLOB onto the wire.
++ * 1) When called with LIBNDR_FLAG_ALIGN* alignment flags set, push padding
++ *    bytes _only_. The length is determined by the alignment required and the
++ *    current ndr offset.
++ * 2) When called with the LIBNDR_FLAG_REMAINING flag, push the byte array to
++ *    the ndr buffer.
++ * 3) Otherwise, push a uint32 length _and_ a corresponding byte array to the
++ *    ndr buffer.
++ */
+ _PUBLIC_ enum ndr_err_code ndr_push_DATA_BLOB(struct ndr_push *ndr, int ndr_flags, DATA_BLOB blob)
+ {
+ 	if (ndr->flags & LIBNDR_FLAG_REMAINING) {
+ 		/* nothing to do */
+-	} else if (ndr->flags & LIBNDR_ALIGN_FLAGS) {
+-		if (ndr->flags & LIBNDR_FLAG_NOALIGN) {
+-			blob.length = 0;
+-		} else if (ndr->flags & LIBNDR_FLAG_ALIGN2) {
++	} else if (ndr->flags & (LIBNDR_ALIGN_FLAGS & ~LIBNDR_FLAG_NOALIGN)) {
++		if (ndr->flags & LIBNDR_FLAG_ALIGN2) {
+ 			blob.length = NDR_ALIGN(ndr, 2);
+ 		} else if (ndr->flags & LIBNDR_FLAG_ALIGN4) {
+ 			blob.length = NDR_ALIGN(ndr, 4);
+@@ -1273,18 +1278,23 @@ _PUBLIC_ enum ndr_err_code ndr_push_DATA_BLOB(struct ndr_push *ndr, int ndr_flag
+ }
+ 
+ /*
+-  pull a DATA_BLOB from the wire. 
+-*/
++ * Pull a DATA_BLOB from the wire.
++ * 1) when called with LIBNDR_FLAG_ALIGN* alignment flags set, pull padding
++ *    bytes _only_. The length is determined by the alignment required and the
++ *    current ndr offset.
++ * 2) When called with the LIBNDR_FLAG_REMAINING flag, pull all remaining bytes
++ *    from the ndr buffer.
++ * 3) Otherwise, pull a uint32 length _and_ a corresponding byte array from the
++ *    ndr buffer.
++ */
+ _PUBLIC_ enum ndr_err_code ndr_pull_DATA_BLOB(struct ndr_pull *ndr, int ndr_flags, DATA_BLOB *blob)
+ {
+ 	uint32_t length = 0;
+ 
+ 	if (ndr->flags & LIBNDR_FLAG_REMAINING) {
+ 		length = ndr->data_size - ndr->offset;
+-	} else if (ndr->flags & LIBNDR_ALIGN_FLAGS) {
+-		if (ndr->flags & LIBNDR_FLAG_NOALIGN) {
+-			length = 0;
+-		} else if (ndr->flags & LIBNDR_FLAG_ALIGN2) {
++	} else if (ndr->flags & (LIBNDR_ALIGN_FLAGS & ~LIBNDR_FLAG_NOALIGN)) {
++		if (ndr->flags & LIBNDR_FLAG_ALIGN2) {
+ 			length = NDR_ALIGN(ndr, 2);
+ 		} else if (ndr->flags & LIBNDR_FLAG_ALIGN4) {
+ 			length = NDR_ALIGN(ndr, 4);
+-- 
+1.7.1
+

Modified: branches/samba/wheezy/debian/patches/series
===================================================================
--- branches/samba/wheezy/debian/patches/series	2012-12-15 10:55:33 UTC (rev 4183)
+++ branches/samba/wheezy/debian/patches/series	2013-01-06 05:46:37 UTC (rev 4184)
@@ -21,3 +21,4 @@
 libutil_drop_AI_ADDRCONFIG.patch
 shadow_copy2_backport.patch
 only_export_public_symbols.patch
+0001-ndr-fix-push-pull-DATA_BLOB-with-NDR_NOALIGN.patch





More information about the Pkg-samba-maint mailing list