From 6e800bfba708124077defab3c9379db201f4c43c Mon Sep 17 00:00:00 2001 From: Amitay Isaacs Date: Mon, 24 Oct 2011 17:20:46 +1100 Subject: s4-dnsserver: Build a dns name tree for correct enumeration The result of EnumRecords/EnumRecords2 RPC calls, is a list of dns records that are one level below in the name hierarchy starting from the search name. This patch builds a tree of names to get the list of records one level below the search names and correctly count the number of child records for each of those. Signed-off-by: Andrew Tridgell --- source4/rpc_server/dnsserver/dnsserver.h | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'source4/rpc_server/dnsserver/dnsserver.h') diff --git a/source4/rpc_server/dnsserver/dnsserver.h b/source4/rpc_server/dnsserver/dnsserver.h index 5fc13c8704..818dc60b62 100644 --- a/source4/rpc_server/dnsserver/dnsserver.h +++ b/source4/rpc_server/dnsserver/dnsserver.h @@ -151,6 +151,14 @@ struct dnsserver_zone { }; +struct dns_tree { + const char *name; + int level; + unsigned int num_children; + struct dns_tree **children; + void *data; +}; + /* Data structure manipulation functions from dnsdata.c */ struct IP4_ARRAY *ip4_array_copy(TALLOC_CTX *mem_ctx, struct IP4_ARRAY *ip4); @@ -169,10 +177,12 @@ void dnsp_to_dns_copy(TALLOC_CTX *mem_ctx, struct dnsp_DnssrvRpcRecord *dnsp, struct DNS_RPC_RECORD *dns); struct dnsp_DnssrvRpcRecord *dns_to_dnsp_copy(TALLOC_CTX *mem_ctx, struct DNS_RPC_RECORD *dns); +struct dns_tree *dns_build_tree(TALLOC_CTX *mem_ctx, const char *name, struct ldb_result *res); WERROR dns_fill_records_array(TALLOC_CTX *mem_ctx, struct dnsserver_zone *z, enum dns_record_type record_type, unsigned int select_flag, const char *zone_name, - struct ldb_message *msg, struct DNS_RPC_RECORDS_ARRAY *recs, + struct ldb_message *msg, int num_children, + struct DNS_RPC_RECORDS_ARRAY *recs, char ***add_names, int *add_count); -- cgit