dsdb-tests: Add new test samba4.user_account_control.python
[Samba.git] / librpc / ndr / ndr_bkupblobs.c
blob93356644b2a6ebbe8f4d7065d2d089133ef85b75
1 /*
2 Unix SMB/CIFS implementation.
4 helper routines for BKUP Blobs marshalling
6 Copyright (C) Matthieu Patou <mat@matws.net> 2011
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>.
22 #include "includes.h"
23 #include "librpc/gen_ndr/ndr_bkupblobs.h"
26 _PUBLIC_ enum ndr_err_code ndr_push_bkup_NTBackupFile(struct ndr_push *ndr, int ndr_flags, const struct bkup_NTBackupFile *r)
28 uint32_t cntr_streams_0;
30 uint32_t _flags_save_STRUCT = ndr->flags;
31 ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN);
32 if (ndr_flags & NDR_SCALARS) {
33 NDR_CHECK(ndr_push_align(ndr, 2));
34 for (cntr_streams_0 = 0; cntr_streams_0 < r->num_stream; cntr_streams_0++) {
35 NDR_CHECK(ndr_push_bkup_Win32StreamId(ndr, NDR_SCALARS, &r->streams[cntr_streams_0]));
37 NDR_CHECK(ndr_push_trailer_align(ndr, 8));
39 if (ndr_flags & NDR_BUFFERS) {
41 ndr->flags = _flags_save_STRUCT;
43 return NDR_ERR_SUCCESS;
46 #define _TMP_PULL_REALLOC_N(ndr, s, t, n) do { \
47 _NDR_PULL_FIX_CURRENT_MEM_CTX(ndr);\
48 (s) = talloc_realloc(ndr->current_mem_ctx, (s), t, n); \
49 if (!(s)) { \
50 return ndr_pull_error(ndr, NDR_ERR_ALLOC, \
51 "Alloc %u * %s failed: %s\n", \
52 (unsigned)n, # s, __location__); \
53 } \
54 } while (0)
56 _PUBLIC_ enum ndr_err_code ndr_pull_bkup_NTBackupFile(struct ndr_pull *ndr, int ndr_flags, struct bkup_NTBackupFile *r)
58 uint32_t cntr_streams_0;
60 uint32_t _flags_save_STRUCT = ndr->flags;
61 ndr_set_flags(&ndr->flags, LIBNDR_FLAG_NOALIGN);
62 if (ndr_flags & NDR_SCALARS) {
63 uint32_t remaining = ndr->data_size - ndr->offset;
64 r->num_stream = 0;
65 r->streams = NULL;
66 for (cntr_streams_0 = 0; remaining > 0; cntr_streams_0++) {
67 r->num_stream += 1;
68 _TMP_PULL_REALLOC_N(ndr, r->streams,
69 struct bkup_Win32StreamId,
70 r->num_stream);
71 NDR_CHECK(ndr_pull_bkup_Win32StreamId(ndr,
72 NDR_SCALARS,
73 &r->streams[cntr_streams_0]));
74 remaining = ndr->data_size - ndr->offset;
77 if (ndr_flags & NDR_BUFFERS) {
79 ndr->flags = _flags_save_STRUCT;
81 return NDR_ERR_SUCCESS;