diff options
author | Amitay Isaacs <amitay@gmail.com> | 2011-12-15 17:44:32 +1100 |
---|---|---|
committer | Amitay Isaacs <amitay@gmail.com> | 2011-12-23 16:17:09 +1100 |
commit | 5673e2cec946502da84956f866658718e7632a3e (patch) | |
tree | ee9a38f49b49d6d7fcdedd2e83ec52eaa1e8ccdf /source4/rpc_server/dnsserver/dnsutils.c | |
parent | 9f76e076fa2593fdc67c3b82fb262670154bad09 (diff) | |
download | samba-5673e2cec946502da84956f866658718e7632a3e.tar.gz samba-5673e2cec946502da84956f866658718e7632a3e.tar.bz2 samba-5673e2cec946502da84956f866658718e7632a3e.zip |
s4:rpc-dnsserver: Cache DNS partition information
This information will be used for the RPC calls for partition
information.
Diffstat (limited to 'source4/rpc_server/dnsserver/dnsutils.c')
-rw-r--r-- | source4/rpc_server/dnsserver/dnsutils.c | 53 |
1 files changed, 34 insertions, 19 deletions
diff --git a/source4/rpc_server/dnsserver/dnsutils.c b/source4/rpc_server/dnsserver/dnsutils.c index 3ae47a8c5f..5390384e57 100644 --- a/source4/rpc_server/dnsserver/dnsutils.c +++ b/source4/rpc_server/dnsserver/dnsutils.c @@ -154,11 +154,9 @@ struct dnsserver_serverinfo *dnsserver_init_serverinfo(TALLOC_CTX *mem_ctx, struct dnsserver_zoneinfo *dnsserver_init_zoneinfo(struct dnsserver_zone *zone, - struct dnsserver_serverinfo *serverinfo, - bool is_forest) + struct dnsserver_serverinfo *serverinfo) { struct dnsserver_zoneinfo *zoneinfo; - uint32_t dp_flags; uint32_t fReverse; const char *revzone = "in-addr.arpa"; int len1, len2; @@ -168,13 +166,6 @@ struct dnsserver_zoneinfo *dnsserver_init_zoneinfo(struct dnsserver_zone *zone, return NULL; } - dp_flags = DNS_DP_AUTOCREATED | DNS_DP_ENLISTED; - if (is_forest) { - dp_flags |= DNS_DP_FOREST_DEFAULT; - } else { - dp_flags |= DNS_DP_DOMAIN_DEFAULT; - } - /* If the zone name ends with in-addr.arpa, it's reverse zone */ fReverse = 0; len1 = strlen(zone->name); @@ -184,32 +175,42 @@ struct dnsserver_zoneinfo *dnsserver_init_zoneinfo(struct dnsserver_zone *zone, } zoneinfo->Version = 0x32; - zoneinfo->Flags = DNS_RPC_ZONE_DSINTEGRATED | DNS_RPC_ZONE_UPDATE_SECURE; - zoneinfo->dwZoneType = DNS_ZONE_TYPE_PRIMARY; + zoneinfo->Flags = DNS_RPC_ZONE_DSINTEGRATED; + + if (strcmp(zone->name, ".") == 0) { + zoneinfo->dwZoneType = DNS_ZONE_TYPE_CACHE; + zoneinfo->fAllowUpdate = DNS_ZONE_UPDATE_OFF; + zoneinfo->fSecureSecondaries = DNS_ZONE_SECSECURE_NO_SECURITY; + zoneinfo->fNotifyLevel = DNS_ZONE_NOTIFY_OFF; + zoneinfo->dwNoRefreshInterval = 0; + zoneinfo->dwRefreshInterval = 0; + } else { + zoneinfo->Flags |= DNS_RPC_ZONE_UPDATE_SECURE; + zoneinfo->dwZoneType = DNS_ZONE_TYPE_PRIMARY; + zoneinfo->fAllowUpdate = DNS_ZONE_UPDATE_SECURE; + zoneinfo->fSecureSecondaries = DNS_ZONE_SECSECURE_NO_XFER; + zoneinfo->fNotifyLevel = DNS_ZONE_NOTIFY_LIST_ONLY; + zoneinfo->dwNoRefreshInterval = serverinfo->dwDefaultNoRefreshInterval; + zoneinfo->dwRefreshInterval = serverinfo->dwDefaultRefreshInterval; + } + zoneinfo->fReverse = fReverse; - zoneinfo->fAllowUpdate = DNS_ZONE_UPDATE_SECURE; zoneinfo->fPaused = 0; zoneinfo->fShutdown = 0; zoneinfo->fAutoCreated = 0; zoneinfo->fUseDatabase = 1; zoneinfo->pszDataFile = NULL; zoneinfo->aipMasters = NULL; - zoneinfo->fSecureSecondaries = DNS_ZONE_SECSECURE_NO_XFER; - zoneinfo->fNotifyLevel = DNS_ZONE_NOTIFY_LIST_ONLY; zoneinfo->aipSecondaries = NULL; zoneinfo->aipNotify = NULL; zoneinfo->fUseWins = 0; zoneinfo->fUseNbstat = 0; zoneinfo->fAging = 0; - zoneinfo->dwNoRefreshInterval = serverinfo->dwDefaultNoRefreshInterval; - zoneinfo->dwRefreshInterval = serverinfo->dwDefaultRefreshInterval; zoneinfo->dwAvailForScavengeTime = 0; zoneinfo->aipScavengeServers = NULL; zoneinfo->dwForwarderTimeout = 0; zoneinfo->fForwarderSlave = 0; zoneinfo->aipLocalMasters = NULL; - zoneinfo->dwDpFlags = dp_flags; - zoneinfo->pszDpFqdn = samdb_dn_to_dns_domain(zone, zone->partition_dn); zoneinfo->pwszZoneDn = discard_const_p(char, ldb_dn_get_linearized(zone->zone_dn)); zoneinfo->dwLastSuccessfulSoaCheck = 0; zoneinfo->dwLastSuccessfulXfr = 0; @@ -222,6 +223,20 @@ struct dnsserver_zoneinfo *dnsserver_init_zoneinfo(struct dnsserver_zone *zone, return zoneinfo; } +struct dnsserver_partition *dnsserver_find_partition(struct dnsserver_partition *partitions, + const char *dp_fqdn) +{ + struct dnsserver_partition *p = NULL; + + for (p = partitions; p; p = p->next) { + if (strcmp(dp_fqdn, p->pszDpFqdn) == 0) { + break; + } + } + + return p; +} + struct dnsserver_zone *dnsserver_find_zone(struct dnsserver_zone *zones, const char *zone_name) { struct dnsserver_zone *z = NULL; |