]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Improve the diagnostic 'rndc retransfer' error message
authorMark Andrews <marka@isc.org>
Wed, 9 Dec 2020 05:32:11 +0000 (16:32 +1100)
committerMark Andrews <marka@isc.org>
Wed, 27 Jan 2021 22:44:26 +0000 (09:44 +1100)
(cherry picked from commit dd3520ae41e92433fd25b46f44ca97811bbdf49b)

bin/named/server.c
lib/dns/include/dns/zone.h
lib/dns/win32/libdns.def.in
lib/dns/zone.c

index 77e8a26ded28ad3a572c544c8cb2e78d6f73e9df..1d7d3e47ce1ecc66b2aed4b369da40cb98b6140d 100644 (file)
@@ -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);
index 412ed3744c077842639532fffbeec988c10d2144..ecaff82ed44f276351e009af53ddcc45ca889ceb 100644 (file)
@@ -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 */
index 88aaa682ef02eaec32a0663e116f6c5205d78e26..2aaea2ce2708f8f49626728f91d233bb1c62c81f 100644 (file)
@@ -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
index 656bbf74a0b6a946a0ad837809d4f8a5c59c7ca5..27e813cadbd5c0d2cc572e96f01b1bbeebcb3321 100644 (file)
@@ -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));