Line data Source code
1 : /* 2 : Unix SMB/CIFS implementation. 3 : 4 : Manually parsed structures for DNSSERVER 5 : 6 : Copyright (C) Amitay Isaacs 2011 7 : 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. 12 : 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. 17 : 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/>. 20 : */ 21 : 22 : #include "includes.h" 23 : #include "librpc/gen_ndr/ndr_dnsp.h" 24 : #include "librpc/gen_ndr/ndr_dnsserver.h" 25 : 26 : /* 27 : * parsing DNS_RPC_RECORDS_ARRAY 28 : */ 29 : 30 1080 : 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) 32 : { 33 1080 : rec->count = 0; 34 1080 : rec->rec = talloc_array(ndr->current_mem_ctx, struct DNS_RPC_RECORDS, rec->count); 35 1080 : if (! rec->rec) { 36 0 : return ndr_pull_error(ndr, NDR_ERR_ALLOC, "Failed to pull DNS_RPC_RECORDS_ARRAY"); 37 : } 38 : 39 2262 : while (ndr->offset < ndr->data_size) { 40 1182 : rec->rec = talloc_realloc(ndr->current_mem_ctx, rec->rec, struct DNS_RPC_RECORDS, rec->count+1); 41 1182 : if (! rec->rec) { 42 0 : return ndr_pull_error(ndr, NDR_ERR_ALLOC, "Failed to pull DNS_RPC_RECORDS_ARRAY"); 43 : } 44 1182 : NDR_CHECK(ndr_pull_DNS_RPC_RECORDS(ndr, ndr_flags, &rec->rec[rec->count])); 45 1182 : NDR_PULL_ALIGN(ndr, 4); 46 1182 : rec->count++; 47 : } 48 : 49 1080 : return NDR_ERR_SUCCESS; 50 : } 51 : 52 2160 : 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) 54 : { 55 0 : int i; 56 : 57 4524 : for (i=0; i<rec->count; i++) { 58 2364 : NDR_CHECK(ndr_push_DNS_RPC_RECORDS(ndr, ndr_flags, &rec->rec[i])); 59 4780 : NDR_PUSH_ALIGN(ndr, 4); 60 : } 61 : 62 2160 : return NDR_ERR_SUCCESS; 63 : } 64 : 65 : /* 66 : * Parsing of DNS_RPC_RECORD_STRING 67 : */ 68 : 69 522 : 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) 71 : { 72 522 : rec->count = 0; 73 522 : rec->str = talloc_array(ndr->current_mem_ctx, struct DNS_RPC_NAME, rec->count); 74 522 : if (! rec->str) { 75 0 : return ndr_pull_error(ndr, NDR_ERR_ALLOC, "Failed to pull DNS_RPC_RECORD_STRING"); 76 : } 77 : 78 1088 : while (ndr->offset < ndr->data_size) { 79 566 : rec->str = talloc_realloc(ndr->current_mem_ctx, rec->str, struct DNS_RPC_NAME, rec->count+1); 80 566 : if (! rec->str) { 81 0 : return ndr_pull_error(ndr, NDR_ERR_ALLOC, "Failed to pull DNS_RPC_RECORD_STRING"); 82 : } 83 566 : NDR_CHECK(ndr_pull_DNS_RPC_NAME(ndr, ndr_flags, &rec->str[rec->count])); 84 566 : rec->count++; 85 : } 86 : 87 522 : return NDR_ERR_SUCCESS; 88 : } 89 : 90 2988 : 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) 92 : { 93 0 : int i; 94 : 95 6241 : for (i=0; i<rec->count; i++) { 96 3253 : NDR_CHECK(ndr_push_DNS_RPC_NAME(ndr, ndr_flags, &rec->str[i])); 97 : } 98 : 99 2988 : return NDR_ERR_SUCCESS; 100 : }