summaryrefslogtreecommitdiff
path: root/source4/rpc_server/dnsserver/dnsserver.h
diff options
context:
space:
mode:
authorAmitay Isaacs <amitay@gmail.com>2011-10-24 17:20:46 +1100
committerAndrew Tridgell <tridge@samba.org>2011-11-02 15:26:54 +1100
commit6e800bfba708124077defab3c9379db201f4c43c (patch)
tree93fffed0ed9946dba27a085492e472804d076390 /source4/rpc_server/dnsserver/dnsserver.h
parent0d3aff732483cf1a48cb9ea6af16537fc11be547 (diff)
downloadsamba-6e800bfba708124077defab3c9379db201f4c43c.tar.gz
samba-6e800bfba708124077defab3c9379db201f4c43c.tar.bz2
samba-6e800bfba708124077defab3c9379db201f4c43c.zip
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 <tridge@samba.org>
Diffstat (limited to 'source4/rpc_server/dnsserver/dnsserver.h')
-rw-r--r--source4/rpc_server/dnsserver/dnsserver.h12
1 files changed, 11 insertions, 1 deletions
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);