From: Mark Andrews Date: Wed, 9 Dec 2020 05:32:11 +0000 (+1100) Subject: Improve the diagnostic 'rndc retransfer' error message X-Git-Tag: v9.16.12~18^2~2 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=b416d8fcdf9fce107141d5bac418d7f7da2d60d3;p=thirdparty%2Fbind9.git Improve the diagnostic 'rndc retransfer' error message (cherry picked from commit dd3520ae41e92433fd25b46f44ca97811bbdf49b) --- diff --git a/bin/named/server.c b/bin/named/server.c index 77e8a26ded2..1d7d3e47ce1 100644 --- a/bin/named/server.c +++ b/bin/named/server.c @@ -7285,36 +7285,12 @@ portset_fromconf(isc_portset_t *portset, const cfg_obj_t *ports, static isc_result_t removed(dns_zone_t *zone, void *uap) { - const char *type; - if (dns_zone_getview(zone) != uap) { return (ISC_R_SUCCESS); } - switch (dns_zone_gettype(zone)) { - case dns_zone_master: - type = "primary"; - break; - case dns_zone_slave: - type = "secondary"; - break; - case dns_zone_mirror: - type = "mirror"; - break; - case dns_zone_stub: - type = "stub"; - break; - case dns_zone_staticstub: - type = "static-stub"; - break; - case dns_zone_redirect: - type = "redirect"; - break; - default: - type = "other"; - break; - } - dns_zone_log(zone, ISC_LOG_INFO, "(%s) removed", type); + dns_zone_log(zone, ISC_LOG_INFO, "(%s) removed", + dns_zonetype_name(dns_zone_gettype(zone))); return (ISC_R_SUCCESS); } @@ -10598,7 +10574,16 @@ named_server_retransfercommand(named_server_t *server, isc_lex_t *lex, { dns_zone_forcereload(zone); } else { - result = ISC_R_NOTFOUND; + (void)putstr(text, "retransfer: inappropriate zone type: "); + (void)putstr(text, dns_zonetype_name(type)); + if (type == dns_zone_redirect) { + type = dns_zone_getredirecttype(zone); + (void)putstr(text, "("); + (void)putstr(text, dns_zonetype_name(type)); + (void)putstr(text, ")"); + } + (void)putnull(text); + result = ISC_R_FAILURE; } dns_zone_detach(&zone); return (result); @@ -14912,34 +14897,7 @@ named_server_zonestatus(named_server_t *server, isc_lex_t *lex, zonetype = dns_zone_gettype(zone); } - switch (zonetype) { - case dns_zone_master: - type = "primary"; - break; - case dns_zone_slave: - type = "secondary"; - break; - case dns_zone_mirror: - type = "mirror"; - break; - case dns_zone_stub: - type = "stub"; - break; - case dns_zone_staticstub: - type = "staticstub"; - break; - case dns_zone_redirect: - type = "redirect"; - break; - case dns_zone_key: - type = "key"; - break; - case dns_zone_dlz: - type = "dlz"; - break; - default: - type = "unknown"; - } + type = dns_zonetype_name(zonetype); /* Serial number */ result = dns_zone_getserial(mayberaw, &serial); diff --git a/lib/dns/include/dns/zone.h b/lib/dns/include/dns/zone.h index 412ed3744c0..ecaff82ed44 100644 --- a/lib/dns/include/dns/zone.h +++ b/lib/dns/include/dns/zone.h @@ -2568,4 +2568,10 @@ dns_zone_verifydb(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *ver); * \li #DNS_R_VERIFYFAILURE any other case */ +const char * +dns_zonetype_name(dns_zonetype_t type); +/*%< + * Return the name of the zone type 'type'. + */ + #endif /* DNS_ZONE_H */ diff --git a/lib/dns/win32/libdns.def.in b/lib/dns/win32/libdns.def.in index 88aaa682ef0..2aaea2ce270 100644 --- a/lib/dns/win32/libdns.def.in +++ b/lib/dns/win32/libdns.def.in @@ -1415,6 +1415,7 @@ dns_zonemgr_shutdown dns_zonemgr_unreachable dns_zonemgr_unreachableadd dns_zonemgr_unreachabledel +dns_zonetype_name dns_zoneverify_dnssec dns_zt_apply dns_zt_asyncload diff --git a/lib/dns/zone.c b/lib/dns/zone.c index 656bbf74a0b..27e813cadbd 100644 --- a/lib/dns/zone.c +++ b/lib/dns/zone.c @@ -15580,6 +15580,32 @@ dns_zone_gettype(dns_zone_t *zone) { return (zone->type); } +const char * +dns_zonetype_name(dns_zonetype_t type) { + switch (type) { + case dns_zone_none: + return ("none"); + case dns_zone_master: + return ("primary"); + case dns_zone_slave: + return ("secondary"); + case dns_zone_mirror: + return ("mirror"); + case dns_zone_stub: + return ("stub"); + case dns_zone_staticstub: + return ("static-stub"); + case dns_zone_key: + return ("key"); + case dns_zone_dlz: + return ("dlz"); + case dns_zone_redirect: + return ("redirect"); + default: + return ("unknown"); + } +} + dns_zonetype_t dns_zone_getredirecttype(dns_zone_t *zone) { REQUIRE(DNS_ZONE_VALID(zone));