]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
1568. [bug] nsupdate now reports that the update failed in
authorMark Andrews <marka@isc.org>
Thu, 4 Mar 2004 01:22:50 +0000 (01:22 +0000)
committerMark Andrews <marka@isc.org>
Thu, 4 Mar 2004 01:22:50 +0000 (01:22 +0000)
                        interative mode. [RT# 10236]

CHANGES
bin/nsupdate/nsupdate.c
bin/nsupdate/nsupdate.docbook

diff --git a/CHANGES b/CHANGES
index b79a8a14c5d75211274e624922d9fc18ce725eba..2d380f422f41873007ff5ef73b6515971409522e 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -24,6 +24,9 @@
                        New keyword 'class' which sets the default class.
                        [RT #10202]
 
+1568.  [bug]           nsupdate now reports that the update failed in
+                       interative mode. [RT# 10236]
+
 1567.  [bug]           B.ROOT-SERVERS.NET is now 192.228.79.201.
 
 1566.  [port]          Support for the cmsg framework on Solaris and HP/UX.
index 16ff26904404d5595eebdc8f6ec21f954b495142..32824340d73f1235c870e832e30a7405a7cd3aed 100644 (file)
@@ -15,7 +15,7 @@
  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: nsupdate.c,v 1.103.2.18 2004/03/03 23:42:42 marka Exp $ */
+/* $Id: nsupdate.c,v 1.103.2.19 2004/03/04 01:22:50 marka Exp $ */
 
 #include <config.h>
 
@@ -52,6 +52,7 @@
 #include <dns/masterdump.h>
 #include <dns/message.h>
 #include <dns/name.h>
+#include <dns/rcode.h>
 #include <dns/rdata.h>
 #include <dns/rdataclass.h>
 #include <dns/rdatalist.h>
@@ -1417,6 +1418,29 @@ done_update(void) {
        isc_task_send(global_task, &event);
 }
 
+static void
+check_tsig_error(dns_rdataset_t *rdataset, isc_buffer_t *b) {
+       isc_result_t result;
+       dns_rdata_t rdata = DNS_RDATA_INIT;
+       dns_rdata_any_tsig_t tsig;
+
+       result = dns_rdataset_first(rdataset);
+       check_result(result, "dns_rdataset_first");
+       dns_rdataset_current(rdataset, &rdata);
+       result = dns_rdata_tostruct(&rdata, &tsig, NULL);
+       check_result(result, "dns_rdata_tostruct");
+       if (tsig.error != 0) {
+               if (isc_buffer_remaininglength(b) < 1)
+                     check_result(ISC_R_NOSPACE, "isc_buffer_remaininglength");
+               isc__buffer_putstr(b, "(" /*)*/);
+               result = dns_tsigrcode_totext(tsig.error, b);
+               check_result(result, "dns_tsigrcode_totext");
+               if (isc_buffer_remaininglength(b) < 1)
+                     check_result(ISC_R_NOSPACE, "isc_buffer_remaininglength");
+               isc__buffer_putstr(b,  /*(*/ ")");
+       }
+}
+
 static void
 update_completed(isc_task_t *task, isc_event_t *event) {
        dns_requestevent_t *reqev = NULL;
@@ -1468,8 +1492,23 @@ update_completed(isc_task_t *task, isc_event_t *event) {
                check_result(result, "dns_request_getresponse");
        }
 
-       if (rcvmsg->rcode != dns_rcode_noerror)
+       if (rcvmsg->rcode != dns_rcode_noerror) {
                seenerror = ISC_TRUE;
+               if (!debugging) {
+                       char buf[64];
+                       isc_buffer_t b;
+                       dns_rdataset_t *rds;
+                       
+                       isc_buffer_init(&b, buf, sizeof(buf) - 1);
+                       result = dns_rcode_totext(rcvmsg->rcode, &b);
+                       check_result(result, "dns_rcode_totext");
+                       rds = dns_message_gettsig(rcvmsg, NULL);
+                       if (rds != NULL)
+                               check_tsig_error(rds, &b);
+                       fprintf(stderr, "update failed: %.*s\n",
+                               (int)isc_buffer_usedlength(&b), buf);
+               }
+       }
        if (debugging) {
                isc_buffer_t *buf = NULL;
                int bufsz;
index 56ccf57f1d5ecd8edc23c73fb345c772ea0063fb..da0f744dcea3f9793c7534cb5f1e577b125188bd 100644 (file)
@@ -16,7 +16,7 @@
  - WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 -->
 
-<!-- $Id: nsupdate.docbook,v 1.8.2.4 2004/03/03 23:42:43 marka Exp $ -->
+<!-- $Id: nsupdate.docbook,v 1.8.2.5 2004/03/04 01:22:50 marka Exp $ -->
 
 <refentry>
 <refentryinfo>
@@ -465,6 +465,7 @@ Sends the current message.  This is equivalent to entering a blank line.
 <para>
 Lines beginning with a semicolon are comments, and are ignored.
 </para>
+</listitem>
 
 </refsect1>
 
@@ -485,7 +486,7 @@ master name server for
 # nsupdate
 > update delete oldhost.example.com A
 > update add newhost.example.com 86400 A 172.16.1.1
->
+> send
 </programlisting>
 </para>
 <para>
@@ -500,7 +501,7 @@ The newly-added record has a 1 day TTL (86400 seconds)
 # nsupdate
 > prereq nxdomain nickname.example.com
 > update add nickname.example.com 86400 CNAME somehost.example.com
->
+> send
 </programlisting>
 </para>
 <para>