]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
retry w/o TSIG
authorMark Andrews <marka@isc.org>
Thu, 4 Mar 2004 05:33:03 +0000 (05:33 +0000)
committerMark Andrews <marka@isc.org>
Thu, 4 Mar 2004 05:33:03 +0000 (05:33 +0000)
bin/nsupdate/nsupdate.c

index 982bbaa82ae086f3652ef4c517af06336d8cdc3a..2973ce6204cd3db6aa8fd417e9063255d20523e3 100644 (file)
@@ -15,7 +15,7 @@
  * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: nsupdate.c,v 1.128 2004/03/04 01:21:38 marka Exp $ */
+/* $Id: nsupdate.c,v 1.129 2004/03/04 05:33:03 marka Exp $ */
 
 #include <config.h>
 
@@ -1647,6 +1647,27 @@ recvsoa(isc_task_t *task, isc_event_t *event) {
        check_result(result, "dns_message_create");
        result = dns_request_getresponse(request, rcvmsg,
                                         DNS_MESSAGEPARSE_PRESERVEORDER);
+       if (result == DNS_R_TSIGERRORSET && userserver != NULL) {
+               dns_message_destroy(&rcvmsg);
+               ddebug("Destroying request [%p]", request);
+               dns_request_destroy(&request);
+               reqinfo = isc_mem_get(mctx, sizeof(nsu_requestinfo_t));
+               if (reqinfo == NULL)
+                       fatal("out of memory");
+               reqinfo->msg = soaquery;
+               reqinfo->addr = addr;
+               dns_message_renderreset(soaquery);
+               ddebug("retrying soa request without TSIG");
+               result = dns_request_createvia3(requestmgr, soaquery,
+                                               localaddr, addr, 0, NULL,
+                                               FIND_TIMEOUT * 20,
+                                               FIND_TIMEOUT * 20, 3,
+                                               global_task, recvsoa, reqinfo,
+                                               &request);
+               check_result(result, "dns_request_createvia");
+               requests++;
+               return;
+       }
        check_result(result, "dns_request_getresponse");
        section = DNS_SECTION_ANSWER;
        if (debugging) {