From: Michał Kępień Date: Wed, 14 Jun 2017 11:09:26 +0000 (+0200) Subject: [master] Fix master address failover when GSS-API is used X-Git-Tag: v9.12.0a1~115 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b55ec74eaa8125b9f1023decdd84a502b9c5b69d;p=thirdparty%2Fbind9.git [master] Fix master address failover when GSS-API is used 4680. [bug] Fix failing over to another master server address when nsupdate is used with GSS-API. [RT #45380] --- diff --git a/CHANGES b/CHANGES index 7792f29c9f3..5beab0f4fc7 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +4680. [bug] Fix failing over to another master server address when + nsupdate is used with GSS-API. [RT #45380] + 4679. [cleanup] Suggest using -o when dnssec-verify finds a SOA record not at top of zone and -o is not used. [RT #45519] diff --git a/bin/nsupdate/nsupdate.c b/bin/nsupdate/nsupdate.c index 2ef75905a26..eaac2ef2fc0 100644 --- a/bin/nsupdate/nsupdate.c +++ b/bin/nsupdate/nsupdate.c @@ -2950,11 +2950,17 @@ recvgss(isc_task_t *task, isc_event_t *event) { } if (eresult != ISC_R_SUCCESS) { - next_master("recvgss", addr, eresult); ddebug("Destroying request [%p]", request); dns_request_destroy(&request); - dns_message_renderreset(tsigquery); - sendrequest(&master_servers[master_inuse], tsigquery, &request); + if (!next_master("recvgss", addr, eresult)) { + dns_message_destroy(&tsigquery); + failed_gssrequest(); + } else { + dns_message_renderreset(tsigquery); + memmove(kserver, &master_servers[master_inuse], + sizeof(isc_sockaddr_t)); + send_gssrequest(kserver, tsigquery, &request, context); + } isc_mem_put(gmctx, reqinfo, sizeof(nsu_gssinfo_t)); isc_event_free(&event); return;