|
Adam Tkac |
03f646 |
--- bind-9.4.0/lib/dns/view.c.freeze 2007-04-24 12:35:03.000000000 +0200
|
|
Adam Tkac |
03f646 |
+++ bind-9.4.0/lib/dns/view.c 2007-04-24 12:52:02.000000000 +0200
|
|
Adam Tkac |
03f646 |
@@ -1140,6 +1140,32 @@
|
|
Adam Tkac |
205d5e |
}
|
|
Adam Tkac |
205d5e |
|
|
Adam Tkac |
205d5e |
isc_result_t
|
|
Adam Tkac |
03f646 |
+dns_viewlist_findzone(dns_viewlist_t *list, dns_name_t *name, isc_boolean_t allclasses,
|
|
Adam Tkac |
205d5e |
+ dns_rdataclass_t rdclass, dns_zone_t **zonep)
|
|
Adam Tkac |
205d5e |
+{
|
|
Adam Tkac |
205d5e |
+ dns_view_t *view;
|
|
Adam Tkac |
205d5e |
+ isc_result_t result;
|
|
Adam Tkac |
03f646 |
+ isc_boolean_t match = isc_boolean_false;
|
|
Adam Tkac |
205d5e |
+
|
|
Adam Tkac |
205d5e |
+ REQUIRE(list != NULL);
|
|
Adam Tkac |
205d5e |
+
|
|
Adam Tkac |
205d5e |
+ for (view = ISC_LIST_HEAD(*list);
|
|
Adam Tkac |
205d5e |
+ view != NULL;
|
|
Adam Tkac |
205d5e |
+ view = ISC_LIST_NEXT(view, link)) {
|
|
Adam Tkac |
03f646 |
+ if (allclasses == isc_boolean_false && view->rdclass != rdclass )
|
|
Adam Tkac |
205d5e |
+ continue;
|
|
Adam Tkac |
205d5e |
+ result = dns_zt_find(view->zonetable, name,
|
|
Adam Tkac |
205d5e |
+ 0, NULL, zonep);
|
|
Adam Tkac |
03f646 |
+ if(result == ISC_R_SUCCESS) {
|
|
Adam Tkac |
03f646 |
+ if (match != isc_boolean_false)
|
|
Adam Tkac |
03f646 |
+ return ISC_R_NOTFOUND;
|
|
Adam Tkac |
03f646 |
+ match = isc_boolean_true;
|
|
Adam Tkac |
03f646 |
+ }
|
|
Adam Tkac |
205d5e |
+ }
|
|
Adam Tkac |
03f646 |
+ return (match == isc_boolean_false) ? ISC_R_NOTFOUND : ISC_R_SUCCESS;
|
|
Adam Tkac |
205d5e |
+}
|
|
Adam Tkac |
205d5e |
+
|
|
Adam Tkac |
205d5e |
+isc_result_t
|
|
Adam Tkac |
205d5e |
dns_view_load(dns_view_t *view, isc_boolean_t stop) {
|
|
Adam Tkac |
205d5e |
|
|
Adam Tkac |
205d5e |
REQUIRE(DNS_VIEW_VALID(view));
|
|
Adam Tkac |
03f646 |
--- bind-9.4.0/lib/dns/include/dns/view.h.freeze 2007-04-24 12:35:03.000000000 +0200
|
|
Adam Tkac |
03f646 |
+++ bind-9.4.0/lib/dns/include/dns/view.h 2007-04-24 12:35:03.000000000 +0200
|
|
Adam Tkac |
205d5e |
@@ -592,6 +592,19 @@
|
|
Adam Tkac |
205d5e |
*/
|
|
Adam Tkac |
205d5e |
|
|
Adam Tkac |
205d5e |
isc_result_t
|
|
Adam Tkac |
03f646 |
+dns_viewlist_findzone(dns_viewlist_t *list, dns_name_t *name, isc_boolean_t allclasses,
|
|
Adam Tkac |
205d5e |
+ dns_rdataclass_t rdclass, dns_zone_t **zonep);
|
|
Adam Tkac |
205d5e |
+
|
|
Adam Tkac |
205d5e |
+/*%<
|
|
Adam Tkac |
205d5e |
+ * Search zone with 'name' in view with 'rdclass' in viewlist 'list'
|
|
Adam Tkac |
03f646 |
+ * If found, zone is returned in *zonep. If allclasses is set rdclass is ignored
|
|
Adam Tkac |
205d5e |
+ *
|
|
Adam Tkac |
205d5e |
+ * Returns:
|
|
Adam Tkac |
205d5e |
+ *\li #ISC_R_SUCCESS A matching zone was found.
|
|
Adam Tkac |
205d5e |
+ *\li #ISC_R_NOTFOUND No matching zone was found.
|
|
Adam Tkac |
205d5e |
+ */
|
|
Adam Tkac |
205d5e |
+
|
|
Adam Tkac |
205d5e |
+isc_result_t
|
|
Adam Tkac |
205d5e |
dns_view_findzone(dns_view_t *view, dns_name_t *name, dns_zone_t **zonep);
|
|
Adam Tkac |
205d5e |
/*%<
|
|
Adam Tkac |
205d5e |
* Search for the zone 'name' in the zone table of 'view'.
|
|
Adam Tkac |
03f646 |
--- bind-9.4.0/bin/named/server.c.freeze 2007-04-24 12:35:03.000000000 +0200
|
|
Adam Tkac |
03f646 |
+++ bind-9.4.0/bin/named/server.c 2007-04-24 12:35:03.000000000 +0200
|
|
Adam Tkac |
03f646 |
@@ -3922,19 +3922,24 @@
|
|
Adam Tkac |
205d5e |
rdclass = dns_rdataclass_in;
|
|
Adam Tkac |
205d5e |
}
|
|
Adam Tkac |
205d5e |
|
|
Adam Tkac |
205d5e |
- if (viewtxt == NULL)
|
|
Adam Tkac |
205d5e |
- viewtxt = "_default";
|
|
Adam Tkac |
205d5e |
- result = dns_viewlist_find(&server->viewlist, viewtxt,
|
|
Adam Tkac |
205d5e |
- rdclass, &view);
|
|
Adam Tkac |
205d5e |
- if (result != ISC_R_SUCCESS)
|
|
Adam Tkac |
205d5e |
- goto fail1;
|
|
Adam Tkac |
205d5e |
+ if (viewtxt == NULL) {
|
|
Adam Tkac |
205d5e |
+ result = dns_viewlist_findzone(&server->viewlist, dns_fixedname_name(&name),
|
|
Adam Tkac |
03f646 |
+ (classtxt == NULL) ? isc_boolean_true : isc_boolean_false,
|
|
Adam Tkac |
205d5e |
+ rdclass, zonep);
|
|
Adam Tkac |
205d5e |
+ }
|
|
Adam Tkac |
205d5e |
+ else {
|
|
Adam Tkac |
205d5e |
+ result = dns_viewlist_find(&server->viewlist, viewtxt,
|
|
Adam Tkac |
205d5e |
+ rdclass, &view);
|
|
Adam Tkac |
205d5e |
+ if (result != ISC_R_SUCCESS)
|
|
Adam Tkac |
205d5e |
+ goto fail1;
|
|
Adam Tkac |
205d5e |
|
|
Adam Tkac |
205d5e |
- result = dns_zt_find(view->zonetable, dns_fixedname_name(&name),
|
|
Adam Tkac |
205d5e |
- 0, NULL, zonep);
|
|
Adam Tkac |
205d5e |
+ result = dns_zt_find(view->zonetable, dns_fixedname_name(&name),
|
|
Adam Tkac |
205d5e |
+ 0, NULL, zonep);
|
|
Adam Tkac |
205d5e |
+ dns_view_detach(&view);
|
|
Adam Tkac |
205d5e |
+ }
|
|
Adam Tkac |
205d5e |
/* Partial match? */
|
|
Adam Tkac |
205d5e |
if (result != ISC_R_SUCCESS && *zonep != NULL)
|
|
Adam Tkac |
205d5e |
dns_zone_detach(zonep);
|
|
Adam Tkac |
205d5e |
- dns_view_detach(&view);
|
|
Adam Tkac |
205d5e |
fail1:
|
|
Adam Tkac |
205d5e |
return (result);
|
|
Adam Tkac |
205d5e |
}
|
|
Adam Tkac |
03f646 |
--- bind-9.4.0/bin/named_sdb/server.c.freeze 2007-04-24 12:35:03.000000000 +0200
|
|
Adam Tkac |
03f646 |
+++ bind-9.4.0/bin/named_sdb/server.c 2007-04-24 12:35:03.000000000 +0200
|
|
Adam Tkac |
03f646 |
@@ -3917,19 +3917,24 @@
|
|
Adam Tkac |
205d5e |
rdclass = dns_rdataclass_in;
|
|
Adam Tkac |
205d5e |
}
|
|
Adam Tkac |
205d5e |
|
|
Adam Tkac |
205d5e |
- if (viewtxt == NULL)
|
|
Adam Tkac |
205d5e |
- viewtxt = "_default";
|
|
Adam Tkac |
205d5e |
- result = dns_viewlist_find(&server->viewlist, viewtxt,
|
|
Adam Tkac |
205d5e |
- rdclass, &view);
|
|
Adam Tkac |
205d5e |
- if (result != ISC_R_SUCCESS)
|
|
Adam Tkac |
205d5e |
- goto fail1;
|
|
Adam Tkac |
205d5e |
-
|
|
Adam Tkac |
205d5e |
- result = dns_zt_find(view->zonetable, dns_fixedname_name(&name),
|
|
Adam Tkac |
205d5e |
- 0, NULL, zonep);
|
|
Adam Tkac |
205d5e |
+ if (viewtxt == NULL) {
|
|
Adam Tkac |
205d5e |
+ result = dns_viewlist_findzone(&server->viewlist, dns_fixedname_name(&name),
|
|
Adam Tkac |
03f646 |
+ (classtxt == NULL) ? isc_boolean_true : isc_boolean_false,
|
|
Adam Tkac |
205d5e |
+ rdclass, zonep);
|
|
Adam Tkac |
205d5e |
+ }
|
|
Adam Tkac |
205d5e |
+ else {
|
|
Adam Tkac |
205d5e |
+ result = dns_viewlist_find(&server->viewlist, viewtxt,
|
|
Adam Tkac |
205d5e |
+ rdclass, &view);
|
|
Adam Tkac |
205d5e |
+ if (result != ISC_R_SUCCESS)
|
|
Adam Tkac |
205d5e |
+ goto fail1;
|
|
Adam Tkac |
205d5e |
+
|
|
Adam Tkac |
205d5e |
+ result = dns_zt_find(view->zonetable, dns_fixedname_name(&name),
|
|
Adam Tkac |
205d5e |
+ 0, NULL, zonep);
|
|
Adam Tkac |
205d5e |
+ dns_view_detach(&view);
|
|
Adam Tkac |
205d5e |
+ }
|
|
Adam Tkac |
205d5e |
/* Partial match? */
|
|
Adam Tkac |
205d5e |
if (result != ISC_R_SUCCESS && *zonep != NULL)
|
|
Adam Tkac |
205d5e |
dns_zone_detach(zonep);
|
|
Adam Tkac |
03f646 |
- dns_view_detach(&view);
|
|
Adam Tkac |
03f646 |
fail1:
|
|
Adam Tkac |
03f646 |
return (result);
|
|
Adam Tkac |
03f646 |
}
|