]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Make "primaries" config parsing generic
authorMatthijs Mekking <matthijs@isc.org>
Tue, 11 May 2021 12:43:02 +0000 (14:43 +0200)
committerMatthijs Mekking <matthijs@isc.org>
Wed, 30 Jun 2021 15:28:48 +0000 (17:28 +0200)
Make the code to parse "primaries" configuration more generic so
it can be reused for "parental-agents".

bin/named/config.c
bin/named/include/named/config.h
bin/named/server.c
bin/named/zoneconf.c
lib/dns/zone.c

index 86896efc51af743aed19dc819e72e25226080002..f4b2d4e7bde524b8353b46ce1943e0784940da5f 100644 (file)
@@ -570,8 +570,8 @@ named_config_putiplist(isc_mem_t *mctx, isc_sockaddr_t **addrsp,
 }
 
 static isc_result_t
-getprimariesdef(const cfg_obj_t *cctx, const char *list, const char *name,
-               const cfg_obj_t **ret) {
+getremotesdef(const cfg_obj_t *cctx, const char *list, const char *name,
+             const cfg_obj_t **ret) {
        isc_result_t result;
        const cfg_obj_t *obj = NULL;
        const cfg_listelt_t *elt;
@@ -598,15 +598,20 @@ getprimariesdef(const cfg_obj_t *cctx, const char *list, const char *name,
 }
 
 isc_result_t
-named_config_getprimariesdef(const cfg_obj_t *cctx, const char *name,
-                            const cfg_obj_t **ret) {
+named_config_getremotesdef(const cfg_obj_t *cctx, const char *list,
+                          const char *name, const cfg_obj_t **ret) {
        isc_result_t result;
 
-       result = getprimariesdef(cctx, "primaries", name, ret);
-       if (result != ISC_R_SUCCESS) {
-               result = getprimariesdef(cctx, "masters", name, ret);
+       if (strcmp(list, "parental-agents") == 0) {
+               return (getremotesdef(cctx, list, name, ret));
+       } else if (strcmp(list, "primaries") == 0) {
+               result = getremotesdef(cctx, list, name, ret);
+               if (result != ISC_R_SUCCESS) {
+                       result = getremotesdef(cctx, "masters", name, ret);
+               }
+               return (result);
        }
-       return (result);
+       return (ISC_R_NOTFOUND);
 }
 
 static isc_result_t
@@ -675,8 +680,9 @@ named_config_getname(isc_mem_t *mctx, const cfg_obj_t *obj,
        }
 
 isc_result_t
-named_config_getipandkeylist(const cfg_obj_t *config, const cfg_obj_t *list,
-                            isc_mem_t *mctx, dns_ipkeylist_t *ipkl) {
+named_config_getipandkeylist(const cfg_obj_t *config, const char *listtype,
+                            const cfg_obj_t *list, isc_mem_t *mctx,
+                            dns_ipkeylist_t *ipkl) {
        uint32_t addrcount = 0, dscpcount = 0, keycount = 0, tlscount = 0,
                 i = 0;
        uint32_t listcount = 0, l = 0, j;
@@ -788,11 +794,11 @@ resume:
                                continue;
                        }
                        list = NULL;
-                       tresult = named_config_getprimariesdef(config, listname,
-                                                              &list);
+                       tresult = named_config_getremotesdef(config, listtype,
+                                                            listname, &list);
                        if (tresult == ISC_R_NOTFOUND) {
                                cfg_obj_log(addr, named_g_lctx, ISC_LOG_ERROR,
-                                           "primaries \"%s\" not found",
+                                           "%s \"%s\" not found", listtype,
                                            listname);
 
                                result = tresult;
index 7e005a29a1fac9a336e1cb8a9e1badae09264523..27dc30aac6c5750947487c3a03044648d5f325cf 100644 (file)
@@ -59,12 +59,13 @@ named_config_putiplist(isc_mem_t *mctx, isc_sockaddr_t **addrsp,
                       isc_dscp_t **dscpsp, uint32_t count);
 
 isc_result_t
-named_config_getprimariesdef(const cfg_obj_t *cctx, const char *name,
-                            const cfg_obj_t **ret);
+named_config_getremotesdef(const cfg_obj_t *cctx, const char *list,
+                          const char *name, const cfg_obj_t **ret);
 
 isc_result_t
-named_config_getipandkeylist(const cfg_obj_t *config, const cfg_obj_t *list,
-                            isc_mem_t *mctx, dns_ipkeylist_t *ipkl);
+named_config_getipandkeylist(const cfg_obj_t *config, const char *listtype,
+                            const cfg_obj_t *list, isc_mem_t *mctx,
+                            dns_ipkeylist_t *ipkl);
 
 isc_result_t
 named_config_getport(const cfg_obj_t *config, const char *type,
index 517bbac9d66c0fc6ff6790ab4af54fbcd8003efd..42f82ba3aa9862a9b25aca87b8858ff0032c46ce 100644 (file)
@@ -3088,8 +3088,8 @@ configure_catz_zone(dns_view_t *view, const cfg_obj_t *config,
 
        obj = cfg_tuple_get(catz_obj, "default-masters");
        if (obj != NULL && cfg_obj_istuple(obj)) {
-               result = named_config_getipandkeylist(config, obj, view->mctx,
-                                                     &opts->masters);
+               result = named_config_getipandkeylist(
+                       config, "primaries", obj, view->mctx, &opts->masters);
        }
 
        obj = cfg_tuple_get(catz_obj, "in-memory");
index 2e05cee6d4d4c689d90553b34499e4a5829852d8..9956e351fa86ed6e0455e52b6151ab5b71f89d24 100644 (file)
@@ -1308,8 +1308,8 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
                        dns_ipkeylist_t ipkl;
                        dns_ipkeylist_init(&ipkl);
 
-                       RETERR(named_config_getipandkeylist(config, obj, mctx,
-                                                           &ipkl));
+                       RETERR(named_config_getipandkeylist(config, "primaries",
+                                                           obj, mctx, &ipkl));
                        result = dns_zone_setalsonotify(zone, ipkl.addrs,
                                                        ipkl.dscps, ipkl.keys,
                                                        ipkl.tlss, ipkl.count);
@@ -1904,8 +1904,8 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
                if (obj == NULL && ztype == dns_zone_mirror &&
                    dns_name_equal(dns_zone_getorigin(zone), dns_rootname))
                {
-                       result = named_config_getprimariesdef(
-                               named_g_config,
+                       result = named_config_getremotesdef(
+                               named_g_config, "primaries",
                                DEFAULT_IANA_ROOT_ZONE_PRIMARIES, &obj);
                        RETERR(result);
                }
@@ -1913,8 +1913,8 @@ named_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
                        dns_ipkeylist_t ipkl;
                        dns_ipkeylist_init(&ipkl);
 
-                       RETERR(named_config_getipandkeylist(config, obj, mctx,
-                                                           &ipkl));
+                       RETERR(named_config_getipandkeylist(config, "primaries",
+                                                           obj, mctx, &ipkl));
                        result = dns_zone_setprimaries(mayberaw, ipkl.addrs,
                                                       ipkl.keys, ipkl.tlss,
                                                       ipkl.count);
index 3d249675771fc83563675c67413a8be63c1b45c6..46a0aff8f94e6528fee23fcba5355d705649c158 100644 (file)
@@ -6012,9 +6012,9 @@ same_names(dns_name_t *const *oldlist, dns_name_t *const *newlist,
 }
 
 static void
-clear_primarieslist(isc_sockaddr_t **addrsp, isc_dscp_t **dscpsp,
-                   dns_name_t ***keynamesp, dns_name_t ***tlsnamesp,
-                   unsigned int *countp, isc_mem_t *mctx) {
+clear_serverslist(isc_sockaddr_t **addrsp, isc_dscp_t **dscpsp,
+                 dns_name_t ***keynamesp, dns_name_t ***tlsnamesp,
+                 unsigned int *countp, isc_mem_t *mctx) {
        unsigned int count;
        isc_sockaddr_t *addrs;
        isc_dscp_t *dscps;
@@ -6074,11 +6074,11 @@ clear_primarieslist(isc_sockaddr_t **addrsp, isc_dscp_t **dscpsp,
 }
 
 static isc_result_t
-set_primarieslist(unsigned int count, const isc_sockaddr_t *addrs,
-                 isc_sockaddr_t **newaddrsp, const isc_dscp_t *dscp,
-                 isc_dscp_t **newdscpp, dns_name_t **keynames,
-                 dns_name_t ***newkeynamesp, dns_name_t **tlsnames,
-                 dns_name_t ***newtlsnamesp, isc_mem_t *mctx) {
+set_serverslist(unsigned int count, const isc_sockaddr_t *addrs,
+               isc_sockaddr_t **newaddrsp, const isc_dscp_t *dscp,
+               isc_dscp_t **newdscpp, dns_name_t **keynames,
+               dns_name_t ***newkeynamesp, dns_name_t **tlsnames,
+               dns_name_t ***newtlsnamesp, isc_mem_t *mctx) {
        isc_sockaddr_t *newaddrs = NULL;
        isc_dscp_t *newdscp = NULL;
        dns_name_t **newkeynames = NULL;
@@ -6180,9 +6180,9 @@ dns_zone_setalsonotify(dns_zone_t *zone, const isc_sockaddr_t *notify,
                goto unlock;
        }
 
-       clear_primarieslist(&zone->notify, &zone->notifydscp,
-                           &zone->notifykeynames, &zone->notifytlsnames,
-                           &zone->notifycnt, zone->mctx);
+       clear_serverslist(&zone->notify, &zone->notifydscp,
+                         &zone->notifykeynames, &zone->notifytlsnames,
+                         &zone->notifycnt, zone->mctx);
 
        if (count == 0) {
                goto unlock;
@@ -6191,9 +6191,9 @@ dns_zone_setalsonotify(dns_zone_t *zone, const isc_sockaddr_t *notify,
        /*
         * Set up the notify and notifykey lists
         */
-       result = set_primarieslist(count, notify, &newaddrs, dscps, &newdscps,
-                                  keynames, &newkeynames, tlsnames,
-                                  &newtlsnames, zone->mctx);
+       result = set_serverslist(count, notify, &newaddrs, dscps, &newdscps,
+                                keynames, &newkeynames, tlsnames, &newtlsnames,
+                                zone->mctx);
        if (result != ISC_R_SUCCESS) {
                goto unlock;
        }
@@ -6257,9 +6257,9 @@ dns_zone_setprimaries(dns_zone_t *zone, const isc_sockaddr_t *masters,
                            zone->masterscnt * sizeof(bool));
                zone->mastersok = NULL;
        }
-       clear_primarieslist(&zone->masters, &zone->masterdscps,
-                           &zone->masterkeynames, &zone->mastertlsnames,
-                           &zone->masterscnt, zone->mctx);
+       clear_serverslist(&zone->masters, &zone->masterdscps,
+                         &zone->masterkeynames, &zone->mastertlsnames,
+                         &zone->masterscnt, zone->mctx);
        /*
         * If count == 0, don't allocate any space for masters, mastersok or
         * keynames so internally, those pointers are NULL if count == 0
@@ -6279,9 +6279,9 @@ dns_zone_setprimaries(dns_zone_t *zone, const isc_sockaddr_t *masters,
        /*
         * Now set up the primaries and primary key lists
         */
-       result = set_primarieslist(count, masters, &newaddrs, NULL, &newdscps,
-                                  keynames, &newkeynames, tlsnames,
-                                  &newtlsnames, zone->mctx);
+       result = set_serverslist(count, masters, &newaddrs, NULL, &newdscps,
+                                keynames, &newkeynames, tlsnames, &newtlsnames,
+                                zone->mctx);
        INSIST(newdscps == NULL);
        if (result != ISC_R_SUCCESS) {
                isc_mem_put(zone->mctx, newok, count * sizeof(*newok));