]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Report non-effective primaries
authorMark Andrews <marka@isc.org>
Wed, 29 Nov 2023 01:35:20 +0000 (12:35 +1100)
committerMark Andrews <marka@isc.org>
Mon, 3 Jun 2024 13:52:37 +0000 (13:52 +0000)
When named is started with -4 or -6 and the primaries for a zone
do not have an IPv4 or IPv6 address respectively issue a log message.

(cherry picked from commit 2cd43032498752d2ab4527475ba21beee133b30b)

lib/dns/zone.c

index 8a6013b5c67a1f82f3ce0fb23a2ff0988774f333..baaf67eb867a62bf86ba6995dceb45deadbe7c59 100644 (file)
@@ -6253,6 +6253,32 @@ unlock:
        UNLOCK_ZONE(zone);
 }
 
+static bool
+has_pf(const isc_sockaddr_t *addresses, size_t count, int pf) {
+       for (size_t i = 0; i < count; i++) {
+               if (isc_sockaddr_pf(&addresses[i]) == pf) {
+                       return (true);
+               }
+       }
+       return (false);
+}
+
+static void
+report_no_active_addresses(dns_zone_t *zone, const isc_sockaddr_t *addresses,
+                          size_t count, const char *what) {
+       if (isc_net_probeipv4() == ISC_R_DISABLED) {
+               if (!has_pf(addresses, count, AF_INET6)) {
+                       dns_zone_log(zone, ISC_LOG_NOTICE,
+                                    "IPv4 disabled and no IPv6 %s", what);
+               }
+       } else if (isc_net_probeipv6() == ISC_R_DISABLED) {
+               if (!has_pf(addresses, count, AF_INET)) {
+                       dns_zone_log(zone, ISC_LOG_NOTICE,
+                                    "IPv6 disabled and no IPv4 %s", what);
+               }
+       }
+}
+
 void
 dns_zone_setprimaries(dns_zone_t *zone, const isc_sockaddr_t *primaries,
                      dns_name_t **keynames, dns_name_t **tlsnames,
@@ -6308,6 +6334,8 @@ dns_zone_setprimaries(dns_zone_t *zone, const isc_sockaddr_t *primaries,
                goto unlock;
        }
 
+       report_no_active_addresses(zone, primaries, count, "primaries");
+
        /*
         * primariesok must contain count elements
         */