2 Unix SMB/CIFS implementation.
4 Manually parsed structures for DNSSERVER
6 Copyright (C) Amitay Isaacs 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/>.
23 #include "librpc/gen_ndr/ndr_dnsp.h"
24 #include "librpc/gen_ndr/ndr_dnsserver.h"
27 * parsing DNS_RPC_RECORDS_ARRAY
30 enum ndr_err_code
ndr_pull_DNS_RPC_RECORDS_ARRAY(struct ndr_pull
*ndr
,
31 ndr_flags_type ndr_flags
, struct DNS_RPC_RECORDS_ARRAY
*rec
)
34 rec
->rec
= talloc_array(ndr
->current_mem_ctx
, struct DNS_RPC_RECORDS
, rec
->count
);
36 return ndr_pull_error(ndr
, NDR_ERR_ALLOC
, "Failed to pull DNS_RPC_RECORDS_ARRAY");
39 while (ndr
->offset
< ndr
->data_size
) {
40 rec
->rec
= talloc_realloc(ndr
->current_mem_ctx
, rec
->rec
, struct DNS_RPC_RECORDS
, rec
->count
+1);
42 return ndr_pull_error(ndr
, NDR_ERR_ALLOC
, "Failed to pull DNS_RPC_RECORDS_ARRAY");
44 NDR_CHECK(ndr_pull_DNS_RPC_RECORDS(ndr
, ndr_flags
, &rec
->rec
[rec
->count
]));
45 NDR_PULL_ALIGN(ndr
, 4);
49 return NDR_ERR_SUCCESS
;
52 enum ndr_err_code
ndr_push_DNS_RPC_RECORDS_ARRAY(struct ndr_push
*ndr
,
53 ndr_flags_type ndr_flags
, const struct DNS_RPC_RECORDS_ARRAY
*rec
)
57 for (i
=0; i
<rec
->count
; i
++) {
58 NDR_CHECK(ndr_push_DNS_RPC_RECORDS(ndr
, ndr_flags
, &rec
->rec
[i
]));
59 NDR_PUSH_ALIGN(ndr
, 4);
62 return NDR_ERR_SUCCESS
;
66 * Parsing of DNS_RPC_RECORD_STRING
69 enum ndr_err_code
ndr_pull_DNS_RPC_RECORD_STRING(struct ndr_pull
*ndr
,
70 ndr_flags_type ndr_flags
, struct DNS_RPC_RECORD_STRING
*rec
)
73 rec
->str
= talloc_array(ndr
->current_mem_ctx
, struct DNS_RPC_NAME
, rec
->count
);
75 return ndr_pull_error(ndr
, NDR_ERR_ALLOC
, "Failed to pull DNS_RPC_RECORD_STRING");
78 while (ndr
->offset
< ndr
->data_size
) {
79 rec
->str
= talloc_realloc(ndr
->current_mem_ctx
, rec
->str
, struct DNS_RPC_NAME
, rec
->count
+1);
81 return ndr_pull_error(ndr
, NDR_ERR_ALLOC
, "Failed to pull DNS_RPC_RECORD_STRING");
83 NDR_CHECK(ndr_pull_DNS_RPC_NAME(ndr
, ndr_flags
, &rec
->str
[rec
->count
]));
87 return NDR_ERR_SUCCESS
;
90 enum ndr_err_code
ndr_push_DNS_RPC_RECORD_STRING(struct ndr_push
*ndr
,
91 ndr_flags_type ndr_flags
, const struct DNS_RPC_RECORD_STRING
*rec
)
95 for (i
=0; i
<rec
->count
; i
++) {
96 NDR_CHECK(ndr_push_DNS_RPC_NAME(ndr
, ndr_flags
, &rec
->str
[i
]));
99 return NDR_ERR_SUCCESS
;