]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
More explicit dns64 prefix errors
authorTony Finch <fanf@isc.org>
Wed, 16 Mar 2022 17:33:10 +0000 (17:33 +0000)
committerOndřej Surý <ondrej@isc.org>
Fri, 25 Mar 2022 15:09:12 +0000 (16:09 +0100)
Quote the dns64 prefix in error messages that complain about
problems with it, to avoid confusion with the following ACLs.

Closes #3210

(cherry picked from commit 496c02d32acab31d3fd0e005e9f601e5da2ea273)

lib/bind9/check.c

index 3e1a5d6e0a4abd0d2e5e5a65b1c4cc492071e896..42a98e3e5a1fc5a0746e955c5db0b8c20d801fc1 100644 (file)
@@ -505,7 +505,14 @@ check_viewacls(cfg_aclconfctx_t *actx, const cfg_obj_t *voptions,
        return (result);
 }
 
-static const unsigned char zeros[16];
+static void
+dns64_error(const cfg_obj_t *obj, isc_log_t *logctx, isc_netaddr_t *netaddr,
+           unsigned int prefixlen, const char *message) {
+       char buf[ISC_NETADDR_FORMATSIZE + 1];
+       isc_netaddr_format(netaddr, buf, sizeof(buf));
+       cfg_obj_log(obj, logctx, ISC_LOG_ERROR, "dns64 prefix %s/%u %s", buf,
+                   prefixlen, message);
+}
 
 static isc_result_t
 check_dns64(cfg_aclconfctx_t *actx, const cfg_obj_t *voptions,
@@ -544,16 +551,15 @@ check_dns64(cfg_aclconfctx_t *actx, const cfg_obj_t *voptions,
 
                cfg_obj_asnetprefix(obj, &na, &prefixlen);
                if (na.family != AF_INET6) {
-                       cfg_obj_log(map, logctx, ISC_LOG_ERROR,
-                                   "dns64 requires a IPv6 prefix");
+                       dns64_error(map, logctx, &na, prefixlen,
+                                   "must be IPv6");
                        result = ISC_R_FAILURE;
                        continue;
                }
 
                if (na.type.in6.s6_addr[8] != 0) {
-                       cfg_obj_log(map, logctx, ISC_LOG_ERROR,
-                                   "invalid prefix, bits [64..71] must be "
-                                   "zero");
+                       dns64_error(map, logctx, &na, prefixlen,
+                                   "bits [64..71] must be zero");
                        result = ISC_R_FAILURE;
                        continue;
                }
@@ -561,9 +567,8 @@ check_dns64(cfg_aclconfctx_t *actx, const cfg_obj_t *voptions,
                if (prefixlen != 32 && prefixlen != 40 && prefixlen != 48 &&
                    prefixlen != 56 && prefixlen != 64 && prefixlen != 96)
                {
-                       cfg_obj_log(map, logctx, ISC_LOG_ERROR,
-                                   "bad prefix length %u [32/40/48/56/64/96]",
-                                   prefixlen);
+                       dns64_error(map, logctx, &na, prefixlen,
+                                   "length is not 32/40/48/56/64/96");
                        result = ISC_R_FAILURE;
                        continue;
                }
@@ -590,6 +595,7 @@ check_dns64(cfg_aclconfctx_t *actx, const cfg_obj_t *voptions,
                obj = NULL;
                (void)cfg_map_get(map, "suffix", &obj);
                if (obj != NULL) {
+                       static const unsigned char zeros[16];
                        isc_netaddr_fromsockaddr(&sa, cfg_obj_assockaddr(obj));
                        if (sa.family != AF_INET6) {
                                cfg_obj_log(map, logctx, ISC_LOG_ERROR,