From 4bc5101166ec97bf88448efb9a65da600e82040e Mon Sep 17 00:00:00 2001 From: Andreas Gustafsson Date: Mon, 20 Mar 2000 19:42:21 +0000 Subject: [PATCH] wired up the new 'request-ixfr' option --- bin/named/server.c | 6 ++++++ doc/misc/options | 6 +++++- lib/dns/include/dns/zone.h | 6 ++++++ lib/dns/xfrin.c | 17 ++++++++++------- lib/dns/zone.c | 14 ++++++++++++-- 5 files changed, 39 insertions(+), 10 deletions(-) diff --git a/bin/named/server.c b/bin/named/server.c index 13853ed545..e791688f92 100644 --- a/bin/named/server.c +++ b/bin/named/server.c @@ -869,6 +869,12 @@ load_configuration(const char *filename, ns_server_t *server, (void) dns_c_ctx_gettransfersperns(configctx, &transfersperns); dns_zonemgr_settransfersperns(server->zonemgr, transfersperns); } + { + isc_boolean_t requestixfr = ISC_TRUE; + (void) dns_c_ctx_getrequestixfr(configctx, &requestixfr); + dns_zonemgr_setrequestixfr(server->zonemgr, requestixfr); + } + /* * Configure the interface manager according to the "listen-on" diff --git a/doc/misc/options b/doc/misc/options index 5825181661..e50c7c62ae 100644 --- a/doc/misc/options +++ b/doc/misc/options @@ -75,6 +75,8 @@ options { [ transfers-per-ns number; ] Yes [ transfer-source ip_addr; ] Yes [ transfer-source-v6 ip_addr; ] Yes* + [ request-ixfr yes_or_no; ] Yes* + [ provide-ixfr yes_or_no; ] No* [ maintain-ixfr-base yes_or_no; ] Obsolete+ [ max-ixfr-log-size number; ] No [ coresize size_spec ; ] No @@ -104,7 +106,9 @@ controls No server ip_addr { [ bogus yes_or_no; ] No - [ support-ixfr yes_or_no; ] Yes + [ request-ixfr yes_or_no; ] Yes* + [ provide-ixfr yes_or_no; ] No* + [ support-ixfr yes_or_no; ] Obsolete [ transfers number; ] Yes [ transfer-format ( one-answer | many-answers ); ] Yes [ keys { key_id [key_id ... ] }; ] Yes diff --git a/lib/dns/include/dns/zone.h b/lib/dns/include/dns/zone.h index 4b5d770969..bfb07aafa3 100644 --- a/lib/dns/include/dns/zone.h +++ b/lib/dns/include/dns/zone.h @@ -895,6 +895,12 @@ dns_zonemgr_getttransfersperns(dns_zonemgr_t *zmgr); dns_xfrinlist_t * dns_zonemgr_gettransferlist(dns_zonemgr_t *zmgr); +void +dns_zonemgr_setrequestixfr(dns_zonemgr_t *zmgr, isc_boolean_t value); + +isc_boolean_t +dns_zonemgr_getrequestixfr(dns_zonemgr_t *zmgr); + ISC_LANG_ENDDECLS #endif /* DNS_ZONE_H */ diff --git a/lib/dns/xfrin.c b/lib/dns/xfrin.c index b1b46bc7ea..02f4568321 100644 --- a/lib/dns/xfrin.c +++ b/lib/dns/xfrin.c @@ -15,7 +15,7 @@ * SOFTWARE. */ -/* $Id: xfrin.c,v 1.52 2000/03/17 17:45:05 gson Exp $ */ +/* $Id: xfrin.c,v 1.53 2000/03/20 19:37:50 gson Exp $ */ #include @@ -533,7 +533,7 @@ dns_xfrin_create(dns_zone_t *zone, isc_sockaddr_t *masteraddr, CHECK(result); /* - * Decide whether we should use IXFR or AXFR. + * Decide whether we should request IXFR or AXFR. */ if (db == NULL) { xfrin_log1(ISC_LOG_DEBUG(3), zonename, masteraddr, @@ -543,15 +543,18 @@ dns_xfrin_create(dns_zone_t *zone, isc_sockaddr_t *masteraddr, } else { isc_boolean_t use_ixfr = ISC_TRUE; if (peer != NULL && - dns_peer_getsupportixfr(peer, &use_ixfr) == ISC_R_SUCCESS && - use_ixfr == ISC_FALSE) - { + dns_peer_getrequestixfr(peer, &use_ixfr) == ISC_R_SUCCESS) { + ; /* Using peer setting */ + } else { + use_ixfr = dns_zonemgr_getrequestixfr(dns_zone_getmgr(zone)); + } + if (use_ixfr == ISC_FALSE) { xfrin_log1(ISC_LOG_DEBUG(3), zonename, masteraddr, - "IXFR disabled for server, using AXFR"); + "IXFR disabled, requesting AXFR"); xfrtype = dns_rdatatype_axfr; } else { xfrin_log1(ISC_LOG_DEBUG(3), zonename, masteraddr, - "trying IXFR"); + "requesting IXFR"); xfrtype = dns_rdatatype_ixfr; } } diff --git a/lib/dns/zone.c b/lib/dns/zone.c index b0466efd76..604d3285c3 100644 --- a/lib/dns/zone.c +++ b/lib/dns/zone.c @@ -15,7 +15,7 @@ * SOFTWARE. */ -/* $Id: zone.c,v 1.86 2000/03/17 17:45:07 gson Exp $ */ +/* $Id: zone.c,v 1.87 2000/03/20 19:37:38 gson Exp $ */ #include @@ -201,6 +201,7 @@ struct dns_zonemgr { /* Locked by conflock. */ int transfersin; int transfersperns; + isc_boolean_t requestixfr; /* Contains its own lock. */ dns_xfrinlist_t transferlist; }; @@ -3323,12 +3324,21 @@ dns_zonemgr_getttransfersperns(dns_zonemgr_t *zmgr) { return (zmgr->transfersperns); } - dns_xfrinlist_t * dns_zonemgr_gettransferlist(dns_zonemgr_t *zmgr) { return (&zmgr->transferlist); } +void +dns_zonemgr_setrequestixfr(dns_zonemgr_t *zmgr, isc_boolean_t value) { + zmgr->requestixfr = value; +} + +isc_boolean_t +dns_zonemgr_getrequestixfr(dns_zonemgr_t *zmgr) { + return (zmgr->requestixfr); +} + #if 0 /* hook for ondestroy notifcation from a database. */