]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
refactor dns_clientinfo_init(); use separate function to set ECS
authorEvan Hunt <each@isc.org>
Mon, 31 Jan 2022 20:10:29 +0000 (12:10 -0800)
committerEvan Hunt <each@isc.org>
Wed, 8 Feb 2023 07:48:22 +0000 (23:48 -0800)
Instead of using an extra rarely-used paramater to dns_clientinfo_init()
to set ECS information for a client, this commit adds a function
dns_clientinfo_setecs() which can be called only when ECS is needed.

lib/dns/clientinfo.c
lib/dns/include/dns/clientinfo.h
lib/ns/query.c
lib/ns/update.c

index fe81d591c6822a91a8214c2a4be42b385ce681fa..1ea5e7d69df2f9da070dd82e8ccee28a9871d9cc 100644 (file)
@@ -25,11 +25,15 @@ dns_clientinfomethods_init(dns_clientinfomethods_t *methods,
 }
 
 void
-dns_clientinfo_init(dns_clientinfo_t *ci, void *data, dns_ecs_t *ecs,
-                   void *versionp) {
+dns_clientinfo_init(dns_clientinfo_t *ci, void *data, void *versionp) {
        ci->version = DNS_CLIENTINFO_VERSION;
        ci->data = data;
        ci->dbversion = versionp;
+       dns_ecs_init(&ci->ecs);
+}
+
+void
+dns_clientinfo_setecs(dns_clientinfo_t *ci, dns_ecs_t *ecs) {
        if (ecs != NULL) {
                ci->ecs = *ecs;
        } else {
index 45e2dc5671477d952395b21d9455ed6e9f088ac8..b6dd601a841c46878484f21f9e39f174dcd4f66f 100644 (file)
@@ -86,7 +86,17 @@ dns_clientinfomethods_init(dns_clientinfomethods_t  *methods,
                           dns_clientinfo_sourceip_t sourceip);
 
 void
-dns_clientinfo_init(dns_clientinfo_t *ci, void *data, dns_ecs_t *ecs,
-                   void *versionp);
+dns_clientinfo_init(dns_clientinfo_t *ci, void *data, void *versionp);
+/*%<
+ * Initialize a clientinfo object, setting the data to 'data' and the
+ * database version to 'versionp'. ECS data is initialized to 0/0/0.
+ */
+
+void
+dns_clientinfo_setecs(dns_clientinfo_t *ci, dns_ecs_t *ecs);
+/*%<
+ * Set the ECS client data associated with a clientinfo object 'ci'.
+ * If 'ecs' is NULL, initialize ci->ecs to 0/0/0; otherwise copy it.
+ */
 
 ISC_LANG_ENDDECLS
index 13239cb5819afd3cff524c739b94b65a5cfb04e6..bf918b7e27f4977ea455e607fa645efc975cc9af 100644 (file)
@@ -1396,7 +1396,8 @@ query_getdb(ns_client_t *client, dns_name_t *name, dns_rdatatype_t qtype,
                dns_db_t *tdbp;
 
                dns_clientinfomethods_init(&cm, ns_client_sourceip);
-               dns_clientinfo_init(&ci, client, &client->ecs, NULL);
+               dns_clientinfo_init(&ci, client, NULL);
+               dns_clientinfo_setecs(&ci, &client->ecs);
 
                tdbp = NULL;
                tresult = dns_view_searchdlz(client->view, name, zonelabels,
@@ -1538,7 +1539,7 @@ query_additionalauthfind(dns_db_t *db, dns_dbversion_t *version,
        isc_result_t result;
 
        dns_clientinfomethods_init(&cm, ns_client_sourceip);
-       dns_clientinfo_init(&ci, client, NULL, NULL);
+       dns_clientinfo_init(&ci, client, NULL);
 
        /*
         * Since we are looking for authoritative data, we do not set
@@ -1702,7 +1703,7 @@ query_additional_cb(void *arg, const dns_name_t *name, dns_rdatatype_t qtype,
        CTRACE(ISC_LOG_DEBUG(3), "query_additional_cb");
 
        dns_clientinfomethods_init(&cm, ns_client_sourceip);
-       dns_clientinfo_init(&ci, client, NULL, NULL);
+       dns_clientinfo_init(&ci, client, NULL);
 
        /*
         * We treat type A additional section processing as if it
@@ -2278,7 +2279,7 @@ mark_secure(ns_client_t *client, dns_db_t *db, dns_name_t *name,
        rdataset->trust = dns_trust_secure;
        sigrdataset->trust = dns_trust_secure;
        dns_clientinfomethods_init(&cm, ns_client_sourceip);
-       dns_clientinfo_init(&ci, client, NULL, NULL);
+       dns_clientinfo_init(&ci, client, NULL);
 
        /*
         * Save the updated secure state.  Ignore failures.
@@ -2315,7 +2316,7 @@ get_key(ns_client_t *client, dns_db_t *db, dns_rdata_rrsig_t *rrsig,
        dns_clientinfo_t ci;
 
        dns_clientinfomethods_init(&cm, ns_client_sourceip);
-       dns_clientinfo_init(&ci, client, NULL, NULL);
+       dns_clientinfo_init(&ci, client, NULL);
 
        if (!dns_rdataset_isassociated(keyrdataset)) {
                result = dns_db_findnodeext(db, &rrsig->signer, false, &cm, &ci,
@@ -2599,9 +2600,10 @@ stale_refresh_aftermath(ns_client_t *client, isc_result_t result) {
                qctx_init(client, NULL, 0, &qctx);
 
                dns_clientinfomethods_init(&cm, ns_client_sourceip);
-               dns_clientinfo_init(
-                       &ci, qctx.client,
-                       HAVEECS(qctx.client) ? &qctx.client->ecs : NULL, NULL);
+               dns_clientinfo_init(&ci, qctx.client, NULL);
+               if (HAVEECS(qctx.client)) {
+                       dns_clientinfo_setecs(&ci, &qctx.client->ecs);
+               }
 
                result = qctx_prepare_buffers(&qctx, &buffer);
                if (result != ISC_R_SUCCESS) {
@@ -3033,7 +3035,7 @@ rpz_rrset_find(ns_client_t *client, dns_name_t *name, dns_rdatatype_t type,
        node = NULL;
        found = dns_fixedname_initname(&fixed);
        dns_clientinfomethods_init(&cm, ns_client_sourceip);
-       dns_clientinfo_init(&ci, client, NULL, NULL);
+       dns_clientinfo_init(&ci, client, NULL);
        result = dns_db_findext(*dbp, name, version, type, options, client->now,
                                &node, found, &cm, &ci, *rdatasetp, NULL);
        if (result == DNS_R_DELEGATION && is_zone && USECACHE(client)) {
@@ -3180,7 +3182,7 @@ rpz_find_p(ns_client_t *client, dns_name_t *self_name, dns_rdatatype_t qtype,
        CTRACE(ISC_LOG_DEBUG(3), "rpz_find_p");
 
        dns_clientinfomethods_init(&cm, ns_client_sourceip);
-       dns_clientinfo_init(&ci, client, NULL, NULL);
+       dns_clientinfo_init(&ci, client, NULL);
 
        /*
         * Try to find either a CNAME or the type of record demanded by the
@@ -4830,7 +4832,7 @@ query_findclosestnsec3(dns_name_t *qname, dns_db_t *db,
        dns_name_clone(qname, &name);
        labels = dns_name_countlabels(&name);
        dns_clientinfomethods_init(&cm, ns_client_sourceip);
-       dns_clientinfo_init(&ci, client, NULL, NULL);
+       dns_clientinfo_init(&ci, client, NULL);
 
        /*
         * Map unknown algorithm to known value.
@@ -5033,7 +5035,8 @@ redirect(ns_client_t *client, dns_name_t *name, dns_rdataset_t *rdataset,
        dns_rdataset_init(&trdataset);
 
        dns_clientinfomethods_init(&cm, ns_client_sourceip);
-       dns_clientinfo_init(&ci, client, &client->ecs, NULL);
+       dns_clientinfo_init(&ci, client, NULL);
+       dns_clientinfo_setecs(&ci, &client->ecs);
 
        if (WANTDNSSEC(client) && dns_db_iszone(*dbp) && dns_db_issecure(*dbp))
        {
@@ -5171,7 +5174,8 @@ redirect2(ns_client_t *client, dns_name_t *name, dns_rdataset_t *rdataset,
        dns_rdataset_init(&trdataset);
 
        dns_clientinfomethods_init(&cm, ns_client_sourceip);
-       dns_clientinfo_init(&ci, client, &client->ecs, NULL);
+       dns_clientinfo_init(&ci, client, NULL);
+       dns_clientinfo_setecs(&ci, &client->ecs);
 
        if (WANTDNSSEC(client) && dns_db_iszone(*dbp) && dns_db_issecure(*dbp))
        {
@@ -5893,9 +5897,10 @@ query_lookup(query_ctx_t *qctx) {
        CALL_HOOK(NS_QUERY_LOOKUP_BEGIN, qctx);
 
        dns_clientinfomethods_init(&cm, ns_client_sourceip);
-       dns_clientinfo_init(&ci, qctx->client,
-                           HAVEECS(qctx->client) ? &qctx->client->ecs : NULL,
-                           NULL);
+       dns_clientinfo_init(&ci, qctx->client, NULL);
+       if (HAVEECS(qctx->client)) {
+               dns_clientinfo_setecs(&ci, &qctx->client->ecs);
+       }
 
        /*
         * We'll need some resources...
@@ -8631,7 +8636,7 @@ query_notfound(query_ctx_t *qctx) {
                dns_clientinfo_t ci;
 
                dns_clientinfomethods_init(&cm, ns_client_sourceip);
-               dns_clientinfo_init(&ci, qctx->client, NULL, NULL);
+               dns_clientinfo_init(&ci, qctx->client, NULL);
 
                dns_db_attach(qctx->view->hints, &qctx->db);
                result = dns_db_findext(qctx->db, dns_rootname, NULL,
@@ -10036,7 +10041,7 @@ query_coveringnsec(query_ctx_t *qctx) {
        nowild = dns_fixedname_initname(&fnowild);
 
        dns_clientinfomethods_init(&cm, ns_client_sourceip);
-       dns_clientinfo_init(&ci, qctx->client, NULL, NULL);
+       dns_clientinfo_init(&ci, qctx->client, NULL);
 
        /*
         * All signer names must be the same to accept.
@@ -10699,25 +10704,18 @@ static isc_result_t
 query_addsoa(query_ctx_t *qctx, unsigned int override_ttl,
             dns_section_t section) {
        ns_client_t *client = qctx->client;
-       dns_name_t *name;
-       dns_dbnode_t *node;
-       isc_result_t result, eresult;
+       dns_name_t *name = NULL;
+       dns_dbnode_t *node = NULL;
+       isc_result_t result, eresult = ISC_R_SUCCESS;
        dns_rdataset_t *rdataset = NULL, *sigrdataset = NULL;
        dns_rdataset_t **sigrdatasetp = NULL;
        dns_clientinfomethods_t cm;
        dns_clientinfo_t ci;
 
        CTRACE(ISC_LOG_DEBUG(3), "query_addsoa");
-       /*
-        * Initialization.
-        */
-       eresult = ISC_R_SUCCESS;
-       name = NULL;
-       rdataset = NULL;
-       node = NULL;
 
        dns_clientinfomethods_init(&cm, ns_client_sourceip);
-       dns_clientinfo_init(&ci, client, NULL, NULL);
+       dns_clientinfo_init(&ci, client, NULL);
 
        /*
         * Don't add the SOA record for test which set "-T nosoa".
@@ -10852,7 +10850,7 @@ query_addns(query_ctx_t *qctx) {
        fname = dns_fixedname_initname(&foundname);
 
        dns_clientinfomethods_init(&cm, ns_client_sourceip);
-       dns_clientinfo_init(&ci, client, NULL, NULL);
+       dns_clientinfo_init(&ci, client, NULL);
 
        /*
         * Get resources and make 'name' be the database origin.
@@ -10936,7 +10934,7 @@ query_addbestns(query_ctx_t *qctx) {
        CTRACE(ISC_LOG_DEBUG(3), "query_addbestns");
 
        dns_clientinfomethods_init(&cm, ns_client_sourceip);
-       dns_clientinfo_init(&ci, client, NULL, NULL);
+       dns_clientinfo_init(&ci, client, NULL);
 
        /*
         * Find the right database.
@@ -11133,7 +11131,7 @@ query_addwildcardproof(query_ctx_t *qctx, bool ispositive, bool nodata) {
        CTRACE(ISC_LOG_DEBUG(3), "query_addwildcardproof");
 
        dns_clientinfomethods_init(&cm, ns_client_sourceip);
-       dns_clientinfo_init(&ci, client, NULL, NULL);
+       dns_clientinfo_init(&ci, client, NULL);
 
        /*
         * If a name has been specifically flagged as needing
index 368538f555e6a32c8b231bf89ee7fe893dd07d81..02202842e93b28127600633bbf9bf00ad6e6b372 100644 (file)
@@ -599,7 +599,7 @@ foreach_rrset(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
         * different from the current version
         */
        dns_db_currentversion(db, &oldver);
-       dns_clientinfo_init(&ci, NULL, NULL, (ver != oldver) ? ver : NULL);
+       dns_clientinfo_init(&ci, NULL, (ver != oldver) ? ver : NULL);
        dns_db_closeversion(db, &oldver, false);
 
        node = NULL;
@@ -690,7 +690,7 @@ foreach_rr(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
         * different from the current version
         */
        dns_db_currentversion(db, &oldver);
-       dns_clientinfo_init(&ci, NULL, NULL, (ver != oldver) ? ver : NULL);
+       dns_clientinfo_init(&ci, NULL, (ver != oldver) ? ver : NULL);
        dns_db_closeversion(db, &oldver, false);
 
        if (type == dns_rdatatype_any) {