]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
[master] address regression
authorEvan Hunt <each@isc.org>
Wed, 27 May 2015 02:11:08 +0000 (19:11 -0700)
committerEvan Hunt <each@isc.org>
Wed, 27 May 2015 02:11:08 +0000 (19:11 -0700)
4126. [bug] Addressed a regression introduced in change #4121.
[RT #39611]

22 files changed:
CHANGES
bin/dig/dighost.c
bin/named/query.c
bin/named/xfrout.c
bin/nsupdate/nsupdate.c
bin/tests/dst/gsstest.c
bin/tests/sig0_test.c
bin/tests/system/pipelined/pipequeries.c
bin/tools/mdig.c
lib/dns/acache.c
lib/dns/client.c
lib/dns/dnssec.c
lib/dns/include/dns/rpz.h
lib/dns/message.c
lib/dns/resolver.c
lib/dns/rpz.c
lib/dns/tkey.c
lib/dns/tsig.c
lib/dns/xfrin.c
lib/dns/zone.c
lib/samples/nsprobe.c
lib/samples/sample-request.c

diff --git a/CHANGES b/CHANGES
index 423f11e413467778480eb00b1856763a22a7052b..a8df64d59e156bc8c9667ce1be76b6d7c14f8da1 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,5 +1,9 @@
+4126.  [bug]           Addressed a regression introduced in change #4121.
+                       [RT #39611]
+
 4125.  [test]          Added tests for dig, renamed delv test to digdelv.
                        [RT #39490]
+
 4124.  [func]          Log errors or warnings encountered when parsing the
                        internal default configuration.  Clarify the logging
                        of errors and warnings encountered in rndc
index 701964dd9486428272e6e33b573ee8fce0565db4..88ed663924e1535bbffa8017f1e9a9cb7f772df1 100644 (file)
@@ -1607,7 +1607,6 @@ add_question(dns_message_t *message, dns_name_t *name,
        rdataset = NULL;
        result = dns_message_gettemprdataset(message, &rdataset);
        check_result(result, "dns_message_gettemprdataset()");
-       dns_rdataset_init(rdataset);
        dns_rdataset_makequestion(rdataset, rdclass, rdtype);
        ISC_LIST_APPEND(name->list, rdataset, link);
 }
@@ -2164,7 +2163,6 @@ insert_soa(dig_lookup_t *lookup) {
        rdatalist->rdclass = lookup->rdclass;
        ISC_LIST_APPEND(rdatalist->rdata, rdata, link);
 
-       dns_rdataset_init(rdataset);
        dns_rdatalist_tordataset(rdatalist, rdataset);
 
        result = dns_message_gettempname(lookup->sendmsg, &soaname);
index fa03a16a298c2346d01d624157b1844e8cf1ded7..b23d7521d8dab36fbdb8c76dc8f28e120a09ed4b 100644 (file)
@@ -595,7 +595,6 @@ query_newrdataset(ns_client_t *client) {
                 "dns_message_gettemprdataset failed: done");
                return (NULL);
        }
-       dns_rdataset_init(rdataset);
 
        CTRACE(ISC_LOG_DEBUG(3), "query_newrdataset: done");
        return (rdataset);
@@ -2347,7 +2346,6 @@ query_dns64(ns_client_t *client, dns_name_t **namep, dns_rdataset_t *rdataset,
        if (result != ISC_R_SUCCESS)
                goto cleanup;
 
-       dns_rdataset_init(dns64_rdataset);
        dns_rdatalist_init(dns64_rdatalist);
        dns64_rdatalist->rdclass = dns_rdataclass_in;
        dns64_rdatalist->type = dns_rdatatype_aaaa;
@@ -2511,7 +2509,6 @@ query_filter64(ns_client_t *client, dns_name_t **namep,
        if (result != ISC_R_SUCCESS)
                goto cleanup;
 
-       dns_rdataset_init(myrdataset);
        dns_rdatalist_init(myrdatalist);
        myrdatalist->rdclass = dns_rdataclass_in;
        myrdatalist->type = dns_rdatatype_aaaa;
@@ -2939,7 +2936,6 @@ query_add_cname(ns_client_t *client, dns_name_t *qname, dns_name_t *tname,
                dns_message_puttemprdata(client->message, &rdata);
                return (result);
        }
-       dns_rdataset_init(rdataset);
        rdatalist->type = dns_rdatatype_cname;
        rdatalist->rdclass = client->message->rdclass;
        rdatalist->ttl = ttl;
@@ -4648,8 +4644,14 @@ rpz_rewrite_ip(ns_client_t *client, const isc_netaddr_t *netaddr,
                 * In case num_zones has changed since zbits was
                 * originally calculated
                 */
-               if (rpz_num >= rpzs->p.num_zones)
-                       break;
+               if (rpz_num >= rpzs->p.num_zones) {
+                       CTRACE(ISC_LOG_ERROR,
+                              "rpz_rewrite_ip: rpz_num is higher than "
+                              "number of zones");
+                       rpz_clean(&p_zone, &p_db, &p_node, p_rdatasetp);
+                       st->m.policy = DNS_RPZ_POLICY_ERROR;
+                       return (DNS_R_SERVFAIL);
+               }
 
                /*
                 * Do not try applying policy zones that cannot replace a
@@ -4975,8 +4977,14 @@ rpz_rewrite_name(ns_client_t *client, dns_name_t *trig_name,
                 * In case num_zones has changed since the 'have'
                 * originally calculated
                 */
-               if (rpz_num >= rpzs->p.num_zones)
-                       break;
+               if (rpz_num >= rpzs->p.num_zones) {
+                       CTRACE(ISC_LOG_ERROR,
+                              "rpz_rewrite_name: rpz_num is higher than "
+                              "number of zones");
+                       rpz_clean(&p_zone, &p_db, &p_node, rdatasetp);
+                       st->m.policy = DNS_RPZ_POLICY_ERROR;
+                       return (DNS_R_SERVFAIL);
+               }
 
                /*
                 * Do not check policy zones that cannot replace a previously
@@ -5147,7 +5155,7 @@ rpz_rewrite(ns_client_t *client, dns_rdatatype_t qtype,
        LOCK(&rpzs->maint_lock);
        if (rpzs->p.num_zones == 0 ||
            (!RECURSIONOK(client) && rpzs->p.no_rd_ok == 0) ||
-           !rpz_ck_dnssec(client, result, ordataset, osigset))
+           !rpz_ck_dnssec(client, qresult, ordataset, osigset))
        {
                UNLOCK(&rpzs->maint_lock);
                return (DNS_R_DISALLOWED);
@@ -5166,7 +5174,6 @@ rpz_rewrite(ns_client_t *client, dns_rdatatype_t qtype,
                st->m.type = DNS_RPZ_TYPE_BAD;
                st->m.policy = DNS_RPZ_POLICY_MISS;
                st->m.ttl = ~0;
-               st->m.prefix = 0;
                memset(&st->r, 0, sizeof(st->r));
                memset(&st->q, 0, sizeof(st->q));
                dns_fixedname_init(&st->_p_namef);
@@ -6502,15 +6509,6 @@ query_find(ns_client_t *client, dns_fetchevent_t *event, dns_rdatatype_t qtype)
                {
                        CTRACE(ISC_LOG_DEBUG(3), "resume from RPZ recursion");
 
-                       /*
-                        * Has response policy changed out from under us?
-                        */
-                       if (rpz_st->rpz_ver != client->view->rpzs->rpz_ver) {
-                               CTRACE(ISC_LOG_ERROR,
-                                      "query_find: RPZ settings out of date");
-                               QUERY_ERROR(DNS_R_SERVFAIL);
-                               goto cleanup;
-                       }
                        is_zone = rpz_st->q.is_zone;
                        authoritative = rpz_st->q.authoritative;
                        zone = rpz_st->q.zone;
@@ -6585,6 +6583,20 @@ query_find(ns_client_t *client, dns_fetchevent_t *event, dns_rdatatype_t qtype)
                        dns64_exclude = ISC_TRUE;
                }
 
+               if (rpz_st != NULL &&
+                   (rpz_st->state & DNS_RPZ_RECURSING) != 0)
+               {
+                       /*
+                        * Has response policy changed out from under us?
+                        */
+                       if (rpz_st->rpz_ver != client->view->rpzs->rpz_ver) {
+                               CTRACE(ISC_LOG_ERROR,
+                                      "query_find: RPZ settings out of date");
+                               QUERY_ERROR(DNS_R_SERVFAIL);
+                               goto cleanup;
+                       }
+               }
+
                /*
                 * We'll need some resources...
                 */
index ad1204beff52b81984a30f480e992593a23a3ea9..2fa495dad3096628452f81f60334301648dec907 100644 (file)
@@ -1351,7 +1351,6 @@ sendstream(xfrout_ctx_t *xfr) {
                        result = dns_message_gettemprdataset(msg, &qrdataset);
                        if (result != ISC_R_SUCCESS)
                                goto failure;
-                       dns_rdataset_init(qrdataset);
                        dns_rdataset_makequestion(qrdataset,
                                        xfr->client->message->rdclass,
                                        xfr->qtype);
@@ -1466,7 +1465,6 @@ sendstream(xfrout_ctx_t *xfr) {
                result = dns_message_gettemprdataset(msg, &msgrds);
                if (result != ISC_R_SUCCESS)
                        goto failure;
-               dns_rdataset_init(msgrds);
                result = dns_rdatalist_tordataset(msgrdl, msgrds);
                INSIST(result == ISC_R_SUCCESS);
 
index 867deabd2c00e627383067e8905dcb6f4fb8e07d..eca42b4f8b9a01f29c1cfd81294ee6640cb0f9e1 100644 (file)
@@ -1372,7 +1372,6 @@ make_prereq(char *cmdline, isc_boolean_t ispositive, isc_boolean_t isrrset) {
        rdata->rdclass = rdatalist->rdclass;
        rdata->type = rdatatype;
        ISC_LIST_APPEND(rdatalist->rdata, rdata, link);
-       dns_rdataset_init(rdataset);
        dns_rdatalist_tordataset(rdatalist, rdataset);
        ISC_LIST_INIT(name->list);
        ISC_LIST_APPEND(name->list, rdataset, link);
@@ -1895,7 +1894,6 @@ update_addordelete(char *cmdline, isc_boolean_t isdelete) {
        rdatalist->covers = rdatatype;
        rdatalist->ttl = (dns_ttl_t)ttl;
        ISC_LIST_APPEND(rdatalist->rdata, rdata, link);
-       dns_rdataset_init(rdataset);
        dns_rdatalist_tordataset(rdatalist, rdataset);
        ISC_LIST_INIT(name->list);
        ISC_LIST_APPEND(name->list, rdataset, link);
index e57a8b58ff34e59d65909af57b1939f57b7ff184..e64d80d1e4812d80c32888415f88019dfb9feaeb 100644 (file)
@@ -236,7 +236,6 @@ sendquery(isc_task_t *task, isc_event_t *event)
 
        dns_name_init(qname, NULL);
        dns_name_clone(dns_fixedname_name(&queryname), qname);
-       dns_rdataset_init(qrdataset);
        dns_rdataset_makequestion(qrdataset, dns_rdataclass_in,
                                  dns_rdatatype_a);
        ISC_LIST_APPEND(qname->list, qrdataset, link);
index d07aecb1bfa21c3b1cd8bf1a0d13d54be04b88d7..edbc14f36975d79ec3ed46312e652863ddf1bc1e 100644 (file)
@@ -149,7 +149,6 @@ buildquery(void) {
 
        result = dns_message_gettemprdataset(query, &question);
        CHECK("dns_message_gettemprdataset", result);
-       dns_rdataset_init(question);
        dns_rdataset_makequestion(question, dns_rdataclass_in,
                                  dns_rdatatype_a);
        result = dns_message_gettempname(query, &qname);
index 022e87b4ca2308be38218ce28957fee9b0a5c1b6..5a67d6e216d5ec5d262bbb1509b6eff9a587113e 100644 (file)
@@ -171,7 +171,6 @@ sendquery(isc_task_t *task) {
 
        dns_name_init(qname, NULL);
        dns_name_clone(dns_fixedname_name(&queryname), qname);
-       dns_rdataset_init(qrdataset);
        dns_rdataset_makequestion(qrdataset, dns_rdataclass_in,
                                  dns_rdatatype_a);
        ISC_LIST_APPEND(qname->list, qrdataset, link);
index 9d96e83f2eeeef56f9a5637ea301cb4225080b86..2df6c2aaabb45645cde183cec6788fff286e4e9b 100644 (file)
@@ -562,7 +562,6 @@ sendquery(struct query *query, isc_task_t *task)
 
        dns_name_init(qname, NULL);
        dns_name_clone(dns_fixedname_name(&queryname), qname);
-       dns_rdataset_init(qrdataset);
        dns_rdataset_makequestion(qrdataset, query->rdclass,
                                  query->rdtype);
        ISC_LIST_APPEND(qname->list, qrdataset, link);
index d3d28f8561710bae492d9fd77bc894f835f0186a..685a044e002dfb13a17f0ae48cbafc638c7ef44d 100644 (file)
@@ -1505,7 +1505,6 @@ dns_acache_getentry(dns_acacheentry_t *entry, dns_zone_t **zonep,
                         * trick to get the latest counter from the original
                         * header.
                         */
-                       dns_rdataset_init(ardataset);
                        dns_rdataset_clone(erdataset, ardataset);
                        ISC_LIST_APPEND(fname->list, ardataset, link);
                }
index 82fe2b7945a55b009c461d7f5cd1bceeebf85620..8a29d9f893d97f836482db803a94e0995ded1150 100644 (file)
@@ -2635,7 +2635,6 @@ copy_name(isc_mem_t *mctx, dns_message_t *msg, dns_name_t *name,
                result = dns_message_gettemprdataset(msg, &newrdataset);
                if (result != ISC_R_SUCCESS)
                        goto fail;
-               dns_rdataset_init(newrdataset);
                dns_rdatalist_tordataset(rdatalist, newrdataset);
 
                ISC_LIST_APPEND(newname->list, newrdataset, link);
index 7cfa82d22fb8b3391c2aeb327166a0e35936775d..dd97d5c20854bc5d6c6d36fe7a2d8f69681a51bd 100644 (file)
@@ -955,7 +955,6 @@ dns_dnssec_signmessage(dns_message_t *msg, dst_key_t *key) {
        ISC_LIST_APPEND(datalist->rdata, rdata, link);
        dataset = NULL;
        RETERR(dns_message_gettemprdataset(msg, &dataset));
-       dns_rdataset_init(dataset);
        RUNTIME_CHECK(dns_rdatalist_tordataset(datalist, dataset) == ISC_R_SUCCESS);
        msg->sig0 = dataset;
 
index 14a073729490727d3ed1b4bea4141e264fc5f111..6205b852961f31693dbaa6895e7a16a994e3c989 100644 (file)
@@ -104,7 +104,7 @@ typedef isc_uint32_t            dns_rpz_zbits_t;
 /*
  * The trigger counter type.
  */
-typedef ssize_t dns_rpz_trigger_counter_t;
+typedef size_t dns_rpz_trigger_counter_t;
 
 /*
  * The number of triggers of each type in a response policy zone.
index ef755b132280ec311758004866f1cbe843e3c8a3..6ff8d758284102a939a00f385c21e84f2c7429c5 100644 (file)
@@ -3676,7 +3676,6 @@ dns_message_buildopt(dns_message_t *message, dns_rdataset_t **rdatasetp,
        result = dns_message_gettemprdataset(message, &rdataset);
        if (result != ISC_R_SUCCESS)
                goto cleanup;
-       dns_rdataset_init(rdataset);
 
        rdatalist->type = dns_rdatatype_opt;
 
index 821d53dd71548323b9e043946b20fa803afc4915..48a7aa85acd13bbd2a1ce8eaa4602bf25a86d507 100644 (file)
@@ -1988,7 +1988,6 @@ resquery_send(resquery_t *query) {
         */
        dns_name_init(qname, NULL);
        dns_name_clone(&fctx->name, qname);
-       dns_rdataset_init(qrdataset);
        dns_rdataset_makequestion(qrdataset, res->rdclass, fctx->type);
        ISC_LIST_APPEND(qname->list, qrdataset, link);
        dns_message_addname(fctx->qmessage, qname, DNS_SECTION_QUESTION);
index e622a0fb19dd8af13a8b7f0b28c3857452769235..b65d6833165d6dd528fc8686a6c0edd67045e426 100644 (file)
@@ -604,7 +604,7 @@ adj_trigger_cnt(dns_rpz_zones_t *rpzs, dns_rpz_num_t rpz_num,
                        fix_qname_skip_recurse(rpzs);
                }
        } else {
-               REQUIRE(*cnt > 0);
+               REQUIRE(*cnt != 0);
                if (--*cnt == 0) {
                        *have &= ~DNS_RPZ_ZBIT(rpz_num);
                        fix_qname_skip_recurse(rpzs);
@@ -1656,15 +1656,19 @@ fix_triggers(dns_rpz_zones_t *rpzs, dns_rpz_num_t rpz_num) {
        isc_log_write(dns_lctx, DNS_LOGCATEGORY_RPZ,
                      DNS_LOGMODULE_RBTDB, DNS_RPZ_INFO_LEVEL,
                      "(re)loading policy zone '%s' changed from"
-                     " %zd to %zd qname, %zd to %zd nsdname,"
-                     " %zd to %zd IP, %zd to %zd NSIP entries",
+                     " %lu to %lu qname, %lu to %lu nsdname,"
+                     " %lu to %lu IP, %lu to %lu NSIP entries",
                      namebuf,
-                     old_totals.qname, rpzs->total_triggers.qname,
-                     old_totals.nsdname, rpzs->total_triggers.nsdname,
-                     old_totals.ipv4 + old_totals.ipv6,
-                     rpzs->total_triggers.ipv4 + rpzs->total_triggers.ipv6,
-                     old_totals.nsipv4 + old_totals.nsipv6,
-                     rpzs->total_triggers.nsipv4 + rpzs->total_triggers.nsipv6);
+                     (unsigned long) old_totals.qname,
+                     (unsigned long) rpzs->total_triggers.qname,
+                     (unsigned long) old_totals.nsdname,
+                     (unsigned long) rpzs->total_triggers.nsdname,
+                     (unsigned long) old_totals.ipv4 + old_totals.ipv6,
+                     (unsigned long) (rpzs->total_triggers.ipv4 +
+                                      rpzs->total_triggers.ipv6),
+                     (unsigned long) old_totals.nsipv4 + old_totals.nsipv6,
+                     (unsigned long) (rpzs->total_triggers.nsipv4 +
+                                      rpzs->total_triggers.nsipv6));
 }
 
 /*
index cad8d89a734612474ea8ff0f590056222b27a7cd..66210d50f97fbe4bb6a51c4f4db403d4f671c09b 100644 (file)
@@ -174,7 +174,6 @@ add_rdata_to_list(dns_message_t *msg, dns_name_t *name, dns_rdata_t *rdata,
        ISC_LIST_APPEND(newlist->rdata, newrdata, link);
 
        RETERR(dns_message_gettemprdataset(msg, &newset));
-       dns_rdataset_init(newset);
        RETERR(dns_rdatalist_tordataset(newlist, newset));
 
        ISC_LIST_INIT(newname->list);
@@ -875,7 +874,6 @@ buildquery(dns_message_t *msg, dns_name_t *name,
        RETERR(dns_message_gettempname(msg, &aname));
 
        RETERR(dns_message_gettemprdataset(msg, &question));
-       dns_rdataset_init(question);
        dns_rdataset_makequestion(question, dns_rdataclass_any,
                                  dns_rdatatype_tkey);
 
@@ -894,7 +892,6 @@ buildquery(dns_message_t *msg, dns_name_t *name,
        ISC_LIST_APPEND(tkeylist->rdata, rdata, link);
 
        RETERR(dns_message_gettemprdataset(msg, &tkeyset));
-       dns_rdataset_init(tkeyset);
        RETERR(dns_rdatalist_tordataset(tkeylist, tkeyset));
 
        dns_name_init(qname, NULL);
index f40ec223682a13bd7176bbf2ab672ba61775f1b5..af5a3070ccd9b63d40480968b8751f95da3a20b6 100644 (file)
@@ -1135,7 +1135,6 @@ dns_tsig_sign(dns_message_t *msg) {
        datalist->rdclass = dns_rdataclass_any;
        datalist->type = dns_rdatatype_tsig;
        ISC_LIST_APPEND(datalist->rdata, rdata, link);
-       dns_rdataset_init(dataset);
        RUNTIME_CHECK(dns_rdatalist_tordataset(datalist, dataset)
                      == ISC_R_SUCCESS);
        msg->tsig = dataset;
index f5ec7b192709a4f46dc2f6f299879489acf75e84..30cfdaf1b27544da7e9552f3567517a542150d72 100644 (file)
@@ -1036,7 +1036,6 @@ tuple2msgname(dns_difftuple_t *tuple, dns_message_t *msg, dns_name_t **target)
        ISC_LIST_APPEND(rdl->rdata, rdata, link);
 
        CHECK(dns_message_gettemprdataset(msg, &rds));
-       dns_rdataset_init(rds);
        CHECK(dns_rdatalist_tordataset(rdl, rds));
 
        CHECK(dns_message_gettempname(msg, &name));
@@ -1089,7 +1088,6 @@ xfrin_send_request(dns_xfrin_ctx_t *xfr) {
 
        /* Formulate the question and attach it to the question name. */
        CHECK(dns_message_gettemprdataset(msg, &qrdataset));
-       dns_rdataset_init(qrdataset);
        dns_rdataset_makequestion(qrdataset, xfr->rdclass, xfr->reqtype);
        ISC_LIST_APPEND(qname->list, qrdataset, link);
        qrdataset = NULL;
index 07895fe0f6151cf206aa9fe0adb2905ffb65b728..fb3616780f4ec4435dff6db350c9fd597763d53c 100644 (file)
@@ -11671,7 +11671,6 @@ create_query(dns_zone_t *zone, dns_rdatatype_t rdtype,
         */
        dns_name_init(qname, NULL);
        dns_name_clone(&zone->origin, qname);
-       dns_rdataset_init(qrdataset);
        dns_rdataset_makequestion(qrdataset, zone->rdclass, rdtype);
        ISC_LIST_APPEND(qname->list, qrdataset, link);
        dns_message_addname(message, qname, DNS_SECTION_QUESTION);
@@ -12481,7 +12480,6 @@ notify_createmessage(dns_zone_t *zone, unsigned int flags,
         */
        dns_name_init(tempname, NULL);
        dns_name_clone(&zone->origin, tempname);
-       dns_rdataset_init(temprdataset);
        dns_rdataset_makequestion(temprdataset, zone->rdclass,
                                  dns_rdatatype_soa);
        ISC_LIST_APPEND(tempname->list, temprdataset, link);
@@ -12546,7 +12544,6 @@ notify_createmessage(dns_zone_t *zone, unsigned int flags,
        temprdatalist->ttl = rdataset.ttl;
        ISC_LIST_APPEND(temprdatalist->rdata, temprdata, link);
 
-       dns_rdataset_init(temprdataset);
        result = dns_rdatalist_tordataset(temprdatalist, temprdataset);
        if (result != ISC_R_SUCCESS)
                goto soa_cleanup;
index 0d21661d5e0f611265be0cc36e120d3ce3b0c4d3..1c2a94feb77915be3d51f96918b3966da239fb0e 100644 (file)
@@ -275,7 +275,6 @@ make_querymessage(dns_message_t *message, dns_name_t *qname0,
 
        dns_name_init(qname, NULL);
        dns_name_clone(qname0, qname);
-       dns_rdataset_init(qrdataset);
        dns_rdataset_makequestion(qrdataset, message->rdclass, rdtype);
        ISC_LIST_APPEND(qname->list, qrdataset, link);
        dns_message_addname(message, qname, DNS_SECTION_QUESTION);
index 1544a54e61a13d0fa8bcff4ce1d85028e4dbd074..5cb116fd04b16cae07f534aebc74ac0c9d222215 100644 (file)
@@ -111,7 +111,6 @@ make_querymessage(dns_message_t *message, const char *namestr,
 
        dns_name_init(qname, NULL);
        dns_name_clone(qname0, qname);
-       dns_rdataset_init(qrdataset);
        dns_rdataset_makequestion(qrdataset, message->rdclass, rdtype);
        ISC_LIST_APPEND(qname->list, qrdataset, link);
        dns_message_addname(message, qname, DNS_SECTION_QUESTION);