From: Evan Hunt Date: Fri, 3 May 2013 21:05:32 +0000 (-0700) Subject: [master] log forwarded updates X-Git-Tag: v9.10.0a1~363 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=34f3693b93f3ba16634f0c08368ef7f81182ef93;p=thirdparty%2Fbind9.git [master] log forwarded updates 3566. [func] Log when forwarding updates to master. [RT #33240] --- diff --git a/CHANGES b/CHANGES index a72f4bd00b7..c1a5d04cc9f 100644 --- 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] diff --git a/bin/named/update.c b/bin/named/update.c index cd4fe1a8e21..30dfcce19c1 100644 --- a/bin/named/update.c +++ b/bin/named/update.c @@ -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)); diff --git a/bin/tests/system/upforwd/tests.sh b/bin/tests/system/upforwd/tests.sh index 9e019d6850b..a017b1d0859 100644 --- a/bin/tests/system/upforwd/tests.sh +++ b/bin/tests/system/upforwd/tests.sh @@ -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 -- - < 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 -- - < 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 diff --git a/lib/dns/zone.c b/lib/dns/zone.c index 0eecdd40647..2dd147e17d5 100644 --- a/lib/dns/zone.c +++ b/lib/dns/zone.c @@ -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: