r23792: convert Samba4 to GPLv3
[samba.git] / source4 / librpc / ndr / ndr_krb5pac.c
index b3c08c642f6bcb7fefdd622420a330025c64335e..a220b308495c2423ecc654c0979e99a7fb1c9d62 100644 (file)
@@ -7,7 +7,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 
 #include "includes.h"
 #include "librpc/gen_ndr/ndr_krb5pac.h"
 
-size_t _ndr_size_PAC_INFO(const union PAC_INFO *r, uint32_t level, int flags)
+static size_t _ndr_size_PAC_INFO(const union PAC_INFO *r, uint32_t level, int flags)
 {
        size_t s = ndr_size_PAC_INFO(r, level, flags);
        switch (level) {
@@ -35,7 +34,7 @@ size_t _ndr_size_PAC_INFO(const union PAC_INFO *r, uint32_t level, int flags)
        }
 }
 
-size_t _subcontext_size_PAC_INFO(const union PAC_INFO *r, uint32_t level, int flags)
+static size_t _subcontext_size_PAC_INFO(const union PAC_INFO *r, uint32_t level, int flags)
 {
        size_t s = ndr_size_PAC_INFO(r, level, flags);
        return NDR_ROUND(s,8);
@@ -63,15 +62,10 @@ NTSTATUS ndr_push_PAC_BUFFER(struct ndr_push *ndr, int ndr_flags, const struct P
                                NDR_CHECK(ndr_push_relative_ptr2(ndr, r->info));
                                {
                                        struct ndr_push *_ndr_info;
-
-                                       _ndr_info = ndr_push_init_ctx(ndr);
-                                       if (!_ndr_info) return NT_STATUS_NO_MEMORY;
-                                       _ndr_info->flags = ndr->flags;
-
+                                       NDR_CHECK(ndr_push_subcontext_start(ndr, &_ndr_info, 0, _subcontext_size_PAC_INFO(r->info,r->type,0)));
                                        NDR_CHECK(ndr_push_set_switch_value(_ndr_info, r->info, r->type));
                                        NDR_CHECK(ndr_push_PAC_INFO(_ndr_info, NDR_SCALARS|NDR_BUFFERS, r->info));
-                                       NDR_CHECK(ndr_push_subcontext_header(ndr, 0, _subcontext_size_PAC_INFO(r->info,r->type,0), _ndr_info));
-                                       NDR_CHECK(ndr_push_bytes(ndr, _ndr_info->data, _ndr_info->offset));
+                                       NDR_CHECK(ndr_push_subcontext_end(ndr, _ndr_info, 0, _subcontext_size_PAC_INFO(r->info,r->type,0)));
                                }
                        }
                        ndr->flags = _flags_save_PAC_INFO;
@@ -83,6 +77,7 @@ NTSTATUS ndr_push_PAC_BUFFER(struct ndr_push *ndr, int ndr_flags, const struct P
 NTSTATUS ndr_pull_PAC_BUFFER(struct ndr_pull *ndr, int ndr_flags, struct PAC_BUFFER *r)
 {
        uint32_t _ptr_info;
+       TALLOC_CTX *_mem_save_info_0;
        if (ndr_flags & NDR_SCALARS) {
                NDR_CHECK(ndr_pull_align(ndr, 4));
                NDR_CHECK(ndr_pull_PAC_TYPE(ndr, NDR_SCALARS, &r->type));
@@ -90,9 +85,9 @@ NTSTATUS ndr_pull_PAC_BUFFER(struct ndr_pull *ndr, int ndr_flags, struct PAC_BUF
                {
                        uint32_t _flags_save_PAC_INFO = ndr->flags;
                        ndr_set_flags(&ndr->flags, LIBNDR_FLAG_ALIGN8);
-                       NDR_CHECK(ndr_pull_unique_ptr(ndr, &_ptr_info));
+                       NDR_CHECK(ndr_pull_generic_ptr(ndr, &_ptr_info));
                        if (_ptr_info) {
-                               NDR_ALLOC(ndr, r->info);
+                               NDR_PULL_ALLOC(ndr, r->info);
                                NDR_CHECK(ndr_pull_relative_ptr1(ndr, r->info, _ptr_info));
                        } else {
                                r->info = NULL;
@@ -109,14 +104,16 @@ NTSTATUS ndr_pull_PAC_BUFFER(struct ndr_pull *ndr, int ndr_flags, struct PAC_BUF
                                struct ndr_pull_save _relative_save;
                                ndr_pull_save(ndr, &_relative_save);
                                NDR_CHECK(ndr_pull_relative_ptr2(ndr, r->info));
+                               _mem_save_info_0 = NDR_PULL_GET_MEM_CTX(ndr);
+                               NDR_PULL_SET_MEM_CTX(ndr, r->info, 0);
                                {
                                        struct ndr_pull *_ndr_info;
-                                       NDR_ALLOC(ndr, _ndr_info);
-                                       NDR_CHECK(ndr_pull_subcontext_header(ndr, 0, r->_ndr_size, _ndr_info));
+                                       NDR_CHECK(ndr_pull_subcontext_start(ndr, &_ndr_info, 0, r->_ndr_size));
                                        NDR_CHECK(ndr_pull_set_switch_value(_ndr_info, r->info, r->type));
                                        NDR_CHECK(ndr_pull_PAC_INFO(_ndr_info, NDR_SCALARS|NDR_BUFFERS, r->info));
-                                       NDR_CHECK(ndr_pull_advance(ndr, r->_ndr_size));
+                                       NDR_CHECK(ndr_pull_subcontext_end(ndr, _ndr_info, 0, r->_ndr_size));
                                }
+                               NDR_PULL_SET_MEM_CTX(ndr, _mem_save_info_0, 0);
                                ndr_pull_restore(ndr, &_relative_save);
                        }
                        ndr->flags = _flags_save_PAC_INFO;