Merge branch '3986-handle-ISC_R_NOPERM-in-dns_dispatch-and-honour-the-source-port-9.18' into 'bind-9.18'

[9.18] Honour the source-port when retrying in dns_dispatch

See merge request isc-projects/bind9!7893
This commit is contained in:
Michał Kępień 2023-05-05 13:50:06 +00:00
commit f0c97789ff
2 changed files with 11 additions and 6 deletions

View file

@ -16,6 +16,13 @@
in the dispatch code to avoid retrying with the
same server. [GL #4005]<
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]
6149. [test] As a workaround, include an OpenSSL header file before
including cmocka.h in the unit tests, because OpenSSL
3.1.0 uses __attribute__(malloc), conflicting with a

View file

@ -1422,7 +1422,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;
@ -1447,10 +1447,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){
@ -1921,8 +1918,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 */