* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: server.c,v 1.276.2.1 2001/01/09 22:32:13 bwelling Exp $ */
+/* $Id: server.c,v 1.276.2.2 2001/03/13 02:40:22 bwelling Exp $ */
#include <config.h>
isc_mem_t *mctx, ns_listenlist_t **target);
static isc_result_t
-configure_forward(dns_c_ctx_t *cctx, dns_c_zone_t *czone, dns_c_view_t *cview,
- dns_view_t *view, dns_name_t *origin,
- dns_c_iplist_t *forwarders);
+configure_forward(dns_c_ctx_t *cctx, dns_view_t *view, dns_name_t *origin,
+ dns_c_iplist_t *forwarders, dns_c_forw_t forward);
/*
* Configure a single view ACL at '*aclp'. Get its configuration by
dns_c_view_getforwarders(cview, &forwarders) == ISC_R_SUCCESS) ||
(dns_c_ctx_getforwarders(cctx, &forwarders) == ISC_R_SUCCESS))
{
- result = configure_forward(cctx, NULL, cview, view,
- dns_rootname, forwarders);
+ dns_c_forw_t fwd;
+ if (!((cview != NULL &&
+ dns_c_view_getforward(cview, &fwd) == ISC_R_SUCCESS) ||
+ (dns_c_ctx_getforward(cctx, &fwd) == ISC_R_SUCCESS)))
+ fwd = dns_c_forw_first;
+ result = configure_forward(cctx, view,
+ dns_rootname, forwarders, fwd);
dns_c_iplist_detach(&forwarders);
}
}
static isc_result_t
-configure_forward(dns_c_ctx_t *cctx, dns_c_zone_t *czone, dns_c_view_t *cview,
- dns_view_t *view, dns_name_t *origin,
- dns_c_iplist_t *forwarders)
+configure_forward(dns_c_ctx_t *cctx, dns_view_t *view, dns_name_t *origin,
+ dns_c_iplist_t *forwarders, dns_c_forw_t forward)
{
- dns_c_forw_t forward;
dns_fwdpolicy_t fwdpolicy;
isc_sockaddrlist_t addresses;
isc_sockaddr_t *sa;
if (ISC_LIST_EMPTY(addresses))
fwdpolicy = dns_fwdpolicy_none;
- else
- fwdpolicy = dns_fwdpolicy_first;
-
- if ((czone != NULL &&
- dns_c_zone_getforward(czone, &forward) == ISC_R_SUCCESS) ||
- (cview != NULL &&
- dns_c_view_getforward(cview, &forward) == ISC_R_SUCCESS) ||
- dns_c_ctx_getforward(cctx, &forward) == ISC_R_SUCCESS)
- {
+ else {
INSIST(forward == dns_c_forw_first ||
forward == dns_c_forw_only);
if (forward == dns_c_forw_only)
fwdpolicy = dns_fwdpolicy_only;
+ else
+ fwdpolicy = dns_fwdpolicy_first;
}
result = dns_fwdtable_add(view->fwdtable, origin, &addresses,
dns_zone_t *zone = NULL; /* New or reused zone */
dns_zone_t *dupzone = NULL;
dns_c_iplist_t *forwarders = NULL;
- dns_c_forw_t tfwd;
+ dns_c_forw_t forward;
isc_result_t result;
* the appropriate selective forwarding configuration and return.
*/
if (czone->ztype == dns_c_zone_forward) {
- result = configure_forward(cctx, czone, cview, view, origin,
- czone->u.fzone.forwarders);
+ if (dns_c_zone_getforward(czone, &forward) != ISC_R_SUCCESS)
+ forward = dns_c_forw_first;
+ result = configure_forward(cctx, view, origin,
+ czone->u.fzone.forwarders,
+ forward);
goto cleanup;
}
}
/*
- * If the zone contains 'forward' or 'forwarders' statements,
+ * If the zone contains 'forwarders' statements,
* configure selective forwarding.
*/
- if (dns_c_zone_getforwarders(czone, &forwarders) == ISC_R_SUCCESS ||
- dns_c_zone_getforward(czone, &tfwd) == ISC_R_SUCCESS)
- CHECK(configure_forward(cctx, czone, cview, view,
- origin, forwarders));
+ if (dns_c_zone_getforwarders(czone, &forwarders) == ISC_R_SUCCESS) {
+ if (dns_c_zone_getforward(czone, &forward) != ISC_R_SUCCESS)
+ forward = dns_c_forw_first;
+ CHECK(configure_forward(cctx, view,
+ origin, forwarders, forward));
+ }
/*
* Configure the zone.
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: confzone.c,v 1.72.2.4 2001/03/05 19:35:52 bwelling Exp $ */
+/* $Id: confzone.c,v 1.72.2.5 2001/03/13 02:40:20 bwelling Exp $ */
#include <config.h>
switch (zone->ztype) {
case dns_c_zone_master:
- if (zone->u.mzone.forwarders != NULL &&
- zone->u.mzone.forwarders->nextidx > 0) {
+ if (zone->u.mzone.forwarders != NULL) {
*retval = zone->u.mzone.forwarders;
res = ISC_R_SUCCESS;
} else {
break;
case dns_c_zone_slave:
- if (zone->u.szone.forwarders != NULL &&
- zone->u.szone.forwarders->nextidx > 0) {
+ if (zone->u.szone.forwarders != NULL) {
*retval = zone->u.szone.forwarders;
res = ISC_R_SUCCESS;
} else {
break;
case dns_c_zone_stub:
- if (zone->u.tzone.forwarders != NULL &&
- zone->u.tzone.forwarders->nextidx > 0) {
+ if (zone->u.tzone.forwarders != NULL) {
*retval = zone->u.tzone.forwarders;
res = ISC_R_SUCCESS;
} else {
return (ISC_R_FAILURE);
case dns_c_zone_forward:
- if (zone->u.fzone.forwarders != NULL &&
- zone->u.fzone.forwarders->nextidx > 0) {
+ if (zone->u.fzone.forwarders != NULL) {
*retval = zone->u.fzone.forwarders;
res = ISC_R_SUCCESS;
} else {