From: Matthijs Mekking Date: Tue, 11 May 2021 12:43:02 +0000 (+0200) Subject: Make "primaries" config parsing generic X-Git-Tag: v9.17.16~8^2~14 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6040c71478557823385432eb959611f68e04c64c;p=thirdparty%2Fbind9.git Make "primaries" config parsing generic Make the code to parse "primaries" configuration more generic so it can be reused for "parental-agents". --- diff --git a/bin/named/config.c b/bin/named/config.c index 86896efc51a..f4b2d4e7bde 100644 --- a/bin/named/config.c +++ b/bin/named/config.c @@ -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; diff --git a/bin/named/include/named/config.h b/bin/named/include/named/config.h index 7e005a29a1f..27dc30aac6c 100644 --- a/bin/named/include/named/config.h +++ b/bin/named/include/named/config.h @@ -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, diff --git a/bin/named/server.c b/bin/named/server.c index 517bbac9d66..42f82ba3aa9 100644 --- a/bin/named/server.c +++ b/bin/named/server.c @@ -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"); diff --git a/bin/named/zoneconf.c b/bin/named/zoneconf.c index 2e05cee6d4d..9956e351fa8 100644 --- a/bin/named/zoneconf.c +++ b/bin/named/zoneconf.c @@ -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); diff --git a/lib/dns/zone.c b/lib/dns/zone.c index 3d249675771..46a0aff8f94 100644 --- a/lib/dns/zone.c +++ b/lib/dns/zone.c @@ -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));