Merge branch '3986-handle-ISC_R_NOPERM-in-dns_dispatch-and-honour-the-source-port' into 'main'
Honour the source-port when retrying in dns_dispatch Closes #3986 See merge request isc-projects/bind9!7806
This commit is contained in:
@@ -1,3 +1,10 @@
|
||||
6152. [bug] In dispatch, honour the configured source-port
|
||||
selection when UDP connection fails with address
|
||||
in use error.
|
||||
|
||||
Also treat ISC_R_NOPERM same as ISC_R_ADDRINUSE.
|
||||
[GL #3986]
|
||||
|
||||
6151. [bug] When the same ``notify-source`` address and port number
|
||||
was configured for multiple destinations and zones, an
|
||||
unresponsive server could tie up the socket until it
|
||||
|
||||
+4
-6
@@ -1440,7 +1440,7 @@ dns_dispatch_add(dns_dispatch_t *disp, unsigned int options,
|
||||
dns_dispentry_t **respp) {
|
||||
dns_dispentry_t *resp = NULL;
|
||||
dns_qid_t *qid = NULL;
|
||||
in_port_t dispport, localport = 0;
|
||||
in_port_t localport;
|
||||
dns_messageid_t id;
|
||||
unsigned int bucket;
|
||||
bool ok = false;
|
||||
@@ -1465,10 +1465,7 @@ dns_dispatch_add(dns_dispatch_t *disp, unsigned int options,
|
||||
|
||||
qid = disp->mgr->qid;
|
||||
|
||||
dispport = isc_sockaddr_getport(&disp->local);
|
||||
if (dispport != 0) {
|
||||
localport = dispport;
|
||||
}
|
||||
localport = isc_sockaddr_getport(&disp->local);
|
||||
|
||||
resp = isc_mem_get(disp->mgr->mctx, sizeof(*resp));
|
||||
*resp = (dns_dispentry_t){
|
||||
@@ -1943,8 +1940,9 @@ udp_connected(isc_nmhandle_t *handle, isc_result_t eresult, void *arg) {
|
||||
resp->state = DNS_DISPATCHSTATE_CONNECTED;
|
||||
udp_startrecv(handle, resp);
|
||||
break;
|
||||
case ISC_R_NOPERM:
|
||||
case ISC_R_ADDRINUSE: {
|
||||
in_port_t localport = 0;
|
||||
in_port_t localport = isc_sockaddr_getport(&disp->local);
|
||||
isc_result_t result;
|
||||
|
||||
/* probably a port collision; try a different one */
|
||||
|
||||
Reference in New Issue
Block a user