summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/rpc_server/dnsserver/dcerpc_dnsserver.c4
-rw-r--r--source4/rpc_server/dnsserver/dnsutils.c13
2 files changed, 14 insertions, 3 deletions
diff --git a/source4/rpc_server/dnsserver/dcerpc_dnsserver.c b/source4/rpc_server/dnsserver/dcerpc_dnsserver.c
index e1966fa6fc..98e935ca99 100644
--- a/source4/rpc_server/dnsserver/dcerpc_dnsserver.c
+++ b/source4/rpc_server/dnsserver/dcerpc_dnsserver.c
@@ -1165,12 +1165,12 @@ static WERROR dnsserver_complex_operate_server(struct dnsserver_state *dsstate,
found2 = false;
if (rin->Dword & 0x000000f0) {
if (rin->Dword & DNS_ZONE_REQUEST_FORWARD) {
- if (!(z->zoneinfo->Flags & DNS_RPC_ZONE_REVERSE)) {
+ if (!(z->zoneinfo->fReverse)) {
found2 = true;
}
}
if (rin->Dword & DNS_ZONE_REQUEST_REVERSE) {
- if (z->zoneinfo->Flags & DNS_RPC_ZONE_REVERSE) {
+ if (z->zoneinfo->fReverse) {
found2 = true;
}
}
diff --git a/source4/rpc_server/dnsserver/dnsutils.c b/source4/rpc_server/dnsserver/dnsutils.c
index 1f5edae2da..3ae47a8c5f 100644
--- a/source4/rpc_server/dnsserver/dnsutils.c
+++ b/source4/rpc_server/dnsserver/dnsutils.c
@@ -159,6 +159,9 @@ struct dnsserver_zoneinfo *dnsserver_init_zoneinfo(struct dnsserver_zone *zone,
{
struct dnsserver_zoneinfo *zoneinfo;
uint32_t dp_flags;
+ uint32_t fReverse;
+ const char *revzone = "in-addr.arpa";
+ int len1, len2;
zoneinfo = talloc_zero(zone, struct dnsserver_zoneinfo);
if (zoneinfo == NULL) {
@@ -172,10 +175,18 @@ struct dnsserver_zoneinfo *dnsserver_init_zoneinfo(struct dnsserver_zone *zone,
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);
+ len2 = strlen(revzone);
+ if (len1 > len2 && strcmp(&zone->name[len1-len2], revzone) == 0) {
+ fReverse = 1;
+ }
+
zoneinfo->Version = 0x32;
zoneinfo->Flags = DNS_RPC_ZONE_DSINTEGRATED | DNS_RPC_ZONE_UPDATE_SECURE;
zoneinfo->dwZoneType = DNS_ZONE_TYPE_PRIMARY;
- zoneinfo->fReverse = 0; /* We only support forward zones for now */
+ zoneinfo->fReverse = fReverse;
zoneinfo->fAllowUpdate = DNS_ZONE_UPDATE_SECURE;
zoneinfo->fPaused = 0;
zoneinfo->fShutdown = 0;