Fix bug #8373 - Can't join XP Pro workstations to 3.6.1 DC.
authorJeremy Allison <jra@samba.org>
Fri, 25 May 2012 16:16:50 +0000 (09:16 -0700)
committerJeremy Allison <jra@samba.org>
Fri, 25 May 2012 16:16:50 +0000 (09:16 -0700)
Treat LIBNDR_FLAG_NOALIGN and LIBNDR_FLAG_REMAINING the same as the
other align flags - make them mutually exclusive.

Combined work from Metze, Günther and Jeremy.

librpc/ndr/libndr.h
librpc/ndr/ndr.c

index 37a3145e126fa99c106cf18e1afc272310e76e06..1bd284f798baa0325bf28d0f7be06426b4b590d7 100644 (file)
@@ -135,7 +135,13 @@ struct ndr_print {
 #define LIBNDR_FLAG_ALIGN4       (1<<23)
 #define LIBNDR_FLAG_ALIGN8       (1<<24)
 
-#define LIBNDR_ALIGN_FLAGS (LIBNDR_FLAG_ALIGN2|LIBNDR_FLAG_ALIGN4|LIBNDR_FLAG_ALIGN8)
+#define LIBNDR_ALIGN_FLAGS ( 0        | \
+               LIBNDR_FLAG_NOALIGN   | \
+               LIBNDR_FLAG_REMAINING | \
+               LIBNDR_FLAG_ALIGN2    | \
+               LIBNDR_FLAG_ALIGN4    | \
+               LIBNDR_FLAG_ALIGN8    | \
+               0)
 
 #define LIBNDR_PRINT_ARRAY_HEX   (1<<25)
 #define LIBNDR_PRINT_SET_VALUES  (1<<26)
index 2279d1c1c3c9345a714ab3bc64001fcd9f87f1f2..b77bfae36b76a84fbbbc31c316d7ad201f8b0609 100644 (file)
@@ -378,11 +378,11 @@ _PUBLIC_ void ndr_set_flags(uint32_t *pflags, uint32_t new_flags)
                (*pflags) &= ~LIBNDR_FLAG_LITTLE_ENDIAN;
                (*pflags) &= ~LIBNDR_FLAG_NDR64;
        }
-       if (new_flags & LIBNDR_FLAG_REMAINING) {
-               (*pflags) &= ~LIBNDR_ALIGN_FLAGS;
-       }
        if (new_flags & LIBNDR_ALIGN_FLAGS) {
-               (*pflags) &= ~LIBNDR_FLAG_REMAINING;
+               /* Ensure we only have the passed-in
+                  align flag set in the new_flags,
+                  remove any old align flag. */
+               (*pflags) &= ~LIBNDR_ALIGN_FLAGS;
        }
        if (new_flags & LIBNDR_FLAG_NO_RELATIVE_REVERSE) {
                (*pflags) &= ~LIBNDR_FLAG_RELATIVE_REVERSE;