]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Log what change generated a 'not exact' error
authorMark Andrews <marka@isc.org>
Tue, 12 Dec 2023 02:50:33 +0000 (13:50 +1100)
committerMark Andrews <marka@isc.org>
Tue, 19 Dec 2023 14:56:38 +0000 (01:56 +1100)
lib/dns/diff.c

index e4bfceefa868b33c39b73eb056f4cca59c2f6459..afbf87c5e8d752ed823f985af8244d119a880298 100644 (file)
@@ -240,6 +240,22 @@ setownercase(dns_rdataset_t *rdataset, const dns_name_t *name) {
        }
 }
 
+static const char *
+optotext(dns_diffop_t op) {
+       switch (op) {
+       case DNS_DIFFOP_ADD:
+               return ("add");
+       case DNS_DIFFOP_ADDRESIGN:
+               return ("add-resign");
+       case DNS_DIFFOP_DEL:
+               return ("del");
+       case DNS_DIFFOP_DELRESIGN:
+               return ("del-resign");
+       default:
+               return ("unknown");
+       }
+}
+
 static isc_result_t
 diff_apply(dns_diff_t *diff, dns_db_t *db, dns_dbversion_t *ver, bool warn) {
        dns_difftuple_t *t;
@@ -269,6 +285,7 @@ diff_apply(dns_diff_t *diff, dns_db_t *db, dns_dbversion_t *ver, bool warn) {
 
                while (t != NULL && dns_name_equal(&t->name, name)) {
                        dns_rdatatype_t type, covers;
+                       dns_rdataclass_t rdclass;
                        dns_diffop_t op;
                        dns_rdatalist_t rdl;
                        dns_rdataset_t rds;
@@ -277,6 +294,7 @@ diff_apply(dns_diff_t *diff, dns_db_t *db, dns_dbversion_t *ver, bool warn) {
 
                        op = t->op;
                        type = t->rdata.type;
+                       rdclass = t->rdata.rdclass;
                        covers = rdata_covers(&t->rdata);
 
                        /*
@@ -439,6 +457,22 @@ diff_apply(dns_diff_t *diff, dns_db_t *db, dns_dbversion_t *ver, bool warn) {
                                        dns_rdataset_disassociate(&ardataset);
                                }
                        } else {
+                               if (result == DNS_R_NOTEXACT) {
+                                       dns_name_format(name, namebuf,
+                                                       sizeof(namebuf));
+                                       dns_rdatatype_format(type, typebuf,
+                                                            sizeof(typebuf));
+                                       dns_rdataclass_format(rdclass, classbuf,
+                                                             sizeof(classbuf));
+                                       isc_log_write(
+                                               DIFF_COMMON_LOGARGS,
+                                               ISC_LOG_ERROR,
+                                               "dns_diff_apply: %s/%s/%s: %s "
+                                               "%s",
+                                               namebuf, typebuf, classbuf,
+                                               optotext(op),
+                                               isc_result_totext(result));
+                               }
                                if (dns_rdataset_isassociated(&ardataset)) {
                                        dns_rdataset_disassociate(&ardataset);
                                }