s3: Fix bug 8371
authorVolker Lendecke <vl@samba.org>
Thu, 17 Nov 2011 21:36:22 +0000 (22:36 +0100)
committerVolker Lendecke <vlendec@samba.org>
Fri, 18 Nov 2011 08:33:37 +0000 (09:33 +0100)
ndr_set_flag or's in the given flag (ALIGN4). At this point, ndr->flags
contains NOALIGN, which will persist. In ndr_push_DATA_BLOB NOALIGN overrides
everything else, so that the ALIGN4 is not respected.

Autobuild-User: Volker Lendecke <vlendec@samba.org>
Autobuild-Date: Fri Nov 18 09:33:37 CET 2011 on sn-devel-104

librpc/ndr/ndr_nbt.c

index f2a1ca3ba5fff4f1f28f7c2037c38dbf60b2e870..29013f0359cdd3ce9707ebbbf0d62e99f018adf6 100644 (file)
@@ -234,6 +234,7 @@ enum ndr_err_code ndr_push_NETLOGON_SAM_LOGON_REQUEST(struct ndr_push *ndr, int
                if (ndr_size_dom_sid0(&r->sid, ndr->flags)) {
                        struct ndr_push *_ndr_sid;
                        uint32_t _flags_save_DATA_BLOB = ndr->flags;
                if (ndr_size_dom_sid0(&r->sid, ndr->flags)) {
                        struct ndr_push *_ndr_sid;
                        uint32_t _flags_save_DATA_BLOB = ndr->flags;
+                       ndr->flags &= ~LIBNDR_FLAG_NOALIGN;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
                        NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, r->_pad));
                        ndr->flags = _flags_save_DATA_BLOB;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
                        NDR_CHECK(ndr_push_DATA_BLOB(ndr, NDR_SCALARS, r->_pad));
                        ndr->flags = _flags_save_DATA_BLOB;
@@ -279,6 +280,7 @@ enum ndr_err_code ndr_pull_NETLOGON_SAM_LOGON_REQUEST(struct ndr_pull *ndr, int
                if (r->sid_size) {
                        uint32_t _flags_save_DATA_BLOB = ndr->flags;
                        struct ndr_pull *_ndr_sid;
                if (r->sid_size) {
                        uint32_t _flags_save_DATA_BLOB = ndr->flags;
                        struct ndr_pull *_ndr_sid;
+                       ndr->flags &= ~LIBNDR_FLAG_NOALIGN;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
                        NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS, &r->_pad));
                        ndr->flags = _flags_save_DATA_BLOB;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN4);
                        NDR_CHECK(ndr_pull_DATA_BLOB(ndr, NDR_SCALARS, &r->_pad));
                        ndr->flags = _flags_save_DATA_BLOB;