]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
[master] log forwarded updates
authorEvan Hunt <each@isc.org>
Fri, 3 May 2013 21:05:32 +0000 (14:05 -0700)
committerEvan Hunt <each@isc.org>
Fri, 3 May 2013 21:05:32 +0000 (14:05 -0700)
3566. [func] Log when forwarding updates to master. [RT #33240]

CHANGES
bin/named/update.c
bin/tests/system/upforwd/tests.sh
lib/dns/zone.c

diff --git a/CHANGES b/CHANGES
index a72f4bd00b77e025cee5242fba5571f4a717727d..c1a5d04cc9f4f03488881d4497e2174f8848eb10 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,5 @@
+3566.  [func]          Log when forwarding updates to master. [RT #33240]
+
 3564.  [bug]           Improved handling of corrupted map files. [RT #33380]
 
 3563.  [contrib]       zone2sqlite failed with some table names. [RT #33375]
index cd4fe1a8e21a250bbb3d82d50eee2f35b163d498..30dfcce19c15f8b19f64158c6a95c77f5512e6ca 100644 (file)
@@ -3359,6 +3359,8 @@ forward_action(isc_task_t *task, isc_event_t *event) {
 
 static isc_result_t
 send_forward_event(ns_client_t *client, dns_zone_t *zone) {
+       char namebuf[DNS_NAME_FORMATSIZE];
+       char classbuf[DNS_RDATACLASS_FORMATSIZE];
        isc_result_t result = ISC_R_SUCCESS;
        update_event_t *event = NULL;
        isc_task_t *zonetask = NULL;
@@ -3384,6 +3386,15 @@ send_forward_event(ns_client_t *client, dns_zone_t *zone) {
        client->nupdates++;
        event->ev_arg = evclient;
 
+       dns_name_format(dns_zone_getorigin(zone), namebuf,
+                       sizeof(namebuf));
+       dns_rdataclass_format(dns_zone_getclass(zone), classbuf,
+                             sizeof(classbuf));
+
+       ns_client_log(client, NS_LOGCATEGORY_UPDATE, NS_LOGMODULE_UPDATE,
+                     LOGLEVEL_PROTOCOL, "forwarding update for zone '%s/%s'",
+                     namebuf, classbuf);
+
        dns_zone_gettask(zone, &zonetask);
        isc_task_send(zonetask, ISC_EVENT_PTR(&event));
 
index 9e019d6850b30bb40768e75b67b987e06aaaeab5..a017b1d08591786e98793014b7197764016d8312 100644 (file)
@@ -40,78 +40,112 @@ do
        test $ret = 0 && break
        sleep 1
 done
+if [ $ret != 0 ] ; then echo "I:failed"; status=`expr $status + $ret`; fi
+
 echo "I:fetching master copy of zone before update"
+ret=0
 $DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd example.\
-       @10.53.0.1 axfr -p 5300 > dig.out.ns1 || status=1
+       @10.53.0.1 axfr -p 5300 > dig.out.ns1 || ret=1
+if [ $ret != 0 ] ; then echo "I:failed"; status=`expr $status + $ret`; fi
 
 echo "I:fetching slave 1 copy of zone before update"
 $DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd example.\
-       @10.53.0.2 axfr -p 5300 > dig.out.ns2 || status=1
+       @10.53.0.2 axfr -p 5300 > dig.out.ns2 || ret=1
+if [ $ret != 0 ] ; then echo "I:failed"; status=`expr $status + $ret`; fi
 
 echo "I:fetching slave 2 copy of zone before update"
+ret=0
 $DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd example.\
-       @10.53.0.3 axfr -p 5300 > dig.out.ns3 || status=1
+       @10.53.0.3 axfr -p 5300 > dig.out.ns3 || ret=1
+if [ $ret != 0 ] ; then echo "I:failed"; status=`expr $status + $ret`; fi
 
 echo "I:comparing pre-update copies to known good data"
-$PERL ../digcomp.pl knowngood.before dig.out.ns1 || status=1
-$PERL ../digcomp.pl knowngood.before dig.out.ns2 || status=1
-$PERL ../digcomp.pl knowngood.before dig.out.ns3 || status=1
+ret=0
+$PERL ../digcomp.pl knowngood.before dig.out.ns1 || ret=1
+$PERL ../digcomp.pl knowngood.before dig.out.ns2 || ret=1
+$PERL ../digcomp.pl knowngood.before dig.out.ns3 || ret=1
+if [ $ret != 0 ] ; then echo "I:failed"; status=`expr $status + $ret`; fi
 
 echo "I:updating zone (signed)"
-$NSUPDATE -y update.example:c3Ryb25nIGVub3VnaCBmb3IgYSBtYW4gYnV0IG1hZGUgZm9yIGEgd29tYW4K -- - <<EOF || status=1
+ret=0
+$NSUPDATE -y update.example:c3Ryb25nIGVub3VnaCBmb3IgYSBtYW4gYnV0IG1hZGUgZm9yIGEgd29tYW4K -- - <<EOF || ret=1
 server 10.53.0.3 5300
 update add updated.example. 600 A 10.10.10.1
 update add updated.example. 600 TXT Foo
 send
 EOF
+if [ $ret != 0 ] ; then echo "I:failed"; status=`expr $status + $ret`; fi
 
 echo "I:sleeping 15 seconds for server to incorporate changes"
 sleep 15
 
 echo "I:fetching master copy of zone after update"
+ret=0
 $DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd example.\
-       @10.53.0.1 axfr -p 5300 > dig.out.ns1 || status=1
+       @10.53.0.1 axfr -p 5300 > dig.out.ns1 || ret=1
+if [ $ret != 0 ] ; then echo "I:failed"; status=`expr $status + $ret`; fi
 
 echo "I:fetching slave 1 copy of zone after update"
+ret=0
 $DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd example.\
-       @10.53.0.2 axfr -p 5300 > dig.out.ns2 || status=1
+       @10.53.0.2 axfr -p 5300 > dig.out.ns2 || ret=1
+if [ $ret != 0 ] ; then echo "I:failed"; status=`expr $status + $ret`; fi
 
 echo "I:fetching slave 2 copy of zone after update"
+ret=0
 $DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd example.\
-       @10.53.0.3 axfr -p 5300 > dig.out.ns3 || status=1
+       @10.53.0.3 axfr -p 5300 > dig.out.ns3 || ret=1
+if [ $ret != 0 ] ; then echo "I:failed"; status=`expr $status + $ret`; fi
 
 echo "I:comparing post-update copies to known good data"
-$PERL ../digcomp.pl knowngood.after1 dig.out.ns1 || status=1
-$PERL ../digcomp.pl knowngood.after1 dig.out.ns2 || status=1
-$PERL ../digcomp.pl knowngood.after1 dig.out.ns3 || status=1
+ret=0
+$PERL ../digcomp.pl knowngood.after1 dig.out.ns1 || ret=1
+$PERL ../digcomp.pl knowngood.after1 dig.out.ns2 || ret=1
+$PERL ../digcomp.pl knowngood.after1 dig.out.ns3 || ret=1
+if [ $ret != 0 ] ; then echo "I:failed"; status=`expr $status + $ret`; fi
+
+echo "I:checking 'forwarding update for zone' is logged"
+ret=0
+grep "forwarding update for zone 'example/IN'" ns3/named.run > /dev/null || ret=1
+if [ $ret != 0 ] ; then echo "I:failed"; status=`expr $status + $ret`; fi
 
 echo "I:updating zone (unsigned)"
-$NSUPDATE -- - <<EOF || status=1
+ret=0
+$NSUPDATE -- - <<EOF || ret=1
 server 10.53.0.3 5300
 update add unsigned.example. 600 A 10.10.10.1
 update add unsigned.example. 600 TXT Foo
 send
 EOF
+if [ $ret != 0 ] ; then echo "I:failed"; status=`expr $status + $ret`; fi
 
 echo "I:sleeping 15 seconds for server to incorporate changes"
 sleep 15
 
 echo "I:fetching master copy of zone after update"
+ret=0
 $DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd example.\
-       @10.53.0.1 axfr -p 5300 > dig.out.ns1 || status=1
+       @10.53.0.1 axfr -p 5300 > dig.out.ns1 || ret=1
+if [ $ret != 0 ] ; then echo "I:failed"; status=`expr $status + $ret`; fi
 
 echo "I:fetching slave 1 copy of zone after update"
+ret=0
 $DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd example.\
-       @10.53.0.2 axfr -p 5300 > dig.out.ns2 || status=1
+       @10.53.0.2 axfr -p 5300 > dig.out.ns2 || ret=1
+if [ $ret != 0 ] ; then echo "I:failed"; status=`expr $status + $ret`; fi
 
 echo "I:fetching slave 2 copy of zone after update"
+ret=0
 $DIG +tcp +noadd +nosea +nostat +noquest +nocomm +nocmd example.\
-       @10.53.0.3 axfr -p 5300 > dig.out.ns3 || status=1
+       @10.53.0.3 axfr -p 5300 > dig.out.ns3 || ret=1
+if [ $ret != 0 ] ; then echo "I:failed"; status=`expr $status + $ret`; fi
 
 echo "I:comparing post-update copies to known good data"
-$PERL ../digcomp.pl knowngood.after2 dig.out.ns1 || status=1
-$PERL ../digcomp.pl knowngood.after2 dig.out.ns2 || status=1
-$PERL ../digcomp.pl knowngood.after2 dig.out.ns3 || status=1
+ret=0
+$PERL ../digcomp.pl knowngood.after2 dig.out.ns1 || ret=1
+$PERL ../digcomp.pl knowngood.after2 dig.out.ns2 || ret=1
+$PERL ../digcomp.pl knowngood.after2 dig.out.ns3 || ret=1
+if [ $ret != 0 ] ; then echo "I:failed"; status=`expr $status + $ret`; fi
 
 echo "I:checking update forwarding to dead master"
 count=0
index 0eecdd40647fbf43728271ba64ec93927096d387..2dd147e17d5e6b0bdca0e72753059758585f3aa3 100644 (file)
@@ -14230,8 +14230,18 @@ forward_callback(isc_task_t *task, isc_event_t *event) {
        case dns_rcode_yxrrset:
        case dns_rcode_nxrrset:
        case dns_rcode_refused:
-       case dns_rcode_nxdomain:
+       case dns_rcode_nxdomain: {
+               char rcode[128];
+               isc_buffer_t rb;
+
+               isc_buffer_init(&rb, rcode, sizeof(rcode));
+               (void)dns_rcode_totext(msg->rcode, &rb);
+               dns_zone_log(zone, ISC_LOG_INFO,
+                            "forwarded dynamic update: "
+                            "master %s returned: %.*s",
+                            master, (int)rb.used, rcode);
                break;
+       }
 
        /* These should not occur if the masters/zone are valid. */
        case dns_rcode_notzone: