Merge branch '4005-handle-ISC_R_INVALIDPROTO-from-libuv-9.18' into 'bind-9.18'

[9.18] Handle ISC_R_INVALIDPROTO in the dispatch

See merge request isc-projects/bind9!7861
This commit is contained in:
Ondřej Surý 2023-04-21 11:30:30 +00:00
commit cf6a8987b3
6 changed files with 17 additions and 6 deletions

View file

@ -1,3 +1,7 @@
6155. [bug] Treat ISC_R_INVALIDPROTO as a networking error
in the dispatch code to avoid retrying with the
same server. [GL #4005]<
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

@ -35,7 +35,9 @@ Feature Changes
Bug Fixes
~~~~~~~~~
- None.
- When ISC_R_INVALIDPROTO (ENOPROTOOPT, EPROTONOSUPPORT) is returned from
libuv, treat it as a network failure, mark the server as broken and don't
try again. :gl:`#4005`
Known Issues
~~~~~~~~~~~~

View file

@ -8178,6 +8178,7 @@ rctx_dispfail(respctx_t *rctx) {
case ISC_R_NETUNREACH:
case ISC_R_CONNREFUSED:
case ISC_R_CONNECTIONRESET:
case ISC_R_INVALIDPROTO:
case ISC_R_CANCELED:
case ISC_R_SHUTTINGDOWN:
rctx->broken_server = rctx->result;

View file

@ -95,6 +95,7 @@ typedef enum isc_result {
ISC_R_TLSBADPEERCERT, /*%< TLS peer certificate verification failed */
ISC_R_HTTP2ALPNERROR, /*%< ALPN for HTTP/2 failed */
ISC_R_DOTALPNERROR, /*%< ALPN for DoT failed */
ISC_R_INVALIDPROTO, /*%< invalid protocol */
DNS_R_LABELTOOLONG = 1 << 16,
DNS_R_BADESCAPE,

View file

@ -90,13 +90,15 @@ isc___nm_uverr2result(int uverr, bool dolog, const char *file,
return (ISC_R_MAXSIZE);
case UV_ENOTSUP:
return (ISC_R_FAMILYNOSUPPORT);
case UV_ENOPROTOOPT:
case UV_EPROTONOSUPPORT:
return (ISC_R_INVALIDPROTO);
default:
if (dolog) {
UNEXPECTED_ERROR(
file, line,
"unable to convert libuv "
"error code in %s to isc_result: %d: %s",
func, uverr, uv_strerror(uverr));
UNEXPECTED_ERROR("unable to convert libuv error code "
"in %s (%s:%d) to isc_result: %d: %s",
func, file, line, uverr,
uv_strerror(uverr));
}
return (ISC_R_UNEXPECTED);
}

View file

@ -94,6 +94,7 @@ static const char *description[ISC_R_NRESULTS] = {
[ISC_R_TLSBADPEERCERT] = "TLS peer certificate verification failed",
[ISC_R_HTTP2ALPNERROR] = "ALPN for HTTP/2 failed",
[ISC_R_DOTALPNERROR] = "ALPN for DoT failed",
[ISC_R_INVALIDPROTO] = "invalid protocol",
[DNS_R_LABELTOOLONG] = "label too long",
[DNS_R_BADESCAPE] = "bad escape",