]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Adjust level of log messages when transferring in a zone
authorMark Andrews <marka@isc.org>
Fri, 1 Sep 2023 00:17:00 +0000 (10:17 +1000)
committerMark Andrews <marka@isc.org>
Wed, 6 Sep 2023 10:14:41 +0000 (20:14 +1000)
This raises the log level of messages treated as FORMERR to NOTICE
when transfering in a zone.  This also adds a missing log message
for TYPE0 and meta types received during a zone transfer.

(cherry picked from commit 6c3414739de8a0bb0549ca7a172314edd78597ac)

lib/dns/xfrin.c

index 53572774b3ba15c0ec2785c4de1886cde9e991fd..393b55787d15e442f18687d2fae4ce20f4c3e6b5 100644 (file)
@@ -393,7 +393,7 @@ ixfr_init(dns_xfrin_ctx_t *xfr) {
        char *journalfile = NULL;
 
        if (xfr->reqtype != dns_rdatatype_ixfr) {
-               xfrin_log(xfr, ISC_LOG_ERROR,
+               xfrin_log(xfr, ISC_LOG_NOTICE,
                          "got incremental response to AXFR request");
                return (DNS_R_FORMERR);
        }
@@ -510,6 +510,10 @@ xfr_rr(dns_xfrin_ctx_t *xfr, dns_name_t *name, uint32_t ttl,
        if (rdata->type == dns_rdatatype_none ||
            dns_rdatatype_ismeta(rdata->type))
        {
+               char buf[64];
+               dns_rdatatype_format(rdata->type, buf, sizeof(buf));
+               xfrin_log(xfr, ISC_LOG_NOTICE,
+                         "Unexpected %s record in zone transfer", buf);
                FAIL(DNS_R_FORMERR);
        }
 
@@ -532,7 +536,7 @@ redo:
        switch (xfr->state) {
        case XFRST_SOAQUERY:
                if (rdata->type != dns_rdatatype_soa) {
-                       xfrin_log(xfr, ISC_LOG_ERROR,
+                       xfrin_log(xfr, ISC_LOG_NOTICE,
                                  "non-SOA response to SOA query");
                        FAIL(DNS_R_FORMERR);
                }
@@ -557,7 +561,7 @@ redo:
 
        case XFRST_INITIALSOA:
                if (rdata->type != dns_rdatatype_soa) {
-                       xfrin_log(xfr, ISC_LOG_ERROR,
+                       xfrin_log(xfr, ISC_LOG_NOTICE,
                                  "first RR in zone transfer must be SOA");
                        FAIL(DNS_R_FORMERR);
                }
@@ -642,7 +646,7 @@ redo:
                                xfr->state = XFRST_IXFR_END;
                                break;
                        } else if (soa_serial != xfr->ixfr.current_serial) {
-                               xfrin_log(xfr, ISC_LOG_ERROR,
+                               xfrin_log(xfr, ISC_LOG_NOTICE,
                                          "IXFR out of sync: "
                                          "expected serial %u, got %u",
                                          xfr->ixfr.current_serial, soa_serial);
@@ -678,7 +682,7 @@ redo:
                         * allow for case differences.
                         */
                        if (dns_rdata_compare(rdata, &xfr->firstsoa) != 0) {
-                               xfrin_log(xfr, ISC_LOG_ERROR,
+                               xfrin_log(xfr, ISC_LOG_NOTICE,
                                          "start and ending SOA records "
                                          "mismatch");
                                FAIL(DNS_R_FORMERR);
@@ -1650,7 +1654,7 @@ xfrin_recv_done(isc_nmhandle_t *handle, isc_result_t result,
         * match the question that was sent.
         */
        if (msg->counts[DNS_SECTION_QUESTION] > 1) {
-               xfrin_log(xfr, ISC_LOG_DEBUG(3), "too many questions (%u)",
+               xfrin_log(xfr, ISC_LOG_NOTICE, "too many questions (%u)",
                          msg->counts[DNS_SECTION_QUESTION]);
                result = DNS_R_FORMERR;
                goto failure;
@@ -1659,7 +1663,7 @@ xfrin_recv_done(isc_nmhandle_t *handle, isc_result_t result,
        if ((xfr->state == XFRST_SOAQUERY || xfr->state == XFRST_INITIALSOA) &&
            msg->counts[DNS_SECTION_QUESTION] != 1)
        {
-               xfrin_log(xfr, ISC_LOG_DEBUG(3), "missing question section");
+               xfrin_log(xfr, ISC_LOG_NOTICE, "missing question section");
                result = DNS_R_FORMERR;
                goto failure;
        }
@@ -1674,7 +1678,7 @@ xfrin_recv_done(isc_nmhandle_t *handle, isc_result_t result,
                dns_message_currentname(msg, DNS_SECTION_QUESTION, &name);
                if (!dns_name_equal(name, &xfr->name)) {
                        result = DNS_R_FORMERR;
-                       xfrin_log(xfr, ISC_LOG_DEBUG(3),
+                       xfrin_log(xfr, ISC_LOG_NOTICE,
                                  "question name mismatch");
                        goto failure;
                }
@@ -1682,13 +1686,13 @@ xfrin_recv_done(isc_nmhandle_t *handle, isc_result_t result,
                INSIST(rds != NULL);
                if (rds->type != xfr->reqtype) {
                        result = DNS_R_FORMERR;
-                       xfrin_log(xfr, ISC_LOG_DEBUG(3),
+                       xfrin_log(xfr, ISC_LOG_NOTICE,
                                  "question type mismatch");
                        goto failure;
                }
                if (rds->rdclass != xfr->rdclass) {
                        result = DNS_R_FORMERR;
-                       xfrin_log(xfr, ISC_LOG_DEBUG(3),
+                       xfrin_log(xfr, ISC_LOG_NOTICE,
                                  "question class mismatch");
                        goto failure;
                }