diff --git a/bin/named/dlz_dlopen_driver.c b/bin/named/dlz_dlopen_driver.c index 45cfbfa976..bd96882b64 100644 --- a/bin/named/dlz_dlopen_driver.c +++ b/bin/named/dlz_dlopen_driver.c @@ -16,12 +16,12 @@ #include #include #include -#include #include #include #include #include +#include #include #include diff --git a/bin/named/main.c b/bin/named/main.c index 33421faeaa..2977dcbd7b 100644 --- a/bin/named/main.c +++ b/bin/named/main.c @@ -19,7 +19,6 @@ #include #include #include -#include #ifdef HAVE_DNSTAP #include @@ -44,6 +43,7 @@ #include #include #include +#include #include #include diff --git a/lib/dns/dyndb.c b/lib/dns/dyndb.c index 682e0b2eb3..253d58f9fe 100644 --- a/lib/dns/dyndb.c +++ b/lib/dns/dyndb.c @@ -12,7 +12,6 @@ */ #include -#include #include #include @@ -23,6 +22,7 @@ #include #include #include +#include #include #include diff --git a/lib/dns/tests/dispatch_test.c b/lib/dns/tests/dispatch_test.c index f51c05332e..76d498041d 100644 --- a/lib/dns/tests/dispatch_test.c +++ b/lib/dns/tests/dispatch_test.c @@ -22,7 +22,6 @@ #include #include #include -#include #define UNIT_TESTING #include @@ -32,6 +31,7 @@ #include #include #include +#include #include #include @@ -68,7 +68,7 @@ const struct in6_addr in6addr_blackhole = { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, static int setup_ephemeral_port(isc_sockaddr_t *addr, sa_family_t family) { socklen_t addrlen = sizeof(*addr); - uv_os_sock_t fd; + uv_os_sock_t fd = -1; int r; isc_sockaddr_fromin6(addr, &in6addr_loopback, 0); diff --git a/lib/isc/Makefile.am b/lib/isc/Makefile.am index 7ac556adaa..16bb818f46 100644 --- a/lib/isc/Makefile.am +++ b/lib/isc/Makefile.am @@ -97,7 +97,8 @@ libisc_la_HEADERS = \ include/isc/types.h \ include/isc/url.h \ include/isc/utf8.h \ - include/isc/util.h + include/isc/util.h \ + include/isc/uv.h libisc_la_SOURCES = \ $(libisc_la_HEADERS) \ @@ -109,9 +110,6 @@ libisc_la_SOURCES = \ netmgr/timer.c \ netmgr/tlsdns.c \ netmgr/udp.c \ - netmgr/uv-compat.c \ - netmgr/uv-compat.h \ - netmgr/uverr2result.c \ aes.c \ app.c \ assertions.c \ @@ -199,7 +197,8 @@ libisc_la_SOURCES = \ trampoline.c \ trampoline_p.h \ url.c \ - utf8.c + utf8.c \ + uv.c libisc_la_CPPFLAGS = \ $(AM_CPPFLAGS) \ diff --git a/lib/isc/include/isc/barrier.h b/lib/isc/include/isc/barrier.h index 2ff380e158..74e6327681 100644 --- a/lib/isc/include/isc/barrier.h +++ b/lib/isc/include/isc/barrier.h @@ -28,7 +28,7 @@ #else -#include +#include #define isc_barrier_t uv_barrier_t diff --git a/lib/isc/netmgr/uv-compat.h b/lib/isc/include/isc/uv.h similarity index 69% rename from lib/isc/netmgr/uv-compat.h rename to lib/isc/include/isc/uv.h index 91e5d2c107..c0f0d54154 100644 --- a/lib/isc/netmgr/uv-compat.h +++ b/lib/isc/include/isc/uv.h @@ -12,13 +12,15 @@ */ #pragma once + +#include #include +#include + /* * These functions were introduced in newer libuv, but we still * want BIND9 compile on older ones so we emulate them. - * They're inline to avoid conflicts when running with a newer - * library version. */ #define UV_VERSION(major, minor, patch) ((major << 16) | (minor << 8) | (patch)) @@ -44,6 +46,13 @@ #define UV__ERR(x) (-(x)) #endif +#if UV_VERSION_HEX < UV_VERSION(1, 12, 0) +int +uv_os_getenv(const char *name, char *buffer, size_t *size); + +#define uv_os_setenv(name, value) setenv(name, value, 0) +#endif /* UV_VERSION_HEX < UV_VERSION(1, 12, 0) */ + #if UV_VERSION_HEX < UV_VERSION(1, 19, 0) static inline void * uv_handle_get_data(const uv_handle_t *handle) { @@ -89,30 +98,33 @@ isc_uv_udp_connect(uv_udp_t *handle, const struct sockaddr *addr); #define isc_uv_udp_connect uv_udp_connect #endif /* UV_VERSION_HEX < UV_VERSION(1, 27, 0) */ -#if UV_VERSION_HEX < UV_VERSION(1, 12, 0) -#include -#include +/* + * These are used with all versions of libuv: + */ -static inline int -uv_os_getenv(const char *name, char *buffer, size_t *size) { - size_t len; - char *buf = getenv(name); - - if (buf == NULL) { - return (UV_ENOENT); +#define UV_RUNTIME_CHECK(func, ret) \ + if (ret != 0) { \ + isc_error_fatal(__FILE__, __LINE__, "%s failed: %s\n", #func, \ + uv_strerror(ret)); \ } - len = strlen(buf) + 1; - if (len > *size) { - *size = len; - return (UV_ENOBUFS); - } +#define isc_uverr2result(x) \ + isc__uverr2result(x, true, __FILE__, __LINE__, __func__) +isc_result_t +isc__uverr2result(int uverr, bool dolog, const char *file, unsigned int line, + const char *func); +/*%< + * Convert a libuv error value into an isc_result_t. The + * list of supported error values is not complete; new users + * of this function should add any expected errors that are + * not already there. + */ - *size = len; - memmove(buffer, buf, len); +/** + * Type-casting helpers + */ - return (0); -} - -#define uv_os_setenv(name, value) setenv(name, value, 0) -#endif /* UV_VERSION_HEX < UV_VERSION(1, 12, 0) */ +#define uv_handle_set_data(handle, data) \ + uv_handle_set_data((uv_handle_t *)(handle), (data)) +#define uv_handle_get_data(handle) uv_handle_get_data((uv_handle_t *)(handle)) +#define uv_close(handle, close_cb) uv_close((uv_handle_t *)handle, close_cb) diff --git a/lib/isc/netmgr/netmgr-int.h b/lib/isc/netmgr/netmgr-int.h index 0594faa5f6..bf6c3039ff 100644 --- a/lib/isc/netmgr/netmgr-int.h +++ b/lib/isc/netmgr/netmgr-int.h @@ -14,7 +14,6 @@ #pragma once #include -#include #include #include @@ -37,8 +36,7 @@ #include #include #include - -#include "uv-compat.h" +#include #define ISC_NETMGR_TID_UNKNOWN -1 @@ -1821,18 +1819,6 @@ isc__nm_http_set_tlsctx(isc_nmsocket_t *sock, isc_tlsctx_t *tlsctx); void isc__nm_async_settlsctx(isc__networker_t *worker, isc__netievent_t *ev0); -#define isc__nm_uverr2result(x) \ - isc___nm_uverr2result(x, true, __FILE__, __LINE__, __func__) -isc_result_t -isc___nm_uverr2result(int uverr, bool dolog, const char *file, - unsigned int line, const char *func); -/*%< - * Convert a libuv error value into an isc_result_t. The - * list of supported error values is not complete; new users - * of this function should add any expected errors that are - * not already there. - */ - bool isc__nm_acquire_interlocked(isc_nm_t *mgr); /*%< @@ -2149,12 +2135,6 @@ isc__nmsocket_readtimeout_cb(uv_timer_t *timer); void isc__nmsocket_writetimeout_cb(void *data, isc_result_t eresult); -#define UV_RUNTIME_CHECK(func, ret) \ - if (ret != 0) { \ - isc_error_fatal(__FILE__, __LINE__, "%s failed: %s", #func, \ - uv_strerror(ret)); \ - } - /* * Bind to the socket, but allow binding to IPv6 tentative addresses reported by * the route socket by setting IP_FREEBIND (or equivalent). diff --git a/lib/isc/netmgr/netmgr.c b/lib/isc/netmgr/netmgr.c index 0b250fe1dc..880d57ed98 100644 --- a/lib/isc/netmgr/netmgr.c +++ b/lib/isc/netmgr/netmgr.c @@ -13,7 +13,6 @@ #include #include -#include #include #include @@ -39,12 +38,12 @@ #include #include #include +#include #include "netmgr-int.h" #include "netmgr_p.h" #include "openssl_shim.h" #include "trampoline_p.h" -#include "uv-compat.h" /*% * How many isc_nmhandles and isc_nm_uvreqs will we be @@ -3097,7 +3096,7 @@ isc__nm_after_work_cb(uv_work_t *req, int status) { isc_nm_t *netmgr = work->netmgr; if (status != 0) { - result = isc__nm_uverr2result(status); + result = isc_uverr2result(status); } work->after_cb(work->data, result); diff --git a/lib/isc/netmgr/socket.c b/lib/isc/netmgr/socket.c index 291ac99fa2..7a706c44cb 100644 --- a/lib/isc/netmgr/socket.c +++ b/lib/isc/netmgr/socket.c @@ -12,9 +12,9 @@ */ #include +#include #include "netmgr-int.h" -#include "uv-compat.h" #define setsockopt_on(socket, level, name) \ setsockopt(socket, level, name, &(int){ 1 }, sizeof(int)) @@ -67,7 +67,7 @@ int isc__nm_udp_freebind(uv_udp_t *handle, const struct sockaddr *addr, unsigned int flags) { int r; - uv_os_sock_t fd; + uv_os_sock_t fd = -1; r = uv_fileno((const uv_handle_t *)handle, (uv_os_fd_t *)&fd); if (r < 0) { @@ -119,7 +119,7 @@ int isc__nm_tcp_freebind(uv_tcp_t *handle, const struct sockaddr *addr, unsigned int flags) { int r; - uv_os_sock_t fd; + uv_os_sock_t fd = -1; r = uv_fileno((const uv_handle_t *)handle, (uv_os_fd_t *)&fd); if (r < 0) { diff --git a/lib/isc/netmgr/tcp.c b/lib/isc/netmgr/tcp.c index 1ef80d4e2e..c094c365a8 100644 --- a/lib/isc/netmgr/tcp.c +++ b/lib/isc/netmgr/tcp.c @@ -13,7 +13,6 @@ #include #include -#include #include #include @@ -33,9 +32,9 @@ #include #include #include +#include #include "netmgr-int.h" -#include "uv-compat.h" static atomic_uint_fast32_t last_tcpquota_log = 0; @@ -175,7 +174,7 @@ tcp_connect_direct(isc_nmsocket_t *sock, isc__nm_uvreq_t *req) { atomic_store(&sock->connected, true); done: - result = isc__nm_uverr2result(r); + result = isc_uverr2result(r); LOCK(&sock->lock); sock->result = result; SIGNAL(&sock->cond); @@ -262,7 +261,7 @@ tcp_connect_cb(uv_connect_t *uvreq, int status) { result = ISC_R_TIMEDOUT; goto error; } else if (status != 0) { - result = isc__nm_uverr2result(status); + result = isc_uverr2result(status); goto error; } @@ -270,7 +269,7 @@ tcp_connect_cb(uv_connect_t *uvreq, int status) { r = uv_tcp_getpeername(&sock->uv_handle.tcp, (struct sockaddr *)&ss, &(int){ sizeof(ss) }); if (r != 0) { - result = isc__nm_uverr2result(r); + result = isc_uverr2result(r); goto error; } @@ -586,7 +585,7 @@ isc__nm_async_tcplisten(isc__networker_t *worker, isc__netievent_t *ev0) { isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL, ISC_LOGMODULE_NETMGR, ISC_LOG_ERROR, "uv_listen failed: %s", - isc_result_totext(isc__nm_uverr2result(r))); + isc_result_totext(isc_uverr2result(r))); isc__nm_incstats(sock, STATID_BINDFAIL); goto done; } @@ -594,7 +593,7 @@ isc__nm_async_tcplisten(isc__networker_t *worker, isc__netievent_t *ev0) { atomic_store(&sock->listening, true); done: - result = isc__nm_uverr2result(r); + result = isc_uverr2result(r); if (result != ISC_R_SUCCESS) { sock->pquota = NULL; } @@ -616,7 +615,7 @@ tcp_connection_cb(uv_stream_t *server, int status) { isc_quota_t *quota = NULL; if (status != 0) { - result = isc__nm_uverr2result(status); + result = isc_uverr2result(status); goto done; } @@ -853,7 +852,7 @@ isc__nm_tcp_read_cb(uv_stream_t *stream, ssize_t nread, const uv_buf_t *buf) { isc__nm_incstats(sock, STATID_RECVFAIL); } - isc__nm_tcp_failed_read_cb(sock, isc__nm_uverr2result(nread)); + isc__nm_tcp_failed_read_cb(sock, isc_uverr2result(nread)); goto free; } @@ -970,14 +969,14 @@ accept_connection(isc_nmsocket_t *ssock, isc_quota_t *quota) { r = uv_accept(&ssock->uv_handle.stream, &csock->uv_handle.stream); if (r != 0) { - result = isc__nm_uverr2result(r); + result = isc_uverr2result(r); goto failure; } r = uv_tcp_getpeername(&csock->uv_handle.tcp, (struct sockaddr *)&ss, &(int){ sizeof(ss) }); if (r != 0) { - result = isc__nm_uverr2result(r); + result = isc_uverr2result(r); goto failure; } @@ -990,7 +989,7 @@ accept_connection(isc_nmsocket_t *ssock, isc_quota_t *quota) { r = uv_tcp_getsockname(&csock->uv_handle.tcp, (struct sockaddr *)&ss, &(int){ sizeof(ss) }); if (r != 0) { - result = isc__nm_uverr2result(r); + result = isc_uverr2result(r); goto failure; } @@ -1090,8 +1089,7 @@ tcp_send_cb(uv_write_t *req, int status) { if (status < 0) { isc__nm_incstats(sock, STATID_SENDFAIL); - isc__nm_failed_send_cb(sock, uvreq, - isc__nm_uverr2result(status)); + isc__nm_failed_send_cb(sock, uvreq, isc_uverr2result(status)); return; } @@ -1135,7 +1133,7 @@ tcp_send_direct(isc_nmsocket_t *sock, isc__nm_uvreq_t *req) { r = uv_write(&req->uv_req.write, &sock->uv_handle.stream, &req->uvbuf, 1, tcp_send_cb); if (r < 0) { - return (isc__nm_uverr2result(r)); + return (isc_uverr2result(r)); } isc_nm_timer_create(req->handle, isc__nmsocket_writetimeout_cb, req, diff --git a/lib/isc/netmgr/tcpdns.c b/lib/isc/netmgr/tcpdns.c index 0d928069ab..e840cf40b3 100644 --- a/lib/isc/netmgr/tcpdns.c +++ b/lib/isc/netmgr/tcpdns.c @@ -13,7 +13,6 @@ #include #include -#include #include #include @@ -33,9 +32,9 @@ #include #include #include +#include #include "netmgr-int.h" -#include "uv-compat.h" static atomic_uint_fast32_t last_tcpdnsquota_log = 0; @@ -145,7 +144,7 @@ tcpdns_connect_direct(isc_nmsocket_t *sock, isc__nm_uvreq_t *req) { atomic_store(&sock->connected, true); done: - result = isc__nm_uverr2result(r); + result = isc_uverr2result(r); error: LOCK(&sock->lock); sock->result = result; @@ -225,7 +224,7 @@ tcpdns_connect_cb(uv_connect_t *uvreq, int status) { result = ISC_R_TIMEDOUT; goto error; } else if (status != 0) { - result = isc__nm_uverr2result(status); + result = isc_uverr2result(status); goto error; } @@ -233,7 +232,7 @@ tcpdns_connect_cb(uv_connect_t *uvreq, int status) { r = uv_tcp_getpeername(&sock->uv_handle.tcp, (struct sockaddr *)&ss, &(int){ sizeof(ss) }); if (r != 0) { - result = isc__nm_uverr2result(r); + result = isc_uverr2result(r); goto error; } @@ -325,7 +324,7 @@ isc_nm_tcpdnsconnect(isc_nm_t *mgr, isc_sockaddr_t *local, isc_sockaddr_t *peer, static uv_os_sock_t isc__nm_tcpdns_lb_socket(isc_nm_t *mgr, sa_family_t sa_family) { isc_result_t result; - uv_os_sock_t sock; + uv_os_sock_t sock = -1; result = isc__nm_socket(sa_family, SOCK_STREAM, 0, &sock); RUNTIME_CHECK(result == ISC_R_SUCCESS); @@ -552,7 +551,7 @@ isc__nm_async_tcpdnslisten(isc__networker_t *worker, isc__netievent_t *ev0) { isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL, ISC_LOGMODULE_NETMGR, ISC_LOG_ERROR, "uv_listen failed: %s", - isc_result_totext(isc__nm_uverr2result(r))); + isc_result_totext(isc_uverr2result(r))); isc__nm_incstats(sock, STATID_BINDFAIL); goto done; } @@ -560,7 +559,7 @@ isc__nm_async_tcpdnslisten(isc__networker_t *worker, isc__netievent_t *ev0) { atomic_store(&sock->listening, true); done: - result = isc__nm_uverr2result(r); + result = isc_uverr2result(r); if (result != ISC_R_SUCCESS) { sock->pquota = NULL; } @@ -582,7 +581,7 @@ tcpdns_connection_cb(uv_stream_t *server, int status) { isc_quota_t *quota = NULL; if (status != 0) { - result = isc__nm_uverr2result(status); + result = isc_uverr2result(status); goto done; } @@ -853,7 +852,7 @@ isc__nm_tcpdns_read_cb(uv_stream_t *stream, ssize_t nread, isc__nm_incstats(sock, STATID_RECVFAIL); } - isc__nm_failed_read_cb(sock, isc__nm_uverr2result(nread), true); + isc__nm_failed_read_cb(sock, isc_uverr2result(nread), true); goto free; } @@ -972,7 +971,7 @@ accept_connection(isc_nmsocket_t *ssock, isc_quota_t *quota) { r = uv_accept(&ssock->uv_handle.stream, &csock->uv_handle.stream); if (r != 0) { - result = isc__nm_uverr2result(r); + result = isc_uverr2result(r); goto failure; } @@ -980,7 +979,7 @@ accept_connection(isc_nmsocket_t *ssock, isc_quota_t *quota) { (struct sockaddr *)&peer_ss, &(int){ sizeof(peer_ss) }); if (r != 0) { - result = isc__nm_uverr2result(r); + result = isc_uverr2result(r); goto failure; } @@ -994,7 +993,7 @@ accept_connection(isc_nmsocket_t *ssock, isc_quota_t *quota) { (struct sockaddr *)&local_ss, &(int){ sizeof(local_ss) }); if (r != 0) { - result = isc__nm_uverr2result(r); + result = isc_uverr2result(r); goto failure; } @@ -1115,8 +1114,7 @@ tcpdns_send_cb(uv_write_t *req, int status) { if (status < 0) { isc__nm_incstats(sock, STATID_SENDFAIL); - isc__nm_failed_send_cb(sock, uvreq, - isc__nm_uverr2result(status)); + isc__nm_failed_send_cb(sock, uvreq, isc_uverr2result(status)); return; } @@ -1175,14 +1173,14 @@ isc__nm_async_tcpdnssend(isc__networker_t *worker, isc__netievent_t *ev0) { /* uv_try_write not supported, send asynchronously */ } else { /* error sending data */ - result = isc__nm_uverr2result(r); + result = isc_uverr2result(r); goto fail; } r = uv_write(&uvreq->uv_req.write, &sock->uv_handle.stream, bufs, nbufs, tcpdns_send_cb); if (r < 0) { - result = isc__nm_uverr2result(r); + result = isc_uverr2result(r); goto fail; } diff --git a/lib/isc/netmgr/timer.c b/lib/isc/netmgr/timer.c index 83287750ab..7cfa433f05 100644 --- a/lib/isc/netmgr/timer.c +++ b/lib/isc/netmgr/timer.c @@ -11,10 +11,9 @@ * information regarding copyright ownership. */ -#include - #include #include +#include #include "netmgr-int.h" diff --git a/lib/isc/netmgr/tlsdns.c b/lib/isc/netmgr/tlsdns.c index 3529c35616..15b4bcdb3e 100644 --- a/lib/isc/netmgr/tlsdns.c +++ b/lib/isc/netmgr/tlsdns.c @@ -13,7 +13,6 @@ #include #include -#include #include #include @@ -33,10 +32,10 @@ #include #include #include +#include #include "netmgr-int.h" #include "openssl_shim.h" -#include "uv-compat.h" static atomic_uint_fast32_t last_tlsdnsquota_log = 0; @@ -175,7 +174,7 @@ tlsdns_connect_direct(isc_nmsocket_t *sock, isc__nm_uvreq_t *req) { atomic_store(&sock->connected, true); done: - result = isc__nm_uverr2result(r); + result = isc_uverr2result(r); error: LOCK(&sock->lock); sock->result = result; @@ -254,7 +253,7 @@ tlsdns_connect_cb(uv_connect_t *uvreq, int status) { result = ISC_R_TIMEDOUT; goto error; } else if (status != 0) { - result = isc__nm_uverr2result(status); + result = isc_uverr2result(status); goto error; } @@ -262,7 +261,7 @@ tlsdns_connect_cb(uv_connect_t *uvreq, int status) { r = uv_tcp_getpeername(&sock->uv_handle.tcp, (struct sockaddr *)&ss, &(int){ sizeof(ss) }); if (r != 0) { - result = isc__nm_uverr2result(r); + result = isc_uverr2result(r); goto error; } @@ -640,7 +639,7 @@ isc__nm_async_tlsdnslisten(isc__networker_t *worker, isc__netievent_t *ev0) { isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL, ISC_LOGMODULE_NETMGR, ISC_LOG_ERROR, "uv_listen failed: %s", - isc_result_totext(isc__nm_uverr2result(r))); + isc_result_totext(isc_uverr2result(r))); isc__nm_incstats(sock, STATID_BINDFAIL); goto done; } @@ -648,7 +647,7 @@ isc__nm_async_tlsdnslisten(isc__networker_t *worker, isc__netievent_t *ev0) { atomic_store(&sock->listening, true); done: - result = isc__nm_uverr2result(r); + result = isc_uverr2result(r); if (result != ISC_R_SUCCESS) { sock->pquota = NULL; } @@ -670,7 +669,7 @@ tlsdns_connection_cb(uv_stream_t *server, int status) { isc_quota_t *quota = NULL; if (status != 0) { - result = isc__nm_uverr2result(status); + result = isc_uverr2result(status); goto done; } @@ -1195,7 +1194,7 @@ free_senddata(isc_nmsocket_t *sock, const isc_result_t result) { static void tls_write_cb(uv_write_t *req, int status) { - isc_result_t result = status != 0 ? isc__nm_uverr2result(status) + isc_result_t result = status != 0 ? isc_uverr2result(status) : ISC_R_SUCCESS; isc__nm_uvreq_t *uvreq = (isc__nm_uvreq_t *)req->data; isc_nmsocket_t *sock = uvreq->sock; @@ -1271,7 +1270,7 @@ tls_cycle_output(isc_nmsocket_t *sock) { /* uv_try_write is not supported, send * asynchronously */ } else { - result = isc__nm_uverr2result(r); + result = isc_uverr2result(r); isc__nm_uvreq_put(&req, sock); free_senddata(sock, result); break; @@ -1280,7 +1279,7 @@ tls_cycle_output(isc_nmsocket_t *sock) { r = uv_write(&req->uv_req.write, &sock->uv_handle.stream, &req->uvbuf, 1, tls_write_cb); if (r < 0) { - result = isc__nm_uverr2result(r); + result = isc_uverr2result(r); isc__nm_uvreq_put(&req, sock); free_senddata(sock, result); break; @@ -1408,7 +1407,7 @@ isc__nm_tlsdns_read_cb(uv_stream_t *stream, ssize_t nread, isc__nm_incstats(sock, STATID_RECVFAIL); } - isc__nm_failed_read_cb(sock, isc__nm_uverr2result(nread), true); + isc__nm_failed_read_cb(sock, isc_uverr2result(nread), true); goto free; } @@ -1528,7 +1527,7 @@ accept_connection(isc_nmsocket_t *ssock, isc_quota_t *quota) { r = uv_accept(&ssock->uv_handle.stream, &csock->uv_handle.stream); if (r != 0) { - result = isc__nm_uverr2result(r); + result = isc_uverr2result(r); goto failure; } @@ -1536,7 +1535,7 @@ accept_connection(isc_nmsocket_t *ssock, isc_quota_t *quota) { (struct sockaddr *)&peer_ss, &(int){ sizeof(peer_ss) }); if (r != 0) { - result = isc__nm_uverr2result(r); + result = isc_uverr2result(r); goto failure; } @@ -1550,7 +1549,7 @@ accept_connection(isc_nmsocket_t *ssock, isc_quota_t *quota) { (struct sockaddr *)&local_ss, &(int){ sizeof(local_ss) }); if (r != 0) { - result = isc__nm_uverr2result(r); + result = isc_uverr2result(r); goto failure; } diff --git a/lib/isc/netmgr/tlsstream.c b/lib/isc/netmgr/tlsstream.c index c7d7fafd33..2734bae7ae 100644 --- a/lib/isc/netmgr/tlsstream.c +++ b/lib/isc/netmgr/tlsstream.c @@ -14,7 +14,6 @@ #include #include #include -#include #include #include @@ -36,10 +35,10 @@ #include #include #include +#include #include "../openssl_shim.h" #include "netmgr-int.h" -#include "uv-compat.h" #define TLS_BUF_SIZE (UINT16_MAX) diff --git a/lib/isc/netmgr/udp.c b/lib/isc/netmgr/udp.c index df4312fba2..505cd0442b 100644 --- a/lib/isc/netmgr/udp.c +++ b/lib/isc/netmgr/udp.c @@ -12,7 +12,6 @@ */ #include -#include #include #include @@ -29,9 +28,9 @@ #include #include #include +#include #include "netmgr-int.h" -#include "uv-compat.h" #ifdef HAVE_NET_ROUTE_H #include @@ -87,7 +86,7 @@ stop_udp_child(isc_nmsocket_t *sock); static uv_os_sock_t isc__nm_udp_lb_socket(isc_nm_t *mgr, sa_family_t sa_family) { isc_result_t result; - uv_os_sock_t sock; + uv_os_sock_t sock = -1; result = isc__nm_socket(sa_family, SOCK_DGRAM, 0, &sock); RUNTIME_CHECK(result == ISC_R_SUCCESS); @@ -223,7 +222,7 @@ isc_nm_listenudp(isc_nm_t *mgr, uint32_t workers, isc_sockaddr_t *iface, static isc_result_t route_socket(uv_os_sock_t *fdp) { isc_result_t result; - uv_os_sock_t fd; + uv_os_sock_t fd = -1; #ifdef USE_NETLINK struct sockaddr_nl sa; int r; @@ -286,7 +285,7 @@ route_connect_direct(isc_nmsocket_t *sock) { atomic_store(&sock->connected, true); done: - result = isc__nm_uverr2result(r); + result = isc_uverr2result(r); error: LOCK(&sock->lock); @@ -502,7 +501,7 @@ isc__nm_async_udplisten(isc__networker_t *worker, isc__netievent_t *ev0) { atomic_store(&sock->listening, true); done: - result = isc__nm_uverr2result(r); + result = isc_uverr2result(r); atomic_fetch_add(&sock->parent->rchildren, 1); if (sock->parent->result == ISC_R_UNSET) { sock->parent->result = result; @@ -603,8 +602,7 @@ udp_recv_cb(uv_udp_t *handle, ssize_t nrecv, const uv_buf_t *buf, * - If there was a networking error. */ if (nrecv < 0) { - isc__nm_failed_read_cb(sock, isc__nm_uverr2result(nrecv), - false); + isc__nm_failed_read_cb(sock, isc_uverr2result(nrecv), false); goto free; } @@ -796,7 +794,7 @@ udp_send_cb(uv_udp_send_t *req, int status) { REQUIRE(sock->tid == isc_nm_tid()); if (status < 0) { - result = isc__nm_uverr2result(status); + result = isc_uverr2result(status); isc__nm_incstats(sock, STATID_SENDFAIL); } @@ -837,7 +835,7 @@ udp_send_direct(isc_nmsocket_t *sock, isc__nm_uvreq_t *req, r = uv_udp_send(&req->uv_req.udp_send, &sock->uv_handle.udp, &req->uvbuf, 1, sa, udp_send_cb); if (r < 0) { - return (isc__nm_uverr2result(r)); + return (isc_uverr2result(r)); } return (ISC_R_SUCCESS); @@ -914,7 +912,7 @@ udp_connect_direct(isc_nmsocket_t *sock, isc__nm_uvreq_t *req) { atomic_store(&sock->connected, true); done: - result = isc__nm_uverr2result(r); + result = isc_uverr2result(r); error: LOCK(&sock->lock); diff --git a/lib/isc/netmgr/uv-compat.c b/lib/isc/netmgr/uv-compat.c deleted file mode 100644 index 39ec0cfed2..0000000000 --- a/lib/isc/netmgr/uv-compat.c +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) Internet Systems Consortium, Inc. ("ISC") - * - * SPDX-License-Identifier: MPL-2.0 - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, you can obtain one at https://mozilla.org/MPL/2.0/. - * - * See the COPYRIGHT file distributed with this work for additional - * information regarding copyright ownership. - */ - -#include "uv-compat.h" -#include - -#include - -#include "netmgr-int.h" - -#if UV_VERSION_HEX < UV_VERSION(1, 27, 0) -int -isc_uv_udp_connect(uv_udp_t *handle, const struct sockaddr *addr) { - int err = 0; - - do { - int addrlen = (addr->sa_family == AF_INET) - ? sizeof(struct sockaddr_in) - : sizeof(struct sockaddr_in6); - err = connect(handle->io_watcher.fd, addr, addrlen); - } while (err == -1 && errno == EINTR); - - if (err) { -#if UV_VERSION_HEX >= UV_VERSION(1, 10, 0) - return (uv_translate_sys_error(errno)); -#else - return (-errno); -#endif /* UV_VERSION_HEX >= UV_VERSION(1, 10, 0) */ - } - - return (0); -} -#endif /* UV_VERSION_HEX < UV_VERSION(1, 27, 0) */ - -#if UV_VERSION_HEX < UV_VERSION(1, 32, 0) -int -uv_tcp_close_reset(uv_tcp_t *handle, uv_close_cb close_cb) { - if (setsockopt(handle->io_watcher.fd, SOL_SOCKET, SO_LINGER, - &(struct linger){ 1, 0 }, sizeof(struct linger)) == -1) - { -#if UV_VERSION_HEX >= UV_VERSION(1, 10, 0) - return (uv_translate_sys_error(errno)); -#else - return (-errno); -#endif /* UV_VERSION_HEX >= UV_VERSION(1, 10, 0) */ - } - - uv_close((uv_handle_t *)handle, close_cb); - return (0); -} -#endif /* UV_VERSION_HEX < UV_VERSION(1, 32, 0) */ diff --git a/lib/isc/task.c b/lib/isc/task.c index f61b46fd5d..5df035e7c7 100644 --- a/lib/isc/task.c +++ b/lib/isc/task.c @@ -20,7 +20,6 @@ #include #include -#include #include #include @@ -39,6 +38,7 @@ #include #include #include +#include #ifdef HAVE_LIBXML2 #include @@ -49,7 +49,6 @@ #include #endif /* HAVE_JSON_C */ -#include "netmgr/uv-compat.h" #include "task_p.h" /* diff --git a/lib/isc/tests/Makefile.am b/lib/isc/tests/Makefile.am index 4e93cfa3b5..07ce59c9a8 100644 --- a/lib/isc/tests/Makefile.am +++ b/lib/isc/tests/Makefile.am @@ -1,7 +1,8 @@ include $(top_srcdir)/Makefile.top AM_CPPFLAGS += \ - $(LIBISC_CFLAGS) + $(LIBISC_CFLAGS) \ + -I.. LDADD += \ libisctest.la \ diff --git a/lib/isc/tests/doh_test.c b/lib/isc/tests/doh_test.c index a2625a0a97..0d3c43448f 100644 --- a/lib/isc/tests/doh_test.c +++ b/lib/isc/tests/doh_test.c @@ -21,7 +21,6 @@ #include #include #include -#include #define UNIT_TESTING #include @@ -37,6 +36,7 @@ #include #include #include +#include #include "uv_wrap.h" #define KEEP_BEFORE @@ -44,8 +44,6 @@ #include "../netmgr/http.c" #include "../netmgr/netmgr-int.h" #include "../netmgr/socket.c" -#include "../netmgr/uv-compat.c" -#include "../netmgr/uv-compat.h" #include "../netmgr_p.h" #include "isctest.h" diff --git a/lib/isc/tests/netmgr_test.c b/lib/isc/tests/netmgr_test.c index c9c6a7504d..6c8e3ed53e 100644 --- a/lib/isc/tests/netmgr_test.c +++ b/lib/isc/tests/netmgr_test.c @@ -18,7 +18,6 @@ #include #include #include -#include #define UNIT_TESTING #include @@ -30,6 +29,7 @@ #include #include #include +#include #include "uv_wrap.h" #define KEEP_BEFORE @@ -37,8 +37,6 @@ #include "../netmgr/netmgr-int.h" #include "../netmgr/socket.c" #include "../netmgr/udp.c" -#include "../netmgr/uv-compat.c" -#include "../netmgr/uv-compat.h" #include "../netmgr_p.h" #include "isctest.h" @@ -244,7 +242,7 @@ _teardown(void **state __attribute__((unused))) { static int setup_ephemeral_port(isc_sockaddr_t *addr, sa_family_t family) { socklen_t addrlen = sizeof(*addr); - uv_os_sock_t fd; + uv_os_sock_t fd = -1; int r; isc_sockaddr_fromin6(addr, &in6addr_loopback, 0); diff --git a/lib/isc/tests/uv_wrap.h b/lib/isc/tests/uv_wrap.h index 5c557b8988..f81c0c01b5 100644 --- a/lib/isc/tests/uv_wrap.h +++ b/lib/isc/tests/uv_wrap.h @@ -23,14 +23,13 @@ #include #include #include -#include #include #define UNIT_TESTING #include -#include "../netmgr/uv-compat.h" +#include /* uv_udp_t */ diff --git a/lib/isc/netmgr/uverr2result.c b/lib/isc/uv.c similarity index 60% rename from lib/isc/netmgr/uverr2result.c rename to lib/isc/uv.c index 5ce953d729..af23012fca 100644 --- a/lib/isc/netmgr/uverr2result.c +++ b/lib/isc/uv.c @@ -11,15 +11,62 @@ * information regarding copyright ownership. */ -#include -#include +#include -#include -#include -#include #include +#include -#include "netmgr-int.h" +#if UV_VERSION_HEX < UV_VERSION(1, 12, 0) +#include +#include + +#endif + +#if UV_VERSION_HEX < UV_VERSION(1, 27, 0) +int +isc_uv_udp_connect(uv_udp_t *handle, const struct sockaddr *addr) { + int err = 0; + + do { + int addrlen = (addr->sa_family == AF_INET) + ? sizeof(struct sockaddr_in) + : sizeof(struct sockaddr_in6); + err = connect(handle->io_watcher.fd, addr, addrlen); + } while (err == -1 && errno == EINTR); + + if (err) { +#if UV_VERSION_HEX >= UV_VERSION(1, 10, 0) + return (uv_translate_sys_error(errno)); +#else + return (-errno); +#endif /* UV_VERSION_HEX >= UV_VERSION(1, 10, 0) */ + } + + return (0); +} +#endif /* UV_VERSION_HEX < UV_VERSION(1, 27, 0) */ + +#if UV_VERSION_HEX < UV_VERSION(1, 32, 0) +int +uv_tcp_close_reset(uv_tcp_t *handle, uv_close_cb close_cb) { + if (setsockopt(handle->io_watcher.fd, SOL_SOCKET, SO_LINGER, + &(struct linger){ 1, 0 }, sizeof(struct linger)) == -1) + { +#if UV_VERSION_HEX >= UV_VERSION(1, 10, 0) + return (uv_translate_sys_error(errno)); +#else + return (-errno); +#endif /* UV_VERSION_HEX >= UV_VERSION(1, 10, 0) */ + } + + INSIST(!uv_is_closing((uv_handle_t *)handle)); + uv_close((uv_handle_t *)handle, close_cb); + return (0); +} +#endif /* UV_VERSION_HEX < UV_VERSION(1, 32, 0) */ + +#define setsockopt_on(socket, level, name) \ + setsockopt(socket, level, name, &(int){ 1 }, sizeof(int)) /*% * Convert a libuv error value into an isc_result_t. The @@ -28,8 +75,8 @@ * not already there. */ isc_result_t -isc___nm_uverr2result(int uverr, bool dolog, const char *file, - unsigned int line, const char *func) { +isc__uverr2result(int uverr, bool dolog, const char *file, unsigned int line, + const char *func) { switch (uverr) { case 0: return (ISC_R_SUCCESS); diff --git a/lib/ns/hooks.c b/lib/ns/hooks.c index 27c14ed098..702d020840 100644 --- a/lib/ns/hooks.c +++ b/lib/ns/hooks.c @@ -16,7 +16,6 @@ #include #include #include -#include #include #include @@ -27,6 +26,7 @@ #include #include #include +#include #include