]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
4215. [bug] nsupdate: skip to next request on GSSTKEY create
authorMark Andrews <marka@isc.org>
Thu, 17 Sep 2015 23:52:27 +0000 (09:52 +1000)
committerMark Andrews <marka@isc.org>
Thu, 17 Sep 2015 23:52:27 +0000 (09:52 +1000)
                        failure. [RT #40685]

CHANGES
bin/nsupdate/nsupdate.c

diff --git a/CHANGES b/CHANGES
index a0c557deea571071b220f8cbb29f6a1d29316cfd..f4de6f730754496e416d5a34666b8742772ccfe7 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+4215.  [bug]           nsupdate: skip to next request on GSSTKEY create
+                       failure. [RT #40685]
+
 4214.  [protocol]      Add support for TALINK.  [RT #40544]
 
 4213.  [bug]           Don't reuse a cache across multiple classes.
index c6c7ef90e8f7d59f05e3087d0246eaccfaff7fee..f4b1af2de60fc430dac0de4dd64c280788f0d687 100644 (file)
@@ -219,6 +219,8 @@ typedef struct nsu_gssinfo {
        gss_ctx_id_t context;
 } nsu_gssinfo_t;
 
+static void
+failed_gssrequest();
 static void
 start_gssrequest(dns_name_t *master);
 static void
@@ -2739,6 +2741,15 @@ get_ticket_realm(isc_mem_t *mctx) {
                fprintf(stderr, "Found realm from ticket: %s\n", realm+1);
 }
 
+static void
+failed_gssrequest() {
+       seenerror = ISC_TRUE;
+
+       dns_name_free(&tmpzonename, gmctx);
+       dns_name_free(&restart_master, gmctx);
+
+       done_update();
+}
 
 static void
 start_gssrequest(dns_name_t *master) {
@@ -2746,7 +2757,7 @@ start_gssrequest(dns_name_t *master) {
        isc_buffer_t buf;
        isc_result_t result;
        isc_uint32_t val = 0;
-       dns_message_t *rmsg;
+       dns_message_t *rmsg = NULL;
        dns_request_t *request = NULL;
        dns_name_t *servname;
        dns_fixedname_t fname;
@@ -2826,14 +2837,24 @@ start_gssrequest(dns_name_t *master) {
        result = dns_tkey_buildgssquery(rmsg, keyname, servname, NULL, 0,
                                        &context, use_win2k_gsstsig,
                                        gmctx, &err_message);
-       if (result == ISC_R_FAILURE)
-               fatal("tkey query failed: %s",
-                     err_message != NULL ? err_message : "unknown error");
+       if (result == ISC_R_FAILURE) {
+               fprintf(stderr, "tkey query failed: %s\n",
+                       err_message != NULL ? err_message : "unknown error");
+               goto failure;
+       }
        if (result != ISC_R_SUCCESS)
                fatal("dns_tkey_buildgssquery failed: %s",
                      isc_result_totext(result));
 
        send_gssrequest(kserver, rmsg, &request, context);
+       return;
+
+failure:
+       if (rmsg != NULL)
+               dns_message_destroy(&rmsg);
+       if (err_message != NULL)
+               isc_mem_free(gmctx, err_message);
+       failed_gssrequest();
 }
 
 static void