summaryrefslogtreecommitdiff
path: root/source4/rpc_server/dnsserver/dcerpc_dnsserver.c
diff options
context:
space:
mode:
authorAmitay Isaacs <amitay@gmail.com>2011-12-15 19:45:10 +1100
committerAmitay Isaacs <amitay@gmail.com>2011-12-23 16:17:10 +1100
commitfe0e08acfb1f183178c1277491778c8f0a6219d8 (patch)
tree7805b3cd40b1964ef2349ff07c1c3f97b704b404 /source4/rpc_server/dnsserver/dcerpc_dnsserver.c
parentdbf5df5f8ff0868ac0346ab8a489a789c00c680e (diff)
downloadsamba-fe0e08acfb1f183178c1277491778c8f0a6219d8.tar.gz
samba-fe0e08acfb1f183178c1277491778c8f0a6219d8.tar.bz2
samba-fe0e08acfb1f183178c1277491778c8f0a6219d8.zip
s4:rpc-dnsserver: Use cached zone information to get rootservers
This removes the hardcoded search for DC=RootDNSServers, and uses the cached zone information.
Diffstat (limited to 'source4/rpc_server/dnsserver/dcerpc_dnsserver.c')
-rw-r--r--source4/rpc_server/dnsserver/dcerpc_dnsserver.c15
1 files changed, 6 insertions, 9 deletions
diff --git a/source4/rpc_server/dnsserver/dcerpc_dnsserver.c b/source4/rpc_server/dnsserver/dcerpc_dnsserver.c
index 2d9fadd91e..345cfb814e 100644
--- a/source4/rpc_server/dnsserver/dcerpc_dnsserver.c
+++ b/source4/rpc_server/dnsserver/dcerpc_dnsserver.c
@@ -1457,9 +1457,9 @@ static WERROR dnsserver_enumerate_root_records(struct dnsserver_state *dsstate,
struct DNS_RPC_RECORDS_ARRAY **buffer)
{
TALLOC_CTX *tmp_ctx;
+ struct dnsserver_zone *z;
const char * const attrs[] = { "name", "dnsRecord", NULL };
struct ldb_result *res;
- struct ldb_dn *dn;
struct DNS_RPC_RECORDS_ARRAY *recs;
char **add_names;
char *rname;
@@ -1470,15 +1470,12 @@ static WERROR dnsserver_enumerate_root_records(struct dnsserver_state *dsstate,
tmp_ctx = talloc_new(mem_ctx);
W_ERROR_HAVE_NO_MEMORY(tmp_ctx);
- dn = ldb_dn_copy(tmp_ctx, ldb_get_default_basedn(dsstate->samdb));
- W_ERROR_HAVE_NO_MEMORY_AND_FREE(dn, tmp_ctx);
-
- if (!ldb_dn_add_child_fmt(dn, "DC=RootDNSServers,CN=MicrosoftDNS,DC=DomainDnsZones")) {
- talloc_free(tmp_ctx);
- return WERR_NOMEM;
+ z = dnsserver_find_zone(dsstate->zones, ".");
+ if (z == NULL) {
+ return WERR_DNS_ERROR_NAME_DOES_NOT_EXIST;
}
- ret = ldb_search(dsstate->samdb, tmp_ctx, &res, dn,
+ ret = ldb_search(dsstate->samdb, tmp_ctx, &res, z->zone_dn,
LDB_SCOPE_ONELEVEL, attrs, "(&(objectClass=dnsNode)(name=@))");
if (ret != LDB_SUCCESS) {
talloc_free(tmp_ctx);
@@ -1510,7 +1507,7 @@ static WERROR dnsserver_enumerate_root_records(struct dnsserver_state *dsstate,
/* Add any additional records */
if (select_flag & DNS_RPC_VIEW_ADDITIONAL_DATA) {
for (i=0; i<add_count; i++) {
- ret = ldb_search(dsstate->samdb, tmp_ctx, &res, dn,
+ ret = ldb_search(dsstate->samdb, tmp_ctx, &res, z->zone_dn,
LDB_SCOPE_ONELEVEL, attrs,
"(&(objectClass=dnsNode)(name=%s))", add_names[i]);
if (ret != LDB_SUCCESS || res->count == 0) {