From b3ca979f7ffdd6384c6253629be757d7eaa58ef9 Mon Sep 17 00:00:00 2001 From: Eduardo Silva Date: Mon, 29 Jul 2024 22:25:44 -0600 Subject: [PATCH 1/2] lib: c-ares: ugprade to v1.32.3 Signed-off-by: Eduardo Silva --- lib/c-ares-1.32.0/RELEASE-NOTES.md | 38 - lib/c-ares-1.32.0/src/lib/ares_event_win32.c | 616 ----------- lib/{c-ares-1.32.0 => c-ares-1.32.3}/AUTHORS | 0 .../CMakeLists.txt | 4 +- .../CONTRIBUTING.md | 0 .../DEVELOPER-NOTES.md | 0 .../INSTALL.md | 0 .../LICENSE.md | 0 .../Makefile.Watcom | 0 .../Makefile.am | 0 .../Makefile.dj | 0 .../Makefile.in | 0 .../Makefile.m32 | 0 .../Makefile.msvc | 0 .../Makefile.netware | 0 .../README.md | 0 .../README.msvc | 0 lib/c-ares-1.32.3/RELEASE-NOTES.md | 98 ++ .../SECURITY.md | 0 .../aclocal.m4 | 0 .../aminclude_static.am | 2 +- .../buildconf | 0 .../buildconf.bat | 0 .../c-ares-config.cmake.in | 0 .../cmake/EnableWarnings.cmake | 0 .../config/compile | 0 .../config/config.guess | 0 .../config/config.sub | 0 .../config/depcomp | 0 .../config/install-sh | 0 .../config/ltmain.sh | 0 .../config/missing | 0 .../config/test-driver | 0 .../configure | 22 +- .../configure.ac | 4 +- .../docs/CMakeLists.txt | 0 .../docs/Makefile.am | 0 .../docs/Makefile.in | 1 + .../docs/Makefile.inc | 1 + .../docs/adig.1 | 0 .../docs/ahost.1 | 0 .../docs/ares_cancel.3 | 0 .../docs/ares_create_query.3 | 0 .../docs/ares_destroy.3 | 0 .../docs/ares_destroy_options.3 | 0 .../docs/ares_dns_class_fromstr.3 | 0 .../docs/ares_dns_class_t.3 | 0 .../docs/ares_dns_class_tostr.3 | 0 .../docs/ares_dns_datatype_t.3 | 0 .../docs/ares_dns_flags_t.3 | 0 .../docs/ares_dns_mapping.3 | 0 .../docs/ares_dns_opcode_t.3 | 0 .../docs/ares_dns_opcode_tostr.3 | 0 .../docs/ares_dns_opt_datatype_t.3 | 0 .../docs/ares_dns_opt_get_datatype.3 | 0 .../docs/ares_dns_opt_get_name.3 | 0 .../docs/ares_dns_parse.3 | 0 .../docs/ares_dns_rcode_t.3 | 0 .../docs/ares_dns_rcode_tostr.3 | 0 .../docs/ares_dns_rec_type_fromstr.3 | 0 .../docs/ares_dns_rec_type_t.3 | 0 .../docs/ares_dns_rec_type_tostr.3 | 0 .../docs/ares_dns_record.3 | 23 +- .../docs/ares_dns_record_create.3 | 0 .../docs/ares_dns_record_destroy.3 | 0 .../docs/ares_dns_record_duplicate.3 | 0 .../docs/ares_dns_record_get_flags.3 | 0 .../docs/ares_dns_record_get_id.3 | 0 .../docs/ares_dns_record_get_opcode.3 | 0 .../docs/ares_dns_record_get_rcode.3 | 0 .../docs/ares_dns_record_query_add.3 | 0 .../docs/ares_dns_record_query_cnt.3 | 0 .../docs/ares_dns_record_query_get.3 | 0 .../docs/ares_dns_record_query_set_name.3 | 0 .../docs/ares_dns_record_query_set_type.3 | 0 .../docs/ares_dns_record_rr_add.3 | 0 .../docs/ares_dns_record_rr_cnt.3 | 0 .../docs/ares_dns_record_rr_del.3 | 0 .../docs/ares_dns_record_rr_get.3 | 0 .../docs/ares_dns_record_rr_get_const.3 | 0 .../docs/ares_dns_record_set_id.3} | 0 .../docs/ares_dns_rr.3 | 0 .../docs/ares_dns_rr_add_abin.3 | 0 .../docs/ares_dns_rr_del_abin.3 | 0 .../docs/ares_dns_rr_get_abin.3 | 0 .../docs/ares_dns_rr_get_abin_cnt.3 | 0 .../docs/ares_dns_rr_get_addr.3 | 0 .../docs/ares_dns_rr_get_addr6.3 | 0 .../docs/ares_dns_rr_get_bin.3 | 0 .../docs/ares_dns_rr_get_class.3 | 0 .../docs/ares_dns_rr_get_keys.3 | 0 .../docs/ares_dns_rr_get_name.3 | 0 .../docs/ares_dns_rr_get_opt.3 | 0 .../docs/ares_dns_rr_get_opt_byid.3 | 0 .../docs/ares_dns_rr_get_opt_cnt.3 | 0 .../docs/ares_dns_rr_get_str.3 | 0 .../docs/ares_dns_rr_get_ttl.3 | 0 .../docs/ares_dns_rr_get_type.3 | 0 .../docs/ares_dns_rr_get_u16.3 | 0 .../docs/ares_dns_rr_get_u32.3 | 0 .../docs/ares_dns_rr_get_u8.3 | 0 .../docs/ares_dns_rr_key_datatype.3 | 0 .../docs/ares_dns_rr_key_t.3 | 0 .../docs/ares_dns_rr_key_to_rec_type.3 | 0 .../docs/ares_dns_rr_key_tostr.3 | 0 .../docs/ares_dns_rr_set_addr.3 | 0 .../docs/ares_dns_rr_set_addr6.3 | 0 .../docs/ares_dns_rr_set_bin.3 | 0 .../docs/ares_dns_rr_set_opt.3 | 0 .../docs/ares_dns_rr_set_str.3 | 0 .../docs/ares_dns_rr_set_u16.3 | 0 .../docs/ares_dns_rr_set_u32.3 | 0 .../docs/ares_dns_rr_set_u8.3 | 0 .../docs/ares_dns_section_t.3 | 0 .../docs/ares_dns_section_tostr.3 | 0 lib/c-ares-1.32.3/docs/ares_dns_write.3 | 3 + .../docs/ares_dup.3 | 0 .../docs/ares_expand_name.3 | 0 .../docs/ares_expand_string.3 | 0 .../docs/ares_fds.3 | 0 .../docs/ares_free_data.3 | 0 .../docs/ares_free_hostent.3 | 0 .../docs/ares_free_string.3 | 0 .../docs/ares_freeaddrinfo.3 | 0 .../docs/ares_get_servers.3 | 0 .../docs/ares_get_servers_csv.3 | 0 .../docs/ares_get_servers_ports.3 | 0 .../docs/ares_getaddrinfo.3 | 0 .../docs/ares_gethostbyaddr.3 | 0 .../docs/ares_gethostbyname.3 | 0 .../docs/ares_gethostbyname_file.3 | 0 .../docs/ares_getnameinfo.3 | 0 .../docs/ares_getsock.3 | 0 .../docs/ares_inet_ntop.3 | 0 .../docs/ares_inet_pton.3 | 0 .../docs/ares_init.3 | 0 .../docs/ares_init_options.3 | 0 .../docs/ares_library_cleanup.3 | 0 .../docs/ares_library_init.3 | 0 .../docs/ares_library_init_android.3 | 0 .../docs/ares_library_initialized.3 | 0 .../docs/ares_mkquery.3 | 0 .../docs/ares_opt_param_t.3 | 0 .../docs/ares_parse_a_reply.3 | 0 .../docs/ares_parse_aaaa_reply.3 | 0 .../docs/ares_parse_caa_reply.3 | 0 .../docs/ares_parse_mx_reply.3 | 0 .../docs/ares_parse_naptr_reply.3 | 0 .../docs/ares_parse_ns_reply.3 | 0 .../docs/ares_parse_ptr_reply.3 | 0 .../docs/ares_parse_soa_reply.3 | 0 .../docs/ares_parse_srv_reply.3 | 0 .../docs/ares_parse_txt_reply.3 | 0 .../docs/ares_parse_uri_reply.3 | 0 .../docs/ares_process.3 | 0 .../docs/ares_query.3 | 0 .../docs/ares_query_dnsrec.3 | 0 .../docs/ares_queue.3 | 0 .../docs/ares_queue_active_queries.3 | 0 .../docs/ares_queue_wait_empty.3 | 0 .../docs/ares_reinit.3 | 0 .../docs/ares_save_options.3 | 0 .../docs/ares_search.3 | 0 .../docs/ares_search_dnsrec.3 | 0 .../docs/ares_send.3 | 0 .../docs/ares_send_dnsrec.3 | 0 .../docs/ares_set_local_dev.3 | 0 .../docs/ares_set_local_ip4.3 | 0 .../docs/ares_set_local_ip6.3 | 0 .../docs/ares_set_server_state_callback.3 | 0 .../docs/ares_set_servers.3 | 0 .../docs/ares_set_servers_csv.3 | 0 .../docs/ares_set_servers_ports.3 | 0 .../docs/ares_set_servers_ports_csv.3 | 0 .../docs/ares_set_socket_callback.3 | 0 .../docs/ares_set_socket_configure_callback.3 | 0 .../docs/ares_set_socket_functions.3 | 0 .../docs/ares_set_sortlist.3 | 0 .../docs/ares_strerror.3 | 0 .../docs/ares_svcb_param_t.3 | 0 .../docs/ares_threadsafety.3 | 0 .../docs/ares_timeout.3 | 0 .../docs/ares_tlsa_match_t.3 | 0 .../docs/ares_tlsa_selector_t.3 | 0 .../docs/ares_tlsa_usage_t.3 | 0 .../docs/ares_version.3 | 0 .../include/CMakeLists.txt | 0 .../include/Makefile.am | 0 .../include/Makefile.in | 0 .../include/ares.h | 0 .../include/ares_build.h | 0 .../include/ares_build.h.cmake | 0 .../include/ares_build.h.in | 0 .../include/ares_dns.h | 0 .../include/ares_dns_record.h | 0 .../include/ares_nameser.h | 0 .../include/ares_version.h | 4 +- .../libcares.pc.cmake | 0 .../libcares.pc.in | 0 .../m4/ax_ac_append_to_file.m4 | 0 .../m4/ax_ac_print_to_file.m4 | 0 .../m4/ax_add_am_macro_static.m4 | 0 .../m4/ax_am_macros_static.m4 | 0 .../m4/ax_append_compile_flags.m4 | 0 .../m4/ax_append_flag.m4 | 0 .../m4/ax_append_link_flags.m4 | 0 .../m4/ax_check_compile_flag.m4 | 0 .../m4/ax_check_gnu_make.m4 | 0 .../m4/ax_check_link_flag.m4 | 0 .../m4/ax_check_user_namespace.m4 | 0 .../m4/ax_check_uts_namespace.m4 | 0 .../m4/ax_code_coverage.m4 | 0 .../m4/ax_compiler_vendor.m4 | 0 .../m4/ax_cxx_compile_stdcxx.m4 | 0 .../m4/ax_cxx_compile_stdcxx_14.m4 | 0 .../m4/ax_file_escapes.m4 | 0 .../m4/ax_pthread.m4 | 0 .../m4/ax_require_defined.m4 | 0 .../m4/libtool.m4 | 0 .../m4/ltoptions.m4 | 0 .../m4/ltsugar.m4 | 0 .../m4/ltversion.m4 | 0 .../m4/lt~obsolete.m4 | 0 .../m4/pkg.m4 | 0 .../msvc_ver.inc | 0 .../src/CMakeLists.txt | 0 .../src/Makefile.am | 0 .../src/Makefile.in | 0 .../src/lib/CMakeLists.txt | 0 .../src/lib/Makefile.am | 0 .../src/lib/Makefile.in | 2 +- .../src/lib/Makefile.inc | 0 .../src/lib/ares__addrinfo2hostent.c | 0 .../src/lib/ares__addrinfo_localhost.c | 0 .../src/lib/ares__buf.c | 0 .../src/lib/ares__buf.h | 0 .../src/lib/ares__close_sockets.c | 92 +- .../src/lib/ares__hosts_file.c | 162 +-- .../src/lib/ares__htable.c | 0 .../src/lib/ares__htable.h | 0 .../src/lib/ares__htable_asvp.c | 0 .../src/lib/ares__htable_asvp.h | 0 .../src/lib/ares__htable_strvp.c | 0 .../src/lib/ares__htable_strvp.h | 0 .../src/lib/ares__htable_szvp.c | 0 .../src/lib/ares__htable_szvp.h | 0 .../src/lib/ares__htable_vpvp.c | 0 .../src/lib/ares__htable_vpvp.h | 0 .../src/lib/ares__iface_ips.c | 0 .../src/lib/ares__iface_ips.h | 0 .../src/lib/ares__llist.c | 0 .../src/lib/ares__llist.h | 0 .../src/lib/ares__parse_into_addrinfo.c | 0 .../src/lib/ares__slist.c | 0 .../src/lib/ares__slist.h | 0 .../src/lib/ares__socket.c | 8 + .../src/lib/ares__sortaddrinfo.c | 0 .../src/lib/ares__threads.c | 14 +- .../src/lib/ares__threads.h | 0 .../src/lib/ares__timeval.c | 21 +- .../src/lib/ares_android.c | 0 .../src/lib/ares_android.h | 0 .../src/lib/ares_cancel.c | 8 +- .../src/lib/ares_config.h.cmake | 0 .../src/lib/ares_config.h.in | 0 .../src/lib/ares_create_query.c | 0 .../src/lib/ares_data.c | 0 .../src/lib/ares_data.h | 0 .../src/lib/ares_destroy.c | 18 +- .../src/lib/ares_dns_mapping.c | 0 .../src/lib/ares_dns_multistring.c | 0 .../src/lib/ares_dns_multistring.h | 0 .../src/lib/ares_dns_name.c | 0 .../src/lib/ares_dns_parse.c | 0 .../src/lib/ares_dns_private.h | 2 + .../src/lib/ares_dns_record.c | 31 +- .../src/lib/ares_dns_write.c | 0 .../src/lib/ares_event.h | 0 .../src/lib/ares_event_configchg.c | 11 +- .../src/lib/ares_event_epoll.c | 0 .../src/lib/ares_event_kqueue.c | 9 +- .../src/lib/ares_event_poll.c | 0 .../src/lib/ares_event_select.c | 7 +- .../src/lib/ares_event_thread.c | 59 +- .../src/lib/ares_event_wake_pipe.c | 0 lib/c-ares-1.32.3/src/lib/ares_event_win32.c | 972 ++++++++++++++++++ .../src/lib/ares_event_win32.h | 58 +- .../src/lib/ares_expand_name.c | 0 .../src/lib/ares_expand_string.c | 0 .../src/lib/ares_fds.c | 0 .../src/lib/ares_free_hostent.c | 0 .../src/lib/ares_free_string.c | 0 .../src/lib/ares_freeaddrinfo.c | 0 .../src/lib/ares_getaddrinfo.c | 0 .../src/lib/ares_getenv.c | 0 .../src/lib/ares_getenv.h | 0 .../src/lib/ares_gethostbyaddr.c | 0 .../src/lib/ares_gethostbyname.c | 0 .../src/lib/ares_getnameinfo.c | 0 .../src/lib/ares_getsock.c | 0 .../src/lib/ares_inet_net_pton.h | 0 .../src/lib/ares_init.c | 8 +- .../src/lib/ares_ipv6.h | 0 .../src/lib/ares_library_init.c | 0 .../src/lib/ares_math.c | 0 .../src/lib/ares_metrics.c | 9 +- .../src/lib/ares_options.c | 0 .../src/lib/ares_parse_a_reply.c | 0 .../src/lib/ares_parse_aaaa_reply.c | 0 .../src/lib/ares_parse_caa_reply.c | 0 .../src/lib/ares_parse_mx_reply.c | 0 .../src/lib/ares_parse_naptr_reply.c | 0 .../src/lib/ares_parse_ns_reply.c | 0 .../src/lib/ares_parse_ptr_reply.c | 0 .../src/lib/ares_parse_soa_reply.c | 0 .../src/lib/ares_parse_srv_reply.c | 0 .../src/lib/ares_parse_txt_reply.c | 0 .../src/lib/ares_parse_uri_reply.c | 0 .../src/lib/ares_platform.c | 0 .../src/lib/ares_platform.h | 0 .../src/lib/ares_private.h | 15 +- .../src/lib/ares_process.c | 118 ++- .../src/lib/ares_qcache.c | 0 .../src/lib/ares_query.c | 0 .../src/lib/ares_rand.c | 0 .../src/lib/ares_search.c | 0 .../src/lib/ares_send.c | 8 +- .../src/lib/ares_setup.h | 0 .../src/lib/ares_str.c | 0 .../src/lib/ares_str.h | 0 .../src/lib/ares_strcasecmp.c | 0 .../src/lib/ares_strcasecmp.h | 0 .../src/lib/ares_strerror.c | 0 .../src/lib/ares_strsplit.c | 0 .../src/lib/ares_strsplit.h | 0 .../src/lib/ares_sysconfig.c | 0 .../src/lib/ares_sysconfig_files.c | 0 .../src/lib/ares_sysconfig_mac.c | 0 .../src/lib/ares_sysconfig_win.c | 5 +- .../src/lib/ares_timeout.c | 0 .../src/lib/ares_update_servers.c | 0 .../src/lib/ares_version.c | 0 .../src/lib/cares.rc | 0 .../src/lib/config-dos.h | 0 .../src/lib/config-win32.h | 0 .../src/lib/inet_net_pton.c | 0 .../src/lib/inet_ntop.c | 0 .../src/lib/thirdparty/apple/dnsinfo.h | 0 .../src/lib/windows_port.c | 0 .../src/tools/CMakeLists.txt | 3 + .../src/tools/Makefile.am | 0 .../src/tools/Makefile.in | 0 .../src/tools/Makefile.inc | 0 .../src/tools/adig.c | 0 .../src/tools/ahost.c | 0 .../src/tools/ares_getopt.c | 0 .../src/tools/ares_getopt.h | 0 .../test/CMakeLists.txt | 0 .../test/Makefile.am | 0 .../test/Makefile.in | 0 .../test/Makefile.inc | 0 .../test/Makefile.m32 | 0 .../test/Makefile.msvc | 0 .../test/README.md | 0 .../test/ares-fuzz.c | 0 .../test/ares-test-ai.h | 0 .../test/ares-test-fuzz-name.c | 0 .../test/ares-test-fuzz.c | 0 .../test/ares-test-init.cc | 0 .../test/ares-test-internal.cc | 0 .../test/ares-test-live.cc | 0 .../test/ares-test-main.cc | 0 .../test/ares-test-misc.cc | 0 .../test/ares-test-mock-ai.cc | 98 +- .../test/ares-test-mock-et.cc | 189 +++- .../test/ares-test-mock.cc | 113 +- .../test/ares-test-ns.cc | 0 .../test/ares-test-parse-a.cc | 0 .../test/ares-test-parse-aaaa.cc | 0 .../test/ares-test-parse-caa.cc | 0 .../test/ares-test-parse-mx.cc | 0 .../test/ares-test-parse-naptr.cc | 0 .../test/ares-test-parse-ns.cc | 0 .../test/ares-test-parse-ptr.cc | 0 .../test/ares-test-parse-soa-any.cc | 0 .../test/ares-test-parse-soa.cc | 0 .../test/ares-test-parse-srv.cc | 0 .../test/ares-test-parse-txt.cc | 0 .../test/ares-test-parse-uri.cc | 0 .../test/ares-test-parse.cc | 0 .../test/ares-test.cc | 115 +-- .../test/ares-test.h | 2 + .../test/ares_queryloop.c | 0 .../test/dns-dump.cc | 0 .../test/dns-proto-test.cc | 0 .../test/dns-proto.cc | 0 .../test/dns-proto.h | 0 .../test/fuzzcheck.sh | 0 .../004a216d3cff18b0c5c6b68b807f1529 | Bin .../00539467ca159b36aea95e61f9729115 | Bin .../00e846db8f43f2f507cd1666ed5a753e | Bin .../0177b7566f08c013699eaea9a77abeb3 | Bin .../020a4fa317715bfdb236ed13751e6b65 | Bin .../0310f2e81bea31f4fe3f330872a877dd | Bin .../0449be67df1730b2d0887d412a9b7cc4 | Bin .../0449dd14f7aa94bf0d716bfe09b287a8 | Bin .../04c93cdf7208979aa4df80a3a0d5a2d8 | Bin .../0567e7171e08e75f3f91c4ca74c17adc | Bin .../05ba948578a397e9cbc6a7b3e78622fa | Bin .../060afe5ed25f3e2e86167e545f27edca | Bin .../06d47d3681493f1b1d41236f460d896f | Bin .../0724a810b0e131c2fddb6de9003b9064 | Bin .../0b5279148826f5b962bcf1896bdb4ede | Bin .../114048c0f6b10bdc67ce9166405d195e | Bin .../11b8464a0ef8735d202955c34c36b0c7 | Bin .../11cb626f1668c7b41954ce7d768fe528 | Bin .../14b133bf18125b75a1976fa63a1df6b7 | Bin .../153c6b3afa8faa03c8bc28f936a6d4cf | Bin .../182cad2a342ed7317b7c21a5d17020d1 | Bin .../1c61a61bb7057b52c5b15188345a5238 | Bin .../1dbe2cf62ed2e4fa1c3cb473f08710b5 | Bin .../21199be504fcfece5c7096ee0dbba507 | Bin .../21891480074b5635dbbe7137bdcabccd | Bin .../233aea42e15aa73e131eefabf16088c9 | Bin .../24660d4e7ac7aa21d600ea7a3d198bbb | Bin .../25589deb55c08429345f289d1c9b0254 | Bin .../2573bd823e4da11f727a17f8e1f35c26 | Bin .../276f12da56866273e76059ad0e7be97e | Bin .../29198a2e380cb19babec9e02116d213e | Bin .../2c94ba9434b1a1b9396fc5364f101363 | Bin .../2d578c357dc2f5e02dc55cddb30641d1 | Bin .../2dff6cc5a223e67fde9e5e79af456992 | Bin .../2f103b1f9477f2d8934bd84328d51c75 | Bin .../31cd3a8413de13d9624adbb1613784bf | Bin .../36415bdf1d180098fe6234b4186e69f3 | Bin .../3a04a80f0242e8dff0cd732e7c4767da | Bin .../44d0f973b7b0fb3e4a07770c943dcd5a | Bin .../50bc00daa0ddcd6cfb2b5d9f62c81f47 | Bin .../51ed2d1fb77b3078b54e94e85606b7df | Bin .../5c5e0e899cf2e7d053a9e45fb76f6e5a | Bin .../70152ed033f139443fbfb1b858bb3b1b | Bin .../7030ca2b24e5a7f9dd8f62096a48eb33 | Bin .../71eec1a0ef2d25bb9e2ef17f23be7e9e | Bin .../7a6b0177210ea4ef40b254daf99393c5 | Bin .../7f1567733711ffb61839621af0cbfa33 | Bin .../850c6d57c5bb7be8205fc2438d14d7e5 | Bin .../a5c8cd2784a5792b9e91c2d7895b3b34 | Bin .../a9135cdc7151d023300ff194bad90af9 | Bin .../af2597e8ac7dec1e8b4a47518312912a | Bin .../test/fuzzinput/answer_a | Bin .../test/fuzzinput/answer_aaaa | Bin .../b3f53ef826b831bb09dd25c7f5960249 | Bin .../cda0f8751f5c4993974c2b549d29bcc8 | Bin .../ce6c26c0e469339873d0e7f616ab0945 | Bin .../fuzzinput/clusterfuzz-5637790584012800 | Bin .../fuzzinput/clusterfuzz-5650695891451904 | Bin .../fuzzinput/clusterfuzz-5651369832218624 | Bin .../fuzzinput/clusterfuzz-5674462260756480 | Bin .../fuzzinput/clusterfuzz-5680630672654336 | Bin .../fuzzinput/clusterfuzz-5683497160671232 | Bin .../fuzzinput/clusterfuzz-5687310655422464 | Bin .../fuzzinput/clusterfuzz-5695341573177344 | Bin .../fuzzinput/clusterfuzz-5697835103682560 | Bin .../fuzzinput/clusterfuzz-5728518081609728 | Bin .../fuzzinput/clusterfuzz-5732960017317888 | Bin .../e4dd7e7c2dd4ed7c2e17a6af5d04f9c9 | Bin .../ed50ed8ee36230a5a69746ad830437e5 | Bin .../f1b900d50806021953321c3b604ee497 | Bin .../f6606f624be8c628328cea01d2cd07a9 | Bin .../f89f6c8176b564a7dd646f14305573ce | Bin .../f9ad508d2dbd08d3aaaabc7d1174677d | Bin .../test/fuzzinput/multi-indir | Bin .../test/fuzznames/name01 | 0 .../test/fuzznames/name02 | 0 .../test/fuzznames/name03 | 0 .../test/fuzznames/name04 | 0 .../test/fuzznames/name05 | 0 .../test/fuzznames/name06 | 0 .../test/fuzznames/name07 | 0 .../test/fuzznames/name08 | 0 .../test/fuzznames/name09 | 0 481 files changed, 1857 insertions(+), 1116 deletions(-) delete mode 100644 lib/c-ares-1.32.0/RELEASE-NOTES.md delete mode 100644 lib/c-ares-1.32.0/src/lib/ares_event_win32.c rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/AUTHORS (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/CMakeLists.txt (99%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/CONTRIBUTING.md (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/DEVELOPER-NOTES.md (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/INSTALL.md (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/LICENSE.md (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/Makefile.Watcom (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/Makefile.am (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/Makefile.dj (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/Makefile.in (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/Makefile.m32 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/Makefile.msvc (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/Makefile.netware (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/README.md (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/README.msvc (100%) create mode 100644 lib/c-ares-1.32.3/RELEASE-NOTES.md rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/SECURITY.md (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/aclocal.m4 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/aminclude_static.am (99%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/buildconf (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/buildconf.bat (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/c-ares-config.cmake.in (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/cmake/EnableWarnings.cmake (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/config/compile (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/config/config.guess (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/config/config.sub (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/config/depcomp (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/config/install-sh (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/config/ltmain.sh (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/config/missing (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/config/test-driver (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/configure (99%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/configure.ac (99%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/CMakeLists.txt (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/Makefile.am (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/Makefile.in (99%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/Makefile.inc (99%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/adig.1 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ahost.1 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_cancel.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_create_query.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_destroy.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_destroy_options.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_class_fromstr.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_class_t.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_class_tostr.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_datatype_t.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_flags_t.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_mapping.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_opcode_t.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_opcode_tostr.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_opt_datatype_t.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_opt_get_datatype.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_opt_get_name.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_parse.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_rcode_t.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_rcode_tostr.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_rec_type_fromstr.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_rec_type_t.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_rec_type_tostr.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_record.3 (94%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_record_create.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_record_destroy.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_record_duplicate.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_record_get_flags.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_record_get_id.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_record_get_opcode.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_record_get_rcode.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_record_query_add.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_record_query_cnt.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_record_query_get.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_record_query_set_name.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_record_query_set_type.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_record_rr_add.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_record_rr_cnt.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_record_rr_del.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_record_rr_get.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_record_rr_get_const.3 (100%) rename lib/{c-ares-1.32.0/docs/ares_dns_write.3 => c-ares-1.32.3/docs/ares_dns_record_set_id.3} (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_rr.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_rr_add_abin.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_rr_del_abin.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_rr_get_abin.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_rr_get_abin_cnt.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_rr_get_addr.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_rr_get_addr6.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_rr_get_bin.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_rr_get_class.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_rr_get_keys.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_rr_get_name.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_rr_get_opt.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_rr_get_opt_byid.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_rr_get_opt_cnt.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_rr_get_str.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_rr_get_ttl.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_rr_get_type.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_rr_get_u16.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_rr_get_u32.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_rr_get_u8.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_rr_key_datatype.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_rr_key_t.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_rr_key_to_rec_type.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_rr_key_tostr.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_rr_set_addr.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_rr_set_addr6.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_rr_set_bin.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_rr_set_opt.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_rr_set_str.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_rr_set_u16.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_rr_set_u32.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_rr_set_u8.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_section_t.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dns_section_tostr.3 (100%) create mode 100644 lib/c-ares-1.32.3/docs/ares_dns_write.3 rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_dup.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_expand_name.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_expand_string.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_fds.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_free_data.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_free_hostent.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_free_string.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_freeaddrinfo.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_get_servers.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_get_servers_csv.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_get_servers_ports.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_getaddrinfo.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_gethostbyaddr.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_gethostbyname.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_gethostbyname_file.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_getnameinfo.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_getsock.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_inet_ntop.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_inet_pton.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_init.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_init_options.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_library_cleanup.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_library_init.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_library_init_android.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_library_initialized.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_mkquery.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_opt_param_t.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_parse_a_reply.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_parse_aaaa_reply.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_parse_caa_reply.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_parse_mx_reply.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_parse_naptr_reply.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_parse_ns_reply.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_parse_ptr_reply.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_parse_soa_reply.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_parse_srv_reply.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_parse_txt_reply.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_parse_uri_reply.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_process.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_query.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_query_dnsrec.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_queue.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_queue_active_queries.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_queue_wait_empty.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_reinit.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_save_options.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_search.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_search_dnsrec.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_send.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_send_dnsrec.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_set_local_dev.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_set_local_ip4.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_set_local_ip6.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_set_server_state_callback.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_set_servers.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_set_servers_csv.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_set_servers_ports.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_set_servers_ports_csv.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_set_socket_callback.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_set_socket_configure_callback.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_set_socket_functions.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_set_sortlist.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_strerror.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_svcb_param_t.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_threadsafety.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_timeout.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_tlsa_match_t.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_tlsa_selector_t.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_tlsa_usage_t.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/docs/ares_version.3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/include/CMakeLists.txt (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/include/Makefile.am (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/include/Makefile.in (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/include/ares.h (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/include/ares_build.h (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/include/ares_build.h.cmake (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/include/ares_build.h.in (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/include/ares_dns.h (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/include/ares_dns_record.h (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/include/ares_nameser.h (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/include/ares_version.h (96%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/libcares.pc.cmake (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/libcares.pc.in (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/m4/ax_ac_append_to_file.m4 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/m4/ax_ac_print_to_file.m4 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/m4/ax_add_am_macro_static.m4 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/m4/ax_am_macros_static.m4 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/m4/ax_append_compile_flags.m4 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/m4/ax_append_flag.m4 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/m4/ax_append_link_flags.m4 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/m4/ax_check_compile_flag.m4 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/m4/ax_check_gnu_make.m4 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/m4/ax_check_link_flag.m4 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/m4/ax_check_user_namespace.m4 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/m4/ax_check_uts_namespace.m4 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/m4/ax_code_coverage.m4 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/m4/ax_compiler_vendor.m4 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/m4/ax_cxx_compile_stdcxx.m4 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/m4/ax_cxx_compile_stdcxx_14.m4 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/m4/ax_file_escapes.m4 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/m4/ax_pthread.m4 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/m4/ax_require_defined.m4 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/m4/libtool.m4 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/m4/ltoptions.m4 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/m4/ltsugar.m4 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/m4/ltversion.m4 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/m4/lt~obsolete.m4 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/m4/pkg.m4 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/msvc_ver.inc (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/CMakeLists.txt (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/Makefile.am (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/Makefile.in (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/CMakeLists.txt (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/Makefile.am (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/Makefile.in (99%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/Makefile.inc (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares__addrinfo2hostent.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares__addrinfo_localhost.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares__buf.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares__buf.h (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares__close_sockets.c (56%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares__hosts_file.c (87%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares__htable.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares__htable.h (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares__htable_asvp.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares__htable_asvp.h (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares__htable_strvp.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares__htable_strvp.h (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares__htable_szvp.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares__htable_szvp.h (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares__htable_vpvp.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares__htable_vpvp.h (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares__iface_ips.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares__iface_ips.h (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares__llist.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares__llist.h (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares__parse_into_addrinfo.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares__slist.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares__slist.h (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares__socket.c (98%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares__sortaddrinfo.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares__threads.c (96%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares__threads.h (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares__timeval.c (76%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_android.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_android.h (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_cancel.c (94%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_config.h.cmake (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_config.h.in (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_create_query.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_data.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_data.h (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_destroy.c (83%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_dns_mapping.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_dns_multistring.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_dns_multistring.h (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_dns_name.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_dns_parse.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_dns_private.h (98%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_dns_record.c (98%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_dns_write.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_event.h (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_event_configchg.c (98%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_event_epoll.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_event_kqueue.c (96%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_event_poll.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_event_select.c (94%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_event_thread.c (92%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_event_wake_pipe.c (100%) create mode 100644 lib/c-ares-1.32.3/src/lib/ares_event_win32.c rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_event_win32.h (62%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_expand_name.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_expand_string.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_fds.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_free_hostent.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_free_string.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_freeaddrinfo.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_getaddrinfo.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_getenv.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_getenv.h (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_gethostbyaddr.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_gethostbyname.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_getnameinfo.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_getsock.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_inet_net_pton.h (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_init.c (98%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_ipv6.h (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_library_init.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_math.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_metrics.c (98%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_options.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_parse_a_reply.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_parse_aaaa_reply.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_parse_caa_reply.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_parse_mx_reply.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_parse_naptr_reply.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_parse_ns_reply.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_parse_ptr_reply.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_parse_soa_reply.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_parse_srv_reply.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_parse_txt_reply.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_parse_uri_reply.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_platform.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_platform.h (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_private.h (98%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_process.c (93%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_qcache.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_query.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_rand.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_search.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_send.c (98%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_setup.h (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_str.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_str.h (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_strcasecmp.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_strcasecmp.h (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_strerror.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_strsplit.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_strsplit.h (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_sysconfig.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_sysconfig_files.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_sysconfig_mac.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_sysconfig_win.c (99%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_timeout.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_update_servers.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/ares_version.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/cares.rc (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/config-dos.h (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/config-win32.h (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/inet_net_pton.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/inet_ntop.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/thirdparty/apple/dnsinfo.h (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/lib/windows_port.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/tools/CMakeLists.txt (91%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/tools/Makefile.am (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/tools/Makefile.in (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/tools/Makefile.inc (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/tools/adig.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/tools/ahost.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/tools/ares_getopt.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/src/tools/ares_getopt.h (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/CMakeLists.txt (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/Makefile.am (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/Makefile.in (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/Makefile.inc (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/Makefile.m32 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/Makefile.msvc (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/README.md (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/ares-fuzz.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/ares-test-ai.h (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/ares-test-fuzz-name.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/ares-test-fuzz.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/ares-test-init.cc (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/ares-test-internal.cc (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/ares-test-live.cc (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/ares-test-main.cc (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/ares-test-misc.cc (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/ares-test-mock-ai.cc (88%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/ares-test-mock-et.cc (87%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/ares-test-mock.cc (93%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/ares-test-ns.cc (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/ares-test-parse-a.cc (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/ares-test-parse-aaaa.cc (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/ares-test-parse-caa.cc (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/ares-test-parse-mx.cc (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/ares-test-parse-naptr.cc (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/ares-test-parse-ns.cc (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/ares-test-parse-ptr.cc (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/ares-test-parse-soa-any.cc (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/ares-test-parse-soa.cc (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/ares-test-parse-srv.cc (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/ares-test-parse-txt.cc (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/ares-test-parse-uri.cc (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/ares-test-parse.cc (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/ares-test.cc (94%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/ares-test.h (99%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/ares_queryloop.c (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/dns-dump.cc (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/dns-proto-test.cc (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/dns-proto.cc (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/dns-proto.h (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzcheck.sh (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/004a216d3cff18b0c5c6b68b807f1529 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/00539467ca159b36aea95e61f9729115 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/00e846db8f43f2f507cd1666ed5a753e (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/0177b7566f08c013699eaea9a77abeb3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/020a4fa317715bfdb236ed13751e6b65 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/0310f2e81bea31f4fe3f330872a877dd (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/0449be67df1730b2d0887d412a9b7cc4 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/0449dd14f7aa94bf0d716bfe09b287a8 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/04c93cdf7208979aa4df80a3a0d5a2d8 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/0567e7171e08e75f3f91c4ca74c17adc (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/05ba948578a397e9cbc6a7b3e78622fa (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/060afe5ed25f3e2e86167e545f27edca (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/06d47d3681493f1b1d41236f460d896f (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/0724a810b0e131c2fddb6de9003b9064 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/0b5279148826f5b962bcf1896bdb4ede (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/114048c0f6b10bdc67ce9166405d195e (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/11b8464a0ef8735d202955c34c36b0c7 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/11cb626f1668c7b41954ce7d768fe528 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/14b133bf18125b75a1976fa63a1df6b7 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/153c6b3afa8faa03c8bc28f936a6d4cf (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/182cad2a342ed7317b7c21a5d17020d1 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/1c61a61bb7057b52c5b15188345a5238 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/1dbe2cf62ed2e4fa1c3cb473f08710b5 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/21199be504fcfece5c7096ee0dbba507 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/21891480074b5635dbbe7137bdcabccd (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/233aea42e15aa73e131eefabf16088c9 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/24660d4e7ac7aa21d600ea7a3d198bbb (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/25589deb55c08429345f289d1c9b0254 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/2573bd823e4da11f727a17f8e1f35c26 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/276f12da56866273e76059ad0e7be97e (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/29198a2e380cb19babec9e02116d213e (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/2c94ba9434b1a1b9396fc5364f101363 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/2d578c357dc2f5e02dc55cddb30641d1 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/2dff6cc5a223e67fde9e5e79af456992 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/2f103b1f9477f2d8934bd84328d51c75 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/31cd3a8413de13d9624adbb1613784bf (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/36415bdf1d180098fe6234b4186e69f3 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/3a04a80f0242e8dff0cd732e7c4767da (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/44d0f973b7b0fb3e4a07770c943dcd5a (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/50bc00daa0ddcd6cfb2b5d9f62c81f47 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/51ed2d1fb77b3078b54e94e85606b7df (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/5c5e0e899cf2e7d053a9e45fb76f6e5a (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/70152ed033f139443fbfb1b858bb3b1b (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/7030ca2b24e5a7f9dd8f62096a48eb33 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/71eec1a0ef2d25bb9e2ef17f23be7e9e (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/7a6b0177210ea4ef40b254daf99393c5 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/7f1567733711ffb61839621af0cbfa33 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/850c6d57c5bb7be8205fc2438d14d7e5 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/a5c8cd2784a5792b9e91c2d7895b3b34 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/a9135cdc7151d023300ff194bad90af9 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/af2597e8ac7dec1e8b4a47518312912a (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/answer_a (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/answer_aaaa (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/b3f53ef826b831bb09dd25c7f5960249 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/cda0f8751f5c4993974c2b549d29bcc8 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/ce6c26c0e469339873d0e7f616ab0945 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/clusterfuzz-5637790584012800 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/clusterfuzz-5650695891451904 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/clusterfuzz-5651369832218624 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/clusterfuzz-5674462260756480 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/clusterfuzz-5680630672654336 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/clusterfuzz-5683497160671232 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/clusterfuzz-5687310655422464 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/clusterfuzz-5695341573177344 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/clusterfuzz-5697835103682560 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/clusterfuzz-5728518081609728 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/clusterfuzz-5732960017317888 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/e4dd7e7c2dd4ed7c2e17a6af5d04f9c9 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/ed50ed8ee36230a5a69746ad830437e5 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/f1b900d50806021953321c3b604ee497 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/f6606f624be8c628328cea01d2cd07a9 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/f89f6c8176b564a7dd646f14305573ce (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/f9ad508d2dbd08d3aaaabc7d1174677d (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzzinput/multi-indir (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzznames/name01 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzznames/name02 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzznames/name03 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzznames/name04 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzznames/name05 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzznames/name06 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzznames/name07 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzznames/name08 (100%) rename lib/{c-ares-1.32.0 => c-ares-1.32.3}/test/fuzznames/name09 (100%) diff --git a/lib/c-ares-1.32.0/RELEASE-NOTES.md b/lib/c-ares-1.32.0/RELEASE-NOTES.md deleted file mode 100644 index 545e3ca8274..00000000000 --- a/lib/c-ares-1.32.0/RELEASE-NOTES.md +++ /dev/null @@ -1,38 +0,0 @@ -## c-ares version 1.32.0 - July 4 2024 - -This is a feature and bugfix release. - -Features: - -* Add support for DNS 0x20 to help prevent cache poisoning attacks, enabled - by specifying `ARES_FLAG_DNS0x20`. Disabled by default. [PR #800](https://github.com/c-ares/c-ares/pull/800) -* Rework query timeout logic to automatically adjust timeouts based on network - conditions. The timeout specified now is only used as a hint until there - is enough history to calculate a more valid timeout. [PR #794](https://github.com/c-ares/c-ares/pull/794) - -Changes: - -* DNS RR TXT strings should not be automatically concatenated as there are use - cases outside of RFC 7208. In order to maintain ABI compliance, the ability - to retrieve TXT strings concatenated is retained as well as a new API to - retrieve the individual strings. This restores behavior from c-ares 1.20.0. - [PR #801](https://github.com/c-ares/c-ares/pull/801) -* Clean up header inclusion logic to make hacking on code easier. [PR #797](https://github.com/c-ares/c-ares/pull/797) -* GCC/Clang: Enable even more strict warnings to catch more coding flaws. [253bdee](https://github.com/c-ares/c-ares/commit/253bdee) -* MSVC: Enable `/W4` warning level. [PR #792](https://github.com/c-ares/c-ares/pull/792) - -Bugfixes: - -* Tests: Fix thread race condition in test cases for EventThread. [PR #803](https://github.com/c-ares/c-ares/pull/803) -* Windows: Fix building with UNICODE. [PR #802](https://github.com/c-ares/c-ares/pull/802) -* Thread Saftey: `ares_timeout()` was missing lock. [74a64e4](https://github.com/c-ares/c-ares/commit/74a64e4) -* Fix building with DJGPP (32bit protected mode DOS). [PR #789](https://github.com/c-ares/c-ares/pull/789) - -Thanks go to these friendly people for their efforts and contributions for this -release: - -* Brad House (@bradh352) -* Cheng (@zcbenz) - - - diff --git a/lib/c-ares-1.32.0/src/lib/ares_event_win32.c b/lib/c-ares-1.32.0/src/lib/ares_event_win32.c deleted file mode 100644 index 4e4b9c53c33..00000000000 --- a/lib/c-ares-1.32.0/src/lib/ares_event_win32.c +++ /dev/null @@ -1,616 +0,0 @@ -/* MIT License - * - * Copyright (c) 2024 Brad House - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * SPDX-License-Identifier: MIT - */ - -/* Uses an anonymous union */ -#if defined(__clang__) -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wc11-extensions" -#endif - -#include "ares_private.h" -#include "ares_event.h" -#include "ares_event_win32.h" -#ifdef HAVE_LIMITS_H -# include -#endif - -#if defined(USE_WINSOCK) - -/* IMPLEMENTATION NOTES - * ==================== - * - * This implementation uses some undocumented functionality within Windows for - * monitoring sockets. The Ancillary Function Driver (AFD) is the low level - * implementation that Winsock2 sits on top of. Winsock2 unfortunately does - * not expose the equivalent of epoll() or kqueue(), but it is possible to - * access AFD directly and use along with IOCP to simulate the functionality. - * We want to use IOCP if possible as it gives us the ability to monitor more - * than just sockets (WSAPoll is not an option), and perform arbitrary callbacks - * which means we can hook in non-socket related events. - * - * The information for this implementation was gathered from "wepoll" and - * "libuv" which both use slight variants on this, but this implementation - * doesn't directly follow either methodology. - * - * Initialization: - * 1. Dynamically load the NtDeviceIoControlFile and NtCancelIoFileEx internal - * symbols from ntdll.dll. These functions are used to submit the AFD POLL - * request and to cancel a prior request, respectively. - * 2. Create an IO Completion Port base handle via CreateIoCompletionPort() - * that all socket events will be delivered through. - * 3. Create a callback to be used to be able to interrupt waiting for IOCP - * events, this may be called for allowing enqueuing of additional socket - * events or removing socket events. PostQueuedCompletionStatus() is the - * obvious choice. Use the same container structure as used with a Socket - * but tagged indicating it is not as the CompletionKey (important!). - * - * Socket Add: - * 1. Create/Allocate a container for holding metadata about a socket: - * - SOCKET base_socket; - * - SOCKET peer_socket; - * - OVERLAPPED overlapped; -- Used by AFD POLL - * - AFD_POLL_INFO afd_poll_info; -- Used by AFD POLL - * 2. Call WSAIoctl(..., SIO_BASE_HANDLE, ...) to unwrap the SOCKET and get - * the "base socket" we can use for polling. It appears this may fail so - * we should call WSAIoctl(..., SIO_BSP_HANDLE_POLL, ...) as a fallback. - * 3. The SOCKET handle we have is most likely not capable of supporting - * OVERLAPPED, and we need to have a way to unbind a socket from IOCP - * (which is done via a simple closesocket()) so we need to duplicate the - * "base socket" using WSADuplicateSocketW() followed by - * WSASocketW(..., WSA_FLAG_OVERLAPPED) to create this "peer socket" for - * submitting AFD POLL requests. - * 4. Bind to IOCP using CreateIoCompletionPort() referencing the "peer - * socket" and the base IOCP handle from "Initialization". Use the - * pointer to the socket container as the "CompletionKey" which will be - * returned when an event occurs. - * 5. Submit AFD POLL request (see "AFD POLL Request" section) - * - * Socket Delete: - * 1. Call "AFD Poll Cancel" (see Section of same name) - * 2. If a cancel was requested (not bypassed due to no events, etc), tag the - * "container" for the socket as pending delete, and when the next IOCP - * event for the socket is dequeued, cleanup. - * 3. Otherwise, call closesocket(peer_socket) then free() the container - * which will officially delete it. - * NOTE: Deferring delete may be completely unnecessary. In theory closing - * the peer_socket() should guarantee no additional events will be - * delivered. But maybe if there's a pending event that hasn't been - * read yet but already trigggered it would be an issue, so this is - * "safer" unless we can prove its not necessary. - * - * Socket Modify: - * 1. Call "AFD Poll Cancel" (see Section of same name) - * 2. If a cancel was not enqueued because there is no pending request, - * submit AFD POLL request (see "AFD POLL Request" section), otherwise - * defer until next socket event. - * - * Event Wait: - * 1. Call GetQueuedCompletionStatusEx() with the base IOCP handle, a - * stack allocated array of OVERLAPPED_ENTRY's, and an appropriate - * timeout. - * 2. Iterate across returned events, the CompletionKey is a pointer to the - * container registered with CreateIoCompletionPort() or - * PostQueuedCompletionStatus() - * 3. If object indicates it is pending delete, go ahead and - * closesocket(peer_socket) and free() the container. Go to the next event. - * 4. Submit AFD POLL Request (see "AFD POLL Request"). We must re-enable - * the request each time we receive a response, it is not persistent. - * 5. Notify of any events received as indicated in the AFD_POLL_INFO - * Handles[0].Events (NOTE: check NumberOfHandles first, make sure it is - * > 0, otherwise we might not have events such as if our last request - * was cancelled). - * - * AFD Poll Request: - * 1. Initialize the AFD_POLL_INFO structure: - * Exclusive = TRUE; // Auto cancel duplicates for same socket - * NumberOfHandles = 1; - * Timeout.QuadPart = LLONG_MAX; - * Handles[0].Handle = (HANDLE)base_socket; - * Handles[0].Status = 0; - * Handles[0].Events = ... set as appropriate AFD_POLL_RECEIVE, etc; - * 2. Zero out the OVERLAPPED structure - * 3. Create an IO_STATUS_BLOCK pointer (iosb) and set it to the address of - * the OVERLAPPED "Internal" member. - * 4. Set the "Status" member of IO_STATUS_BLOCK to STATUS_PENDING - * 5. Call - * NtDeviceIoControlFile((HANDLE)peer_socket, NULL, NULL, &overlapped, - * iosb, IOCTL_AFD_POLL - * &afd_poll_info, sizeof(afd_poll_info), - * &afd_poll_info, sizeof(afd_poll_info)); - * NOTE: Its not clear to me if the IO_STATUS_BLOCK pointing to OVERLAPPED - * is for efficiency or if its a requirement for AFD. This is what - * libuv does, so I'm doing it here too. - * - * AFD Poll Cancel: - * 1. Check to see if the IO_STATUS_BLOCK "Status" member for the socket - * is still STATUS_PENDING, if not, no cancel request is necessary. - * 2. Call - * NtCancelIoFileEx((HANDLE)peer_socket, iosb, &temp_iosb); - * - * - * References: - * - https://github.com/piscisaureus/wepoll/ - * - https://github.com/libuv/libuv/ - */ - -typedef struct { - /* Dynamically loaded symbols */ - NtDeviceIoControlFile_t NtDeviceIoControlFile; - NtCancelIoFileEx_t NtCancelIoFileEx; - - /* Implementation details */ - HANDLE iocp_handle; -} ares_evsys_win32_t; - -typedef struct { - /*! Pointer to parent event container */ - ares_event_t *event; - /*! Socket passed in to monitor */ - SOCKET socket; - /*! Base socket derived from provided socket */ - SOCKET base_socket; - /*! New socket (duplicate base_socket handle) supporting OVERLAPPED operation - */ - SOCKET peer_socket; - /*! Structure for submitting AFD POLL requests (Internals!) */ - AFD_POLL_INFO afd_poll_info; - /*! Overlapped structure submitted with AFD POLL requests and returned with - * IOCP results */ - OVERLAPPED overlapped; -} ares_evsys_win32_eventdata_t; - -static void ares_iocpevent_signal(const ares_event_t *event) -{ - ares_event_thread_t *e = event->e; - ares_evsys_win32_t *ew = e->ev_sys_data; - - if (e == NULL) { - return; - } - - PostQueuedCompletionStatus(ew->iocp_handle, 0, (ULONG_PTR)event->data, NULL); -} - -static void ares_iocpevent_cb(ares_event_thread_t *e, ares_socket_t fd, - void *data, ares_event_flags_t flags) -{ - (void)e; - (void)data; - (void)fd; - (void)flags; -} - -static ares_event_t *ares_iocpevent_create(ares_event_thread_t *e) -{ - ares_event_t *event = NULL; - ares_status_t status; - - status = - ares_event_update(&event, e, ARES_EVENT_FLAG_OTHER, ares_iocpevent_cb, - ARES_SOCKET_BAD, NULL, NULL, ares_iocpevent_signal); - if (status != ARES_SUCCESS) { - return NULL; - } - - return event; -} - -static void ares_evsys_win32_destroy(ares_event_thread_t *e) -{ - ares_evsys_win32_t *ew = NULL; - - if (e == NULL) { - return; - } - - ew = e->ev_sys_data; - if (ew == NULL) { - return; - } - - if (ew->iocp_handle != NULL) { - CloseHandle(ew->iocp_handle); - } - - ares_free(ew); - e->ev_sys_data = NULL; -} - -static ares_bool_t ares_evsys_win32_init(ares_event_thread_t *e) -{ - ares_evsys_win32_t *ew = NULL; - HMODULE ntdll; - - ew = ares_malloc_zero(sizeof(*ew)); - if (ew == NULL) { - return ARES_FALSE; - } - - e->ev_sys_data = ew; - - /* All apps should have ntdll.dll already loaded, so just get a handle to - * this */ - ntdll = GetModuleHandleA("ntdll.dll"); - if (ntdll == NULL) { - goto fail; - } - -#ifdef __GNUC__ -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wpedantic" -/* Without the (void *) cast we get: - * warning: cast between incompatible function types from 'FARPROC' {aka 'long long int (*)()'} to 'NTSTATUS (*)(...)'} [-Wcast-function-type] - * but with it we get: - * warning: ISO C forbids conversion of function pointer to object pointer type [-Wpedantic] - * look unsolvable short of killing the warning. - */ -#endif - - - /* Load Internal symbols not typically accessible */ - ew->NtDeviceIoControlFile = (NtDeviceIoControlFile_t)(void *)GetProcAddress( - ntdll, "NtDeviceIoControlFile"); - ew->NtCancelIoFileEx = - (NtCancelIoFileEx_t)(void *)GetProcAddress(ntdll, "NtCancelIoFileEx"); - -#ifdef __GNUC__ -# pragma GCC diagnostic pop -#endif - - if (ew->NtCancelIoFileEx == NULL || ew->NtDeviceIoControlFile == NULL) { - goto fail; - } - - ew->iocp_handle = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0); - if (ew->iocp_handle == NULL) { - goto fail; - } - - e->ev_signal = ares_iocpevent_create(e); - if (e->ev_signal == NULL) { - goto fail; - } - - return ARES_TRUE; - -fail: - ares_evsys_win32_destroy(e); - return ARES_FALSE; -} - -static ares_socket_t ares_evsys_win32_basesocket(ares_socket_t socket) -{ - while (1) { - DWORD bytes; /* Not used */ - ares_socket_t base_socket = ARES_SOCKET_BAD; - int rv; - - rv = WSAIoctl(socket, SIO_BASE_HANDLE, NULL, 0, &base_socket, - sizeof(base_socket), &bytes, NULL, NULL); - if (rv != SOCKET_ERROR && base_socket != ARES_SOCKET_BAD) { - socket = base_socket; - break; - } - - /* If we're here, an error occurred */ - if (GetLastError() == WSAENOTSOCK) { - /* This is critical, exit */ - return ARES_SOCKET_BAD; - } - - /* Work around known bug in Komodia based LSPs, use ARES_BSP_HANDLE_POLL - * to retrieve the underlying socket to then loop and get the base socket: - * https://docs.microsoft.com/en-us/windows/win32/winsock/winsock-ioctls - * https://www.komodia.com/newwiki/index.php?title=Komodia%27s_Redirector_bug_fixes#Version_2.2.2.6 - */ - base_socket = ARES_SOCKET_BAD; - rv = WSAIoctl(socket, SIO_BSP_HANDLE_POLL, NULL, 0, &base_socket, - sizeof(base_socket), &bytes, NULL, NULL); - - if (rv != SOCKET_ERROR && base_socket != ARES_SOCKET_BAD && - base_socket != socket) { - socket = base_socket; - continue; /* loop! */ - } - - return ARES_SOCKET_BAD; - } - - return socket; -} - -static ares_bool_t ares_evsys_win32_afd_enqueue(ares_event_t *event, - ares_event_flags_t flags) -{ - ares_event_thread_t *e = event->e; - ares_evsys_win32_t *ew = e->ev_sys_data; - ares_evsys_win32_eventdata_t *ed = event->data; - NTSTATUS status; - IO_STATUS_BLOCK *iosb_ptr; - - if (e == NULL || ed == NULL || ew == NULL) { - return ARES_FALSE; - } - - /* Enqueue AFD Poll */ - ed->afd_poll_info.Exclusive = TRUE; - ed->afd_poll_info.NumberOfHandles = 1; - ed->afd_poll_info.Timeout.QuadPart = LLONG_MAX; - ed->afd_poll_info.Handles[0].Handle = (HANDLE)ed->base_socket; - ed->afd_poll_info.Handles[0].Status = 0; - ed->afd_poll_info.Handles[0].Events = 0; - - if (flags & ARES_EVENT_FLAG_READ) { - ed->afd_poll_info.Handles[0].Events |= - (AFD_POLL_RECEIVE | AFD_POLL_DISCONNECT | AFD_POLL_ACCEPT | - AFD_POLL_ABORT); - } - if (flags & ARES_EVENT_FLAG_WRITE) { - ed->afd_poll_info.Handles[0].Events |= - (AFD_POLL_SEND | AFD_POLL_CONNECT_FAIL); - } - if (flags == 0) { - ed->afd_poll_info.Handles[0].Events |= AFD_POLL_DISCONNECT; - } - - memset(&ed->overlapped, 0, sizeof(ed->overlapped)); - iosb_ptr = (IO_STATUS_BLOCK *)&ed->overlapped.Internal; - iosb_ptr->Status = STATUS_PENDING; - - status = ew->NtDeviceIoControlFile( - (HANDLE)ed->peer_socket, NULL, NULL, &ed->overlapped, iosb_ptr, - IOCTL_AFD_POLL, &ed->afd_poll_info, sizeof(ed->afd_poll_info), - &ed->afd_poll_info, sizeof(ed->afd_poll_info)); - if (status != STATUS_SUCCESS && status != STATUS_PENDING) { - return ARES_FALSE; - } - - return ARES_TRUE; -} - -static ares_bool_t ares_evsys_win32_afd_cancel(ares_evsys_win32_eventdata_t *ed) -{ - IO_STATUS_BLOCK *iosb_ptr; - IO_STATUS_BLOCK cancel_iosb; - ares_evsys_win32_t *ew; - NTSTATUS status; - - /* Detached due to destroy */ - if (ed->event == NULL) { - return ARES_FALSE; - } - - iosb_ptr = (IO_STATUS_BLOCK *)&ed->overlapped.Internal; - /* Not pending, nothing to do */ - if (iosb_ptr->Status != STATUS_PENDING) { - return ARES_FALSE; - } - - ew = ed->event->e->ev_sys_data; - status = - ew->NtCancelIoFileEx((HANDLE)ed->peer_socket, iosb_ptr, &cancel_iosb); - - /* NtCancelIoFileEx() may return STATUS_NOT_FOUND if the operation completed - * just before calling NtCancelIoFileEx(), but we have not yet received the - * notifiction (but it should be queued for the next IOCP event). */ - if (status == STATUS_SUCCESS || status == STATUS_NOT_FOUND) { - return ARES_TRUE; - } - - return ARES_FALSE; -} - -static void ares_evsys_win32_eventdata_destroy(ares_evsys_win32_eventdata_t *ed) -{ - if (ed == NULL) { - return; - } - - if (ed->peer_socket != ARES_SOCKET_BAD) { - closesocket(ed->peer_socket); - } - - ares_free(ed); -} - -static ares_bool_t ares_evsys_win32_event_add(ares_event_t *event) -{ - ares_event_thread_t *e = event->e; - ares_evsys_win32_t *ew = e->ev_sys_data; - ares_evsys_win32_eventdata_t *ed; - WSAPROTOCOL_INFOW protocol_info; - - ed = ares_malloc_zero(sizeof(*ed)); - ed->event = event; - ed->socket = event->fd; - ed->base_socket = ARES_SOCKET_BAD; - ed->peer_socket = ARES_SOCKET_BAD; - - /* Likely a signal event, not something we will directly handle. We create - * the ares_evsys_win32_eventdata_t as the placeholder to use as the - * IOCP Completion Key */ - if (ed->socket == ARES_SOCKET_BAD) { - event->data = ed; - return ARES_TRUE; - } - - ed->base_socket = ares_evsys_win32_basesocket(ed->socket); - if (ed->base_socket == ARES_SOCKET_BAD) { - ares_evsys_win32_eventdata_destroy(ed); - return ARES_FALSE; - } - - /* Create a peer socket that supports OVERLAPPED so we can use IOCP on the - * socket handle */ - if (WSADuplicateSocketW(ed->base_socket, GetCurrentProcessId(), - &protocol_info) != 0) { - ares_evsys_win32_eventdata_destroy(ed); - return ARES_FALSE; - } - - ed->peer_socket = - WSASocketW(protocol_info.iAddressFamily, protocol_info.iSocketType, - protocol_info.iProtocol, &protocol_info, 0, WSA_FLAG_OVERLAPPED); - if (ed->peer_socket == ARES_SOCKET_BAD) { - ares_evsys_win32_eventdata_destroy(ed); - return ARES_FALSE; - } - - SetHandleInformation((HANDLE)ed->peer_socket, HANDLE_FLAG_INHERIT, 0); - - if (CreateIoCompletionPort((HANDLE)ed->peer_socket, ew->iocp_handle, - (ULONG_PTR)ed, 0) == NULL) { - ares_evsys_win32_eventdata_destroy(ed); - return ARES_FALSE; - } - - event->data = ed; - - if (!ares_evsys_win32_afd_enqueue(event, event->flags)) { - event->data = NULL; - ares_evsys_win32_eventdata_destroy(ed); - return ARES_FALSE; - } - - return ARES_TRUE; -} - -static void ares_evsys_win32_event_del(ares_event_t *event) -{ - ares_evsys_win32_eventdata_t *ed = event->data; - ares_event_thread_t *e = event->e; - - if (event->fd == ARES_SOCKET_BAD || !e->isup || ed == NULL || - !ares_evsys_win32_afd_cancel(ed)) { - /* Didn't need to enqueue a cancellation, for one of these reasons: - * - Not an IOCP socket - * - This is during shutdown of the event thread, no more signals can be - * delivered. - * - It has been determined there is no AFD POLL queued currently for the - * socket. - */ - ares_evsys_win32_eventdata_destroy(ed); - event->data = NULL; - } else { - /* Detach from event, so when the cancel event comes through, - * it will clean up */ - ed->event = NULL; - event->data = NULL; - } -} - -static void ares_evsys_win32_event_mod(ares_event_t *event, - ares_event_flags_t new_flags) -{ - ares_evsys_win32_eventdata_t *ed = event->data; - - /* Not for us */ - if (event->fd == ARES_SOCKET_BAD || ed == NULL) { - return; - } - - /* Try to cancel any current outstanding poll, if one is not running, - * go ahead and queue it up */ - if (!ares_evsys_win32_afd_cancel(ed)) { - ares_evsys_win32_afd_enqueue(event, new_flags); - } -} - -static size_t ares_evsys_win32_wait(ares_event_thread_t *e, - unsigned long timeout_ms) -{ - ares_evsys_win32_t *ew = e->ev_sys_data; - OVERLAPPED_ENTRY entries[16]; - ULONG nentries = sizeof(entries) / sizeof(*entries); - BOOL status; - size_t i; - size_t cnt = 0; - - status = GetQueuedCompletionStatusEx( - ew->iocp_handle, entries, nentries, &nentries, - (timeout_ms == 0) ? INFINITE : (DWORD)timeout_ms, FALSE); - - if (!status) { - return 0; - } - - for (i = 0; i < (size_t)nentries; i++) { - ares_event_flags_t flags = 0; - ares_evsys_win32_eventdata_t *ed = - (ares_evsys_win32_eventdata_t *)entries[i].lpCompletionKey; - ares_event_t *event = ed->event; - - if (ed->socket == ARES_SOCKET_BAD) { - /* Some sort of signal event */ - flags = ARES_EVENT_FLAG_OTHER; - } else { - /* Process events */ - if (ed->afd_poll_info.NumberOfHandles > 0) { - if (ed->afd_poll_info.Handles[0].Events & - (AFD_POLL_RECEIVE | AFD_POLL_DISCONNECT | AFD_POLL_ACCEPT | - AFD_POLL_ABORT)) { - flags |= ARES_EVENT_FLAG_READ; - } - if (ed->afd_poll_info.Handles[0].Events & - (AFD_POLL_SEND | AFD_POLL_CONNECT_FAIL)) { - flags |= ARES_EVENT_FLAG_WRITE; - } - - /* XXX: Handle ed->afd_poll_info.Handles[0].Events & - * AFD_POLL_LOCAL_CLOSE */ - } - - if (event == NULL) { - /* This means we need to cleanup the private event data as we've been - * detached */ - ares_evsys_win32_eventdata_destroy(ed); - } else { - /* Re-enqueue so we can get more events on the socket */ - ares_evsys_win32_afd_enqueue(event, event->flags); - } - } - - if (event != NULL && flags != 0) { - cnt++; - event->cb(e, event->fd, event->data, flags); - } - } - - return cnt; -} - -const ares_event_sys_t ares_evsys_win32 = { "win32", - ares_evsys_win32_init, - ares_evsys_win32_destroy, - ares_evsys_win32_event_add, - ares_evsys_win32_event_del, - ares_evsys_win32_event_mod, - ares_evsys_win32_wait }; -#endif - -#if defined(__clang__) -# pragma GCC diagnostic pop -#endif diff --git a/lib/c-ares-1.32.0/AUTHORS b/lib/c-ares-1.32.3/AUTHORS similarity index 100% rename from lib/c-ares-1.32.0/AUTHORS rename to lib/c-ares-1.32.3/AUTHORS diff --git a/lib/c-ares-1.32.0/CMakeLists.txt b/lib/c-ares-1.32.3/CMakeLists.txt similarity index 99% rename from lib/c-ares-1.32.0/CMakeLists.txt rename to lib/c-ares-1.32.3/CMakeLists.txt index d3da9afc75b..2505967d352 100644 --- a/lib/c-ares-1.32.0/CMakeLists.txt +++ b/lib/c-ares-1.32.3/CMakeLists.txt @@ -12,7 +12,7 @@ INCLUDE (CheckCSourceCompiles) INCLUDE (CheckStructHasMember) INCLUDE (CheckLibraryExists) -PROJECT (c-ares LANGUAGES C VERSION "1.32.0" ) +PROJECT (c-ares LANGUAGES C VERSION "1.32.3" ) # Set this version before release SET (CARES_VERSION "${PROJECT_VERSION}") @@ -30,7 +30,7 @@ INCLUDE (GNUInstallDirs) # include this *AFTER* PROJECT(), otherwise paths are w # For example, a version of 4:0:2 would generate output such as: # libname.so -> libname.so.2 # libname.so.2 -> libname.so.2.2.0 -SET (CARES_LIB_VERSIONINFO "19:0:17") +SET (CARES_LIB_VERSIONINFO "19:3:17") OPTION (CARES_STATIC "Build as a static library" OFF) diff --git a/lib/c-ares-1.32.0/CONTRIBUTING.md b/lib/c-ares-1.32.3/CONTRIBUTING.md similarity index 100% rename from lib/c-ares-1.32.0/CONTRIBUTING.md rename to lib/c-ares-1.32.3/CONTRIBUTING.md diff --git a/lib/c-ares-1.32.0/DEVELOPER-NOTES.md b/lib/c-ares-1.32.3/DEVELOPER-NOTES.md similarity index 100% rename from lib/c-ares-1.32.0/DEVELOPER-NOTES.md rename to lib/c-ares-1.32.3/DEVELOPER-NOTES.md diff --git a/lib/c-ares-1.32.0/INSTALL.md b/lib/c-ares-1.32.3/INSTALL.md similarity index 100% rename from lib/c-ares-1.32.0/INSTALL.md rename to lib/c-ares-1.32.3/INSTALL.md diff --git a/lib/c-ares-1.32.0/LICENSE.md b/lib/c-ares-1.32.3/LICENSE.md similarity index 100% rename from lib/c-ares-1.32.0/LICENSE.md rename to lib/c-ares-1.32.3/LICENSE.md diff --git a/lib/c-ares-1.32.0/Makefile.Watcom b/lib/c-ares-1.32.3/Makefile.Watcom similarity index 100% rename from lib/c-ares-1.32.0/Makefile.Watcom rename to lib/c-ares-1.32.3/Makefile.Watcom diff --git a/lib/c-ares-1.32.0/Makefile.am b/lib/c-ares-1.32.3/Makefile.am similarity index 100% rename from lib/c-ares-1.32.0/Makefile.am rename to lib/c-ares-1.32.3/Makefile.am diff --git a/lib/c-ares-1.32.0/Makefile.dj b/lib/c-ares-1.32.3/Makefile.dj similarity index 100% rename from lib/c-ares-1.32.0/Makefile.dj rename to lib/c-ares-1.32.3/Makefile.dj diff --git a/lib/c-ares-1.32.0/Makefile.in b/lib/c-ares-1.32.3/Makefile.in similarity index 100% rename from lib/c-ares-1.32.0/Makefile.in rename to lib/c-ares-1.32.3/Makefile.in diff --git a/lib/c-ares-1.32.0/Makefile.m32 b/lib/c-ares-1.32.3/Makefile.m32 similarity index 100% rename from lib/c-ares-1.32.0/Makefile.m32 rename to lib/c-ares-1.32.3/Makefile.m32 diff --git a/lib/c-ares-1.32.0/Makefile.msvc b/lib/c-ares-1.32.3/Makefile.msvc similarity index 100% rename from lib/c-ares-1.32.0/Makefile.msvc rename to lib/c-ares-1.32.3/Makefile.msvc diff --git a/lib/c-ares-1.32.0/Makefile.netware b/lib/c-ares-1.32.3/Makefile.netware similarity index 100% rename from lib/c-ares-1.32.0/Makefile.netware rename to lib/c-ares-1.32.3/Makefile.netware diff --git a/lib/c-ares-1.32.0/README.md b/lib/c-ares-1.32.3/README.md similarity index 100% rename from lib/c-ares-1.32.0/README.md rename to lib/c-ares-1.32.3/README.md diff --git a/lib/c-ares-1.32.0/README.msvc b/lib/c-ares-1.32.3/README.msvc similarity index 100% rename from lib/c-ares-1.32.0/README.msvc rename to lib/c-ares-1.32.3/README.msvc diff --git a/lib/c-ares-1.32.3/RELEASE-NOTES.md b/lib/c-ares-1.32.3/RELEASE-NOTES.md new file mode 100644 index 00000000000..69e6a475799 --- /dev/null +++ b/lib/c-ares-1.32.3/RELEASE-NOTES.md @@ -0,0 +1,98 @@ +## c-ares version 1.32.3 - July 24 2024 + +This is a bugfix release. + +Changes: +* Prevent complex recursion during query requeuing and connection cleanup for + stability. [e8b32b8](https://github.com/c-ares/c-ares/commit/e8b32b8) +* Better propagate error codes on requeue situations. + [a9bc0a2](https://github.com/c-ares/c-ares/commit/a9bc0a2) +* Try to prevent SIGPIPE from being generated and delivered to integrations. + [de01baa](https://github.com/c-ares/c-ares/commit/de01baa) + +Bugfixes: +* Missing manpage for `ares_dns_record_set_id()` + [aa462b3](https://github.com/c-ares/c-ares/commit/aa462b3) +* Memory leak in `ares__hosts_entry_to_hostent()` due to allocation strategy. + [PR #824](https://github.com/c-ares/c-ares/pull/824) +* UDP write failure detected via ICMP unreachable should trigger faster + failover. [PR #821](https://github.com/c-ares/c-ares/pull/821) +* Fix pycares test case regression due to wrong error code being returned. + Regression from 1.31.0. [PR #820](https://github.com/c-ares/c-ares/pull/820) +* Fix possible Windows crash during `ares_destroy()` when using event threads. + [5609bd4](https://github.com/c-ares/c-ares/commit/5609bd4) +* `ARES_OPT_MAXTIMEOUTMS` wasn't being honored in all cases. + [a649c60](https://github.com/c-ares/c-ares/commit/a649c60) + +## c-ares version 1.32.2 - July 15 2024 + +This is a bugfix release. + +Bugfixes: + +* Windows: rework EventThread AFD code for better stability. + [PR #811](https://github.com/c-ares/c-ares/pull/811) +* Windows: If an IP address was detected to have changed, it could lead to a + crash due to a bad pointer. Regression introduced in 1.31.0. + [59e3a1f4](https://github.com/c-ares/c-ares/commit/59e3a1f4) +* Windows: use `QueryPerformanceCounters()` instead of `GetTickCount64()` for + better time accuracy (~15ms -> ~1us). +* Windows 32bit config change callback needs to be tagged as `stdcall` otherwise + could result in a crash. + [5c2bab35](https://github.com/c-ares/c-ares/commit/5c2bab35) +* Tests that need accurate timing should not depend on internal symbols as there + are C++ equivalents in `std::chrono`. + [PR #809](https://github.com/c-ares/c-ares/pull/809) +* Kqueue (MacOS, \*BSD): If the open socket count exceeded 8 (unlikely), it + would try to allocate a new buffer that was too small. + [5aad7981](https://github.com/c-ares/c-ares/commit/5aad7981) + + +## c-ares version 1.32.1 - July 7 2024 + +This is a bugfix release. + +Bugfixes: +* Channel lock needs to be recursive to ensure calls into c-ares functions can + be made from callbacks otherwise deadlocks will occur. This regression was + introduced in 1.32.0. + + +## c-ares version 1.32.0 - July 4 2024 + +This is a feature and bugfix release. + +Features: + +* Add support for DNS 0x20 to help prevent cache poisoning attacks, enabled + by specifying `ARES_FLAG_DNS0x20`. Disabled by default. [PR #800](https://github.com/c-ares/c-ares/pull/800) +* Rework query timeout logic to automatically adjust timeouts based on network + conditions. The timeout specified now is only used as a hint until there + is enough history to calculate a more valid timeout. [PR #794](https://github.com/c-ares/c-ares/pull/794) + +Changes: + +* DNS RR TXT strings should not be automatically concatenated as there are use + cases outside of RFC 7208. In order to maintain ABI compliance, the ability + to retrieve TXT strings concatenated is retained as well as a new API to + retrieve the individual strings. This restores behavior from c-ares 1.20.0. + [PR #801](https://github.com/c-ares/c-ares/pull/801) +* Clean up header inclusion logic to make hacking on code easier. [PR #797](https://github.com/c-ares/c-ares/pull/797) +* GCC/Clang: Enable even more strict warnings to catch more coding flaws. [253bdee](https://github.com/c-ares/c-ares/commit/253bdee) +* MSVC: Enable `/W4` warning level. [PR #792](https://github.com/c-ares/c-ares/pull/792) + +Bugfixes: + +* Tests: Fix thread race condition in test cases for EventThread. [PR #803](https://github.com/c-ares/c-ares/pull/803) +* Windows: Fix building with UNICODE. [PR #802](https://github.com/c-ares/c-ares/pull/802) +* Thread Saftey: `ares_timeout()` was missing lock. [74a64e4](https://github.com/c-ares/c-ares/commit/74a64e4) +* Fix building with DJGPP (32bit protected mode DOS). [PR #789](https://github.com/c-ares/c-ares/pull/789) + +Thanks go to these friendly people for their efforts and contributions for this +release: + +* Brad House (@bradh352) +* Cheng (@zcbenz) + + + diff --git a/lib/c-ares-1.32.0/SECURITY.md b/lib/c-ares-1.32.3/SECURITY.md similarity index 100% rename from lib/c-ares-1.32.0/SECURITY.md rename to lib/c-ares-1.32.3/SECURITY.md diff --git a/lib/c-ares-1.32.0/aclocal.m4 b/lib/c-ares-1.32.3/aclocal.m4 similarity index 100% rename from lib/c-ares-1.32.0/aclocal.m4 rename to lib/c-ares-1.32.3/aclocal.m4 diff --git a/lib/c-ares-1.32.0/aminclude_static.am b/lib/c-ares-1.32.3/aminclude_static.am similarity index 99% rename from lib/c-ares-1.32.0/aminclude_static.am rename to lib/c-ares-1.32.3/aminclude_static.am index 7c89a366f80..d542444c4e2 100644 --- a/lib/c-ares-1.32.0/aminclude_static.am +++ b/lib/c-ares-1.32.3/aminclude_static.am @@ -1,6 +1,6 @@ # aminclude_static.am generated automatically by Autoconf -# from AX_AM_MACROS_STATIC on Thu Jul 4 07:03:12 EDT 2024 +# from AX_AM_MACROS_STATIC on Wed Jul 24 05:40:58 EDT 2024 # Code coverage diff --git a/lib/c-ares-1.32.0/buildconf b/lib/c-ares-1.32.3/buildconf similarity index 100% rename from lib/c-ares-1.32.0/buildconf rename to lib/c-ares-1.32.3/buildconf diff --git a/lib/c-ares-1.32.0/buildconf.bat b/lib/c-ares-1.32.3/buildconf.bat similarity index 100% rename from lib/c-ares-1.32.0/buildconf.bat rename to lib/c-ares-1.32.3/buildconf.bat diff --git a/lib/c-ares-1.32.0/c-ares-config.cmake.in b/lib/c-ares-1.32.3/c-ares-config.cmake.in similarity index 100% rename from lib/c-ares-1.32.0/c-ares-config.cmake.in rename to lib/c-ares-1.32.3/c-ares-config.cmake.in diff --git a/lib/c-ares-1.32.0/cmake/EnableWarnings.cmake b/lib/c-ares-1.32.3/cmake/EnableWarnings.cmake similarity index 100% rename from lib/c-ares-1.32.0/cmake/EnableWarnings.cmake rename to lib/c-ares-1.32.3/cmake/EnableWarnings.cmake diff --git a/lib/c-ares-1.32.0/config/compile b/lib/c-ares-1.32.3/config/compile similarity index 100% rename from lib/c-ares-1.32.0/config/compile rename to lib/c-ares-1.32.3/config/compile diff --git a/lib/c-ares-1.32.0/config/config.guess b/lib/c-ares-1.32.3/config/config.guess similarity index 100% rename from lib/c-ares-1.32.0/config/config.guess rename to lib/c-ares-1.32.3/config/config.guess diff --git a/lib/c-ares-1.32.0/config/config.sub b/lib/c-ares-1.32.3/config/config.sub similarity index 100% rename from lib/c-ares-1.32.0/config/config.sub rename to lib/c-ares-1.32.3/config/config.sub diff --git a/lib/c-ares-1.32.0/config/depcomp b/lib/c-ares-1.32.3/config/depcomp similarity index 100% rename from lib/c-ares-1.32.0/config/depcomp rename to lib/c-ares-1.32.3/config/depcomp diff --git a/lib/c-ares-1.32.0/config/install-sh b/lib/c-ares-1.32.3/config/install-sh similarity index 100% rename from lib/c-ares-1.32.0/config/install-sh rename to lib/c-ares-1.32.3/config/install-sh diff --git a/lib/c-ares-1.32.0/config/ltmain.sh b/lib/c-ares-1.32.3/config/ltmain.sh similarity index 100% rename from lib/c-ares-1.32.0/config/ltmain.sh rename to lib/c-ares-1.32.3/config/ltmain.sh diff --git a/lib/c-ares-1.32.0/config/missing b/lib/c-ares-1.32.3/config/missing similarity index 100% rename from lib/c-ares-1.32.0/config/missing rename to lib/c-ares-1.32.3/config/missing diff --git a/lib/c-ares-1.32.0/config/test-driver b/lib/c-ares-1.32.3/config/test-driver similarity index 100% rename from lib/c-ares-1.32.0/config/test-driver rename to lib/c-ares-1.32.3/config/test-driver diff --git a/lib/c-ares-1.32.0/configure b/lib/c-ares-1.32.3/configure similarity index 99% rename from lib/c-ares-1.32.0/configure rename to lib/c-ares-1.32.3/configure index a309badc242..f5fc16a49bf 100755 --- a/lib/c-ares-1.32.0/configure +++ b/lib/c-ares-1.32.3/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.72 for c-ares 1.32.0. +# Generated by GNU Autoconf 2.72 for c-ares 1.32.3. # # Report bugs to . # @@ -614,8 +614,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='c-ares' PACKAGE_TARNAME='c-ares' -PACKAGE_VERSION='1.32.0' -PACKAGE_STRING='c-ares 1.32.0' +PACKAGE_VERSION='1.32.3' +PACKAGE_STRING='c-ares 1.32.3' PACKAGE_BUGREPORT='c-ares mailing list: http://lists.haxx.se/listinfo/c-ares' PACKAGE_URL='' @@ -1415,7 +1415,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -'configure' configures c-ares 1.32.0 to adapt to many kinds of systems. +'configure' configures c-ares 1.32.3 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1486,7 +1486,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of c-ares 1.32.0:";; + short | recursive ) echo "Configuration of c-ares 1.32.3:";; esac cat <<\_ACEOF @@ -1623,7 +1623,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -c-ares configure 1.32.0 +c-ares configure 1.32.3 generated by GNU Autoconf 2.72 Copyright (C) 2023 Free Software Foundation, Inc. @@ -2267,7 +2267,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by c-ares $as_me 1.32.0, which was +It was created by c-ares $as_me 1.32.3, which was generated by GNU Autoconf 2.72. Invocation command line was $ $0$ac_configure_args_raw @@ -3259,7 +3259,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu -CARES_VERSION_INFO="19:0:17" +CARES_VERSION_INFO="19:3:17" @@ -5999,7 +5999,7 @@ fi # Define the identity of the package. PACKAGE='c-ares' - VERSION='1.32.0' + VERSION='1.32.3' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h @@ -26339,7 +26339,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by c-ares $as_me 1.32.0, which was +This file was extended by c-ares $as_me 1.32.3, which was generated by GNU Autoconf 2.72. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -26407,7 +26407,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -c-ares config.status 1.32.0 +c-ares config.status 1.32.3 configured by $0, generated by GNU Autoconf 2.72, with options \\"\$ac_cs_config\\" diff --git a/lib/c-ares-1.32.0/configure.ac b/lib/c-ares-1.32.3/configure.ac similarity index 99% rename from lib/c-ares-1.32.0/configure.ac rename to lib/c-ares-1.32.3/configure.ac index d7deb430f8a..7abf80f68bd 100644 --- a/lib/c-ares-1.32.0/configure.ac +++ b/lib/c-ares-1.32.3/configure.ac @@ -2,10 +2,10 @@ dnl Copyright (C) The c-ares project and its contributors dnl SPDX-License-Identifier: MIT AC_PREREQ([2.69]) -AC_INIT([c-ares], [1.32.0], +AC_INIT([c-ares], [1.32.3], [c-ares mailing list: http://lists.haxx.se/listinfo/c-ares]) -CARES_VERSION_INFO="19:0:17" +CARES_VERSION_INFO="19:3:17" dnl This flag accepts an argument of the form current[:revision[:age]]. So, dnl passing -version-info 3:12:1 sets current to 3, revision to 12, and age to dnl 1. diff --git a/lib/c-ares-1.32.0/docs/CMakeLists.txt b/lib/c-ares-1.32.3/docs/CMakeLists.txt similarity index 100% rename from lib/c-ares-1.32.0/docs/CMakeLists.txt rename to lib/c-ares-1.32.3/docs/CMakeLists.txt diff --git a/lib/c-ares-1.32.0/docs/Makefile.am b/lib/c-ares-1.32.3/docs/Makefile.am similarity index 100% rename from lib/c-ares-1.32.0/docs/Makefile.am rename to lib/c-ares-1.32.3/docs/Makefile.am diff --git a/lib/c-ares-1.32.0/docs/Makefile.in b/lib/c-ares-1.32.3/docs/Makefile.in similarity index 99% rename from lib/c-ares-1.32.0/docs/Makefile.in rename to lib/c-ares-1.32.3/docs/Makefile.in index 6abb0e7f6bd..0b44dbd8c53 100644 --- a/lib/c-ares-1.32.0/docs/Makefile.in +++ b/lib/c-ares-1.32.3/docs/Makefile.in @@ -374,6 +374,7 @@ MANPAGES = ares_cancel.3 \ ares_dns_record_rr_del.3 \ ares_dns_record_rr_get.3 \ ares_dns_record_rr_get_const.3 \ + ares_dns_record_set_id.3 \ ares_dns_rec_type_fromstr.3 \ ares_dns_rec_type_tostr.3 \ ares_dns_rec_type_t.3 \ diff --git a/lib/c-ares-1.32.0/docs/Makefile.inc b/lib/c-ares-1.32.3/docs/Makefile.inc similarity index 99% rename from lib/c-ares-1.32.0/docs/Makefile.inc rename to lib/c-ares-1.32.3/docs/Makefile.inc index 83d85ebf1d4..46e30346cfb 100644 --- a/lib/c-ares-1.32.0/docs/Makefile.inc +++ b/lib/c-ares-1.32.3/docs/Makefile.inc @@ -36,6 +36,7 @@ MANPAGES = ares_cancel.3 \ ares_dns_record_rr_del.3 \ ares_dns_record_rr_get.3 \ ares_dns_record_rr_get_const.3 \ + ares_dns_record_set_id.3 \ ares_dns_rec_type_fromstr.3 \ ares_dns_rec_type_tostr.3 \ ares_dns_rec_type_t.3 \ diff --git a/lib/c-ares-1.32.0/docs/adig.1 b/lib/c-ares-1.32.3/docs/adig.1 similarity index 100% rename from lib/c-ares-1.32.0/docs/adig.1 rename to lib/c-ares-1.32.3/docs/adig.1 diff --git a/lib/c-ares-1.32.0/docs/ahost.1 b/lib/c-ares-1.32.3/docs/ahost.1 similarity index 100% rename from lib/c-ares-1.32.0/docs/ahost.1 rename to lib/c-ares-1.32.3/docs/ahost.1 diff --git a/lib/c-ares-1.32.0/docs/ares_cancel.3 b/lib/c-ares-1.32.3/docs/ares_cancel.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_cancel.3 rename to lib/c-ares-1.32.3/docs/ares_cancel.3 diff --git a/lib/c-ares-1.32.0/docs/ares_create_query.3 b/lib/c-ares-1.32.3/docs/ares_create_query.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_create_query.3 rename to lib/c-ares-1.32.3/docs/ares_create_query.3 diff --git a/lib/c-ares-1.32.0/docs/ares_destroy.3 b/lib/c-ares-1.32.3/docs/ares_destroy.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_destroy.3 rename to lib/c-ares-1.32.3/docs/ares_destroy.3 diff --git a/lib/c-ares-1.32.0/docs/ares_destroy_options.3 b/lib/c-ares-1.32.3/docs/ares_destroy_options.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_destroy_options.3 rename to lib/c-ares-1.32.3/docs/ares_destroy_options.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_class_fromstr.3 b/lib/c-ares-1.32.3/docs/ares_dns_class_fromstr.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_class_fromstr.3 rename to lib/c-ares-1.32.3/docs/ares_dns_class_fromstr.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_class_t.3 b/lib/c-ares-1.32.3/docs/ares_dns_class_t.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_class_t.3 rename to lib/c-ares-1.32.3/docs/ares_dns_class_t.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_class_tostr.3 b/lib/c-ares-1.32.3/docs/ares_dns_class_tostr.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_class_tostr.3 rename to lib/c-ares-1.32.3/docs/ares_dns_class_tostr.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_datatype_t.3 b/lib/c-ares-1.32.3/docs/ares_dns_datatype_t.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_datatype_t.3 rename to lib/c-ares-1.32.3/docs/ares_dns_datatype_t.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_flags_t.3 b/lib/c-ares-1.32.3/docs/ares_dns_flags_t.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_flags_t.3 rename to lib/c-ares-1.32.3/docs/ares_dns_flags_t.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_mapping.3 b/lib/c-ares-1.32.3/docs/ares_dns_mapping.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_mapping.3 rename to lib/c-ares-1.32.3/docs/ares_dns_mapping.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_opcode_t.3 b/lib/c-ares-1.32.3/docs/ares_dns_opcode_t.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_opcode_t.3 rename to lib/c-ares-1.32.3/docs/ares_dns_opcode_t.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_opcode_tostr.3 b/lib/c-ares-1.32.3/docs/ares_dns_opcode_tostr.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_opcode_tostr.3 rename to lib/c-ares-1.32.3/docs/ares_dns_opcode_tostr.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_opt_datatype_t.3 b/lib/c-ares-1.32.3/docs/ares_dns_opt_datatype_t.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_opt_datatype_t.3 rename to lib/c-ares-1.32.3/docs/ares_dns_opt_datatype_t.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_opt_get_datatype.3 b/lib/c-ares-1.32.3/docs/ares_dns_opt_get_datatype.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_opt_get_datatype.3 rename to lib/c-ares-1.32.3/docs/ares_dns_opt_get_datatype.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_opt_get_name.3 b/lib/c-ares-1.32.3/docs/ares_dns_opt_get_name.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_opt_get_name.3 rename to lib/c-ares-1.32.3/docs/ares_dns_opt_get_name.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_parse.3 b/lib/c-ares-1.32.3/docs/ares_dns_parse.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_parse.3 rename to lib/c-ares-1.32.3/docs/ares_dns_parse.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_rcode_t.3 b/lib/c-ares-1.32.3/docs/ares_dns_rcode_t.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_rcode_t.3 rename to lib/c-ares-1.32.3/docs/ares_dns_rcode_t.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_rcode_tostr.3 b/lib/c-ares-1.32.3/docs/ares_dns_rcode_tostr.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_rcode_tostr.3 rename to lib/c-ares-1.32.3/docs/ares_dns_rcode_tostr.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_rec_type_fromstr.3 b/lib/c-ares-1.32.3/docs/ares_dns_rec_type_fromstr.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_rec_type_fromstr.3 rename to lib/c-ares-1.32.3/docs/ares_dns_rec_type_fromstr.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_rec_type_t.3 b/lib/c-ares-1.32.3/docs/ares_dns_rec_type_t.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_rec_type_t.3 rename to lib/c-ares-1.32.3/docs/ares_dns_rec_type_t.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_rec_type_tostr.3 b/lib/c-ares-1.32.3/docs/ares_dns_rec_type_tostr.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_rec_type_tostr.3 rename to lib/c-ares-1.32.3/docs/ares_dns_rec_type_tostr.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_record.3 b/lib/c-ares-1.32.3/docs/ares_dns_record.3 similarity index 94% rename from lib/c-ares-1.32.0/docs/ares_dns_record.3 rename to lib/c-ares-1.32.3/docs/ares_dns_record.3 index 11c59a64864..47ca95b057a 100644 --- a/lib/c-ares-1.32.0/docs/ares_dns_record.3 +++ b/lib/c-ares-1.32.3/docs/ares_dns_record.3 @@ -32,6 +32,9 @@ ares_dns_record_t *ares_dns_record_duplicate(const ares_dns_record_t *dnsrec); unsigned short ares_dns_record_get_id(const ares_dns_record_t *dnsrec); +ares_bool_t ares_dns_record_set_id(ares_dns_record_t *dnsrec, + unsigned short id); + unsigned short ares_dns_record_get_flags(const ares_dns_record_t *dnsrec); ares_dns_opcode_t ares_dns_record_get_opcode(const ares_dns_record_t *dnsrec); @@ -343,6 +346,14 @@ message id from the DNS record provided in the .IR dnsrec parameter. +The \fIares_dns_record_set_id(3)\fP function is used to set the DNS +message id in the +.IR id +parameter from the DNS record provided in the +.IR dnsrec +parameter. This id will be overwritten when passing the record to c-ares, +so mostly exists for external purposes. + The \fIares_dns_record_get_flags(3)\fP function is used to retrieve the DNS message flags from the DNS record provided in the .IR dnsrec @@ -428,12 +439,12 @@ is returned on out of memory, .B ARES_EFORMERR is returned on misuse. -\fIares_dns_record_get_id(3)\fP, \fIares_dns_record_get_flags(3)\fP, -\fIares_dns_record_get_opcode(3)\fP, \fIares_dns_record_get_rcode(3)\fP, and -\fIares_dns_record_query_cnt(3)\fP all returned their prescribed datatype -values and in general can't fail except for misuse cases, in which a 0 may -be returned, however 0 can also be a valid return value for most of these -functions. +\fIares_dns_record_get_id(3)\fP, \fIares_dns_record_set_id(3)\fP, +\fIares_dns_record_get_flags(3)\fP, \fIares_dns_record_get_opcode(3)\fP, +\fIares_dns_record_get_rcode(3)\fP, and \fIares_dns_record_query_cnt(3)\fP +all returned their prescribed datatype values and in general can't fail except +for misuse cases, in which a 0 may be returned, however 0 can also be a valid +return value for most of these functions. .SH AVAILABILITY diff --git a/lib/c-ares-1.32.0/docs/ares_dns_record_create.3 b/lib/c-ares-1.32.3/docs/ares_dns_record_create.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_record_create.3 rename to lib/c-ares-1.32.3/docs/ares_dns_record_create.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_record_destroy.3 b/lib/c-ares-1.32.3/docs/ares_dns_record_destroy.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_record_destroy.3 rename to lib/c-ares-1.32.3/docs/ares_dns_record_destroy.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_record_duplicate.3 b/lib/c-ares-1.32.3/docs/ares_dns_record_duplicate.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_record_duplicate.3 rename to lib/c-ares-1.32.3/docs/ares_dns_record_duplicate.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_record_get_flags.3 b/lib/c-ares-1.32.3/docs/ares_dns_record_get_flags.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_record_get_flags.3 rename to lib/c-ares-1.32.3/docs/ares_dns_record_get_flags.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_record_get_id.3 b/lib/c-ares-1.32.3/docs/ares_dns_record_get_id.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_record_get_id.3 rename to lib/c-ares-1.32.3/docs/ares_dns_record_get_id.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_record_get_opcode.3 b/lib/c-ares-1.32.3/docs/ares_dns_record_get_opcode.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_record_get_opcode.3 rename to lib/c-ares-1.32.3/docs/ares_dns_record_get_opcode.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_record_get_rcode.3 b/lib/c-ares-1.32.3/docs/ares_dns_record_get_rcode.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_record_get_rcode.3 rename to lib/c-ares-1.32.3/docs/ares_dns_record_get_rcode.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_record_query_add.3 b/lib/c-ares-1.32.3/docs/ares_dns_record_query_add.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_record_query_add.3 rename to lib/c-ares-1.32.3/docs/ares_dns_record_query_add.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_record_query_cnt.3 b/lib/c-ares-1.32.3/docs/ares_dns_record_query_cnt.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_record_query_cnt.3 rename to lib/c-ares-1.32.3/docs/ares_dns_record_query_cnt.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_record_query_get.3 b/lib/c-ares-1.32.3/docs/ares_dns_record_query_get.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_record_query_get.3 rename to lib/c-ares-1.32.3/docs/ares_dns_record_query_get.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_record_query_set_name.3 b/lib/c-ares-1.32.3/docs/ares_dns_record_query_set_name.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_record_query_set_name.3 rename to lib/c-ares-1.32.3/docs/ares_dns_record_query_set_name.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_record_query_set_type.3 b/lib/c-ares-1.32.3/docs/ares_dns_record_query_set_type.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_record_query_set_type.3 rename to lib/c-ares-1.32.3/docs/ares_dns_record_query_set_type.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_record_rr_add.3 b/lib/c-ares-1.32.3/docs/ares_dns_record_rr_add.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_record_rr_add.3 rename to lib/c-ares-1.32.3/docs/ares_dns_record_rr_add.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_record_rr_cnt.3 b/lib/c-ares-1.32.3/docs/ares_dns_record_rr_cnt.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_record_rr_cnt.3 rename to lib/c-ares-1.32.3/docs/ares_dns_record_rr_cnt.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_record_rr_del.3 b/lib/c-ares-1.32.3/docs/ares_dns_record_rr_del.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_record_rr_del.3 rename to lib/c-ares-1.32.3/docs/ares_dns_record_rr_del.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_record_rr_get.3 b/lib/c-ares-1.32.3/docs/ares_dns_record_rr_get.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_record_rr_get.3 rename to lib/c-ares-1.32.3/docs/ares_dns_record_rr_get.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_record_rr_get_const.3 b/lib/c-ares-1.32.3/docs/ares_dns_record_rr_get_const.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_record_rr_get_const.3 rename to lib/c-ares-1.32.3/docs/ares_dns_record_rr_get_const.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_write.3 b/lib/c-ares-1.32.3/docs/ares_dns_record_set_id.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_write.3 rename to lib/c-ares-1.32.3/docs/ares_dns_record_set_id.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_rr.3 b/lib/c-ares-1.32.3/docs/ares_dns_rr.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_rr.3 rename to lib/c-ares-1.32.3/docs/ares_dns_rr.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_rr_add_abin.3 b/lib/c-ares-1.32.3/docs/ares_dns_rr_add_abin.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_rr_add_abin.3 rename to lib/c-ares-1.32.3/docs/ares_dns_rr_add_abin.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_rr_del_abin.3 b/lib/c-ares-1.32.3/docs/ares_dns_rr_del_abin.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_rr_del_abin.3 rename to lib/c-ares-1.32.3/docs/ares_dns_rr_del_abin.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_rr_get_abin.3 b/lib/c-ares-1.32.3/docs/ares_dns_rr_get_abin.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_rr_get_abin.3 rename to lib/c-ares-1.32.3/docs/ares_dns_rr_get_abin.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_rr_get_abin_cnt.3 b/lib/c-ares-1.32.3/docs/ares_dns_rr_get_abin_cnt.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_rr_get_abin_cnt.3 rename to lib/c-ares-1.32.3/docs/ares_dns_rr_get_abin_cnt.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_rr_get_addr.3 b/lib/c-ares-1.32.3/docs/ares_dns_rr_get_addr.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_rr_get_addr.3 rename to lib/c-ares-1.32.3/docs/ares_dns_rr_get_addr.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_rr_get_addr6.3 b/lib/c-ares-1.32.3/docs/ares_dns_rr_get_addr6.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_rr_get_addr6.3 rename to lib/c-ares-1.32.3/docs/ares_dns_rr_get_addr6.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_rr_get_bin.3 b/lib/c-ares-1.32.3/docs/ares_dns_rr_get_bin.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_rr_get_bin.3 rename to lib/c-ares-1.32.3/docs/ares_dns_rr_get_bin.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_rr_get_class.3 b/lib/c-ares-1.32.3/docs/ares_dns_rr_get_class.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_rr_get_class.3 rename to lib/c-ares-1.32.3/docs/ares_dns_rr_get_class.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_rr_get_keys.3 b/lib/c-ares-1.32.3/docs/ares_dns_rr_get_keys.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_rr_get_keys.3 rename to lib/c-ares-1.32.3/docs/ares_dns_rr_get_keys.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_rr_get_name.3 b/lib/c-ares-1.32.3/docs/ares_dns_rr_get_name.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_rr_get_name.3 rename to lib/c-ares-1.32.3/docs/ares_dns_rr_get_name.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_rr_get_opt.3 b/lib/c-ares-1.32.3/docs/ares_dns_rr_get_opt.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_rr_get_opt.3 rename to lib/c-ares-1.32.3/docs/ares_dns_rr_get_opt.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_rr_get_opt_byid.3 b/lib/c-ares-1.32.3/docs/ares_dns_rr_get_opt_byid.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_rr_get_opt_byid.3 rename to lib/c-ares-1.32.3/docs/ares_dns_rr_get_opt_byid.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_rr_get_opt_cnt.3 b/lib/c-ares-1.32.3/docs/ares_dns_rr_get_opt_cnt.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_rr_get_opt_cnt.3 rename to lib/c-ares-1.32.3/docs/ares_dns_rr_get_opt_cnt.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_rr_get_str.3 b/lib/c-ares-1.32.3/docs/ares_dns_rr_get_str.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_rr_get_str.3 rename to lib/c-ares-1.32.3/docs/ares_dns_rr_get_str.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_rr_get_ttl.3 b/lib/c-ares-1.32.3/docs/ares_dns_rr_get_ttl.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_rr_get_ttl.3 rename to lib/c-ares-1.32.3/docs/ares_dns_rr_get_ttl.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_rr_get_type.3 b/lib/c-ares-1.32.3/docs/ares_dns_rr_get_type.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_rr_get_type.3 rename to lib/c-ares-1.32.3/docs/ares_dns_rr_get_type.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_rr_get_u16.3 b/lib/c-ares-1.32.3/docs/ares_dns_rr_get_u16.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_rr_get_u16.3 rename to lib/c-ares-1.32.3/docs/ares_dns_rr_get_u16.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_rr_get_u32.3 b/lib/c-ares-1.32.3/docs/ares_dns_rr_get_u32.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_rr_get_u32.3 rename to lib/c-ares-1.32.3/docs/ares_dns_rr_get_u32.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_rr_get_u8.3 b/lib/c-ares-1.32.3/docs/ares_dns_rr_get_u8.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_rr_get_u8.3 rename to lib/c-ares-1.32.3/docs/ares_dns_rr_get_u8.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_rr_key_datatype.3 b/lib/c-ares-1.32.3/docs/ares_dns_rr_key_datatype.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_rr_key_datatype.3 rename to lib/c-ares-1.32.3/docs/ares_dns_rr_key_datatype.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_rr_key_t.3 b/lib/c-ares-1.32.3/docs/ares_dns_rr_key_t.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_rr_key_t.3 rename to lib/c-ares-1.32.3/docs/ares_dns_rr_key_t.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_rr_key_to_rec_type.3 b/lib/c-ares-1.32.3/docs/ares_dns_rr_key_to_rec_type.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_rr_key_to_rec_type.3 rename to lib/c-ares-1.32.3/docs/ares_dns_rr_key_to_rec_type.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_rr_key_tostr.3 b/lib/c-ares-1.32.3/docs/ares_dns_rr_key_tostr.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_rr_key_tostr.3 rename to lib/c-ares-1.32.3/docs/ares_dns_rr_key_tostr.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_rr_set_addr.3 b/lib/c-ares-1.32.3/docs/ares_dns_rr_set_addr.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_rr_set_addr.3 rename to lib/c-ares-1.32.3/docs/ares_dns_rr_set_addr.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_rr_set_addr6.3 b/lib/c-ares-1.32.3/docs/ares_dns_rr_set_addr6.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_rr_set_addr6.3 rename to lib/c-ares-1.32.3/docs/ares_dns_rr_set_addr6.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_rr_set_bin.3 b/lib/c-ares-1.32.3/docs/ares_dns_rr_set_bin.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_rr_set_bin.3 rename to lib/c-ares-1.32.3/docs/ares_dns_rr_set_bin.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_rr_set_opt.3 b/lib/c-ares-1.32.3/docs/ares_dns_rr_set_opt.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_rr_set_opt.3 rename to lib/c-ares-1.32.3/docs/ares_dns_rr_set_opt.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_rr_set_str.3 b/lib/c-ares-1.32.3/docs/ares_dns_rr_set_str.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_rr_set_str.3 rename to lib/c-ares-1.32.3/docs/ares_dns_rr_set_str.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_rr_set_u16.3 b/lib/c-ares-1.32.3/docs/ares_dns_rr_set_u16.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_rr_set_u16.3 rename to lib/c-ares-1.32.3/docs/ares_dns_rr_set_u16.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_rr_set_u32.3 b/lib/c-ares-1.32.3/docs/ares_dns_rr_set_u32.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_rr_set_u32.3 rename to lib/c-ares-1.32.3/docs/ares_dns_rr_set_u32.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_rr_set_u8.3 b/lib/c-ares-1.32.3/docs/ares_dns_rr_set_u8.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_rr_set_u8.3 rename to lib/c-ares-1.32.3/docs/ares_dns_rr_set_u8.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_section_t.3 b/lib/c-ares-1.32.3/docs/ares_dns_section_t.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_section_t.3 rename to lib/c-ares-1.32.3/docs/ares_dns_section_t.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dns_section_tostr.3 b/lib/c-ares-1.32.3/docs/ares_dns_section_tostr.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dns_section_tostr.3 rename to lib/c-ares-1.32.3/docs/ares_dns_section_tostr.3 diff --git a/lib/c-ares-1.32.3/docs/ares_dns_write.3 b/lib/c-ares-1.32.3/docs/ares_dns_write.3 new file mode 100644 index 00000000000..4acc581d297 --- /dev/null +++ b/lib/c-ares-1.32.3/docs/ares_dns_write.3 @@ -0,0 +1,3 @@ +.\" Copyright (C) 2023 The c-ares project and its contributors. +.\" SPDX-License-Identifier: MIT +.so man3/ares_dns_record.3 diff --git a/lib/c-ares-1.32.0/docs/ares_dup.3 b/lib/c-ares-1.32.3/docs/ares_dup.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_dup.3 rename to lib/c-ares-1.32.3/docs/ares_dup.3 diff --git a/lib/c-ares-1.32.0/docs/ares_expand_name.3 b/lib/c-ares-1.32.3/docs/ares_expand_name.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_expand_name.3 rename to lib/c-ares-1.32.3/docs/ares_expand_name.3 diff --git a/lib/c-ares-1.32.0/docs/ares_expand_string.3 b/lib/c-ares-1.32.3/docs/ares_expand_string.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_expand_string.3 rename to lib/c-ares-1.32.3/docs/ares_expand_string.3 diff --git a/lib/c-ares-1.32.0/docs/ares_fds.3 b/lib/c-ares-1.32.3/docs/ares_fds.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_fds.3 rename to lib/c-ares-1.32.3/docs/ares_fds.3 diff --git a/lib/c-ares-1.32.0/docs/ares_free_data.3 b/lib/c-ares-1.32.3/docs/ares_free_data.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_free_data.3 rename to lib/c-ares-1.32.3/docs/ares_free_data.3 diff --git a/lib/c-ares-1.32.0/docs/ares_free_hostent.3 b/lib/c-ares-1.32.3/docs/ares_free_hostent.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_free_hostent.3 rename to lib/c-ares-1.32.3/docs/ares_free_hostent.3 diff --git a/lib/c-ares-1.32.0/docs/ares_free_string.3 b/lib/c-ares-1.32.3/docs/ares_free_string.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_free_string.3 rename to lib/c-ares-1.32.3/docs/ares_free_string.3 diff --git a/lib/c-ares-1.32.0/docs/ares_freeaddrinfo.3 b/lib/c-ares-1.32.3/docs/ares_freeaddrinfo.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_freeaddrinfo.3 rename to lib/c-ares-1.32.3/docs/ares_freeaddrinfo.3 diff --git a/lib/c-ares-1.32.0/docs/ares_get_servers.3 b/lib/c-ares-1.32.3/docs/ares_get_servers.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_get_servers.3 rename to lib/c-ares-1.32.3/docs/ares_get_servers.3 diff --git a/lib/c-ares-1.32.0/docs/ares_get_servers_csv.3 b/lib/c-ares-1.32.3/docs/ares_get_servers_csv.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_get_servers_csv.3 rename to lib/c-ares-1.32.3/docs/ares_get_servers_csv.3 diff --git a/lib/c-ares-1.32.0/docs/ares_get_servers_ports.3 b/lib/c-ares-1.32.3/docs/ares_get_servers_ports.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_get_servers_ports.3 rename to lib/c-ares-1.32.3/docs/ares_get_servers_ports.3 diff --git a/lib/c-ares-1.32.0/docs/ares_getaddrinfo.3 b/lib/c-ares-1.32.3/docs/ares_getaddrinfo.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_getaddrinfo.3 rename to lib/c-ares-1.32.3/docs/ares_getaddrinfo.3 diff --git a/lib/c-ares-1.32.0/docs/ares_gethostbyaddr.3 b/lib/c-ares-1.32.3/docs/ares_gethostbyaddr.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_gethostbyaddr.3 rename to lib/c-ares-1.32.3/docs/ares_gethostbyaddr.3 diff --git a/lib/c-ares-1.32.0/docs/ares_gethostbyname.3 b/lib/c-ares-1.32.3/docs/ares_gethostbyname.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_gethostbyname.3 rename to lib/c-ares-1.32.3/docs/ares_gethostbyname.3 diff --git a/lib/c-ares-1.32.0/docs/ares_gethostbyname_file.3 b/lib/c-ares-1.32.3/docs/ares_gethostbyname_file.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_gethostbyname_file.3 rename to lib/c-ares-1.32.3/docs/ares_gethostbyname_file.3 diff --git a/lib/c-ares-1.32.0/docs/ares_getnameinfo.3 b/lib/c-ares-1.32.3/docs/ares_getnameinfo.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_getnameinfo.3 rename to lib/c-ares-1.32.3/docs/ares_getnameinfo.3 diff --git a/lib/c-ares-1.32.0/docs/ares_getsock.3 b/lib/c-ares-1.32.3/docs/ares_getsock.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_getsock.3 rename to lib/c-ares-1.32.3/docs/ares_getsock.3 diff --git a/lib/c-ares-1.32.0/docs/ares_inet_ntop.3 b/lib/c-ares-1.32.3/docs/ares_inet_ntop.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_inet_ntop.3 rename to lib/c-ares-1.32.3/docs/ares_inet_ntop.3 diff --git a/lib/c-ares-1.32.0/docs/ares_inet_pton.3 b/lib/c-ares-1.32.3/docs/ares_inet_pton.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_inet_pton.3 rename to lib/c-ares-1.32.3/docs/ares_inet_pton.3 diff --git a/lib/c-ares-1.32.0/docs/ares_init.3 b/lib/c-ares-1.32.3/docs/ares_init.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_init.3 rename to lib/c-ares-1.32.3/docs/ares_init.3 diff --git a/lib/c-ares-1.32.0/docs/ares_init_options.3 b/lib/c-ares-1.32.3/docs/ares_init_options.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_init_options.3 rename to lib/c-ares-1.32.3/docs/ares_init_options.3 diff --git a/lib/c-ares-1.32.0/docs/ares_library_cleanup.3 b/lib/c-ares-1.32.3/docs/ares_library_cleanup.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_library_cleanup.3 rename to lib/c-ares-1.32.3/docs/ares_library_cleanup.3 diff --git a/lib/c-ares-1.32.0/docs/ares_library_init.3 b/lib/c-ares-1.32.3/docs/ares_library_init.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_library_init.3 rename to lib/c-ares-1.32.3/docs/ares_library_init.3 diff --git a/lib/c-ares-1.32.0/docs/ares_library_init_android.3 b/lib/c-ares-1.32.3/docs/ares_library_init_android.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_library_init_android.3 rename to lib/c-ares-1.32.3/docs/ares_library_init_android.3 diff --git a/lib/c-ares-1.32.0/docs/ares_library_initialized.3 b/lib/c-ares-1.32.3/docs/ares_library_initialized.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_library_initialized.3 rename to lib/c-ares-1.32.3/docs/ares_library_initialized.3 diff --git a/lib/c-ares-1.32.0/docs/ares_mkquery.3 b/lib/c-ares-1.32.3/docs/ares_mkquery.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_mkquery.3 rename to lib/c-ares-1.32.3/docs/ares_mkquery.3 diff --git a/lib/c-ares-1.32.0/docs/ares_opt_param_t.3 b/lib/c-ares-1.32.3/docs/ares_opt_param_t.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_opt_param_t.3 rename to lib/c-ares-1.32.3/docs/ares_opt_param_t.3 diff --git a/lib/c-ares-1.32.0/docs/ares_parse_a_reply.3 b/lib/c-ares-1.32.3/docs/ares_parse_a_reply.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_parse_a_reply.3 rename to lib/c-ares-1.32.3/docs/ares_parse_a_reply.3 diff --git a/lib/c-ares-1.32.0/docs/ares_parse_aaaa_reply.3 b/lib/c-ares-1.32.3/docs/ares_parse_aaaa_reply.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_parse_aaaa_reply.3 rename to lib/c-ares-1.32.3/docs/ares_parse_aaaa_reply.3 diff --git a/lib/c-ares-1.32.0/docs/ares_parse_caa_reply.3 b/lib/c-ares-1.32.3/docs/ares_parse_caa_reply.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_parse_caa_reply.3 rename to lib/c-ares-1.32.3/docs/ares_parse_caa_reply.3 diff --git a/lib/c-ares-1.32.0/docs/ares_parse_mx_reply.3 b/lib/c-ares-1.32.3/docs/ares_parse_mx_reply.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_parse_mx_reply.3 rename to lib/c-ares-1.32.3/docs/ares_parse_mx_reply.3 diff --git a/lib/c-ares-1.32.0/docs/ares_parse_naptr_reply.3 b/lib/c-ares-1.32.3/docs/ares_parse_naptr_reply.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_parse_naptr_reply.3 rename to lib/c-ares-1.32.3/docs/ares_parse_naptr_reply.3 diff --git a/lib/c-ares-1.32.0/docs/ares_parse_ns_reply.3 b/lib/c-ares-1.32.3/docs/ares_parse_ns_reply.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_parse_ns_reply.3 rename to lib/c-ares-1.32.3/docs/ares_parse_ns_reply.3 diff --git a/lib/c-ares-1.32.0/docs/ares_parse_ptr_reply.3 b/lib/c-ares-1.32.3/docs/ares_parse_ptr_reply.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_parse_ptr_reply.3 rename to lib/c-ares-1.32.3/docs/ares_parse_ptr_reply.3 diff --git a/lib/c-ares-1.32.0/docs/ares_parse_soa_reply.3 b/lib/c-ares-1.32.3/docs/ares_parse_soa_reply.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_parse_soa_reply.3 rename to lib/c-ares-1.32.3/docs/ares_parse_soa_reply.3 diff --git a/lib/c-ares-1.32.0/docs/ares_parse_srv_reply.3 b/lib/c-ares-1.32.3/docs/ares_parse_srv_reply.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_parse_srv_reply.3 rename to lib/c-ares-1.32.3/docs/ares_parse_srv_reply.3 diff --git a/lib/c-ares-1.32.0/docs/ares_parse_txt_reply.3 b/lib/c-ares-1.32.3/docs/ares_parse_txt_reply.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_parse_txt_reply.3 rename to lib/c-ares-1.32.3/docs/ares_parse_txt_reply.3 diff --git a/lib/c-ares-1.32.0/docs/ares_parse_uri_reply.3 b/lib/c-ares-1.32.3/docs/ares_parse_uri_reply.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_parse_uri_reply.3 rename to lib/c-ares-1.32.3/docs/ares_parse_uri_reply.3 diff --git a/lib/c-ares-1.32.0/docs/ares_process.3 b/lib/c-ares-1.32.3/docs/ares_process.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_process.3 rename to lib/c-ares-1.32.3/docs/ares_process.3 diff --git a/lib/c-ares-1.32.0/docs/ares_query.3 b/lib/c-ares-1.32.3/docs/ares_query.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_query.3 rename to lib/c-ares-1.32.3/docs/ares_query.3 diff --git a/lib/c-ares-1.32.0/docs/ares_query_dnsrec.3 b/lib/c-ares-1.32.3/docs/ares_query_dnsrec.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_query_dnsrec.3 rename to lib/c-ares-1.32.3/docs/ares_query_dnsrec.3 diff --git a/lib/c-ares-1.32.0/docs/ares_queue.3 b/lib/c-ares-1.32.3/docs/ares_queue.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_queue.3 rename to lib/c-ares-1.32.3/docs/ares_queue.3 diff --git a/lib/c-ares-1.32.0/docs/ares_queue_active_queries.3 b/lib/c-ares-1.32.3/docs/ares_queue_active_queries.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_queue_active_queries.3 rename to lib/c-ares-1.32.3/docs/ares_queue_active_queries.3 diff --git a/lib/c-ares-1.32.0/docs/ares_queue_wait_empty.3 b/lib/c-ares-1.32.3/docs/ares_queue_wait_empty.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_queue_wait_empty.3 rename to lib/c-ares-1.32.3/docs/ares_queue_wait_empty.3 diff --git a/lib/c-ares-1.32.0/docs/ares_reinit.3 b/lib/c-ares-1.32.3/docs/ares_reinit.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_reinit.3 rename to lib/c-ares-1.32.3/docs/ares_reinit.3 diff --git a/lib/c-ares-1.32.0/docs/ares_save_options.3 b/lib/c-ares-1.32.3/docs/ares_save_options.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_save_options.3 rename to lib/c-ares-1.32.3/docs/ares_save_options.3 diff --git a/lib/c-ares-1.32.0/docs/ares_search.3 b/lib/c-ares-1.32.3/docs/ares_search.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_search.3 rename to lib/c-ares-1.32.3/docs/ares_search.3 diff --git a/lib/c-ares-1.32.0/docs/ares_search_dnsrec.3 b/lib/c-ares-1.32.3/docs/ares_search_dnsrec.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_search_dnsrec.3 rename to lib/c-ares-1.32.3/docs/ares_search_dnsrec.3 diff --git a/lib/c-ares-1.32.0/docs/ares_send.3 b/lib/c-ares-1.32.3/docs/ares_send.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_send.3 rename to lib/c-ares-1.32.3/docs/ares_send.3 diff --git a/lib/c-ares-1.32.0/docs/ares_send_dnsrec.3 b/lib/c-ares-1.32.3/docs/ares_send_dnsrec.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_send_dnsrec.3 rename to lib/c-ares-1.32.3/docs/ares_send_dnsrec.3 diff --git a/lib/c-ares-1.32.0/docs/ares_set_local_dev.3 b/lib/c-ares-1.32.3/docs/ares_set_local_dev.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_set_local_dev.3 rename to lib/c-ares-1.32.3/docs/ares_set_local_dev.3 diff --git a/lib/c-ares-1.32.0/docs/ares_set_local_ip4.3 b/lib/c-ares-1.32.3/docs/ares_set_local_ip4.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_set_local_ip4.3 rename to lib/c-ares-1.32.3/docs/ares_set_local_ip4.3 diff --git a/lib/c-ares-1.32.0/docs/ares_set_local_ip6.3 b/lib/c-ares-1.32.3/docs/ares_set_local_ip6.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_set_local_ip6.3 rename to lib/c-ares-1.32.3/docs/ares_set_local_ip6.3 diff --git a/lib/c-ares-1.32.0/docs/ares_set_server_state_callback.3 b/lib/c-ares-1.32.3/docs/ares_set_server_state_callback.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_set_server_state_callback.3 rename to lib/c-ares-1.32.3/docs/ares_set_server_state_callback.3 diff --git a/lib/c-ares-1.32.0/docs/ares_set_servers.3 b/lib/c-ares-1.32.3/docs/ares_set_servers.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_set_servers.3 rename to lib/c-ares-1.32.3/docs/ares_set_servers.3 diff --git a/lib/c-ares-1.32.0/docs/ares_set_servers_csv.3 b/lib/c-ares-1.32.3/docs/ares_set_servers_csv.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_set_servers_csv.3 rename to lib/c-ares-1.32.3/docs/ares_set_servers_csv.3 diff --git a/lib/c-ares-1.32.0/docs/ares_set_servers_ports.3 b/lib/c-ares-1.32.3/docs/ares_set_servers_ports.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_set_servers_ports.3 rename to lib/c-ares-1.32.3/docs/ares_set_servers_ports.3 diff --git a/lib/c-ares-1.32.0/docs/ares_set_servers_ports_csv.3 b/lib/c-ares-1.32.3/docs/ares_set_servers_ports_csv.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_set_servers_ports_csv.3 rename to lib/c-ares-1.32.3/docs/ares_set_servers_ports_csv.3 diff --git a/lib/c-ares-1.32.0/docs/ares_set_socket_callback.3 b/lib/c-ares-1.32.3/docs/ares_set_socket_callback.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_set_socket_callback.3 rename to lib/c-ares-1.32.3/docs/ares_set_socket_callback.3 diff --git a/lib/c-ares-1.32.0/docs/ares_set_socket_configure_callback.3 b/lib/c-ares-1.32.3/docs/ares_set_socket_configure_callback.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_set_socket_configure_callback.3 rename to lib/c-ares-1.32.3/docs/ares_set_socket_configure_callback.3 diff --git a/lib/c-ares-1.32.0/docs/ares_set_socket_functions.3 b/lib/c-ares-1.32.3/docs/ares_set_socket_functions.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_set_socket_functions.3 rename to lib/c-ares-1.32.3/docs/ares_set_socket_functions.3 diff --git a/lib/c-ares-1.32.0/docs/ares_set_sortlist.3 b/lib/c-ares-1.32.3/docs/ares_set_sortlist.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_set_sortlist.3 rename to lib/c-ares-1.32.3/docs/ares_set_sortlist.3 diff --git a/lib/c-ares-1.32.0/docs/ares_strerror.3 b/lib/c-ares-1.32.3/docs/ares_strerror.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_strerror.3 rename to lib/c-ares-1.32.3/docs/ares_strerror.3 diff --git a/lib/c-ares-1.32.0/docs/ares_svcb_param_t.3 b/lib/c-ares-1.32.3/docs/ares_svcb_param_t.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_svcb_param_t.3 rename to lib/c-ares-1.32.3/docs/ares_svcb_param_t.3 diff --git a/lib/c-ares-1.32.0/docs/ares_threadsafety.3 b/lib/c-ares-1.32.3/docs/ares_threadsafety.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_threadsafety.3 rename to lib/c-ares-1.32.3/docs/ares_threadsafety.3 diff --git a/lib/c-ares-1.32.0/docs/ares_timeout.3 b/lib/c-ares-1.32.3/docs/ares_timeout.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_timeout.3 rename to lib/c-ares-1.32.3/docs/ares_timeout.3 diff --git a/lib/c-ares-1.32.0/docs/ares_tlsa_match_t.3 b/lib/c-ares-1.32.3/docs/ares_tlsa_match_t.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_tlsa_match_t.3 rename to lib/c-ares-1.32.3/docs/ares_tlsa_match_t.3 diff --git a/lib/c-ares-1.32.0/docs/ares_tlsa_selector_t.3 b/lib/c-ares-1.32.3/docs/ares_tlsa_selector_t.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_tlsa_selector_t.3 rename to lib/c-ares-1.32.3/docs/ares_tlsa_selector_t.3 diff --git a/lib/c-ares-1.32.0/docs/ares_tlsa_usage_t.3 b/lib/c-ares-1.32.3/docs/ares_tlsa_usage_t.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_tlsa_usage_t.3 rename to lib/c-ares-1.32.3/docs/ares_tlsa_usage_t.3 diff --git a/lib/c-ares-1.32.0/docs/ares_version.3 b/lib/c-ares-1.32.3/docs/ares_version.3 similarity index 100% rename from lib/c-ares-1.32.0/docs/ares_version.3 rename to lib/c-ares-1.32.3/docs/ares_version.3 diff --git a/lib/c-ares-1.32.0/include/CMakeLists.txt b/lib/c-ares-1.32.3/include/CMakeLists.txt similarity index 100% rename from lib/c-ares-1.32.0/include/CMakeLists.txt rename to lib/c-ares-1.32.3/include/CMakeLists.txt diff --git a/lib/c-ares-1.32.0/include/Makefile.am b/lib/c-ares-1.32.3/include/Makefile.am similarity index 100% rename from lib/c-ares-1.32.0/include/Makefile.am rename to lib/c-ares-1.32.3/include/Makefile.am diff --git a/lib/c-ares-1.32.0/include/Makefile.in b/lib/c-ares-1.32.3/include/Makefile.in similarity index 100% rename from lib/c-ares-1.32.0/include/Makefile.in rename to lib/c-ares-1.32.3/include/Makefile.in diff --git a/lib/c-ares-1.32.0/include/ares.h b/lib/c-ares-1.32.3/include/ares.h similarity index 100% rename from lib/c-ares-1.32.0/include/ares.h rename to lib/c-ares-1.32.3/include/ares.h diff --git a/lib/c-ares-1.32.0/include/ares_build.h b/lib/c-ares-1.32.3/include/ares_build.h similarity index 100% rename from lib/c-ares-1.32.0/include/ares_build.h rename to lib/c-ares-1.32.3/include/ares_build.h diff --git a/lib/c-ares-1.32.0/include/ares_build.h.cmake b/lib/c-ares-1.32.3/include/ares_build.h.cmake similarity index 100% rename from lib/c-ares-1.32.0/include/ares_build.h.cmake rename to lib/c-ares-1.32.3/include/ares_build.h.cmake diff --git a/lib/c-ares-1.32.0/include/ares_build.h.in b/lib/c-ares-1.32.3/include/ares_build.h.in similarity index 100% rename from lib/c-ares-1.32.0/include/ares_build.h.in rename to lib/c-ares-1.32.3/include/ares_build.h.in diff --git a/lib/c-ares-1.32.0/include/ares_dns.h b/lib/c-ares-1.32.3/include/ares_dns.h similarity index 100% rename from lib/c-ares-1.32.0/include/ares_dns.h rename to lib/c-ares-1.32.3/include/ares_dns.h diff --git a/lib/c-ares-1.32.0/include/ares_dns_record.h b/lib/c-ares-1.32.3/include/ares_dns_record.h similarity index 100% rename from lib/c-ares-1.32.0/include/ares_dns_record.h rename to lib/c-ares-1.32.3/include/ares_dns_record.h diff --git a/lib/c-ares-1.32.0/include/ares_nameser.h b/lib/c-ares-1.32.3/include/ares_nameser.h similarity index 100% rename from lib/c-ares-1.32.0/include/ares_nameser.h rename to lib/c-ares-1.32.3/include/ares_nameser.h diff --git a/lib/c-ares-1.32.0/include/ares_version.h b/lib/c-ares-1.32.3/include/ares_version.h similarity index 96% rename from lib/c-ares-1.32.0/include/ares_version.h rename to lib/c-ares-1.32.3/include/ares_version.h index 7374767e98f..62541c31ba9 100644 --- a/lib/c-ares-1.32.0/include/ares_version.h +++ b/lib/c-ares-1.32.3/include/ares_version.h @@ -32,11 +32,11 @@ #define ARES_VERSION_MAJOR 1 #define ARES_VERSION_MINOR 32 -#define ARES_VERSION_PATCH 0 +#define ARES_VERSION_PATCH 3 #define ARES_VERSION \ ((ARES_VERSION_MAJOR << 16) | (ARES_VERSION_MINOR << 8) | \ (ARES_VERSION_PATCH)) -#define ARES_VERSION_STR "1.32.0" +#define ARES_VERSION_STR "1.32.3" #define CARES_HAVE_ARES_LIBRARY_INIT 1 #define CARES_HAVE_ARES_LIBRARY_CLEANUP 1 diff --git a/lib/c-ares-1.32.0/libcares.pc.cmake b/lib/c-ares-1.32.3/libcares.pc.cmake similarity index 100% rename from lib/c-ares-1.32.0/libcares.pc.cmake rename to lib/c-ares-1.32.3/libcares.pc.cmake diff --git a/lib/c-ares-1.32.0/libcares.pc.in b/lib/c-ares-1.32.3/libcares.pc.in similarity index 100% rename from lib/c-ares-1.32.0/libcares.pc.in rename to lib/c-ares-1.32.3/libcares.pc.in diff --git a/lib/c-ares-1.32.0/m4/ax_ac_append_to_file.m4 b/lib/c-ares-1.32.3/m4/ax_ac_append_to_file.m4 similarity index 100% rename from lib/c-ares-1.32.0/m4/ax_ac_append_to_file.m4 rename to lib/c-ares-1.32.3/m4/ax_ac_append_to_file.m4 diff --git a/lib/c-ares-1.32.0/m4/ax_ac_print_to_file.m4 b/lib/c-ares-1.32.3/m4/ax_ac_print_to_file.m4 similarity index 100% rename from lib/c-ares-1.32.0/m4/ax_ac_print_to_file.m4 rename to lib/c-ares-1.32.3/m4/ax_ac_print_to_file.m4 diff --git a/lib/c-ares-1.32.0/m4/ax_add_am_macro_static.m4 b/lib/c-ares-1.32.3/m4/ax_add_am_macro_static.m4 similarity index 100% rename from lib/c-ares-1.32.0/m4/ax_add_am_macro_static.m4 rename to lib/c-ares-1.32.3/m4/ax_add_am_macro_static.m4 diff --git a/lib/c-ares-1.32.0/m4/ax_am_macros_static.m4 b/lib/c-ares-1.32.3/m4/ax_am_macros_static.m4 similarity index 100% rename from lib/c-ares-1.32.0/m4/ax_am_macros_static.m4 rename to lib/c-ares-1.32.3/m4/ax_am_macros_static.m4 diff --git a/lib/c-ares-1.32.0/m4/ax_append_compile_flags.m4 b/lib/c-ares-1.32.3/m4/ax_append_compile_flags.m4 similarity index 100% rename from lib/c-ares-1.32.0/m4/ax_append_compile_flags.m4 rename to lib/c-ares-1.32.3/m4/ax_append_compile_flags.m4 diff --git a/lib/c-ares-1.32.0/m4/ax_append_flag.m4 b/lib/c-ares-1.32.3/m4/ax_append_flag.m4 similarity index 100% rename from lib/c-ares-1.32.0/m4/ax_append_flag.m4 rename to lib/c-ares-1.32.3/m4/ax_append_flag.m4 diff --git a/lib/c-ares-1.32.0/m4/ax_append_link_flags.m4 b/lib/c-ares-1.32.3/m4/ax_append_link_flags.m4 similarity index 100% rename from lib/c-ares-1.32.0/m4/ax_append_link_flags.m4 rename to lib/c-ares-1.32.3/m4/ax_append_link_flags.m4 diff --git a/lib/c-ares-1.32.0/m4/ax_check_compile_flag.m4 b/lib/c-ares-1.32.3/m4/ax_check_compile_flag.m4 similarity index 100% rename from lib/c-ares-1.32.0/m4/ax_check_compile_flag.m4 rename to lib/c-ares-1.32.3/m4/ax_check_compile_flag.m4 diff --git a/lib/c-ares-1.32.0/m4/ax_check_gnu_make.m4 b/lib/c-ares-1.32.3/m4/ax_check_gnu_make.m4 similarity index 100% rename from lib/c-ares-1.32.0/m4/ax_check_gnu_make.m4 rename to lib/c-ares-1.32.3/m4/ax_check_gnu_make.m4 diff --git a/lib/c-ares-1.32.0/m4/ax_check_link_flag.m4 b/lib/c-ares-1.32.3/m4/ax_check_link_flag.m4 similarity index 100% rename from lib/c-ares-1.32.0/m4/ax_check_link_flag.m4 rename to lib/c-ares-1.32.3/m4/ax_check_link_flag.m4 diff --git a/lib/c-ares-1.32.0/m4/ax_check_user_namespace.m4 b/lib/c-ares-1.32.3/m4/ax_check_user_namespace.m4 similarity index 100% rename from lib/c-ares-1.32.0/m4/ax_check_user_namespace.m4 rename to lib/c-ares-1.32.3/m4/ax_check_user_namespace.m4 diff --git a/lib/c-ares-1.32.0/m4/ax_check_uts_namespace.m4 b/lib/c-ares-1.32.3/m4/ax_check_uts_namespace.m4 similarity index 100% rename from lib/c-ares-1.32.0/m4/ax_check_uts_namespace.m4 rename to lib/c-ares-1.32.3/m4/ax_check_uts_namespace.m4 diff --git a/lib/c-ares-1.32.0/m4/ax_code_coverage.m4 b/lib/c-ares-1.32.3/m4/ax_code_coverage.m4 similarity index 100% rename from lib/c-ares-1.32.0/m4/ax_code_coverage.m4 rename to lib/c-ares-1.32.3/m4/ax_code_coverage.m4 diff --git a/lib/c-ares-1.32.0/m4/ax_compiler_vendor.m4 b/lib/c-ares-1.32.3/m4/ax_compiler_vendor.m4 similarity index 100% rename from lib/c-ares-1.32.0/m4/ax_compiler_vendor.m4 rename to lib/c-ares-1.32.3/m4/ax_compiler_vendor.m4 diff --git a/lib/c-ares-1.32.0/m4/ax_cxx_compile_stdcxx.m4 b/lib/c-ares-1.32.3/m4/ax_cxx_compile_stdcxx.m4 similarity index 100% rename from lib/c-ares-1.32.0/m4/ax_cxx_compile_stdcxx.m4 rename to lib/c-ares-1.32.3/m4/ax_cxx_compile_stdcxx.m4 diff --git a/lib/c-ares-1.32.0/m4/ax_cxx_compile_stdcxx_14.m4 b/lib/c-ares-1.32.3/m4/ax_cxx_compile_stdcxx_14.m4 similarity index 100% rename from lib/c-ares-1.32.0/m4/ax_cxx_compile_stdcxx_14.m4 rename to lib/c-ares-1.32.3/m4/ax_cxx_compile_stdcxx_14.m4 diff --git a/lib/c-ares-1.32.0/m4/ax_file_escapes.m4 b/lib/c-ares-1.32.3/m4/ax_file_escapes.m4 similarity index 100% rename from lib/c-ares-1.32.0/m4/ax_file_escapes.m4 rename to lib/c-ares-1.32.3/m4/ax_file_escapes.m4 diff --git a/lib/c-ares-1.32.0/m4/ax_pthread.m4 b/lib/c-ares-1.32.3/m4/ax_pthread.m4 similarity index 100% rename from lib/c-ares-1.32.0/m4/ax_pthread.m4 rename to lib/c-ares-1.32.3/m4/ax_pthread.m4 diff --git a/lib/c-ares-1.32.0/m4/ax_require_defined.m4 b/lib/c-ares-1.32.3/m4/ax_require_defined.m4 similarity index 100% rename from lib/c-ares-1.32.0/m4/ax_require_defined.m4 rename to lib/c-ares-1.32.3/m4/ax_require_defined.m4 diff --git a/lib/c-ares-1.32.0/m4/libtool.m4 b/lib/c-ares-1.32.3/m4/libtool.m4 similarity index 100% rename from lib/c-ares-1.32.0/m4/libtool.m4 rename to lib/c-ares-1.32.3/m4/libtool.m4 diff --git a/lib/c-ares-1.32.0/m4/ltoptions.m4 b/lib/c-ares-1.32.3/m4/ltoptions.m4 similarity index 100% rename from lib/c-ares-1.32.0/m4/ltoptions.m4 rename to lib/c-ares-1.32.3/m4/ltoptions.m4 diff --git a/lib/c-ares-1.32.0/m4/ltsugar.m4 b/lib/c-ares-1.32.3/m4/ltsugar.m4 similarity index 100% rename from lib/c-ares-1.32.0/m4/ltsugar.m4 rename to lib/c-ares-1.32.3/m4/ltsugar.m4 diff --git a/lib/c-ares-1.32.0/m4/ltversion.m4 b/lib/c-ares-1.32.3/m4/ltversion.m4 similarity index 100% rename from lib/c-ares-1.32.0/m4/ltversion.m4 rename to lib/c-ares-1.32.3/m4/ltversion.m4 diff --git a/lib/c-ares-1.32.0/m4/lt~obsolete.m4 b/lib/c-ares-1.32.3/m4/lt~obsolete.m4 similarity index 100% rename from lib/c-ares-1.32.0/m4/lt~obsolete.m4 rename to lib/c-ares-1.32.3/m4/lt~obsolete.m4 diff --git a/lib/c-ares-1.32.0/m4/pkg.m4 b/lib/c-ares-1.32.3/m4/pkg.m4 similarity index 100% rename from lib/c-ares-1.32.0/m4/pkg.m4 rename to lib/c-ares-1.32.3/m4/pkg.m4 diff --git a/lib/c-ares-1.32.0/msvc_ver.inc b/lib/c-ares-1.32.3/msvc_ver.inc similarity index 100% rename from lib/c-ares-1.32.0/msvc_ver.inc rename to lib/c-ares-1.32.3/msvc_ver.inc diff --git a/lib/c-ares-1.32.0/src/CMakeLists.txt b/lib/c-ares-1.32.3/src/CMakeLists.txt similarity index 100% rename from lib/c-ares-1.32.0/src/CMakeLists.txt rename to lib/c-ares-1.32.3/src/CMakeLists.txt diff --git a/lib/c-ares-1.32.0/src/Makefile.am b/lib/c-ares-1.32.3/src/Makefile.am similarity index 100% rename from lib/c-ares-1.32.0/src/Makefile.am rename to lib/c-ares-1.32.3/src/Makefile.am diff --git a/lib/c-ares-1.32.0/src/Makefile.in b/lib/c-ares-1.32.3/src/Makefile.in similarity index 100% rename from lib/c-ares-1.32.0/src/Makefile.in rename to lib/c-ares-1.32.3/src/Makefile.in diff --git a/lib/c-ares-1.32.0/src/lib/CMakeLists.txt b/lib/c-ares-1.32.3/src/lib/CMakeLists.txt similarity index 100% rename from lib/c-ares-1.32.0/src/lib/CMakeLists.txt rename to lib/c-ares-1.32.3/src/lib/CMakeLists.txt diff --git a/lib/c-ares-1.32.0/src/lib/Makefile.am b/lib/c-ares-1.32.3/src/lib/Makefile.am similarity index 100% rename from lib/c-ares-1.32.0/src/lib/Makefile.am rename to lib/c-ares-1.32.3/src/lib/Makefile.am diff --git a/lib/c-ares-1.32.0/src/lib/Makefile.in b/lib/c-ares-1.32.3/src/lib/Makefile.in similarity index 99% rename from lib/c-ares-1.32.0/src/lib/Makefile.in rename to lib/c-ares-1.32.3/src/lib/Makefile.in index 38e278a6d30..d1758eb8adb 100644 --- a/lib/c-ares-1.32.0/src/lib/Makefile.in +++ b/lib/c-ares-1.32.3/src/lib/Makefile.in @@ -15,7 +15,7 @@ @SET_MAKE@ # aminclude_static.am generated automatically by Autoconf -# from AX_AM_MACROS_STATIC on Thu Jul 4 07:03:12 EDT 2024 +# from AX_AM_MACROS_STATIC on Wed Jul 24 05:40:58 EDT 2024 # Copyright (C) The c-ares project and its contributors # SPDX-License-Identifier: MIT diff --git a/lib/c-ares-1.32.0/src/lib/Makefile.inc b/lib/c-ares-1.32.3/src/lib/Makefile.inc similarity index 100% rename from lib/c-ares-1.32.0/src/lib/Makefile.inc rename to lib/c-ares-1.32.3/src/lib/Makefile.inc diff --git a/lib/c-ares-1.32.0/src/lib/ares__addrinfo2hostent.c b/lib/c-ares-1.32.3/src/lib/ares__addrinfo2hostent.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares__addrinfo2hostent.c rename to lib/c-ares-1.32.3/src/lib/ares__addrinfo2hostent.c diff --git a/lib/c-ares-1.32.0/src/lib/ares__addrinfo_localhost.c b/lib/c-ares-1.32.3/src/lib/ares__addrinfo_localhost.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares__addrinfo_localhost.c rename to lib/c-ares-1.32.3/src/lib/ares__addrinfo_localhost.c diff --git a/lib/c-ares-1.32.0/src/lib/ares__buf.c b/lib/c-ares-1.32.3/src/lib/ares__buf.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares__buf.c rename to lib/c-ares-1.32.3/src/lib/ares__buf.c diff --git a/lib/c-ares-1.32.0/src/lib/ares__buf.h b/lib/c-ares-1.32.3/src/lib/ares__buf.h similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares__buf.h rename to lib/c-ares-1.32.3/src/lib/ares__buf.h diff --git a/lib/c-ares-1.32.0/src/lib/ares__close_sockets.c b/lib/c-ares-1.32.3/src/lib/ares__close_sockets.c similarity index 56% rename from lib/c-ares-1.32.0/src/lib/ares__close_sockets.c rename to lib/c-ares-1.32.3/src/lib/ares__close_sockets.c index 8d7334b4c4d..33a030c9d23 100644 --- a/lib/c-ares-1.32.0/src/lib/ares__close_sockets.c +++ b/lib/c-ares-1.32.3/src/lib/ares__close_sockets.c @@ -28,7 +28,8 @@ #include "ares_private.h" #include -static void ares__requeue_queries(struct server_connection *conn) +static void ares__requeue_queries(struct server_connection *conn, + ares_status_t requeue_status) { struct query *query; ares_timeval_t now; @@ -36,11 +37,12 @@ static void ares__requeue_queries(struct server_connection *conn) ares__tvnow(&now); while ((query = ares__llist_first_val(conn->queries_to_conn)) != NULL) { - ares__requeue_query(query, &now); + ares__requeue_query(query, &now, requeue_status); } } -void ares__close_connection(struct server_connection *conn) +void ares__close_connection(struct server_connection *conn, + ares_status_t requeue_status) { struct server_state *server = conn->server; ares_channel_t *channel = server->channel; @@ -58,7 +60,7 @@ void ares__close_connection(struct server_connection *conn) } /* Requeue queries to other connections */ - ares__requeue_queries(conn); + ares__requeue_queries(conn, requeue_status); ares__llist_destroy(conn->queries_to_conn); @@ -74,45 +76,63 @@ void ares__close_sockets(struct server_state *server) while ((node = ares__llist_node_first(server->connections)) != NULL) { struct server_connection *conn = ares__llist_node_val(node); - ares__close_connection(conn); + ares__close_connection(conn, ARES_SUCCESS); } } -void ares__check_cleanup_conn(const ares_channel_t *channel, - struct server_connection *conn) +void ares__check_cleanup_conns(const ares_channel_t *channel) { - ares_bool_t do_cleanup = ARES_FALSE; + ares__slist_node_t *snode; - if (channel == NULL || conn == NULL) { + if (channel == NULL) { return; /* LCOV_EXCL_LINE: DefensiveCoding */ } - if (ares__llist_len(conn->queries_to_conn)) { - return; + /* Iterate across each server */ + for (snode = ares__slist_node_first(channel->servers); snode != NULL; + snode = ares__slist_node_next(snode)) { + + struct server_state *server = ares__slist_node_val(snode); + ares__llist_node_t *cnode; + + /* Iterate across each connection */ + cnode = ares__llist_node_first(server->connections); + while (cnode != NULL) { + ares__llist_node_t *next = ares__llist_node_next(cnode); + struct server_connection *conn = ares__llist_node_val(cnode); + ares_bool_t do_cleanup = ARES_FALSE; + cnode = next; + + /* Has connections, not eligible */ + if (ares__llist_len(conn->queries_to_conn)) { + continue; + } + + /* If we are configured not to stay open, close it out */ + if (!(channel->flags & ARES_FLAG_STAYOPEN)) { + do_cleanup = ARES_TRUE; + } + + /* If the associated server has failures, close it out. Resetting the + * connection (and specifically the source port number) can help resolve + * situations where packets are being dropped. + */ + if (conn->server->consec_failures > 0) { + do_cleanup = ARES_TRUE; + } + + /* If the udp connection hit its max queries, always close it */ + if (!conn->is_tcp && channel->udp_max_queries > 0 && + conn->total_queries >= channel->udp_max_queries) { + do_cleanup = ARES_TRUE; + } + + if (!do_cleanup) { + continue; + } + + /* Clean it up */ + ares__close_connection(conn, ARES_SUCCESS); + } } - - /* If we are configured not to stay open, close it out */ - if (!(channel->flags & ARES_FLAG_STAYOPEN)) { - do_cleanup = ARES_TRUE; - } - - /* If the associated server has failures, close it out. Resetting the - * connection (and specifically the source port number) can help resolve - * situations where packets are being dropped. - */ - if (conn->server->consec_failures > 0) { - do_cleanup = ARES_TRUE; - } - - /* If the udp connection hit its max queries, always close it */ - if (!conn->is_tcp && channel->udp_max_queries > 0 && - conn->total_queries >= channel->udp_max_queries) { - do_cleanup = ARES_TRUE; - } - - if (!do_cleanup) { - return; - } - - ares__close_connection(conn); } diff --git a/lib/c-ares-1.32.0/src/lib/ares__hosts_file.c b/lib/c-ares-1.32.3/src/lib/ares__hosts_file.c similarity index 87% rename from lib/c-ares-1.32.0/src/lib/ares__hosts_file.c rename to lib/c-ares-1.32.3/src/lib/ares__hosts_file.c index 271386e7b25..ae9c071d7aa 100644 --- a/lib/c-ares-1.32.0/src/lib/ares__hosts_file.c +++ b/lib/c-ares-1.32.3/src/lib/ares__hosts_file.c @@ -767,126 +767,6 @@ ares_status_t ares__hosts_search_host(ares_channel_t *channel, return ARES_SUCCESS; } -ares_status_t ares__hosts_entry_to_hostent(const ares_hosts_entry_t *entry, - int family, struct hostent **hostent) -{ - ares_status_t status; - size_t naliases; - ares__llist_node_t *node; - size_t idx; - - *hostent = ares_malloc_zero(sizeof(**hostent)); - if (*hostent == NULL) { - status = ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ - goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ - } - - (*hostent)->h_addrtype = (HOSTENT_ADDRTYPE_TYPE)family; - - /* Copy IP addresses that match the address family */ - idx = 0; - for (node = ares__llist_node_first(entry->ips); node != NULL; - node = ares__llist_node_next(node)) { - struct ares_addr addr; - const void *ptr = NULL; - size_t ptr_len = 0; - const char *ipaddr = ares__llist_node_val(node); - char **temp = NULL; - - memset(&addr, 0, sizeof(addr)); - - addr.family = family; - ptr = ares_dns_pton(ipaddr, &addr, &ptr_len); - if (ptr == NULL) { - continue; - } - - /* If family == AF_UNSPEC, then we want to inherit this for future - * conversions as we can only support a single address class */ - if (family == AF_UNSPEC) { - family = addr.family; - (*hostent)->h_addrtype = (HOSTENT_ADDRTYPE_TYPE)addr.family; - } - - temp = ares_realloc_zero((*hostent)->h_addr_list, - (idx + 1) * sizeof(*(*hostent)->h_addr_list), - (idx + 2) * sizeof(*(*hostent)->h_addr_list)); - if (temp == NULL) { - status = ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ - goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ - } - - (*hostent)->h_addr_list = temp; - - (*hostent)->h_addr_list[idx] = ares_malloc(ptr_len); - if ((*hostent)->h_addr_list[idx] == NULL) { - status = ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ - goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ - } - - memcpy((*hostent)->h_addr_list[idx], ptr, ptr_len); - idx++; - (*hostent)->h_length = (HOSTENT_LENGTH_TYPE)ptr_len; - } - - /* entry didn't match address class */ - if (idx == 0) { - status = ARES_ENOTFOUND; - goto fail; - } - - /* Copy main hostname */ - (*hostent)->h_name = ares_strdup(ares__llist_first_val(entry->hosts)); - if ((*hostent)->h_name == NULL) { - status = ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ - goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ - } - - /* Copy aliases */ - naliases = ares__llist_len(entry->hosts) - 1; - - /* Cap at 100, some people use https://github.com/StevenBlack/hosts and we - * don't need 200k+ aliases */ - if (naliases > 100) { - naliases = 100; /* LCOV_EXCL_LINE: DefensiveCoding */ - } - - (*hostent)->h_aliases = - ares_malloc_zero((naliases + 1) * sizeof(*(*hostent)->h_aliases)); - if ((*hostent)->h_aliases == NULL) { - status = ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ - goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ - } - - /* Copy all entries to the alias except the first */ - idx = 0; - node = ares__llist_node_first(entry->hosts); - node = ares__llist_node_next(node); - while (node != NULL) { - (*hostent)->h_aliases[idx] = ares_strdup(ares__llist_node_val(node)); - if ((*hostent)->h_aliases[idx] == NULL) { - status = ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ - goto fail; /* LCOV_EXCL_LINE: OutOfMemory */ - } - idx++; - - /* Break out if artificially capped */ - if (idx == naliases) { - break; - } - node = ares__llist_node_next(node); - } - - return ARES_SUCCESS; - -/* LCOV_EXCL_START: defensive coding */ -fail: - ares_free_hostent(*hostent); - *hostent = NULL; - return status; - /* LCOV_EXCL_STOP */ -} - static ares_status_t ares__hosts_ai_append_cnames(const ares_hosts_entry_t *entry, struct ares_addrinfo_cname **cnames_out) @@ -980,10 +860,12 @@ ares_status_t ares__hosts_entry_to_addrinfo(const ares_hosts_entry_t *entry, return ARES_EBADFAMILY; /* LCOV_EXCL_LINE: DefensiveCoding */ } - ai->name = ares_strdup(name); - if (ai->name == NULL) { - status = ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ - goto done; /* LCOV_EXCL_LINE: OutOfMemory */ + if (name != NULL) { + ai->name = ares_strdup(name); + if (ai->name == NULL) { + status = ARES_ENOMEM; /* LCOV_EXCL_LINE: OutOfMemory */ + goto done; /* LCOV_EXCL_LINE: OutOfMemory */ + } } for (node = ares__llist_node_first(entry->ips); node != NULL; @@ -1031,3 +913,35 @@ ares_status_t ares__hosts_entry_to_addrinfo(const ares_hosts_entry_t *entry, return status; } + +ares_status_t ares__hosts_entry_to_hostent(const ares_hosts_entry_t *entry, + int family, struct hostent **hostent) +{ + ares_status_t status; + struct ares_addrinfo *ai = ares_malloc_zero(sizeof(*ai)); + + *hostent = NULL; + + if (ai == NULL) { + return ARES_ENOMEM; + } + + status = ares__hosts_entry_to_addrinfo(entry, NULL, family, 0, ARES_TRUE, ai); + if (status != ARES_SUCCESS) { + goto done; + } + + status = ares__addrinfo2hostent(ai, family, hostent); + if (status != ARES_SUCCESS) { + goto done; + } + +done: + ares_freeaddrinfo(ai); + if (status != ARES_SUCCESS) { + ares_free_hostent(*hostent); + *hostent = NULL; + } + + return status; +} diff --git a/lib/c-ares-1.32.0/src/lib/ares__htable.c b/lib/c-ares-1.32.3/src/lib/ares__htable.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares__htable.c rename to lib/c-ares-1.32.3/src/lib/ares__htable.c diff --git a/lib/c-ares-1.32.0/src/lib/ares__htable.h b/lib/c-ares-1.32.3/src/lib/ares__htable.h similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares__htable.h rename to lib/c-ares-1.32.3/src/lib/ares__htable.h diff --git a/lib/c-ares-1.32.0/src/lib/ares__htable_asvp.c b/lib/c-ares-1.32.3/src/lib/ares__htable_asvp.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares__htable_asvp.c rename to lib/c-ares-1.32.3/src/lib/ares__htable_asvp.c diff --git a/lib/c-ares-1.32.0/src/lib/ares__htable_asvp.h b/lib/c-ares-1.32.3/src/lib/ares__htable_asvp.h similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares__htable_asvp.h rename to lib/c-ares-1.32.3/src/lib/ares__htable_asvp.h diff --git a/lib/c-ares-1.32.0/src/lib/ares__htable_strvp.c b/lib/c-ares-1.32.3/src/lib/ares__htable_strvp.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares__htable_strvp.c rename to lib/c-ares-1.32.3/src/lib/ares__htable_strvp.c diff --git a/lib/c-ares-1.32.0/src/lib/ares__htable_strvp.h b/lib/c-ares-1.32.3/src/lib/ares__htable_strvp.h similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares__htable_strvp.h rename to lib/c-ares-1.32.3/src/lib/ares__htable_strvp.h diff --git a/lib/c-ares-1.32.0/src/lib/ares__htable_szvp.c b/lib/c-ares-1.32.3/src/lib/ares__htable_szvp.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares__htable_szvp.c rename to lib/c-ares-1.32.3/src/lib/ares__htable_szvp.c diff --git a/lib/c-ares-1.32.0/src/lib/ares__htable_szvp.h b/lib/c-ares-1.32.3/src/lib/ares__htable_szvp.h similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares__htable_szvp.h rename to lib/c-ares-1.32.3/src/lib/ares__htable_szvp.h diff --git a/lib/c-ares-1.32.0/src/lib/ares__htable_vpvp.c b/lib/c-ares-1.32.3/src/lib/ares__htable_vpvp.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares__htable_vpvp.c rename to lib/c-ares-1.32.3/src/lib/ares__htable_vpvp.c diff --git a/lib/c-ares-1.32.0/src/lib/ares__htable_vpvp.h b/lib/c-ares-1.32.3/src/lib/ares__htable_vpvp.h similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares__htable_vpvp.h rename to lib/c-ares-1.32.3/src/lib/ares__htable_vpvp.h diff --git a/lib/c-ares-1.32.0/src/lib/ares__iface_ips.c b/lib/c-ares-1.32.3/src/lib/ares__iface_ips.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares__iface_ips.c rename to lib/c-ares-1.32.3/src/lib/ares__iface_ips.c diff --git a/lib/c-ares-1.32.0/src/lib/ares__iface_ips.h b/lib/c-ares-1.32.3/src/lib/ares__iface_ips.h similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares__iface_ips.h rename to lib/c-ares-1.32.3/src/lib/ares__iface_ips.h diff --git a/lib/c-ares-1.32.0/src/lib/ares__llist.c b/lib/c-ares-1.32.3/src/lib/ares__llist.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares__llist.c rename to lib/c-ares-1.32.3/src/lib/ares__llist.c diff --git a/lib/c-ares-1.32.0/src/lib/ares__llist.h b/lib/c-ares-1.32.3/src/lib/ares__llist.h similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares__llist.h rename to lib/c-ares-1.32.3/src/lib/ares__llist.h diff --git a/lib/c-ares-1.32.0/src/lib/ares__parse_into_addrinfo.c b/lib/c-ares-1.32.3/src/lib/ares__parse_into_addrinfo.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares__parse_into_addrinfo.c rename to lib/c-ares-1.32.3/src/lib/ares__parse_into_addrinfo.c diff --git a/lib/c-ares-1.32.0/src/lib/ares__slist.c b/lib/c-ares-1.32.3/src/lib/ares__slist.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares__slist.c rename to lib/c-ares-1.32.3/src/lib/ares__slist.c diff --git a/lib/c-ares-1.32.0/src/lib/ares__slist.h b/lib/c-ares-1.32.3/src/lib/ares__slist.h similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares__slist.h rename to lib/c-ares-1.32.3/src/lib/ares__slist.h diff --git a/lib/c-ares-1.32.0/src/lib/ares__socket.c b/lib/c-ares-1.32.3/src/lib/ares__socket.c similarity index 98% rename from lib/c-ares-1.32.0/src/lib/ares__socket.c rename to lib/c-ares-1.32.3/src/lib/ares__socket.c index 7796ab2cbef..3db19f7e823 100644 --- a/lib/c-ares-1.32.0/src/lib/ares__socket.c +++ b/lib/c-ares-1.32.3/src/lib/ares__socket.c @@ -184,6 +184,14 @@ static int configure_socket(ares_socket_t s, struct server_state *server) } #endif + /* No need to emit SIGPIPE on socket errors */ +#if defined(SO_NOSIGPIPE) + { + int opt = 1; + setsockopt(s, SOL_SOCKET, SO_NOSIGPIPE, (void *)&opt, sizeof(opt)); + } +#endif + /* Set the socket's send and receive buffer sizes. */ if ((channel->socket_send_buffer_size > 0) && setsockopt(s, SOL_SOCKET, SO_SNDBUF, diff --git a/lib/c-ares-1.32.0/src/lib/ares__sortaddrinfo.c b/lib/c-ares-1.32.3/src/lib/ares__sortaddrinfo.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares__sortaddrinfo.c rename to lib/c-ares-1.32.3/src/lib/ares__sortaddrinfo.c diff --git a/lib/c-ares-1.32.0/src/lib/ares__threads.c b/lib/c-ares-1.32.3/src/lib/ares__threads.c similarity index 96% rename from lib/c-ares-1.32.0/src/lib/ares__threads.c rename to lib/c-ares-1.32.3/src/lib/ares__threads.c index ae3a66cc31b..b47544451d9 100644 --- a/lib/c-ares-1.32.0/src/lib/ares__threads.c +++ b/lib/c-ares-1.32.3/src/lib/ares__threads.c @@ -217,19 +217,31 @@ struct ares__thread_mutex { ares__thread_mutex_t *ares__thread_mutex_create(void) { + pthread_mutexattr_t attr; ares__thread_mutex_t *mut = ares_malloc_zero(sizeof(*mut)); if (mut == NULL) { return NULL; } - if (pthread_mutex_init(&mut->mutex, NULL) != 0) { + if (pthread_mutexattr_init(&attr) != 0) { + ares_free(mut); /* LCOV_EXCL_LINE: UntestablePath */ + return NULL; /* LCOV_EXCL_LINE: UntestablePath */ + } + + if (pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE) != 0) { + goto fail; /* LCOV_EXCL_LINE: UntestablePath */ + } + + if (pthread_mutex_init(&mut->mutex, &attr) != 0) { goto fail; /* LCOV_EXCL_LINE: UntestablePath */ } + pthread_mutexattr_destroy(&attr); return mut; /* LCOV_EXCL_START: UntestablePath */ fail: + pthread_mutexattr_destroy(&attr); ares_free(mut); return NULL; /* LCOV_EXCL_STOP */ diff --git a/lib/c-ares-1.32.0/src/lib/ares__threads.h b/lib/c-ares-1.32.3/src/lib/ares__threads.h similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares__threads.h rename to lib/c-ares-1.32.3/src/lib/ares__threads.h diff --git a/lib/c-ares-1.32.0/src/lib/ares__timeval.c b/lib/c-ares-1.32.3/src/lib/ares__timeval.c similarity index 76% rename from lib/c-ares-1.32.0/src/lib/ares__timeval.c rename to lib/c-ares-1.32.3/src/lib/ares__timeval.c index 9c175a82a06..66d07441c80 100644 --- a/lib/c-ares-1.32.0/src/lib/ares__timeval.c +++ b/lib/c-ares-1.32.3/src/lib/ares__timeval.c @@ -30,11 +30,24 @@ void ares__tvnow(ares_timeval_t *now) { - /* GetTickCount64() is available on Windows Vista and higher */ - ULONGLONG milliseconds = GetTickCount64(); + /* QueryPerformanceCounters() has been around since Windows 2000, though + * significant fixes were made in later versions. Documentation states + * 1 microsecond or better resolution with a rollover not less than 100 years. + * This differs from GetTickCount{64}() which has a resolution between 10 and + * 16 ms. */ + LARGE_INTEGER freq; + LARGE_INTEGER current; - now->sec = (ares_int64_t)milliseconds / 1000; - now->usec = (unsigned int)(milliseconds % 1000) * 1000; + /* Not sure how long it takes to get the frequency, I see it recommended to + * cache it */ + QueryPerformanceFrequency(&freq); + QueryPerformanceCounter(¤t); + + now->sec = current.QuadPart / freq.QuadPart; + /* We want to prevent overflows so we get the remainder, then multiply to + * microseconds before dividing */ + now->usec = (unsigned int)(((current.QuadPart % freq.QuadPart) * 1000000) / + freq.QuadPart); } #elif defined(HAVE_CLOCK_GETTIME_MONOTONIC) diff --git a/lib/c-ares-1.32.0/src/lib/ares_android.c b/lib/c-ares-1.32.3/src/lib/ares_android.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_android.c rename to lib/c-ares-1.32.3/src/lib/ares_android.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_android.h b/lib/c-ares-1.32.3/src/lib/ares_android.h similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_android.h rename to lib/c-ares-1.32.3/src/lib/ares_android.h diff --git a/lib/c-ares-1.32.0/src/lib/ares_cancel.c b/lib/c-ares-1.32.3/src/lib/ares_cancel.c similarity index 94% rename from lib/c-ares-1.32.0/src/lib/ares_cancel.c rename to lib/c-ares-1.32.3/src/lib/ares_cancel.c index c47bdd8a2b7..4312b5e188e 100644 --- a/lib/c-ares-1.32.0/src/lib/ares_cancel.c +++ b/lib/c-ares-1.32.3/src/lib/ares_cancel.c @@ -60,28 +60,26 @@ void ares_cancel(ares_channel_t *channel) node = ares__llist_node_first(list_copy); while (node != NULL) { struct query *query; - struct server_connection *conn; /* Cache next since this node is being deleted */ next = ares__llist_node_next(node); query = ares__llist_node_claim(node); - conn = query->conn; query->node_all_queries = NULL; /* NOTE: its possible this may enqueue new queries */ query->callback(query->arg, ARES_ECANCELLED, 0, NULL); ares__free_query(query); - /* See if the connection should be cleaned up */ - ares__check_cleanup_conn(channel, conn); - node = next; } ares__llist_destroy(list_copy); } + /* See if the connections should be cleaned up */ + ares__check_cleanup_conns(channel); + ares_queue_notify_empty(channel); done: diff --git a/lib/c-ares-1.32.0/src/lib/ares_config.h.cmake b/lib/c-ares-1.32.3/src/lib/ares_config.h.cmake similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_config.h.cmake rename to lib/c-ares-1.32.3/src/lib/ares_config.h.cmake diff --git a/lib/c-ares-1.32.0/src/lib/ares_config.h.in b/lib/c-ares-1.32.3/src/lib/ares_config.h.in similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_config.h.in rename to lib/c-ares-1.32.3/src/lib/ares_config.h.in diff --git a/lib/c-ares-1.32.0/src/lib/ares_create_query.c b/lib/c-ares-1.32.3/src/lib/ares_create_query.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_create_query.c rename to lib/c-ares-1.32.3/src/lib/ares_create_query.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_data.c b/lib/c-ares-1.32.3/src/lib/ares_data.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_data.c rename to lib/c-ares-1.32.3/src/lib/ares_data.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_data.h b/lib/c-ares-1.32.3/src/lib/ares_data.h similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_data.h rename to lib/c-ares-1.32.3/src/lib/ares_data.h diff --git a/lib/c-ares-1.32.0/src/lib/ares_destroy.c b/lib/c-ares-1.32.3/src/lib/ares_destroy.c similarity index 83% rename from lib/c-ares-1.32.0/src/lib/ares_destroy.c rename to lib/c-ares-1.32.3/src/lib/ares_destroy.c index ade986df6fd..1be42b1dec1 100644 --- a/lib/c-ares-1.32.0/src/lib/ares_destroy.c +++ b/lib/c-ares-1.32.3/src/lib/ares_destroy.c @@ -38,7 +38,17 @@ void ares_destroy(ares_channel_t *channel) return; } - /* Disable configuration change monitoring */ + /* Mark as being shutdown */ + ares__channel_lock(channel); + channel->sys_up = ARES_FALSE; + ares__channel_unlock(channel); + + /* Disable configuration change monitoring. We can't hold a lock because + * some cleanup routines, such as on Windows, are synchronous operations. + * What we've observed is a system config change event was triggered right + * at shutdown time and it tries to take the channel lock and the destruction + * waits for that event to complete before it continues so we get a channel + * lock deadlock at shutdown if we hold a lock during this process. */ if (channel->optmask & ARES_OPT_EVENT_THREAD) { ares_event_thread_t *e = channel->sock_state_cb_data; if (e && e->configchg) { @@ -47,14 +57,16 @@ void ares_destroy(ares_channel_t *channel) } } - /* Wait for reinit thread to exit if there was one pending */ + /* Wait for reinit thread to exit if there was one pending, can't be + * holding a lock as the thread may take locks. */ if (channel->reinit_thread != NULL) { void *rv; ares__thread_join(channel->reinit_thread, &rv); channel->reinit_thread = NULL; } - /* Lock because callbacks will be triggered */ + /* Lock because callbacks will be triggered, and any system-generated + * callbacks need to hold a channel lock. */ ares__channel_lock(channel); /* Destroy all queries */ diff --git a/lib/c-ares-1.32.0/src/lib/ares_dns_mapping.c b/lib/c-ares-1.32.3/src/lib/ares_dns_mapping.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_dns_mapping.c rename to lib/c-ares-1.32.3/src/lib/ares_dns_mapping.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_dns_multistring.c b/lib/c-ares-1.32.3/src/lib/ares_dns_multistring.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_dns_multistring.c rename to lib/c-ares-1.32.3/src/lib/ares_dns_multistring.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_dns_multistring.h b/lib/c-ares-1.32.3/src/lib/ares_dns_multistring.h similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_dns_multistring.h rename to lib/c-ares-1.32.3/src/lib/ares_dns_multistring.h diff --git a/lib/c-ares-1.32.0/src/lib/ares_dns_name.c b/lib/c-ares-1.32.3/src/lib/ares_dns_name.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_dns_name.c rename to lib/c-ares-1.32.3/src/lib/ares_dns_name.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_dns_parse.c b/lib/c-ares-1.32.3/src/lib/ares_dns_parse.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_dns_parse.c rename to lib/c-ares-1.32.3/src/lib/ares_dns_parse.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_dns_private.h b/lib/c-ares-1.32.3/src/lib/ares_dns_private.h similarity index 98% rename from lib/c-ares-1.32.0/src/lib/ares_dns_private.h rename to lib/c-ares-1.32.3/src/lib/ares_dns_private.h index c82fb6a9abe..2dd468a5559 100644 --- a/lib/c-ares-1.32.0/src/lib/ares_dns_private.h +++ b/lib/c-ares-1.32.3/src/lib/ares_dns_private.h @@ -26,6 +26,8 @@ #ifndef __ARES_DNS_PRIVATE_H #define __ARES_DNS_PRIVATE_H +ares_status_t ares_dns_record_duplicate_ex(ares_dns_record_t **dest, + const ares_dns_record_t *src); ares_bool_t ares_dns_rec_type_allow_name_compression(ares_dns_rec_type_t type); ares_bool_t ares_dns_opcode_isvalid(ares_dns_opcode_t opcode); ares_bool_t ares_dns_rcode_isvalid(ares_dns_rcode_t rcode); diff --git a/lib/c-ares-1.32.0/src/lib/ares_dns_record.c b/lib/c-ares-1.32.3/src/lib/ares_dns_record.c similarity index 98% rename from lib/c-ares-1.32.0/src/lib/ares_dns_record.c rename to lib/c-ares-1.32.3/src/lib/ares_dns_record.c index 0131743e462..8545abecf74 100644 --- a/lib/c-ares-1.32.0/src/lib/ares_dns_record.c +++ b/lib/c-ares-1.32.3/src/lib/ares_dns_record.c @@ -296,6 +296,7 @@ ares_status_t ares_dns_record_query_set_name(ares_dns_record_t *dnsrec, if (dnsrec == NULL || idx >= dnsrec->qdcount || name == NULL) { return ARES_EFORMERR; } + orig_name = dnsrec->qd[idx].name; dnsrec->qd[idx].name = ares_strdup(name); if (dnsrec->qd[idx].name == NULL) { @@ -1622,26 +1623,34 @@ ares_status_t return status; } -ares_dns_record_t *ares_dns_record_duplicate(const ares_dns_record_t *dnsrec) +ares_status_t ares_dns_record_duplicate_ex(ares_dns_record_t **dest, + const ares_dns_record_t *src) { unsigned char *data = NULL; size_t data_len = 0; - ares_dns_record_t *out = NULL; ares_status_t status; - if (dnsrec == NULL) { - return NULL; + if (dest == NULL || src == NULL) { + return ARES_EFORMERR; } - status = ares_dns_write(dnsrec, &data, &data_len); + *dest = NULL; + + status = ares_dns_write(src, &data, &data_len); if (status != ARES_SUCCESS) { - return NULL; + return status; } - status = ares_dns_parse(data, data_len, 0, &out); + status = ares_dns_parse(data, data_len, 0, dest); ares_free(data); - if (status != ARES_SUCCESS) { - return NULL; - } - return out; + + return status; +} + +ares_dns_record_t *ares_dns_record_duplicate(const ares_dns_record_t *dnsrec) +{ + ares_dns_record_t *dest = NULL; + + ares_dns_record_duplicate_ex(&dest, dnsrec); + return dest; } diff --git a/lib/c-ares-1.32.0/src/lib/ares_dns_write.c b/lib/c-ares-1.32.3/src/lib/ares_dns_write.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_dns_write.c rename to lib/c-ares-1.32.3/src/lib/ares_dns_write.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_event.h b/lib/c-ares-1.32.3/src/lib/ares_event.h similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_event.h rename to lib/c-ares-1.32.3/src/lib/ares_event.h diff --git a/lib/c-ares-1.32.0/src/lib/ares_event_configchg.c b/lib/c-ares-1.32.3/src/lib/ares_event_configchg.c similarity index 98% rename from lib/c-ares-1.32.0/src/lib/ares_event_configchg.c rename to lib/c-ares-1.32.3/src/lib/ares_event_configchg.c index efdfc0409d6..1d5d026ba39 100644 --- a/lib/c-ares-1.32.0/src/lib/ares_event_configchg.c +++ b/lib/c-ares-1.32.3/src/lib/ares_event_configchg.c @@ -237,9 +237,10 @@ void ares_event_configchg_destroy(ares_event_configchg_t *configchg) # ifndef __WATCOMC__ -static void ares_event_configchg_ip_cb(PVOID CallerContext, - PMIB_IPINTERFACE_ROW Row, - MIB_NOTIFICATION_TYPE NotificationType) +static void NETIOAPI_API_ + ares_event_configchg_ip_cb(PVOID CallerContext, + PMIB_IPINTERFACE_ROW Row, + MIB_NOTIFICATION_TYPE NotificationType) { ares_event_configchg_t *configchg = CallerContext; (void)Row; @@ -303,8 +304,8 @@ ares_status_t ares_event_configchg_init(ares_event_configchg_t **configchg, * that didn't get triggered either. */ if (NotifyIpInterfaceChange( - AF_UNSPEC, (PIPINTERFACE_CHANGE_CALLBACK)ares_event_configchg_ip_cb, - *configchg, FALSE, &c->ifchg_hnd) != NO_ERROR) { + AF_UNSPEC, ares_event_configchg_ip_cb, + c, FALSE, &c->ifchg_hnd) != NO_ERROR) { status = ARES_ESERVFAIL; goto done; } diff --git a/lib/c-ares-1.32.0/src/lib/ares_event_epoll.c b/lib/c-ares-1.32.3/src/lib/ares_event_epoll.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_event_epoll.c rename to lib/c-ares-1.32.3/src/lib/ares_event_epoll.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_event_kqueue.c b/lib/c-ares-1.32.3/src/lib/ares_event_kqueue.c similarity index 96% rename from lib/c-ares-1.32.0/src/lib/ares_event_kqueue.c rename to lib/c-ares-1.32.3/src/lib/ares_event_kqueue.c index 585033e05ae..aedd99ec42d 100644 --- a/lib/c-ares-1.32.0/src/lib/ares_event_kqueue.c +++ b/lib/c-ares-1.32.3/src/lib/ares_event_kqueue.c @@ -93,7 +93,7 @@ static ares_bool_t ares_evsys_kqueue_init(ares_event_thread_t *e) kq->nchanges_alloc = 8; kq->changelist = - ares_malloc_zero(sizeof(*kq->changelist) * kq->nchanges_alloc); + ares_malloc_zero(kq->nchanges_alloc * sizeof(*kq->changelist)); if (kq->changelist == NULL) { ares_evsys_kqueue_destroy(e); return ARES_FALSE; @@ -123,8 +123,11 @@ static void ares_evsys_kqueue_enqueue(ares_evsys_kqueue_t *kq, int fd, if (kq->nchanges > kq->nchanges_alloc) { kq->nchanges_alloc <<= 1; - kq->changelist = ares_realloc_zero(kq->changelist, kq->nchanges_alloc >> 1, - kq->nchanges_alloc); + kq->changelist = ares_realloc_zero( + kq->changelist, + (kq->nchanges_alloc >> 1) * sizeof(*kq->changelist), + kq->nchanges_alloc * sizeof(*kq->changelist) + ); } EV_SET(&kq->changelist[idx], fd, filter, flags, 0, 0, 0); diff --git a/lib/c-ares-1.32.0/src/lib/ares_event_poll.c b/lib/c-ares-1.32.3/src/lib/ares_event_poll.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_event_poll.c rename to lib/c-ares-1.32.3/src/lib/ares_event_poll.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_event_select.c b/lib/c-ares-1.32.3/src/lib/ares_event_select.c similarity index 94% rename from lib/c-ares-1.32.0/src/lib/ares_event_select.c rename to lib/c-ares-1.32.3/src/lib/ares_event_select.c index 980652002c3..e1266ea9905 100644 --- a/lib/c-ares-1.32.0/src/lib/ares_event_select.c +++ b/lib/c-ares-1.32.3/src/lib/ares_event_select.c @@ -81,12 +81,14 @@ static size_t ares_evsys_select_wait(ares_event_thread_t *e, size_t i; fd_set read_fds; fd_set write_fds; + fd_set except_fds; int nfds = 0; struct timeval tv; struct timeval *tout = NULL; FD_ZERO(&read_fds); FD_ZERO(&write_fds); + FD_ZERO(&except_fds); for (i = 0; i < num_fds; i++) { const ares_event_t *ev = @@ -97,6 +99,7 @@ static size_t ares_evsys_select_wait(ares_event_thread_t *e, if (ev->flags & ARES_EVENT_FLAG_WRITE) { FD_SET(ev->fd, &write_fds); } + FD_SET(ev->fd, &except_fds); if (ev->fd + 1 > nfds) { nfds = ev->fd + 1; } @@ -108,7 +111,7 @@ static size_t ares_evsys_select_wait(ares_event_thread_t *e, tout = &tv; } - rv = select(nfds, &read_fds, &write_fds, NULL, tout); + rv = select(nfds, &read_fds, &write_fds, &except_fds, tout); if (rv > 0) { for (i = 0; i < num_fds; i++) { ares_event_t *ev; @@ -119,7 +122,7 @@ static size_t ares_evsys_select_wait(ares_event_thread_t *e, continue; /* LCOV_EXCL_LINE: DefensiveCoding */ } - if (FD_ISSET(fdlist[i], &read_fds)) { + if (FD_ISSET(fdlist[i], &read_fds) || FD_ISSET(fdlist[i], &except_fds)) { flags |= ARES_EVENT_FLAG_READ; } diff --git a/lib/c-ares-1.32.0/src/lib/ares_event_thread.c b/lib/c-ares-1.32.3/src/lib/ares_event_thread.c similarity index 92% rename from lib/c-ares-1.32.0/src/lib/ares_event_thread.c rename to lib/c-ares-1.32.3/src/lib/ares_event_thread.c index 48aacdedd57..63d8aa2218a 100644 --- a/lib/c-ares-1.32.0/src/lib/ares_event_thread.c +++ b/lib/c-ares-1.32.3/src/lib/ares_event_thread.c @@ -262,6 +262,35 @@ static void ares_event_process_updates(ares_event_thread_t *e) } } +static void ares_event_thread_cleanup(ares_event_thread_t *e) +{ + /* Manually free any updates that weren't processed */ + if (e->ev_updates != NULL) { + ares__llist_node_t *node; + + while ((node = ares__llist_node_first(e->ev_updates)) != NULL) { + ares_event_destroy_cb(ares__llist_node_claim(node)); + } + ares__llist_destroy(e->ev_updates); + e->ev_updates = NULL; + } + + if (e->ev_sock_handles != NULL) { + ares__htable_asvp_destroy(e->ev_sock_handles); + e->ev_sock_handles = NULL; + } + + if (e->ev_cust_handles != NULL) { + ares__htable_vpvp_destroy(e->ev_cust_handles); + e->ev_cust_handles = NULL; + } + + if (e->ev_sys != NULL && e->ev_sys->destroy != NULL) { + e->ev_sys->destroy(e); + e->ev_sys = NULL; + } +} + static void *ares_event_thread(void *arg) { ares_event_thread_t *e = arg; @@ -296,14 +325,16 @@ static void *ares_event_thread(void *arg) ares__thread_mutex_lock(e->mutex); } + /* Lets cleanup while we're in the thread itself */ + ares_event_thread_cleanup(e); + ares__thread_mutex_unlock(e->mutex); + return NULL; } static void ares_event_thread_destroy_int(ares_event_thread_t *e) { - ares__llist_node_t *node; - /* Wake thread and tell it to shutdown if it exists */ ares__thread_mutex_lock(e->mutex); if (e->isup) { @@ -314,26 +345,14 @@ static void ares_event_thread_destroy_int(ares_event_thread_t *e) /* Wait for thread to shutdown */ if (e->thread) { - ares__thread_join(e->thread, NULL); + void *rv = NULL; + ares__thread_join(e->thread, &rv); e->thread = NULL; } - /* Manually free any updates that weren't processed */ - while ((node = ares__llist_node_first(e->ev_updates)) != NULL) { - ares_event_destroy_cb(ares__llist_node_claim(node)); - } - ares__llist_destroy(e->ev_updates); - e->ev_updates = NULL; - - ares__htable_asvp_destroy(e->ev_sock_handles); - e->ev_sock_handles = NULL; - - ares__htable_vpvp_destroy(e->ev_cust_handles); - e->ev_cust_handles = NULL; - - if (e->ev_sys && e->ev_sys->destroy) { - e->ev_sys->destroy(e); - } + /* If the event thread ever got to the point of starting, this is a no-op + * as it runs this same cleanup when it shuts down */ + ares_event_thread_cleanup(e); ares__thread_mutex_destroy(e->mutex); e->mutex = NULL; @@ -350,6 +369,8 @@ void ares_event_thread_destroy(ares_channel_t *channel) } ares_event_thread_destroy_int(e); + channel->sock_state_cb_data = NULL; + channel->sock_state_cb = NULL; } static const ares_event_sys_t *ares_event_fetch_sys(ares_evsys_t evsys) diff --git a/lib/c-ares-1.32.0/src/lib/ares_event_wake_pipe.c b/lib/c-ares-1.32.3/src/lib/ares_event_wake_pipe.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_event_wake_pipe.c rename to lib/c-ares-1.32.3/src/lib/ares_event_wake_pipe.c diff --git a/lib/c-ares-1.32.3/src/lib/ares_event_win32.c b/lib/c-ares-1.32.3/src/lib/ares_event_win32.c new file mode 100644 index 00000000000..173d0ca9c9d --- /dev/null +++ b/lib/c-ares-1.32.3/src/lib/ares_event_win32.c @@ -0,0 +1,972 @@ +/* MIT License + * + * Copyright (c) 2024 Brad House + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * SPDX-License-Identifier: MIT + */ + +/* Uses an anonymous union */ +#if defined(__clang__) +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wc11-extensions" +#endif + +#include "ares_private.h" +#include "ares_event.h" +#include "ares_event_win32.h" +#ifdef HAVE_LIMITS_H +# include +#endif + +#if defined(USE_WINSOCK) + +/* IMPLEMENTATION NOTES + * ==================== + * + * This implementation uses some undocumented functionality within Windows for + * monitoring sockets. The Ancillary Function Driver (AFD) is the low level + * implementation that Winsock2 sits on top of. Winsock2 unfortunately does + * not expose the equivalent of epoll() or kqueue(), but it is possible to + * access AFD directly and use along with IOCP to simulate the functionality. + * We want to use IOCP if possible as it gives us the ability to monitor more + * than just sockets (WSAPoll is not an option), and perform arbitrary callbacks + * which means we can hook in non-socket related events. + * + * The information for this implementation was gathered from "wepoll" and + * "libuv" which both use slight variants on this. We originally went with + * an implementation methodology more similar to "libuv", but we had a few + * user reports of crashes during shutdown and memory leaks due to some + * events not being delivered for cleanup of closed sockets. + * + * Initialization: + * 1. Dynamically load the NtDeviceIoControlFile, NtCreateFile, and + * NtCancelIoFileEx internal symbols from ntdll.dll. (Don't believe + * Microsoft's documentation for NtCancelIoFileEx as it documents an + * invalid prototype). These functions are to open a reference to the + * Ancillary Function Driver (AFD), and to submit and cancel POLL + * requests. + * 2. Create an IO Completion Port base handle via CreateIoCompletionPort() + * that all socket events will be delivered through. + * 3. Create a list of AFD Handles and track the number of poll requests + * per AFD handle. When we exceed a pre-determined limit of poll requests + * for a handle (128), we will automatically create a new handle. The + * reason behind this is NtCancelIoFileEx uses a horrible algorithm for + * issuing cancellations. See: + * https://github.com/python-trio/trio/issues/52#issuecomment-548215128 + * 4. Create a callback to be used to be able to interrupt waiting for IOCP + * events, this may be called for allowing enqueuing of additional socket + * events or removing socket events. PostQueuedCompletionStatus() is the + * obvious choice. We can use the same container format, the event + * delivered won't have an OVERLAPPED pointer so we can differentiate from + * socket events. Use the container as the completion key. + * + * Socket Add: + * 1. Create/Allocate a container for holding metadata about a socket + * including: + * - SOCKET base_socket; + * - IO_STATUS_BLOCK iosb; -- Used by AFD POLL, returned as OVERLAPPED + * - AFD_POLL_INFO afd_poll_info; -- Used by AFD POLL + * - afd list node -- for tracking which AFD handle a POLL request was + * submitted to. + * 2. Call WSAIoctl(..., SIO_BASE_HANDLE, ...) to unwrap the SOCKET and get + * the "base socket" we can use for polling. It appears this may fail so + * we should call WSAIoctl(..., SIO_BSP_HANDLE_POLL, ...) as a fallback. + * 3. Submit AFD POLL request (see "AFD POLL Request" section) + * 4. Record a mapping between the "IO Status Block" and the socket container + * so when events are delivered we can dereference. + * + * Socket Delete: + * 1. Call + * NtCancelIoFileEx(afd, iosb, &temp_iosb); + * to cancel any pending operations. + * 2. Tag the socket container as being queued for deletion + * 3. Wait for an event to be delivered for the socket (cancel isn't + * immediate, it delivers an event to know its complete). Delete only once + * that event has been delivered. If we don't do this we could try to + * access free()'d memory at a later point. + * + * Socket Modify: + * 1. Call + * NtCancelIoFileEx(afd, iosb, &temp_iosb) + * to cancel any pending operation. + * 2. When the event comes through that the cancel is complete, enqueue + * another "AFD Poll Request" for the desired events. + * + * Event Wait: + * 1. Call GetQueuedCompletionStatusEx() with the base IOCP handle, a + * stack allocated array of OVERLAPPED_ENTRY's, and an appropriate + * timeout. + * 2. Iterate across returned events, if the lpOverlapped is NULL, then the + * the CompletionKey is a pointer to the container registered via + * PostQueuedCompletionStatus(), otherwise it is the "IO Status Block" + * registered with the "AFD Poll Request" which needs to be dereferenced + * to the "socket container". + * 3. If it is a "socket container", disassociate it from the afd list node + * it was previously submitted to. + * 4. If it is a "socket container" check to see if we are cleaning up, if so, + * clean it up. + * 5. If it is a "socket container" that is still valid, Submit an + * AFD POLL Request (see "AFD POLL Request"). We must re-enable the request + * each time we receive a response, it is not persistent. + * 6. Notify of any events received as indicated in the AFD_POLL_INFO + * Handles[0].Events (NOTE: check NumberOfHandles > 0, and the status in + * the IO_STATUS_BLOCK. If we received an AFD_POLL_LOCAL_CLOSE, clean up + * the connection like the integrator requested it to be cleaned up. + * + * AFD Poll Request: + * 1. Find an afd poll handle in the list that has fewer pending requests than + * the limit. + * 2. If an afd poll handle was not associated (e.g. due to all being over + * limit), create a new afd poll handle by calling NtCreateFile() + * with path \Device\Afd , then add the AFD handle to the IO Completion + * Port. We can leave the completion key as blank since events for + * multiple sockets will be delivered through this and we need to + * differentiate via the OVERLAPPED member returned. Add the new AFD + * handle to the list of handles. + * 3. Initialize the AFD_POLL_INFO structure: + * Exclusive = FALSE; // allow multiple requests + * NumberOfHandles = 1; + * Timeout.QuadPart = LLONG_MAX; + * Handles[0].Handle = (HANDLE)base_socket; + * Handles[0].Status = 0; + * Handles[0].Events = AFD_POLL_LOCAL_CLOSE + additional events to wait for + * such as AFD_POLL_RECEIVE, etc; + * 4. Zero out the IO_STATUS_BLOCK structures + * 5. Set the "Status" member of IO_STATUS_BLOCK to STATUS_PENDING + * 6. Call + * NtDeviceIoControlFile(afd, NULL, NULL, &iosb, + * &iosb, IOCTL_AFD_POLL + * &afd_poll_info, sizeof(afd_poll_info), + * &afd_poll_info, sizeof(afd_poll_info)); + * + * + * References: + * - https://github.com/piscisaureus/wepoll/ + * - https://github.com/libuv/libuv/ + */ + +/* Cap the number of outstanding AFD poll requests per AFD handle due to known + * slowdowns with large lists and NtCancelIoFileEx() */ +# define AFD_POLL_PER_HANDLE 128 + +# include + +/* # define CARES_DEBUG 1 */ + +# ifdef __GNUC__ +# define CARES_PRINTF_LIKE(fmt, args) \ + __attribute__((format(printf, fmt, args))) +# else +# define CARES_PRINTF_LIKE(fmt, args) +# endif + +static void CARES_DEBUG_LOG(const char *fmt, ...) CARES_PRINTF_LIKE(1, 2); + +static void CARES_DEBUG_LOG(const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); +# ifdef CARES_DEBUG + vfprintf(stderr, fmt, ap); + fflush(stderr); +# endif + va_end(ap); +} + +typedef struct { + /* Dynamically loaded symbols */ + NtCreateFile_t NtCreateFile; + NtDeviceIoControlFile_t NtDeviceIoControlFile; + NtCancelIoFileEx_t NtCancelIoFileEx; + + /* Implementation details */ + ares__slist_t *afd_handles; + HANDLE iocp_handle; + + /* IO_STATUS_BLOCK * -> ares_evsys_win32_eventdata_t * mapping. There is + * no completion key passed to IOCP with this method so we have to look + * up based on the lpOverlapped returned (which is mapped to IO_STATUS_BLOCK) + */ + ares__htable_vpvp_t *sockets; + + /* Flag about whether or not we are shutting down */ + ares_bool_t is_shutdown; +} ares_evsys_win32_t; + +typedef enum { + POLL_STATUS_NONE = 0, + POLL_STATUS_PENDING = 1, + POLL_STATUS_CANCEL = 2, + POLL_STATUS_DESTROY = 3 +} poll_status_t; + +typedef struct { + /*! Pointer to parent event container */ + ares_event_t *event; + /*! Socket passed in to monitor */ + SOCKET socket; + /*! Base socket derived from provided socket */ + SOCKET base_socket; + /*! Structure for submitting AFD POLL requests (Internals!) */ + AFD_POLL_INFO afd_poll_info; + /*! Status of current polling operation */ + poll_status_t poll_status; + /*! IO Status Block structure submitted with AFD POLL requests and returned + * with IOCP results as lpOverlapped (even though its a different structure) + */ + IO_STATUS_BLOCK iosb; + /*! AFD handle node an outstanding poll request is associated with */ + ares__slist_node_t *afd_handle_node; + /* Lock is only for PostQueuedCompletionStatus() to prevent multiple + * signals. Tracking via POLL_STATUS_PENDING/POLL_STATUS_NONE */ + ares__thread_mutex_t *lock; +} ares_evsys_win32_eventdata_t; + +static size_t ares_evsys_win32_wait(ares_event_thread_t *e, + unsigned long timeout_ms); + +static void ares_iocpevent_signal(const ares_event_t *event) +{ + ares_event_thread_t *e = event->e; + ares_evsys_win32_t *ew = e->ev_sys_data; + ares_evsys_win32_eventdata_t *ed = event->data; + ares_bool_t queue_event = ARES_FALSE; + + ares__thread_mutex_lock(ed->lock); + if (ed->poll_status != POLL_STATUS_PENDING) { + ed->poll_status = POLL_STATUS_PENDING; + queue_event = ARES_TRUE; + } + ares__thread_mutex_unlock(ed->lock); + + if (!queue_event) { + return; + } + + PostQueuedCompletionStatus(ew->iocp_handle, 0, (ULONG_PTR)event->data, NULL); +} + +static void ares_iocpevent_cb(ares_event_thread_t *e, ares_socket_t fd, + void *data, ares_event_flags_t flags) +{ + ares_evsys_win32_eventdata_t *ed = data; + (void)e; + (void)fd; + (void)flags; + ares__thread_mutex_lock(ed->lock); + ed->poll_status = POLL_STATUS_NONE; + ares__thread_mutex_unlock(ed->lock); +} + +static ares_event_t *ares_iocpevent_create(ares_event_thread_t *e) +{ + ares_event_t *event = NULL; + ares_status_t status; + + status = + ares_event_update(&event, e, ARES_EVENT_FLAG_OTHER, ares_iocpevent_cb, + ARES_SOCKET_BAD, NULL, NULL, ares_iocpevent_signal); + if (status != ARES_SUCCESS) { + return NULL; + } + + return event; +} + +static void ares_evsys_win32_destroy(ares_event_thread_t *e) +{ + ares_evsys_win32_t *ew = NULL; + + if (e == NULL) { + return; + } + + CARES_DEBUG_LOG("** Win32 Event Destroy\n"); + + ew = e->ev_sys_data; + if (ew == NULL) { + return; + } + + ew->is_shutdown = ARES_TRUE; + CARES_DEBUG_LOG(" ** waiting on %lu remaining sockets to be destroyed\n", + (unsigned long)ares__htable_vpvp_num_keys(ew->sockets)); + while (ares__htable_vpvp_num_keys(ew->sockets)) { + ares_evsys_win32_wait(e, 0); + } + CARES_DEBUG_LOG(" ** all sockets cleaned up\n"); + + + if (ew->iocp_handle != NULL) { + CloseHandle(ew->iocp_handle); + } + + ares__slist_destroy(ew->afd_handles); + + ares__htable_vpvp_destroy(ew->sockets); + + ares_free(ew); + e->ev_sys_data = NULL; +} + +typedef struct { + size_t poll_cnt; + HANDLE afd_handle; +} ares_afd_handle_t; + +static void ares_afd_handle_destroy(void *arg) +{ + ares_afd_handle_t *hnd = arg; + if (hnd != NULL && hnd->afd_handle != NULL) { + CloseHandle(hnd->afd_handle); + } + ares_free(hnd); +} + +static int ares_afd_handle_cmp(const void *data1, const void *data2) +{ + const ares_afd_handle_t *hnd1 = data1; + const ares_afd_handle_t *hnd2 = data2; + + if (hnd1->poll_cnt > hnd2->poll_cnt) { + return 1; + } + if (hnd1->poll_cnt < hnd2->poll_cnt) { + return -1; + } + return 0; +} + +static void fill_object_attributes(OBJECT_ATTRIBUTES *attr, + UNICODE_STRING *name, ULONG attributes) +{ + memset(attr, 0, sizeof(*attr)); + attr->Length = sizeof(*attr); + attr->ObjectName = name; + attr->Attributes = attributes; +} + +# define UNICODE_STRING_CONSTANT(s) \ + { (sizeof(s) - 1) * sizeof(wchar_t), sizeof(s) * sizeof(wchar_t), L##s } + +static ares__slist_node_t *ares_afd_handle_create(ares_evsys_win32_t *ew) +{ + UNICODE_STRING afd_device_name = UNICODE_STRING_CONSTANT("\\Device\\Afd"); + OBJECT_ATTRIBUTES afd_attributes; + NTSTATUS status; + IO_STATUS_BLOCK iosb; + ares_afd_handle_t *afd = ares_malloc_zero(sizeof(*afd)); + ares__slist_node_t *node = NULL; + if (afd == NULL) { + goto fail; + } + + /* Open a handle to the AFD subsystem */ + fill_object_attributes(&afd_attributes, &afd_device_name, 0); + memset(&iosb, 0, sizeof(iosb)); + iosb.Status = STATUS_PENDING; + status = ew->NtCreateFile(&afd->afd_handle, SYNCHRONIZE, &afd_attributes, + &iosb, NULL, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, + FILE_OPEN, 0, NULL, 0); + if (status != STATUS_SUCCESS) { + CARES_DEBUG_LOG("** Failed to create AFD endpoint\n"); + goto fail; + } + + if (CreateIoCompletionPort(afd->afd_handle, ew->iocp_handle, + 0 /* CompletionKey */, 0) == NULL) { + goto fail; + } + + if (!SetFileCompletionNotificationModes(afd->afd_handle, + FILE_SKIP_SET_EVENT_ON_HANDLE)) { + goto fail; + } + + node = ares__slist_insert(ew->afd_handles, afd); + if (node == NULL) { + goto fail; + } + + return node; + +fail: + + ares_afd_handle_destroy(afd); + return NULL; +} + +/* Fetch the lowest poll count entry, but if it exceeds the limit, create a + * new one and return that */ +static ares__slist_node_t *ares_afd_handle_fetch(ares_evsys_win32_t *ew) +{ + ares__slist_node_t *node = ares__slist_node_first(ew->afd_handles); + ares_afd_handle_t *afd = ares__slist_node_val(node); + + if (afd != NULL && afd->poll_cnt < AFD_POLL_PER_HANDLE) { + return node; + } + + return ares_afd_handle_create(ew); +} + +static ares_bool_t ares_evsys_win32_init(ares_event_thread_t *e) +{ + ares_evsys_win32_t *ew = NULL; + HMODULE ntdll; + + CARES_DEBUG_LOG("** Win32 Event Init\n"); + + ew = ares_malloc_zero(sizeof(*ew)); + if (ew == NULL) { + return ARES_FALSE; + } + + e->ev_sys_data = ew; + + /* All apps should have ntdll.dll already loaded, so just get a handle to + * this */ + ntdll = GetModuleHandleA("ntdll.dll"); + if (ntdll == NULL) { + goto fail; + } + +# ifdef __GNUC__ +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wpedantic" +/* Without the (void *) cast we get: + * warning: cast between incompatible function types from 'FARPROC' {aka 'long + * long int (*)()'} to 'NTSTATUS (*)(...)'} [-Wcast-function-type] but with it + * we get: warning: ISO C forbids conversion of function pointer to object + * pointer type [-Wpedantic] look unsolvable short of killing the warning. + */ +# endif + + /* Load Internal symbols not typically accessible */ + ew->NtCreateFile = + (NtCreateFile_t)(void *)GetProcAddress(ntdll, "NtCreateFile"); + ew->NtDeviceIoControlFile = (NtDeviceIoControlFile_t)(void *)GetProcAddress( + ntdll, "NtDeviceIoControlFile"); + ew->NtCancelIoFileEx = + (NtCancelIoFileEx_t)(void *)GetProcAddress(ntdll, "NtCancelIoFileEx"); + +# ifdef __GNUC__ +# pragma GCC diagnostic pop +# endif + + if (ew->NtCreateFile == NULL || ew->NtCancelIoFileEx == NULL || + ew->NtDeviceIoControlFile == NULL) { + goto fail; + } + + ew->iocp_handle = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 0); + if (ew->iocp_handle == NULL) { + goto fail; + } + + ew->afd_handles = ares__slist_create( + e->channel->rand_state, ares_afd_handle_cmp, ares_afd_handle_destroy); + if (ew->afd_handles == NULL) { + goto fail; + } + + /* Create at least the first afd handle, so we know of any critical system + * issues during startup */ + if (ares_afd_handle_create(ew) == NULL) { + goto fail; + } + + e->ev_signal = ares_iocpevent_create(e); + if (e->ev_signal == NULL) { + goto fail; + } + + ew->sockets = ares__htable_vpvp_create(NULL, NULL); + if (ew->sockets == NULL) { + goto fail; + } + + return ARES_TRUE; + +fail: + ares_evsys_win32_destroy(e); + return ARES_FALSE; +} + +static ares_socket_t ares_evsys_win32_basesocket(ares_socket_t socket) +{ + while (1) { + DWORD bytes; /* Not used */ + ares_socket_t base_socket = ARES_SOCKET_BAD; + int rv; + + rv = WSAIoctl(socket, SIO_BASE_HANDLE, NULL, 0, &base_socket, + sizeof(base_socket), &bytes, NULL, NULL); + if (rv != SOCKET_ERROR && base_socket != ARES_SOCKET_BAD) { + socket = base_socket; + break; + } + + /* If we're here, an error occurred */ + if (GetLastError() == WSAENOTSOCK) { + /* This is critical, exit */ + return ARES_SOCKET_BAD; + } + + /* Work around known bug in Komodia based LSPs, use ARES_BSP_HANDLE_POLL + * to retrieve the underlying socket to then loop and get the base socket: + * https://docs.microsoft.com/en-us/windows/win32/winsock/winsock-ioctls + * https://www.komodia.com/newwiki/index.php?title=Komodia%27s_Redirector_bug_fixes#Version_2.2.2.6 + */ + base_socket = ARES_SOCKET_BAD; + rv = WSAIoctl(socket, SIO_BSP_HANDLE_POLL, NULL, 0, &base_socket, + sizeof(base_socket), &bytes, NULL, NULL); + + if (rv != SOCKET_ERROR && base_socket != ARES_SOCKET_BAD && + base_socket != socket) { + socket = base_socket; + continue; /* loop! */ + } + + return ARES_SOCKET_BAD; + } + + return socket; +} + +static ares_bool_t ares_evsys_win32_afd_enqueue(ares_event_t *event, + ares_event_flags_t flags) +{ + ares_event_thread_t *e = event->e; + ares_evsys_win32_t *ew = e->ev_sys_data; + ares_evsys_win32_eventdata_t *ed = event->data; + ares_afd_handle_t *afd; + NTSTATUS status; + + if (e == NULL || ed == NULL || ew == NULL) { + return ARES_FALSE; + } + + /* Misuse */ + if (ed->poll_status != POLL_STATUS_NONE) { + return ARES_FALSE; + } + + ed->afd_handle_node = ares_afd_handle_fetch(ew); + /* System resource issue? */ + if (ed->afd_handle_node == NULL) { + return ARES_FALSE; + } + + afd = ares__slist_node_val(ed->afd_handle_node); + + /* Enqueue AFD Poll */ + ed->afd_poll_info.Exclusive = FALSE; + ed->afd_poll_info.NumberOfHandles = 1; + ed->afd_poll_info.Timeout.QuadPart = LLONG_MAX; + ed->afd_poll_info.Handles[0].Handle = (HANDLE)ed->base_socket; + ed->afd_poll_info.Handles[0].Status = 0; + ed->afd_poll_info.Handles[0].Events = AFD_POLL_LOCAL_CLOSE; + + if (flags & ARES_EVENT_FLAG_READ) { + ed->afd_poll_info.Handles[0].Events |= + (AFD_POLL_RECEIVE | AFD_POLL_DISCONNECT | AFD_POLL_ACCEPT | + AFD_POLL_ABORT); + } + if (flags & ARES_EVENT_FLAG_WRITE) { + ed->afd_poll_info.Handles[0].Events |= + (AFD_POLL_SEND | AFD_POLL_CONNECT_FAIL); + } + if (flags == 0) { + ed->afd_poll_info.Handles[0].Events |= AFD_POLL_DISCONNECT; + } + + memset(&ed->iosb, 0, sizeof(ed->iosb)); + ed->iosb.Status = STATUS_PENDING; + + status = ew->NtDeviceIoControlFile( + afd->afd_handle, NULL, NULL, &ed->iosb, &ed->iosb, IOCTL_AFD_POLL, + &ed->afd_poll_info, sizeof(ed->afd_poll_info), &ed->afd_poll_info, + sizeof(ed->afd_poll_info)); + if (status != STATUS_SUCCESS && status != STATUS_PENDING) { + CARES_DEBUG_LOG("** afd_enqueue ed=%p FAILED\n", (void *)ed); + ed->afd_handle_node = NULL; + return ARES_FALSE; + } + + /* Record that we submitted a poll request to this handle and tell it to + * re-sort the node since we changed its sort value */ + afd->poll_cnt++; + ares__slist_node_reinsert(ed->afd_handle_node); + + ed->poll_status = POLL_STATUS_PENDING; + CARES_DEBUG_LOG("++ afd_enqueue ed=%p flags=%X\n", (void *)ed, + (unsigned int)flags); + return ARES_TRUE; +} + +static ares_bool_t ares_evsys_win32_afd_cancel(ares_evsys_win32_eventdata_t *ed) +{ + IO_STATUS_BLOCK cancel_iosb; + ares_evsys_win32_t *ew; + NTSTATUS status; + ares_afd_handle_t *afd; + + ew = ed->event->e->ev_sys_data; + + /* Misuse */ + if (ed->poll_status != POLL_STATUS_PENDING) { + return ARES_FALSE; + } + + afd = ares__slist_node_val(ed->afd_handle_node); + + /* Misuse */ + if (afd == NULL) { + return ARES_FALSE; + } + + ed->poll_status = POLL_STATUS_CANCEL; + + /* Not pending, nothing to do. Most likely that means there is a pending + * event that hasn't yet been delivered otherwise it would be re-armed + * already */ + if (ed->iosb.Status != STATUS_PENDING) { + CARES_DEBUG_LOG("** cancel not needed for ed=%p\n", (void *)ed); + return ARES_FALSE; + } + + status = ew->NtCancelIoFileEx(afd->afd_handle, &ed->iosb, &cancel_iosb); + + CARES_DEBUG_LOG("** Enqueued cancel for ed=%p, status = %lX\n", (void *)ed, + status); + + /* NtCancelIoFileEx() may return STATUS_NOT_FOUND if the operation completed + * just before calling NtCancelIoFileEx(), but we have not yet received the + * notifiction (but it should be queued for the next IOCP event). */ + if (status == STATUS_SUCCESS || status == STATUS_NOT_FOUND) { + return ARES_TRUE; + } + + return ARES_FALSE; +} + +static void ares_evsys_win32_eventdata_destroy(ares_evsys_win32_t *ew, + ares_evsys_win32_eventdata_t *ed) +{ + if (ew == NULL || ed == NULL) { + return; + } + CARES_DEBUG_LOG("-- deleting ed=%p (%s)\n", (void *)ed, + (ed->socket == ARES_SOCKET_BAD) ? "data" : "socket"); + /* These type of handles are deferred destroy. Update tracking. */ + if (ed->socket != ARES_SOCKET_BAD) { + ares__htable_vpvp_remove(ew->sockets, &ed->iosb); + } + + ares__thread_mutex_destroy(ed->lock); + + if (ed->event != NULL) { + ed->event->data = NULL; + } + + ares_free(ed); +} + +static ares_bool_t ares_evsys_win32_event_add(ares_event_t *event) +{ + ares_event_thread_t *e = event->e; + ares_evsys_win32_t *ew = e->ev_sys_data; + ares_evsys_win32_eventdata_t *ed; + ares_bool_t rc = ARES_FALSE; + + ed = ares_malloc_zero(sizeof(*ed)); + ed->event = event; + ed->socket = event->fd; + ed->base_socket = ARES_SOCKET_BAD; + event->data = ed; + + CARES_DEBUG_LOG("++ add ed=%p (%s) flags=%X\n", (void *)ed, + (ed->socket == ARES_SOCKET_BAD) ? "data" : "socket", + (unsigned int)event->flags); + + /* Likely a signal event, not something we will directly handle. We create + * the ares_evsys_win32_eventdata_t as the placeholder to use as the + * IOCP Completion Key */ + if (ed->socket == ARES_SOCKET_BAD) { + ed->lock = ares__thread_mutex_create(); + if (ed->lock == NULL) { + goto done; + } + rc = ARES_TRUE; + goto done; + } + + ed->base_socket = ares_evsys_win32_basesocket(ed->socket); + if (ed->base_socket == ARES_SOCKET_BAD) { + goto done; + } + + if (!ares__htable_vpvp_insert(ew->sockets, &ed->iosb, ed)) { + goto done; + } + + if (!ares_evsys_win32_afd_enqueue(event, event->flags)) { + goto done; + } + + rc = ARES_TRUE; + +done: + if (!rc) { + ares_evsys_win32_eventdata_destroy(ew, ed); + event->data = NULL; + } + return rc; +} + +static void ares_evsys_win32_event_del(ares_event_t *event) +{ + ares_evsys_win32_eventdata_t *ed = event->data; + + /* Already cleaned up, likely a LOCAL_CLOSE */ + if (ed == NULL) { + return; + } + + CARES_DEBUG_LOG("-- DELETE requested for ed=%p (%s)\n", (void *)ed, + (ed->socket != ARES_SOCKET_BAD) ? "socket" : "data"); + + /* + * Cancel pending AFD Poll operation. + */ + if (ed->socket != ARES_SOCKET_BAD) { + ares_evsys_win32_afd_cancel(ed); + ed->poll_status = POLL_STATUS_DESTROY; + ed->event = NULL; + } else { + ares_evsys_win32_eventdata_destroy(event->e->ev_sys_data, ed); + } + + event->data = NULL; +} + +static void ares_evsys_win32_event_mod(ares_event_t *event, + ares_event_flags_t new_flags) +{ + ares_evsys_win32_eventdata_t *ed = event->data; + + /* Not for us */ + if (event->fd == ARES_SOCKET_BAD || ed == NULL) { + return; + } + + CARES_DEBUG_LOG("** mod ed=%p new_flags=%X\n", (void *)ed, + (unsigned int)new_flags); + + /* All we need to do is cancel the pending operation. When the event gets + * delivered for the cancellation, it will automatically re-enqueue a new + * event */ + ares_evsys_win32_afd_cancel(ed); +} + +static ares_bool_t ares_evsys_win32_process_other_event( + ares_evsys_win32_t *ew, ares_evsys_win32_eventdata_t *ed, size_t i) +{ + ares_event_t *event; + + /* NOTE: do NOT dereference 'ed' if during shutdown as this could be an + * invalid pointer if the signal handle was cleaned up, but there was still a + * pending event! */ + + if (ew->is_shutdown) { + CARES_DEBUG_LOG("\t\t** i=%lu, skip non-socket handle during shutdown\n", + (unsigned long)i); + return ARES_FALSE; + } + + event = ed->event; + CARES_DEBUG_LOG("\t\t** i=%lu, ed=%p (data)\n", (unsigned long)i, (void *)ed); + + event->cb(event->e, event->fd, event->data, ARES_EVENT_FLAG_OTHER); + return ARES_TRUE; +} + +static ares_bool_t ares_evsys_win32_process_socket_event( + ares_evsys_win32_t *ew, ares_evsys_win32_eventdata_t *ed, size_t i) +{ + ares_event_flags_t flags = 0; + ares_event_t *event = NULL; + ares_afd_handle_t *afd = NULL; + + /* Shouldn't be possible */ + if (ed == NULL) { + CARES_DEBUG_LOG("\t\t** i=%lu, Invalid handle.\n", (unsigned long)i); + return ARES_FALSE; + } + + event = ed->event; + + CARES_DEBUG_LOG("\t\t** i=%lu, ed=%p (socket)\n", (unsigned long)i, + (void *)ed); + + /* Process events */ + if (ed->poll_status == POLL_STATUS_PENDING && + ed->iosb.Status == STATUS_SUCCESS && + ed->afd_poll_info.NumberOfHandles > 0) { + if (ed->afd_poll_info.Handles[0].Events & + (AFD_POLL_RECEIVE | AFD_POLL_DISCONNECT | AFD_POLL_ACCEPT | + AFD_POLL_ABORT)) { + flags |= ARES_EVENT_FLAG_READ; + } + if (ed->afd_poll_info.Handles[0].Events & + (AFD_POLL_SEND | AFD_POLL_CONNECT_FAIL)) { + flags |= ARES_EVENT_FLAG_WRITE; + } + if (ed->afd_poll_info.Handles[0].Events & AFD_POLL_LOCAL_CLOSE) { + CARES_DEBUG_LOG("\t\t** ed=%p LOCAL CLOSE\n", (void *)ed); + ed->poll_status = POLL_STATUS_DESTROY; + } + } + + CARES_DEBUG_LOG("\t\t** ed=%p, iosb status=%lX, poll_status=%d, flags=%X\n", + (void *)ed, (unsigned long)ed->iosb.Status, + (int)ed->poll_status, (unsigned int)flags); + + /* Decrement poll count for AFD handle then resort, also disassociate + * with socket */ + afd = ares__slist_node_val(ed->afd_handle_node); + afd->poll_cnt--; + ares__slist_node_reinsert(ed->afd_handle_node); + ed->afd_handle_node = NULL; + + /* Pending destroy, go ahead and kill it */ + if (ed->poll_status == POLL_STATUS_DESTROY) { + ares_evsys_win32_eventdata_destroy(ew, ed); + return ARES_FALSE; + } + + ed->poll_status = POLL_STATUS_NONE; + + /* Mask flags against current desired flags. We could have an event + * queued that is outdated. */ + flags &= event->flags; + + /* Don't actually do anything with the event that was delivered as we are + * in a shutdown/cleanup process. Mostly just handling the delayed + * destruction of sockets */ + if (ew->is_shutdown) { + return ARES_FALSE; + } + + /* Re-enqueue so we can get more events on the socket, we either + * received a real event, or a cancellation notice. Both cases we + * re-queue using the current configured event flags. + * + * If we can't re-enqueue, that likely means the socket has been + * closed, so we want to kill our reference to it + */ + if (!ares_evsys_win32_afd_enqueue(event, event->flags)) { + ares_evsys_win32_eventdata_destroy(ew, ed); + return ARES_FALSE; + } + + /* No events we recognize to deliver */ + if (flags == 0) { + return ARES_FALSE; + } + + event->cb(event->e, event->fd, event->data, flags); + return ARES_TRUE; +} + +static size_t ares_evsys_win32_wait(ares_event_thread_t *e, + unsigned long timeout_ms) +{ + ares_evsys_win32_t *ew = e->ev_sys_data; + OVERLAPPED_ENTRY entries[16]; + ULONG maxentries = sizeof(entries) / sizeof(*entries); + ULONG nentries; + BOOL status; + size_t i; + size_t cnt = 0; + DWORD tout = (timeout_ms == 0) ? INFINITE : (DWORD)timeout_ms; + + CARES_DEBUG_LOG("** Wait Enter\n"); + /* Process in a loop for as long as it fills the entire entries buffer, and + * on subsequent attempts, ensure the timeout is 0 */ + do { + nentries = maxentries; + status = GetQueuedCompletionStatusEx(ew->iocp_handle, entries, nentries, + &nentries, tout, FALSE); + + /* Next loop around, we want to return instantly if there are no events to + * be processed */ + tout = 0; + + if (!status) { + break; + } + + CARES_DEBUG_LOG("\t** GetQueuedCompletionStatusEx returned %lu entries\n", + (unsigned long)nentries); + for (i = 0; i < (size_t)nentries; i++) { + ares_evsys_win32_eventdata_t *ed = NULL; + ares_bool_t rc; + + /* For things triggered via PostQueuedCompletionStatus() we have an + * lpCompletionKey we can just use. Otherwise we need to dereference the + * pointer returned in lpOverlapped to determine the referenced + * socket */ + if (entries[i].lpCompletionKey) { + ed = (ares_evsys_win32_eventdata_t *)entries[i].lpCompletionKey; + rc = ares_evsys_win32_process_other_event(ew, ed, i); + } else { + ed = ares__htable_vpvp_get_direct(ew->sockets, entries[i].lpOverlapped); + rc = ares_evsys_win32_process_socket_event(ew, ed, i); + } + + /* We processed actual events */ + if (rc) { + cnt++; + } + } + } while (nentries == maxentries); + + CARES_DEBUG_LOG("** Wait Exit\n"); + + return cnt; +} + +const ares_event_sys_t ares_evsys_win32 = { "win32", + ares_evsys_win32_init, + ares_evsys_win32_destroy, + ares_evsys_win32_event_add, + ares_evsys_win32_event_del, + ares_evsys_win32_event_mod, + ares_evsys_win32_wait }; +#endif + +#if defined(__clang__) +# pragma GCC diagnostic pop +#endif diff --git a/lib/c-ares-1.32.0/src/lib/ares_event_win32.h b/lib/c-ares-1.32.3/src/lib/ares_event_win32.h similarity index 62% rename from lib/c-ares-1.32.0/src/lib/ares_event_win32.h rename to lib/c-ares-1.32.3/src/lib/ares_event_win32.h index 99cd5c90f35..5d0274cd85c 100644 --- a/lib/c-ares-1.32.0/src/lib/ares_event_win32.h +++ b/lib/c-ares-1.32.3/src/lib/ares_event_win32.h @@ -67,17 +67,53 @@ typedef VOID(NTAPI *PIO_APC_ROUTINE)(PVOID ApcContext, # define STATUS_CANCELLED ((NTSTATUS)0xC0000120L) # define STATUS_NOT_FOUND ((NTSTATUS)0xC0000225L) +typedef struct _UNICODE_STRING { + USHORT Length; + USHORT MaximumLength; + LPCWSTR Buffer; +} UNICODE_STRING, *PUNICODE_STRING; + +typedef struct _OBJECT_ATTRIBUTES { + ULONG Length; + HANDLE RootDirectory; + PUNICODE_STRING ObjectName; + ULONG Attributes; + PVOID SecurityDescriptor; + PVOID SecurityQualityOfService; +} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES; + +# ifndef FILE_OPEN +# define FILE_OPEN 0x00000001UL +# endif + /* Not sure what headers might have these */ # define IOCTL_AFD_POLL 0x00012024 -# define AFD_POLL_RECEIVE 0x0001 -# define AFD_POLL_RECEIVE_EXPEDITED 0x0002 -# define AFD_POLL_SEND 0x0004 -# define AFD_POLL_DISCONNECT 0x0008 -# define AFD_POLL_ABORT 0x0010 -# define AFD_POLL_LOCAL_CLOSE 0x0020 -# define AFD_POLL_ACCEPT 0x0080 -# define AFD_POLL_CONNECT_FAIL 0x0100 +# define AFD_POLL_RECEIVE_BIT 0 +# define AFD_POLL_RECEIVE (1 << AFD_POLL_RECEIVE_BIT) +# define AFD_POLL_RECEIVE_EXPEDITED_BIT 1 +# define AFD_POLL_RECEIVE_EXPEDITED (1 << AFD_POLL_RECEIVE_EXPEDITED_BIT) +# define AFD_POLL_SEND_BIT 2 +# define AFD_POLL_SEND (1 << AFD_POLL_SEND_BIT) +# define AFD_POLL_DISCONNECT_BIT 3 +# define AFD_POLL_DISCONNECT (1 << AFD_POLL_DISCONNECT_BIT) +# define AFD_POLL_ABORT_BIT 4 +# define AFD_POLL_ABORT (1 << AFD_POLL_ABORT_BIT) +# define AFD_POLL_LOCAL_CLOSE_BIT 5 +# define AFD_POLL_LOCAL_CLOSE (1 << AFD_POLL_LOCAL_CLOSE_BIT) +# define AFD_POLL_CONNECT_BIT 6 +# define AFD_POLL_CONNECT (1 << AFD_POLL_CONNECT_BIT) +# define AFD_POLL_ACCEPT_BIT 7 +# define AFD_POLL_ACCEPT (1 << AFD_POLL_ACCEPT_BIT) +# define AFD_POLL_CONNECT_FAIL_BIT 8 +# define AFD_POLL_CONNECT_FAIL (1 << AFD_POLL_CONNECT_FAIL_BIT) +# define AFD_POLL_QOS_BIT 9 +# define AFD_POLL_QOS (1 << AFD_POLL_QOS_BIT) +# define AFD_POLL_GROUP_QOS_BIT 10 +# define AFD_POLL_GROUP_QOS (1 << AFD_POLL_GROUP_QOS_BIT) + +# define AFD_NUM_POLL_EVENTS 11 +# define AFD_POLL_ALL ((1 << AFD_NUM_POLL_EVENTS) - 1) typedef struct _AFD_POLL_HANDLE_INFO { HANDLE Handle; @@ -101,6 +137,12 @@ typedef NTSTATUS(NTAPI *NtDeviceIoControlFile_t)( PIO_STATUS_BLOCK IoStatusBlock, ULONG IoControlCode, PVOID InputBuffer, ULONG InputBufferLength, PVOID OutputBuffer, ULONG OutputBufferLength); +typedef NTSTATUS(NTAPI *NtCreateFile_t)( + PHANDLE FileHandle, ACCESS_MASK DesiredAccess, + POBJECT_ATTRIBUTES ObjectAttributes, PIO_STATUS_BLOCK IoStatusBlock, + PLARGE_INTEGER AllocationSize, ULONG FileAttributes, ULONG ShareAccess, + ULONG CreateDisposition, ULONG CreateOptions, PVOID EaBuffer, ULONG EaLength); + /* On UWP/Windows Store, these definitions aren't there for some reason */ # ifndef SIO_BSP_HANDLE_POLL # define SIO_BSP_HANDLE_POLL 0x4800001D diff --git a/lib/c-ares-1.32.0/src/lib/ares_expand_name.c b/lib/c-ares-1.32.3/src/lib/ares_expand_name.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_expand_name.c rename to lib/c-ares-1.32.3/src/lib/ares_expand_name.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_expand_string.c b/lib/c-ares-1.32.3/src/lib/ares_expand_string.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_expand_string.c rename to lib/c-ares-1.32.3/src/lib/ares_expand_string.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_fds.c b/lib/c-ares-1.32.3/src/lib/ares_fds.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_fds.c rename to lib/c-ares-1.32.3/src/lib/ares_fds.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_free_hostent.c b/lib/c-ares-1.32.3/src/lib/ares_free_hostent.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_free_hostent.c rename to lib/c-ares-1.32.3/src/lib/ares_free_hostent.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_free_string.c b/lib/c-ares-1.32.3/src/lib/ares_free_string.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_free_string.c rename to lib/c-ares-1.32.3/src/lib/ares_free_string.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_freeaddrinfo.c b/lib/c-ares-1.32.3/src/lib/ares_freeaddrinfo.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_freeaddrinfo.c rename to lib/c-ares-1.32.3/src/lib/ares_freeaddrinfo.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_getaddrinfo.c b/lib/c-ares-1.32.3/src/lib/ares_getaddrinfo.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_getaddrinfo.c rename to lib/c-ares-1.32.3/src/lib/ares_getaddrinfo.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_getenv.c b/lib/c-ares-1.32.3/src/lib/ares_getenv.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_getenv.c rename to lib/c-ares-1.32.3/src/lib/ares_getenv.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_getenv.h b/lib/c-ares-1.32.3/src/lib/ares_getenv.h similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_getenv.h rename to lib/c-ares-1.32.3/src/lib/ares_getenv.h diff --git a/lib/c-ares-1.32.0/src/lib/ares_gethostbyaddr.c b/lib/c-ares-1.32.3/src/lib/ares_gethostbyaddr.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_gethostbyaddr.c rename to lib/c-ares-1.32.3/src/lib/ares_gethostbyaddr.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_gethostbyname.c b/lib/c-ares-1.32.3/src/lib/ares_gethostbyname.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_gethostbyname.c rename to lib/c-ares-1.32.3/src/lib/ares_gethostbyname.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_getnameinfo.c b/lib/c-ares-1.32.3/src/lib/ares_getnameinfo.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_getnameinfo.c rename to lib/c-ares-1.32.3/src/lib/ares_getnameinfo.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_getsock.c b/lib/c-ares-1.32.3/src/lib/ares_getsock.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_getsock.c rename to lib/c-ares-1.32.3/src/lib/ares_getsock.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_inet_net_pton.h b/lib/c-ares-1.32.3/src/lib/ares_inet_net_pton.h similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_inet_net_pton.h rename to lib/c-ares-1.32.3/src/lib/ares_inet_net_pton.h diff --git a/lib/c-ares-1.32.0/src/lib/ares_init.c b/lib/c-ares-1.32.3/src/lib/ares_init.c similarity index 98% rename from lib/c-ares-1.32.0/src/lib/ares_init.c rename to lib/c-ares-1.32.3/src/lib/ares_init.c index 5456444ae49..cc7b85d783e 100644 --- a/lib/c-ares-1.32.0/src/lib/ares_init.c +++ b/lib/c-ares-1.32.3/src/lib/ares_init.c @@ -280,6 +280,9 @@ int ares_init_options(ares_channel_t **channelptr, return ARES_ENOMEM; } + /* We are in a good state */ + channel->sys_up = ARES_TRUE; + /* One option where zero is valid, so set default value here */ channel->ndots = 1; @@ -437,8 +440,9 @@ ares_status_t ares_reinit(ares_channel_t *channel) ares__channel_lock(channel); - /* If a reinit is already in process, lets not do it again */ - if (channel->reinit_pending) { + /* If a reinit is already in process, lets not do it again. Or if we are + * shutting down, skip. */ + if (!channel->sys_up || channel->reinit_pending) { ares__channel_unlock(channel); return ARES_SUCCESS; } diff --git a/lib/c-ares-1.32.0/src/lib/ares_ipv6.h b/lib/c-ares-1.32.3/src/lib/ares_ipv6.h similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_ipv6.h rename to lib/c-ares-1.32.3/src/lib/ares_ipv6.h diff --git a/lib/c-ares-1.32.0/src/lib/ares_library_init.c b/lib/c-ares-1.32.3/src/lib/ares_library_init.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_library_init.c rename to lib/c-ares-1.32.3/src/lib/ares_library_init.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_math.c b/lib/c-ares-1.32.3/src/lib/ares_math.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_math.c rename to lib/c-ares-1.32.3/src/lib/ares_math.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_metrics.c b/lib/c-ares-1.32.3/src/lib/ares_metrics.c similarity index 98% rename from lib/c-ares-1.32.0/src/lib/ares_metrics.c rename to lib/c-ares-1.32.3/src/lib/ares_metrics.c index 4b40677239f..78f93bc1b7d 100644 --- a/lib/c-ares-1.32.0/src/lib/ares_metrics.c +++ b/lib/c-ares-1.32.3/src/lib/ares_metrics.c @@ -211,7 +211,7 @@ size_t ares_metrics_server_timeout(const struct server_state *server, const ares_channel_t *channel = server->channel; ares_server_bucket_t i; size_t timeout_ms = 0; - + size_t max_timeout_ms; for (i = 0; i < ARES_METRIC_COUNT; i++) { time_t ts = ares_metric_timestamp(i, now, ARES_FALSE); @@ -252,10 +252,9 @@ size_t ares_metrics_server_timeout(const struct server_state *server, } /* don't go above upper bounds */ - if (channel->maxtimeout && timeout_ms > channel->maxtimeout) { - timeout_ms = channel->maxtimeout; - } else if (timeout_ms > MAX_TIMEOUT_MS) { - timeout_ms = MAX_TIMEOUT_MS; + max_timeout_ms = channel->maxtimeout?channel->maxtimeout:MAX_TIMEOUT_MS; + if (timeout_ms > max_timeout_ms) { + timeout_ms = max_timeout_ms; } return timeout_ms; diff --git a/lib/c-ares-1.32.0/src/lib/ares_options.c b/lib/c-ares-1.32.3/src/lib/ares_options.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_options.c rename to lib/c-ares-1.32.3/src/lib/ares_options.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_parse_a_reply.c b/lib/c-ares-1.32.3/src/lib/ares_parse_a_reply.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_parse_a_reply.c rename to lib/c-ares-1.32.3/src/lib/ares_parse_a_reply.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_parse_aaaa_reply.c b/lib/c-ares-1.32.3/src/lib/ares_parse_aaaa_reply.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_parse_aaaa_reply.c rename to lib/c-ares-1.32.3/src/lib/ares_parse_aaaa_reply.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_parse_caa_reply.c b/lib/c-ares-1.32.3/src/lib/ares_parse_caa_reply.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_parse_caa_reply.c rename to lib/c-ares-1.32.3/src/lib/ares_parse_caa_reply.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_parse_mx_reply.c b/lib/c-ares-1.32.3/src/lib/ares_parse_mx_reply.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_parse_mx_reply.c rename to lib/c-ares-1.32.3/src/lib/ares_parse_mx_reply.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_parse_naptr_reply.c b/lib/c-ares-1.32.3/src/lib/ares_parse_naptr_reply.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_parse_naptr_reply.c rename to lib/c-ares-1.32.3/src/lib/ares_parse_naptr_reply.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_parse_ns_reply.c b/lib/c-ares-1.32.3/src/lib/ares_parse_ns_reply.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_parse_ns_reply.c rename to lib/c-ares-1.32.3/src/lib/ares_parse_ns_reply.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_parse_ptr_reply.c b/lib/c-ares-1.32.3/src/lib/ares_parse_ptr_reply.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_parse_ptr_reply.c rename to lib/c-ares-1.32.3/src/lib/ares_parse_ptr_reply.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_parse_soa_reply.c b/lib/c-ares-1.32.3/src/lib/ares_parse_soa_reply.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_parse_soa_reply.c rename to lib/c-ares-1.32.3/src/lib/ares_parse_soa_reply.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_parse_srv_reply.c b/lib/c-ares-1.32.3/src/lib/ares_parse_srv_reply.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_parse_srv_reply.c rename to lib/c-ares-1.32.3/src/lib/ares_parse_srv_reply.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_parse_txt_reply.c b/lib/c-ares-1.32.3/src/lib/ares_parse_txt_reply.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_parse_txt_reply.c rename to lib/c-ares-1.32.3/src/lib/ares_parse_txt_reply.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_parse_uri_reply.c b/lib/c-ares-1.32.3/src/lib/ares_parse_uri_reply.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_parse_uri_reply.c rename to lib/c-ares-1.32.3/src/lib/ares_parse_uri_reply.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_platform.c b/lib/c-ares-1.32.3/src/lib/ares_platform.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_platform.c rename to lib/c-ares-1.32.3/src/lib/ares_platform.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_platform.h b/lib/c-ares-1.32.3/src/lib/ares_platform.h similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_platform.h rename to lib/c-ares-1.32.3/src/lib/ares_platform.h diff --git a/lib/c-ares-1.32.0/src/lib/ares_private.h b/lib/c-ares-1.32.3/src/lib/ares_private.h similarity index 98% rename from lib/c-ares-1.32.0/src/lib/ares_private.h rename to lib/c-ares-1.32.3/src/lib/ares_private.h index 3b5f627bd16..5506416d8ef 100644 --- a/lib/c-ares-1.32.0/src/lib/ares_private.h +++ b/lib/c-ares-1.32.3/src/lib/ares_private.h @@ -385,6 +385,12 @@ struct ares_channeldata { * exit. */ ares_bool_t reinit_pending; ares__thread_t *reinit_thread; + + /* Whether the system is up or not. This is mainly to prevent deadlocks + * and access violations during the cleanup process. Some things like + * system config changes might get triggered and we need a flag to make + * sure we don't take action. */ + ares_bool_t sys_up; }; /* Does the domain end in ".onion" or ".onion."? Case-insensitive. */ @@ -404,7 +410,8 @@ ares_bool_t ares__timedout(const ares_timeval_t *now, /* Returns one of the normal ares status codes like ARES_SUCCESS */ ares_status_t ares__send_query(struct query *query, const ares_timeval_t *now); ares_status_t ares__requeue_query(struct query *query, - const ares_timeval_t *now); + const ares_timeval_t *now, + ares_status_t status); /*! Retrieve a list of names to use for searching. The first successful * query in the list wins. This function also uses the HOSTSALIASES file @@ -432,10 +439,10 @@ void *ares__dnsrec_convert_arg(ares_callback callback, void *arg); void ares__dnsrec_convert_cb(void *arg, ares_status_t status, size_t timeouts, const ares_dns_record_t *dnsrec); -void ares__close_connection(struct server_connection *conn); +void ares__close_connection(struct server_connection *conn, + ares_status_t requeue_status); void ares__close_sockets(struct server_state *server); -void ares__check_cleanup_conn(const ares_channel_t *channel, - struct server_connection *conn); +void ares__check_cleanup_conns(const ares_channel_t *channel); void ares__free_query(struct query *query); ares_rand_state *ares__init_rand_state(void); diff --git a/lib/c-ares-1.32.0/src/lib/ares_process.c b/lib/c-ares-1.32.3/src/lib/ares_process.c similarity index 93% rename from lib/c-ares-1.32.0/src/lib/ares_process.c rename to lib/c-ares-1.32.3/src/lib/ares_process.c index 562d6b5e1b1..01d9e6a49d3 100644 --- a/lib/c-ares-1.32.0/src/lib/ares_process.c +++ b/lib/c-ares-1.32.3/src/lib/ares_process.c @@ -58,7 +58,8 @@ static ares_status_t process_answer(ares_channel_t *channel, struct server_connection *conn, ares_bool_t tcp, const ares_timeval_t *now); static void handle_conn_error(struct server_connection *conn, - ares_bool_t critical_failure); + ares_bool_t critical_failure, + ares_status_t failure_status); static ares_bool_t same_questions(const struct query *query, const ares_dns_record_t *arec); @@ -68,6 +69,17 @@ static void end_query(ares_channel_t *channel, struct server_state *server, struct query *query, ares_status_t status, const ares_dns_record_t *dnsrec); + +static void ares__query_disassociate_from_conn(struct query *query) +{ + /* If its not part of a connection, it can't be tracked for timeouts either */ + ares__slist_node_destroy(query->node_queries_by_timeout); + ares__llist_node_destroy(query->node_queries_to_conn); + query->node_queries_by_timeout = NULL; + query->node_queries_to_conn = NULL; + query->conn = NULL; +} + /* Invoke the server state callback after a success or failure */ static void invoke_server_state_cb(const struct server_state *server, ares_bool_t success, int flags) @@ -202,6 +214,8 @@ static void processfds(ares_channel_t *channel, fd_set *read_fds, /* Write last as the other 2 operations might have triggered writes */ write_tcp_data(channel, write_fds, write_fd); + /* See if any connections should be cleaned up */ + ares__check_cleanup_conns(channel); ares__channel_unlock(channel); } @@ -301,7 +315,7 @@ static void write_tcp_data(ares_channel_t *channel, fd_set *write_fds, count = ares__socket_write(channel, server->tcp_conn->fd, data, data_len); if (count <= 0) { if (!try_again(SOCKERRNO)) { - handle_conn_error(server->tcp_conn, ARES_TRUE); + handle_conn_error(server->tcp_conn, ARES_TRUE, ARES_ECONNREFUSED); } continue; } @@ -334,7 +348,7 @@ static void read_tcp_data(ares_channel_t *channel, ptr = ares__buf_append_start(server->tcp_parser, &ptr_len); if (ptr == NULL) { - handle_conn_error(conn, ARES_FALSE /* not critical to connection */); + handle_conn_error(conn, ARES_FALSE /* not critical to connection */, ARES_SUCCESS); return; /* bail out on malloc failure. TODO: make this function return error codes */ } @@ -344,7 +358,7 @@ static void read_tcp_data(ares_channel_t *channel, if (count <= 0) { ares__buf_append_finish(server->tcp_parser, 0); if (!(count == -1 && try_again(SOCKERRNO))) { - handle_conn_error(conn, ARES_TRUE); + handle_conn_error(conn, ARES_TRUE, ARES_ECONNREFUSED); } return; } @@ -388,15 +402,13 @@ static void read_tcp_data(ares_channel_t *channel, /* We finished reading this answer; process it */ status = process_answer(channel, data, data_len, conn, ARES_TRUE, now); if (status != ARES_SUCCESS) { - handle_conn_error(conn, ARES_TRUE); + handle_conn_error(conn, ARES_TRUE, status); return; } /* Since we processed the answer, clear the tag so space can be reclaimed */ ares__buf_tag_clear(server->tcp_parser); } - - ares__check_cleanup_conn(channel, conn); } static int socket_list_append(ares_socket_t **socketlist, ares_socket_t fd, @@ -503,7 +515,7 @@ static void read_udp_packets_fd(ares_channel_t *channel, break; } - handle_conn_error(conn, ARES_TRUE); + handle_conn_error(conn, ARES_TRUE, ARES_ECONNREFUSED); return; #ifdef HAVE_RECVFROM } else if (!same_address(&from.sa, &conn->server->addr)) { @@ -520,8 +532,6 @@ static void read_udp_packets_fd(ares_channel_t *channel, /* Try to read again only if *we* set up the socket, otherwise it may be * a blocking socket and would cause recvfrom to hang. */ } while (read_len >= 0 && channel->sock_funcs == NULL); - - ares__check_cleanup_conn(channel, conn); } static void read_packets(ares_channel_t *channel, fd_set *read_fds, @@ -594,28 +604,26 @@ static void read_packets(ares_channel_t *channel, fd_set *read_fds, /* If any queries have timed out, note the timeout and move them on. */ static void process_timeouts(ares_channel_t *channel, const ares_timeval_t *now) { - ares__slist_node_t *node = - ares__slist_node_first(channel->queries_by_timeout); - while (node != NULL) { + ares__slist_node_t *node; + + /* Just keep popping off the first as this list will re-sort as things come + * and go. We don't want to try to rely on 'next' as some operation might + * cause a cleanup of that pointer and would become invalid */ + while ((node = ares__slist_node_first(channel->queries_by_timeout)) != NULL) { struct query *query = ares__slist_node_val(node); - /* Node might be removed, cache next */ - ares__slist_node_t *next = ares__slist_node_next(node); struct server_connection *conn; + /* Since this is sorted, as soon as we hit a query that isn't timed out, * break */ if (!ares__timedout(now, &query->timeout)) { break; } - query->error_status = ARES_ETIMEOUT; query->timeouts++; conn = query->conn; server_increment_failures(conn->server, query->using_tcp); - ares__requeue_query(query, now); - ares__check_cleanup_conn(channel, conn); - - node = next; + ares__requeue_query(query, now, ARES_ETIMEOUT); } } @@ -733,20 +741,20 @@ static ares_status_t process_answer(ares_channel_t *channel, rcode == ARES_RCODE_REFUSED) { switch (rcode) { case ARES_RCODE_SERVFAIL: - query->error_status = ARES_ESERVFAIL; + status = ARES_ESERVFAIL; break; case ARES_RCODE_NOTIMP: - query->error_status = ARES_ENOTIMP; + status = ARES_ENOTIMP; break; case ARES_RCODE_REFUSED: - query->error_status = ARES_EREFUSED; + status = ARES_EREFUSED; break; default: break; } server_increment_failures(server, query->using_tcp); - ares__requeue_query(query, now); + ares__requeue_query(query, now, status); /* Should any of these cause a connection termination? * Maybe SERVER_FAILURE? */ @@ -776,7 +784,8 @@ static ares_status_t process_answer(ares_channel_t *channel, } static void handle_conn_error(struct server_connection *conn, - ares_bool_t critical_failure) + ares_bool_t critical_failure, + ares_status_t failure_status) { struct server_state *server = conn->server; @@ -787,17 +796,23 @@ static void handle_conn_error(struct server_connection *conn, } /* This will requeue any connections automatically */ - ares__close_connection(conn); + ares__close_connection(conn, failure_status); } ares_status_t ares__requeue_query(struct query *query, - const ares_timeval_t *now) + const ares_timeval_t *now, + ares_status_t status) { ares_channel_t *channel = query->channel; size_t max_tries = ares__slist_len(channel->servers) * channel->tries; - query->try_count++; + ares__query_disassociate_from_conn(query); + if (status != ARES_SUCCESS) { + query->error_status = status; + } + + query->try_count++; if (query->try_count < max_tries && !query->no_retries) { return ares__send_query(query, now); } @@ -947,7 +962,14 @@ static ares_status_t ares__write_udpbuf(ares_channel_t *channel, } if (ares__socket_write(channel, fd, qbuf, qbuf_len) == -1) { - status = ARES_ESERVFAIL; + if (try_again(SOCKERRNO)) { + status = ARES_ESERVFAIL; + } else { + /* UDP is connection-less, but we might receive an ICMP unreachable which + * means we can't talk to the remote host at all and that will be + * reflected here */ + status = ARES_ECONNREFUSED; + } } else { status = ARES_SUCCESS; } @@ -1018,8 +1040,6 @@ ares_status_t ares__send_query(struct query *query, const ares_timeval_t *now) ares_status_t status; ares_bool_t new_connection = ARES_FALSE; - query->conn = NULL; - /* Choose the server to send the query to */ if (channel->rotate) { /* Pull random server */ @@ -1052,8 +1072,7 @@ ares_status_t ares__send_query(struct query *query, const ares_timeval_t *now) case ARES_ECONNREFUSED: case ARES_EBADFAMILY: server_increment_failures(server, query->using_tcp); - query->error_status = status; - return ares__requeue_query(query, now); + return ares__requeue_query(query, now, status); /* Anything else is not retryable, likely ENOMEM */ default: @@ -1073,7 +1092,7 @@ ares_status_t ares__send_query(struct query *query, const ares_timeval_t *now) /* Only safe to kill connection if it was new, otherwise it should be * cleaned up by another process later */ if (new_connection) { - ares__close_connection(conn); + ares__close_connection(conn, status); } return status; } @@ -1111,8 +1130,7 @@ ares_status_t ares__send_query(struct query *query, const ares_timeval_t *now) case ARES_ECONNREFUSED: case ARES_EBADFAMILY: server_increment_failures(server, query->using_tcp); - query->error_status = status; - return ares__requeue_query(query, now); + return ares__requeue_query(query, now, status); /* Anything else is not retryable, likely ENOMEM */ default: @@ -1132,14 +1150,27 @@ ares_status_t ares__send_query(struct query *query, const ares_timeval_t *now) return status; } - /* FIXME: Handle EAGAIN here since it likely can happen. */ + if (status == ARES_ECONNREFUSED) { + handle_conn_error(conn, ARES_TRUE, status); + + /* This query wasn't yet bound to the connection, need to manually + * requeue it and return an appropriate error */ + status = ares__requeue_query(query, now, status); + if (status == ARES_ETIMEOUT) { + status = ARES_ECONNREFUSED; + } + return status; + } + + /* FIXME: Handle EAGAIN here since it likely can happen. Right now we + * just requeue to a different server/connection. */ server_increment_failures(server, query->using_tcp); - status = ares__requeue_query(query, now); + status = ares__requeue_query(query, now, status); /* Only safe to kill connection if it was new, otherwise it should be * cleaned up by another process later */ if (new_connection) { - ares__close_connection(conn); + ares__close_connection(conn, status); } return status; @@ -1162,7 +1193,7 @@ ares_status_t ares__send_query(struct query *query, const ares_timeval_t *now) /* Only safe to kill connection if it was new, otherwise it should be * cleaned up by another process later */ if (new_connection) { - ares__close_connection(conn); + ares__close_connection(conn, ARES_SUCCESS); } return ARES_ENOMEM; /* LCOV_EXCL_STOP */ @@ -1180,7 +1211,7 @@ ares_status_t ares__send_query(struct query *query, const ares_timeval_t *now) /* Only safe to kill connection if it was new, otherwise it should be * cleaned up by another process later */ if (new_connection) { - ares__close_connection(conn); + ares__close_connection(conn, ARES_SUCCESS); } return ARES_ENOMEM; /* LCOV_EXCL_STOP */ @@ -1283,12 +1314,9 @@ static ares_bool_t same_address(const struct sockaddr *sa, static void ares_detach_query(struct query *query) { /* Remove the query from all the lists in which it is linked */ + ares__query_disassociate_from_conn(query); ares__htable_szvp_remove(query->channel->queries_by_qid, query->qid); - ares__slist_node_destroy(query->node_queries_by_timeout); - ares__llist_node_destroy(query->node_queries_to_conn); ares__llist_node_destroy(query->node_all_queries); - query->node_queries_by_timeout = NULL; - query->node_queries_to_conn = NULL; query->node_all_queries = NULL; } diff --git a/lib/c-ares-1.32.0/src/lib/ares_qcache.c b/lib/c-ares-1.32.3/src/lib/ares_qcache.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_qcache.c rename to lib/c-ares-1.32.3/src/lib/ares_qcache.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_query.c b/lib/c-ares-1.32.3/src/lib/ares_query.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_query.c rename to lib/c-ares-1.32.3/src/lib/ares_query.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_rand.c b/lib/c-ares-1.32.3/src/lib/ares_rand.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_rand.c rename to lib/c-ares-1.32.3/src/lib/ares_rand.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_search.c b/lib/c-ares-1.32.3/src/lib/ares_search.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_search.c rename to lib/c-ares-1.32.3/src/lib/ares_search.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_send.c b/lib/c-ares-1.32.3/src/lib/ares_send.c similarity index 98% rename from lib/c-ares-1.32.0/src/lib/ares_send.c rename to lib/c-ares-1.32.3/src/lib/ares_send.c index 94e7e12b42d..e07ef5b51fe 100644 --- a/lib/c-ares-1.32.0/src/lib/ares_send.c +++ b/lib/c-ares-1.32.3/src/lib/ares_send.c @@ -145,11 +145,11 @@ ares_status_t ares_send_nolock(ares_channel_t *channel, query->using_tcp = (channel->flags & ARES_FLAG_USEVC)?ARES_TRUE:ARES_FALSE; /* Duplicate Query */ - query->query = ares_dns_record_duplicate(dnsrec); - if (query->query == NULL) { + status = ares_dns_record_duplicate_ex(&query->query, dnsrec); + if (status != ARES_SUCCESS) { ares_free(query); - callback(arg, ARES_ENOMEM, 0, NULL); - return ARES_ENOMEM; + callback(arg, status, 0, NULL); + return status; } ares_dns_record_set_id(query->query, id); diff --git a/lib/c-ares-1.32.0/src/lib/ares_setup.h b/lib/c-ares-1.32.3/src/lib/ares_setup.h similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_setup.h rename to lib/c-ares-1.32.3/src/lib/ares_setup.h diff --git a/lib/c-ares-1.32.0/src/lib/ares_str.c b/lib/c-ares-1.32.3/src/lib/ares_str.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_str.c rename to lib/c-ares-1.32.3/src/lib/ares_str.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_str.h b/lib/c-ares-1.32.3/src/lib/ares_str.h similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_str.h rename to lib/c-ares-1.32.3/src/lib/ares_str.h diff --git a/lib/c-ares-1.32.0/src/lib/ares_strcasecmp.c b/lib/c-ares-1.32.3/src/lib/ares_strcasecmp.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_strcasecmp.c rename to lib/c-ares-1.32.3/src/lib/ares_strcasecmp.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_strcasecmp.h b/lib/c-ares-1.32.3/src/lib/ares_strcasecmp.h similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_strcasecmp.h rename to lib/c-ares-1.32.3/src/lib/ares_strcasecmp.h diff --git a/lib/c-ares-1.32.0/src/lib/ares_strerror.c b/lib/c-ares-1.32.3/src/lib/ares_strerror.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_strerror.c rename to lib/c-ares-1.32.3/src/lib/ares_strerror.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_strsplit.c b/lib/c-ares-1.32.3/src/lib/ares_strsplit.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_strsplit.c rename to lib/c-ares-1.32.3/src/lib/ares_strsplit.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_strsplit.h b/lib/c-ares-1.32.3/src/lib/ares_strsplit.h similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_strsplit.h rename to lib/c-ares-1.32.3/src/lib/ares_strsplit.h diff --git a/lib/c-ares-1.32.0/src/lib/ares_sysconfig.c b/lib/c-ares-1.32.3/src/lib/ares_sysconfig.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_sysconfig.c rename to lib/c-ares-1.32.3/src/lib/ares_sysconfig.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_sysconfig_files.c b/lib/c-ares-1.32.3/src/lib/ares_sysconfig_files.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_sysconfig_files.c rename to lib/c-ares-1.32.3/src/lib/ares_sysconfig_files.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_sysconfig_mac.c b/lib/c-ares-1.32.3/src/lib/ares_sysconfig_mac.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_sysconfig_mac.c rename to lib/c-ares-1.32.3/src/lib/ares_sysconfig_mac.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_sysconfig_win.c b/lib/c-ares-1.32.3/src/lib/ares_sysconfig_win.c similarity index 99% rename from lib/c-ares-1.32.0/src/lib/ares_sysconfig_win.c rename to lib/c-ares-1.32.3/src/lib/ares_sysconfig_win.c index 5ca7ccb50cf..ce2a261cec8 100644 --- a/lib/c-ares-1.32.0/src/lib/ares_sysconfig_win.c +++ b/lib/c-ares-1.32.3/src/lib/ares_sysconfig_win.c @@ -356,10 +356,11 @@ static ares_bool_t get_DNS_Windows(char **outptr) * compute the resulting total metric, just as Windows routing will do. * Then, sort all the addresses found by the metric. */ - for (ipaDNSAddr = ipaaEntry->FirstDnsServerAddress; ipaDNSAddr; + for (ipaDNSAddr = ipaaEntry->FirstDnsServerAddress; ipaDNSAddr != NULL; ipaDNSAddr = ipaDNSAddr->Next) { char ipaddr[INET6_ADDRSTRLEN] = ""; - namesrvr.sa = ipaDNSAddr->Address.lpSockaddr; + + namesrvr.sa = ipaDNSAddr->Address.lpSockaddr; if (namesrvr.sa->sa_family == AF_INET) { if ((namesrvr.sa4->sin_addr.S_un.S_addr == INADDR_ANY) || diff --git a/lib/c-ares-1.32.0/src/lib/ares_timeout.c b/lib/c-ares-1.32.3/src/lib/ares_timeout.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_timeout.c rename to lib/c-ares-1.32.3/src/lib/ares_timeout.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_update_servers.c b/lib/c-ares-1.32.3/src/lib/ares_update_servers.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_update_servers.c rename to lib/c-ares-1.32.3/src/lib/ares_update_servers.c diff --git a/lib/c-ares-1.32.0/src/lib/ares_version.c b/lib/c-ares-1.32.3/src/lib/ares_version.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/ares_version.c rename to lib/c-ares-1.32.3/src/lib/ares_version.c diff --git a/lib/c-ares-1.32.0/src/lib/cares.rc b/lib/c-ares-1.32.3/src/lib/cares.rc similarity index 100% rename from lib/c-ares-1.32.0/src/lib/cares.rc rename to lib/c-ares-1.32.3/src/lib/cares.rc diff --git a/lib/c-ares-1.32.0/src/lib/config-dos.h b/lib/c-ares-1.32.3/src/lib/config-dos.h similarity index 100% rename from lib/c-ares-1.32.0/src/lib/config-dos.h rename to lib/c-ares-1.32.3/src/lib/config-dos.h diff --git a/lib/c-ares-1.32.0/src/lib/config-win32.h b/lib/c-ares-1.32.3/src/lib/config-win32.h similarity index 100% rename from lib/c-ares-1.32.0/src/lib/config-win32.h rename to lib/c-ares-1.32.3/src/lib/config-win32.h diff --git a/lib/c-ares-1.32.0/src/lib/inet_net_pton.c b/lib/c-ares-1.32.3/src/lib/inet_net_pton.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/inet_net_pton.c rename to lib/c-ares-1.32.3/src/lib/inet_net_pton.c diff --git a/lib/c-ares-1.32.0/src/lib/inet_ntop.c b/lib/c-ares-1.32.3/src/lib/inet_ntop.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/inet_ntop.c rename to lib/c-ares-1.32.3/src/lib/inet_ntop.c diff --git a/lib/c-ares-1.32.0/src/lib/thirdparty/apple/dnsinfo.h b/lib/c-ares-1.32.3/src/lib/thirdparty/apple/dnsinfo.h similarity index 100% rename from lib/c-ares-1.32.0/src/lib/thirdparty/apple/dnsinfo.h rename to lib/c-ares-1.32.3/src/lib/thirdparty/apple/dnsinfo.h diff --git a/lib/c-ares-1.32.0/src/lib/windows_port.c b/lib/c-ares-1.32.3/src/lib/windows_port.c similarity index 100% rename from lib/c-ares-1.32.0/src/lib/windows_port.c rename to lib/c-ares-1.32.3/src/lib/windows_port.c diff --git a/lib/c-ares-1.32.0/src/tools/CMakeLists.txt b/lib/c-ares-1.32.3/src/tools/CMakeLists.txt similarity index 91% rename from lib/c-ares-1.32.0/src/tools/CMakeLists.txt rename to lib/c-ares-1.32.3/src/tools/CMakeLists.txt index 0016ca4c0b1..e23d0f23c78 100644 --- a/lib/c-ares-1.32.0/src/tools/CMakeLists.txt +++ b/lib/c-ares-1.32.3/src/tools/CMakeLists.txt @@ -32,6 +32,9 @@ IF (CARES_BUILD_TOOLS) # Build adig ADD_EXECUTABLE (adig adig.c ${SAMPLESOURCES}) + # Don't build adig and ahost in parallel. This is to prevent a Windows MSVC + # build error due to them both using the same source files. + ADD_DEPENDENCIES(adig ahost) TARGET_INCLUDE_DIRECTORIES (adig PUBLIC "$" "$" diff --git a/lib/c-ares-1.32.0/src/tools/Makefile.am b/lib/c-ares-1.32.3/src/tools/Makefile.am similarity index 100% rename from lib/c-ares-1.32.0/src/tools/Makefile.am rename to lib/c-ares-1.32.3/src/tools/Makefile.am diff --git a/lib/c-ares-1.32.0/src/tools/Makefile.in b/lib/c-ares-1.32.3/src/tools/Makefile.in similarity index 100% rename from lib/c-ares-1.32.0/src/tools/Makefile.in rename to lib/c-ares-1.32.3/src/tools/Makefile.in diff --git a/lib/c-ares-1.32.0/src/tools/Makefile.inc b/lib/c-ares-1.32.3/src/tools/Makefile.inc similarity index 100% rename from lib/c-ares-1.32.0/src/tools/Makefile.inc rename to lib/c-ares-1.32.3/src/tools/Makefile.inc diff --git a/lib/c-ares-1.32.0/src/tools/adig.c b/lib/c-ares-1.32.3/src/tools/adig.c similarity index 100% rename from lib/c-ares-1.32.0/src/tools/adig.c rename to lib/c-ares-1.32.3/src/tools/adig.c diff --git a/lib/c-ares-1.32.0/src/tools/ahost.c b/lib/c-ares-1.32.3/src/tools/ahost.c similarity index 100% rename from lib/c-ares-1.32.0/src/tools/ahost.c rename to lib/c-ares-1.32.3/src/tools/ahost.c diff --git a/lib/c-ares-1.32.0/src/tools/ares_getopt.c b/lib/c-ares-1.32.3/src/tools/ares_getopt.c similarity index 100% rename from lib/c-ares-1.32.0/src/tools/ares_getopt.c rename to lib/c-ares-1.32.3/src/tools/ares_getopt.c diff --git a/lib/c-ares-1.32.0/src/tools/ares_getopt.h b/lib/c-ares-1.32.3/src/tools/ares_getopt.h similarity index 100% rename from lib/c-ares-1.32.0/src/tools/ares_getopt.h rename to lib/c-ares-1.32.3/src/tools/ares_getopt.h diff --git a/lib/c-ares-1.32.0/test/CMakeLists.txt b/lib/c-ares-1.32.3/test/CMakeLists.txt similarity index 100% rename from lib/c-ares-1.32.0/test/CMakeLists.txt rename to lib/c-ares-1.32.3/test/CMakeLists.txt diff --git a/lib/c-ares-1.32.0/test/Makefile.am b/lib/c-ares-1.32.3/test/Makefile.am similarity index 100% rename from lib/c-ares-1.32.0/test/Makefile.am rename to lib/c-ares-1.32.3/test/Makefile.am diff --git a/lib/c-ares-1.32.0/test/Makefile.in b/lib/c-ares-1.32.3/test/Makefile.in similarity index 100% rename from lib/c-ares-1.32.0/test/Makefile.in rename to lib/c-ares-1.32.3/test/Makefile.in diff --git a/lib/c-ares-1.32.0/test/Makefile.inc b/lib/c-ares-1.32.3/test/Makefile.inc similarity index 100% rename from lib/c-ares-1.32.0/test/Makefile.inc rename to lib/c-ares-1.32.3/test/Makefile.inc diff --git a/lib/c-ares-1.32.0/test/Makefile.m32 b/lib/c-ares-1.32.3/test/Makefile.m32 similarity index 100% rename from lib/c-ares-1.32.0/test/Makefile.m32 rename to lib/c-ares-1.32.3/test/Makefile.m32 diff --git a/lib/c-ares-1.32.0/test/Makefile.msvc b/lib/c-ares-1.32.3/test/Makefile.msvc similarity index 100% rename from lib/c-ares-1.32.0/test/Makefile.msvc rename to lib/c-ares-1.32.3/test/Makefile.msvc diff --git a/lib/c-ares-1.32.0/test/README.md b/lib/c-ares-1.32.3/test/README.md similarity index 100% rename from lib/c-ares-1.32.0/test/README.md rename to lib/c-ares-1.32.3/test/README.md diff --git a/lib/c-ares-1.32.0/test/ares-fuzz.c b/lib/c-ares-1.32.3/test/ares-fuzz.c similarity index 100% rename from lib/c-ares-1.32.0/test/ares-fuzz.c rename to lib/c-ares-1.32.3/test/ares-fuzz.c diff --git a/lib/c-ares-1.32.0/test/ares-test-ai.h b/lib/c-ares-1.32.3/test/ares-test-ai.h similarity index 100% rename from lib/c-ares-1.32.0/test/ares-test-ai.h rename to lib/c-ares-1.32.3/test/ares-test-ai.h diff --git a/lib/c-ares-1.32.0/test/ares-test-fuzz-name.c b/lib/c-ares-1.32.3/test/ares-test-fuzz-name.c similarity index 100% rename from lib/c-ares-1.32.0/test/ares-test-fuzz-name.c rename to lib/c-ares-1.32.3/test/ares-test-fuzz-name.c diff --git a/lib/c-ares-1.32.0/test/ares-test-fuzz.c b/lib/c-ares-1.32.3/test/ares-test-fuzz.c similarity index 100% rename from lib/c-ares-1.32.0/test/ares-test-fuzz.c rename to lib/c-ares-1.32.3/test/ares-test-fuzz.c diff --git a/lib/c-ares-1.32.0/test/ares-test-init.cc b/lib/c-ares-1.32.3/test/ares-test-init.cc similarity index 100% rename from lib/c-ares-1.32.0/test/ares-test-init.cc rename to lib/c-ares-1.32.3/test/ares-test-init.cc diff --git a/lib/c-ares-1.32.0/test/ares-test-internal.cc b/lib/c-ares-1.32.3/test/ares-test-internal.cc similarity index 100% rename from lib/c-ares-1.32.0/test/ares-test-internal.cc rename to lib/c-ares-1.32.3/test/ares-test-internal.cc diff --git a/lib/c-ares-1.32.0/test/ares-test-live.cc b/lib/c-ares-1.32.3/test/ares-test-live.cc similarity index 100% rename from lib/c-ares-1.32.0/test/ares-test-live.cc rename to lib/c-ares-1.32.3/test/ares-test-live.cc diff --git a/lib/c-ares-1.32.0/test/ares-test-main.cc b/lib/c-ares-1.32.3/test/ares-test-main.cc similarity index 100% rename from lib/c-ares-1.32.0/test/ares-test-main.cc rename to lib/c-ares-1.32.3/test/ares-test-main.cc diff --git a/lib/c-ares-1.32.0/test/ares-test-misc.cc b/lib/c-ares-1.32.3/test/ares-test-misc.cc similarity index 100% rename from lib/c-ares-1.32.0/test/ares-test-misc.cc rename to lib/c-ares-1.32.3/test/ares-test-misc.cc diff --git a/lib/c-ares-1.32.0/test/ares-test-mock-ai.cc b/lib/c-ares-1.32.3/test/ares-test-mock-ai.cc similarity index 88% rename from lib/c-ares-1.32.0/test/ares-test-mock-ai.cc rename to lib/c-ares-1.32.3/test/ares-test-mock-ai.cc index 1ef69c6ac48..c766d4a9017 100644 --- a/lib/c-ares-1.32.0/test/ares-test-mock-ai.cc +++ b/lib/c-ares-1.32.3/test/ares-test-mock-ai.cc @@ -168,7 +168,7 @@ TEST_P(MockTCPChannelTestAI, MalformedResponse) { ares_getaddrinfo(channel_, "www.google.com.", NULL, &hints, AddrInfoCallback, &result); Process(); EXPECT_TRUE(result.done_); - EXPECT_EQ(ARES_ETIMEOUT, result.status_); + EXPECT_EQ(ARES_EBADRESP, result.status_); } TEST_P(MockTCPChannelTestAI, FormErrResponse) { @@ -500,7 +500,6 @@ TEST_P(MockChannelTestAI, FamilyV6) { EXPECT_THAT(result.ai_, IncludesV6Address("2121:0000:0000:0000:0000:0000:0000:0303")); } -#ifndef CARES_SYMBOL_HIDING // Test case for Issue #662 TEST_P(MockChannelTestAI, PartialQueryCancel) { std::vector nothing; @@ -528,7 +527,6 @@ TEST_P(MockChannelTestAI, PartialQueryCancel) { EXPECT_TRUE(result.done_); EXPECT_EQ(ARES_ECANCELLED, result.status_); } -#endif TEST_P(MockChannelTestAI, FamilyV4) { DNSPacket rsp4; @@ -726,20 +724,6 @@ class NoRotateMultiMockTestAI : public MockMultiServerChannelTestAI { NoRotateMultiMockTestAI() : MockMultiServerChannelTestAI(nullptr, ARES_OPT_NOROTATE) {} }; -class ServerFailoverOptsMockTestAI : public MockMultiServerChannelTestAI { - public: - ServerFailoverOptsMockTestAI() - : MockMultiServerChannelTestAI(FillOptions(&opts_), - ARES_OPT_SERVER_FAILOVER | ARES_OPT_NOROTATE) {} - static struct ares_options* FillOptions(struct ares_options *opts) { - memset(opts, 0, sizeof(struct ares_options)); - opts->server_failover_opts.retry_chance = 1; - opts->server_failover_opts.retry_delay = 250; - return opts; - } - private: - struct ares_options opts_; -}; TEST_P(NoRotateMultiMockTestAI, ThirdServer) { struct ares_options opts; @@ -792,10 +776,26 @@ TEST_P(NoRotateMultiMockTestAI, ThirdServer) { CheckExample(); } +#define SERVER_FAILOVER_RETRY_DELAY 750 +class ServerFailoverOptsMockTestAI : public MockMultiServerChannelTestAI { + public: + ServerFailoverOptsMockTestAI() + : MockMultiServerChannelTestAI(FillOptions(&opts_), + ARES_OPT_SERVER_FAILOVER | ARES_OPT_NOROTATE) {} + static struct ares_options* FillOptions(struct ares_options *opts) { + memset(opts, 0, sizeof(struct ares_options)); + opts->server_failover_opts.retry_chance = 1; + opts->server_failover_opts.retry_delay = SERVER_FAILOVER_RETRY_DELAY; + return opts; + } + private: + struct ares_options opts_; +}; + // Test case to trigger server failover behavior. We use a retry chance of -// 100% and a retry delay of 250ms so that we can test behavior reliably. +// 100% and a retry delay so that we can test behavior reliably. TEST_P(ServerFailoverOptsMockTestAI, ServerFailoverOpts) { - DNSPacket servfailrsp; + DNSPacket servfailrsp; servfailrsp.set_response().set_aa().set_rcode(SERVFAIL) .add_question(new DNSQuestion("www.example.com", T_A)); DNSPacket okrsp; @@ -803,7 +803,12 @@ TEST_P(ServerFailoverOptsMockTestAI, ServerFailoverOpts) { .add_question(new DNSQuestion("www.example.com", T_A)) .add_answer(new DNSARR("www.example.com", 100, {2,3,4,5})); + auto tv_begin = std::chrono::high_resolution_clock::now(); + auto tv_now = std::chrono::high_resolution_clock::now(); + unsigned int delay_ms; + // 1. If all servers are healthy, then the first server should be selected. + if (verbose) std::cerr << std::chrono::duration_cast(tv_now - tv_begin).count() << "ms: First server should be selected" << std::endl; EXPECT_CALL(*servers_[0], OnRequest("www.example.com", T_A)) .WillOnce(SetReply(servers_[0].get(), &okrsp)); CheckExample(); @@ -811,16 +816,23 @@ TEST_P(ServerFailoverOptsMockTestAI, ServerFailoverOpts) { // 2. Failed servers should be retried after the retry delay. // // Fail server #0 but leave server #1 as healthy. + tv_now = std::chrono::high_resolution_clock::now(); + if (verbose) std::cerr << std::chrono::duration_cast(tv_now - tv_begin).count() << "ms: Server0 will fail but leave Server1 as healthy" << std::endl; EXPECT_CALL(*servers_[0], OnRequest("www.example.com", T_A)) .WillOnce(SetReply(servers_[0].get(), &servfailrsp)); EXPECT_CALL(*servers_[1], OnRequest("www.example.com", T_A)) .WillOnce(SetReply(servers_[1].get(), &okrsp)); CheckExample(); - // Sleep for the retry delay (actually a little more than 250ms to account + // Sleep for the retry delay (actually a little more than the retry delay to account // for unreliable timing, e.g. NTP slew) and send in another query. Server #0 // should be retried. - std::this_thread::sleep_for(std::chrono::milliseconds(260)); + tv_now = std::chrono::high_resolution_clock::now(); + delay_ms = SERVER_FAILOVER_RETRY_DELAY + (SERVER_FAILOVER_RETRY_DELAY / 10); + if (verbose) std::cerr << std::chrono::duration_cast(tv_now - tv_begin).count() << "ms: sleep " << delay_ms << "ms" << std::endl; + ares_sleep_time(delay_ms); + tv_now = std::chrono::high_resolution_clock::now(); + if (verbose) std::cerr << std::chrono::duration_cast(tv_now - tv_begin).count() << "ms: Server0 should be past retry delay and should be tried again successfully" << std::endl; EXPECT_CALL(*servers_[0], OnRequest("www.example.com", T_A)) .WillOnce(SetReply(servers_[0].get(), &okrsp)); CheckExample(); @@ -830,6 +842,8 @@ TEST_P(ServerFailoverOptsMockTestAI, ServerFailoverOpts) { // // Fail all servers for the first round of tries. On the second round server // #1 responds successfully. + tv_now = std::chrono::high_resolution_clock::now(); + if (verbose) std::cerr << std::chrono::duration_cast(tv_now - tv_begin).count() << "ms: All 3 servers will fail on the first attempt. On second attempt, Server0 will fail, but Server1 will answer correctly." << std::endl; EXPECT_CALL(*servers_[0], OnRequest("www.example.com", T_A)) .WillOnce(SetReply(servers_[0].get(), &servfailrsp)) .WillOnce(SetReply(servers_[0].get(), &servfailrsp)); @@ -843,20 +857,36 @@ TEST_P(ServerFailoverOptsMockTestAI, ServerFailoverOpts) { // At this point the sorted servers look like [1] (f0) [2] (f1) [0] (f2). // Sleep for the retry delay and send in another query. Server #2 should be // retried first, and then server #0. - std::this_thread::sleep_for(std::chrono::milliseconds(260)); + tv_now = std::chrono::high_resolution_clock::now(); + delay_ms = SERVER_FAILOVER_RETRY_DELAY + (SERVER_FAILOVER_RETRY_DELAY / 10); + if (verbose) std::cerr << std::chrono::duration_cast(tv_now - tv_begin).count() << "ms: sleep " << delay_ms << "ms" << std::endl; + ares_sleep_time(delay_ms); + tv_now = std::chrono::high_resolution_clock::now(); + if (verbose) std::cerr << std::chrono::duration_cast(tv_now - tv_begin).count() << "ms: Past retry delay, so will choose Server2 and Server0 that are down. Server2 will fail but Server0 will succeed." << std::endl; EXPECT_CALL(*servers_[2], OnRequest("www.example.com", T_A)) .WillOnce(SetReply(servers_[2].get(), &servfailrsp)); EXPECT_CALL(*servers_[0], OnRequest("www.example.com", T_A)) .WillOnce(SetReply(servers_[0].get(), &okrsp)); CheckExample(); + // Test might take a while to run and the sleep may not be accurate, so we + // want to track this interval otherwise we may not pass the last test case + // on slow systems. + auto elapse_start = tv_now; + // 4. If there are multiple failed servers, then servers which have not yet // met the retry delay should be skipped. // // The sorted servers currently look like [0] (f0) [1] (f0) [2] (f2) and // server #2 has just been retried. - // Sleep for half the retry delay and trigger a failure on server #0. - std::this_thread::sleep_for(std::chrono::milliseconds(130)); + // Sleep for 1/2 the retry delay and trigger a failure on server #0. + tv_now = std::chrono::high_resolution_clock::now(); + delay_ms = (SERVER_FAILOVER_RETRY_DELAY/2); + if (verbose) std::cerr << std::chrono::duration_cast(tv_now - tv_begin).count() << "ms: sleep " << delay_ms << "ms" << std::endl; + ares_sleep_time(delay_ms); + tv_now = std::chrono::high_resolution_clock::now(); + + if (verbose) std::cerr << std::chrono::duration_cast(tv_now - tv_begin).count() << "ms: Retry delay has not been hit yet. Server0 was last successful, so should be tried first (and will fail), Server1 is also healthy so will respond." << std::endl; EXPECT_CALL(*servers_[0], OnRequest("www.example.com", T_A)) .WillOnce(SetReply(servers_[0].get(), &servfailrsp)); EXPECT_CALL(*servers_[1], OnRequest("www.example.com", T_A)) @@ -864,10 +894,22 @@ TEST_P(ServerFailoverOptsMockTestAI, ServerFailoverOpts) { CheckExample(); // The sorted servers now look like [1] (f0) [0] (f1) [2] (f2). Server #0 - // has just failed whilst server #2 is halfway through the retry delay. - // Sleep for another half the retry delay and check that server #2 is retried - // whilst server #0 is not. - std::this_thread::sleep_for(std::chrono::milliseconds(130)); + // has just failed whilst server #2 is somewhere in its retry delay. + // Sleep until we know server #2s retry delay has elapsed but Server #0 has + // not. + tv_now = std::chrono::high_resolution_clock::now(); + + unsigned int elapsed_time = (unsigned int)std::chrono::duration_cast(tv_now - elapse_start).count(); + delay_ms = (SERVER_FAILOVER_RETRY_DELAY) + (SERVER_FAILOVER_RETRY_DELAY / 10); + if (elapsed_time > delay_ms) { + if (verbose) std::cerr << "elapsed duration " << elapsed_time << "ms greater than desired delay of " << delay_ms << "ms, not sleeping" << std::endl; + } else { + delay_ms -= elapsed_time; // subtract already elapsed time + if (verbose) std::cerr << std::chrono::duration_cast(tv_now - tv_begin).count() << "ms: sleep " << delay_ms << "ms" << std::endl; + ares_sleep_time(delay_ms); + } + tv_now = std::chrono::high_resolution_clock::now(); + if (verbose) std::cerr << std::chrono::duration_cast(tv_now - tv_begin).count() << "ms: Retry delay has expired on Server2 but not Server0, will try on Server2 and fail, then Server1 will answer" << std::endl; EXPECT_CALL(*servers_[2], OnRequest("www.example.com", T_A)) .WillOnce(SetReply(servers_[2].get(), &servfailrsp)); EXPECT_CALL(*servers_[1], OnRequest("www.example.com", T_A)) diff --git a/lib/c-ares-1.32.0/test/ares-test-mock-et.cc b/lib/c-ares-1.32.3/test/ares-test-mock-et.cc similarity index 87% rename from lib/c-ares-1.32.0/test/ares-test-mock-et.cc rename to lib/c-ares-1.32.3/test/ares-test-mock-et.cc index efc3e233b31..b32dc8e69e4 100644 --- a/lib/c-ares-1.32.0/test/ares-test-mock-et.cc +++ b/lib/c-ares-1.32.3/test/ares-test-mock-et.cc @@ -78,6 +78,40 @@ TEST_P(MockUDPEventThreadTest, GetHostByNameParallelLookups) { EXPECT_EQ("{'www.google.com' aliases=[] addrs=[2.3.4.5]}", ss3.str()); } +// c-ares issue #819 +TEST_P(MockUDPEventThreadTest, BadLoopbackServerNoTimeouts) { + ares_set_servers_csv(channel_, "127.0.0.1:12345"); +#define BADLOOPBACK_TESTCNT 5 + HostResult result[BADLOOPBACK_TESTCNT]; + for (size_t i=0; i> { + public: + MockUDPEventThreadSingleQueryPerConnTest() + : MockEventThreadOptsTest(1, std::get<0>(GetParam()), std::get<1>(GetParam()), false, + FillOptions(&opts_), + ARES_OPT_UDP_MAX_QUERIES) {} + static struct ares_options* FillOptions(struct ares_options * opts) { + memset(opts, 0, sizeof(struct ares_options)); + opts->udp_max_queries = 1; + return opts; + } + private: + struct ares_options opts_; +}; + +#define LOTSOFCONNECTIONS_CNT 64 +TEST_P(MockUDPEventThreadSingleQueryPerConnTest, LotsOfConnections) { + DNSPacket rsp; + rsp.set_response().set_aa() + .add_question(new DNSQuestion("www.google.com", T_A)) + .add_answer(new DNSARR("www.google.com", 100, {2, 3, 4, 5})); + ON_CALL(server_, OnRequest("www.google.com", T_A)) + .WillByDefault(SetReply(&server_, &rsp)); + + // Get notified of new sockets so we can validate how many are created + int rc = ARES_SUCCESS; + ares_set_socket_callback(channel_, SocketConnectCallback, &rc); + sock_cb_count = 0; + + HostResult result[LOTSOFCONNECTIONS_CNT]; + for (size_t i=0; i> { @@ -325,7 +408,7 @@ TEST_P(MockTCPEventThreadTest, MalformedResponse) { ares_gethostbyname(channel_, "www.google.com.", AF_INET, HostCallback, &result); Process(); EXPECT_TRUE(result.done_); - EXPECT_EQ(ARES_ETIMEOUT, result.status_); + EXPECT_EQ(ARES_EBADRESP, result.status_); } TEST_P(MockTCPEventThreadTest, FormErrResponse) { @@ -766,7 +849,6 @@ TEST_P(MockEventThreadTest, DestroyQuick) { EXPECT_TRUE(result.done_); } -#ifndef CARES_SYMBOL_HIDING // Test case for Issue #662 TEST_P(MockEventThreadTest, PartialQueryCancel) { std::vector nothing; @@ -818,16 +900,14 @@ TEST_P(MockEventThreadTest, BulkCancel) { for (size_t i = 0; iserver_failover_opts.retry_chance = 1; - opts->server_failover_opts.retry_delay = 250; - return opts; - } - private: - struct ares_options opts_; -}; TEST_P(NoRotateMultiMockEventThreadTest, ThirdServer) { struct ares_options opts; @@ -1347,8 +1413,24 @@ TEST_P(NoRotateMultiMockEventThreadTest, ServerNoResponseFailover) { EXPECT_EQ("{'www.example.com' aliases=[] addrs=[2.3.4.5]}", ss4.str()); } +#define SERVER_FAILOVER_RETRY_DELAY 750 +class ServerFailoverOptsMockEventThreadTest : public MockMultiServerEventThreadTest { + public: + ServerFailoverOptsMockEventThreadTest() + : MockMultiServerEventThreadTest(FillOptions(&opts_), + ARES_OPT_SERVER_FAILOVER | ARES_OPT_NOROTATE) {} + static struct ares_options* FillOptions(struct ares_options *opts) { + memset(opts, 0, sizeof(struct ares_options)); + opts->server_failover_opts.retry_chance = 1; + opts->server_failover_opts.retry_delay = SERVER_FAILOVER_RETRY_DELAY; + return opts; + } + private: + struct ares_options opts_; +}; + // Test case to trigger server failover behavior. We use a retry chance of -// 100% and a retry delay of 250ms so that we can test behavior reliably. +// 100% and a retry delay so that we can test behavior reliably. TEST_P(ServerFailoverOptsMockEventThreadTest, ServerFailoverOpts) { DNSPacket servfailrsp; servfailrsp.set_response().set_aa().set_rcode(SERVFAIL) @@ -1358,7 +1440,12 @@ TEST_P(ServerFailoverOptsMockEventThreadTest, ServerFailoverOpts) { .add_question(new DNSQuestion("www.example.com", T_A)) .add_answer(new DNSARR("www.example.com", 100, {2,3,4,5})); + auto tv_begin = std::chrono::high_resolution_clock::now(); + auto tv_now = std::chrono::high_resolution_clock::now(); + unsigned int delay_ms; + // 1. If all servers are healthy, then the first server should be selected. + if (verbose) std::cerr << std::chrono::duration_cast(tv_now - tv_begin).count() << "ms: First server should be selected" << std::endl; EXPECT_CALL(*servers_[0], OnRequest("www.example.com", T_A)) .WillOnce(SetReply(servers_[0].get(), &okrsp)); CheckExample(); @@ -1366,16 +1453,23 @@ TEST_P(ServerFailoverOptsMockEventThreadTest, ServerFailoverOpts) { // 2. Failed servers should be retried after the retry delay. // // Fail server #0 but leave server #1 as healthy. + tv_now = std::chrono::high_resolution_clock::now(); + if (verbose) std::cerr << std::chrono::duration_cast(tv_now - tv_begin).count() << "ms: Server0 will fail but leave Server1 as healthy" << std::endl; EXPECT_CALL(*servers_[0], OnRequest("www.example.com", T_A)) .WillOnce(SetReply(servers_[0].get(), &servfailrsp)); EXPECT_CALL(*servers_[1], OnRequest("www.example.com", T_A)) .WillOnce(SetReply(servers_[1].get(), &okrsp)); CheckExample(); - // Sleep for the retry delay (actually a little more than 250ms to account + // Sleep for the retry delay (actually a little more than the retry delay to account // for unreliable timing, e.g. NTP slew) and send in another query. Server #0 // should be retried. - std::this_thread::sleep_for(std::chrono::milliseconds(260)); + tv_now = std::chrono::high_resolution_clock::now(); + delay_ms = SERVER_FAILOVER_RETRY_DELAY + (SERVER_FAILOVER_RETRY_DELAY / 10); + if (verbose) std::cerr << std::chrono::duration_cast(tv_now - tv_begin).count() << "ms: sleep " << delay_ms << "ms" << std::endl; + ares_sleep_time(delay_ms); + tv_now = std::chrono::high_resolution_clock::now(); + if (verbose) std::cerr << std::chrono::duration_cast(tv_now - tv_begin).count() << "ms: Server0 should be past retry delay and should be tried again successfully" << std::endl; EXPECT_CALL(*servers_[0], OnRequest("www.example.com", T_A)) .WillOnce(SetReply(servers_[0].get(), &okrsp)); CheckExample(); @@ -1385,6 +1479,8 @@ TEST_P(ServerFailoverOptsMockEventThreadTest, ServerFailoverOpts) { // // Fail all servers for the first round of tries. On the second round server // #1 responds successfully. + tv_now = std::chrono::high_resolution_clock::now(); + if (verbose) std::cerr << std::chrono::duration_cast(tv_now - tv_begin).count() << "ms: All 3 servers will fail on the first attempt. On second attempt, Server0 will fail, but Server1 will answer correctly." << std::endl; EXPECT_CALL(*servers_[0], OnRequest("www.example.com", T_A)) .WillOnce(SetReply(servers_[0].get(), &servfailrsp)) .WillOnce(SetReply(servers_[0].get(), &servfailrsp)); @@ -1398,20 +1494,36 @@ TEST_P(ServerFailoverOptsMockEventThreadTest, ServerFailoverOpts) { // At this point the sorted servers look like [1] (f0) [2] (f1) [0] (f2). // Sleep for the retry delay and send in another query. Server #2 should be // retried first, and then server #0. - std::this_thread::sleep_for(std::chrono::milliseconds(260)); + tv_now = std::chrono::high_resolution_clock::now(); + delay_ms = SERVER_FAILOVER_RETRY_DELAY + (SERVER_FAILOVER_RETRY_DELAY / 10); + if (verbose) std::cerr << std::chrono::duration_cast(tv_now - tv_begin).count() << "ms: sleep " << delay_ms << "ms" << std::endl; + ares_sleep_time(delay_ms); + tv_now = std::chrono::high_resolution_clock::now(); + if (verbose) std::cerr << std::chrono::duration_cast(tv_now - tv_begin).count() << "ms: Past retry delay, so will choose Server2 and Server0 that are down. Server2 will fail but Server0 will succeed." << std::endl; EXPECT_CALL(*servers_[2], OnRequest("www.example.com", T_A)) .WillOnce(SetReply(servers_[2].get(), &servfailrsp)); EXPECT_CALL(*servers_[0], OnRequest("www.example.com", T_A)) .WillOnce(SetReply(servers_[0].get(), &okrsp)); CheckExample(); + // Test might take a while to run and the sleep may not be accurate, so we + // want to track this interval otherwise we may not pass the last test case + // on slow systems. + auto elapse_start = tv_now; + // 4. If there are multiple failed servers, then servers which have not yet // met the retry delay should be skipped. // // The sorted servers currently look like [0] (f0) [1] (f0) [2] (f2) and // server #2 has just been retried. - // Sleep for half the retry delay and trigger a failure on server #0. - std::this_thread::sleep_for(std::chrono::milliseconds(130)); + // Sleep for 1/2 the retry delay and trigger a failure on server #0. + tv_now = std::chrono::high_resolution_clock::now(); + delay_ms = (SERVER_FAILOVER_RETRY_DELAY/2); + if (verbose) std::cerr << std::chrono::duration_cast(tv_now - tv_begin).count() << "ms: sleep " << delay_ms << "ms" << std::endl; + ares_sleep_time(delay_ms); + tv_now = std::chrono::high_resolution_clock::now(); + + if (verbose) std::cerr << std::chrono::duration_cast(tv_now - tv_begin).count() << "ms: Retry delay has not been hit yet. Server0 was last successful, so should be tried first (and will fail), Server1 is also healthy so will respond." << std::endl; EXPECT_CALL(*servers_[0], OnRequest("www.example.com", T_A)) .WillOnce(SetReply(servers_[0].get(), &servfailrsp)); EXPECT_CALL(*servers_[1], OnRequest("www.example.com", T_A)) @@ -1419,10 +1531,22 @@ TEST_P(ServerFailoverOptsMockEventThreadTest, ServerFailoverOpts) { CheckExample(); // The sorted servers now look like [1] (f0) [0] (f1) [2] (f2). Server #0 - // has just failed whilst server #2 is halfway through the retry delay. - // Sleep for another half the retry delay and check that server #2 is retried - // whilst server #0 is not. - std::this_thread::sleep_for(std::chrono::milliseconds(130)); + // has just failed whilst server #2 is somewhere in its retry delay. + // Sleep until we know server #2s retry delay has elapsed but Server #0 has + // not. + tv_now = std::chrono::high_resolution_clock::now(); + + unsigned int elapsed_time = (unsigned int)std::chrono::duration_cast(tv_now - elapse_start).count(); + delay_ms = (SERVER_FAILOVER_RETRY_DELAY) + (SERVER_FAILOVER_RETRY_DELAY / 10); + if (elapsed_time > delay_ms) { + if (verbose) std::cerr << "elapsed duration " << elapsed_time << "ms greater than desired delay of " << delay_ms << "ms, not sleeping" << std::endl; + } else { + delay_ms -= elapsed_time; // subtract already elapsed time + if (verbose) std::cerr << std::chrono::duration_cast(tv_now - tv_begin).count() << "ms: sleep " << delay_ms << "ms" << std::endl; + ares_sleep_time(delay_ms); + } + tv_now = std::chrono::high_resolution_clock::now(); + if (verbose) std::cerr << std::chrono::duration_cast(tv_now - tv_begin).count() << "ms: Retry delay has expired on Server2 but not Server0, will try on Server2 and fail, then Server1 will answer" << std::endl; EXPECT_CALL(*servers_[2], OnRequest("www.example.com", T_A)) .WillOnce(SetReply(servers_[2].get(), &servfailrsp)); EXPECT_CALL(*servers_[1], OnRequest("www.example.com", T_A)) @@ -1494,6 +1618,9 @@ INSTANTIATE_TEST_SUITE_P(TransportModes, NoRotateMultiMockEventThreadTest, ::tes INSTANTIATE_TEST_SUITE_P(TransportModes, ServerFailoverOptsMockEventThreadTest, ::testing::ValuesIn(ares::test::evsys_families_modes), ares::test::PrintEvsysFamilyMode); +INSTANTIATE_TEST_SUITE_P(AddressFamilies, MockUDPEventThreadSingleQueryPerConnTest, ::testing::ValuesIn(ares::test::evsys_families), ares::test::PrintEvsysFamily); + + } // namespace test } // namespace ares diff --git a/lib/c-ares-1.32.0/test/ares-test-mock.cc b/lib/c-ares-1.32.3/test/ares-test-mock.cc similarity index 93% rename from lib/c-ares-1.32.0/test/ares-test-mock.cc rename to lib/c-ares-1.32.3/test/ares-test-mock.cc index 0f3b74213aa..4c0067131b7 100644 --- a/lib/c-ares-1.32.0/test/ares-test-mock.cc +++ b/lib/c-ares-1.32.3/test/ares-test-mock.cc @@ -197,6 +197,21 @@ TEST_P(MockUDPChannelTest, TruncationRetry) { EXPECT_EQ("{'www.google.com' aliases=[] addrs=[1.2.3.4]}", ss.str()); } +TEST_P(MockUDPChannelTest, UTF8BadName) { + DNSPacket reply; + reply.set_response().set_aa() + .add_question(new DNSQuestion("españa.icom.museum", T_A)) + .add_answer(new DNSARR("españa.icom.museum", 100, {2, 3, 4, 5})); + ON_CALL(server_, OnRequest("españa.icom.museum", T_A)) + .WillByDefault(SetReply(&server_, &reply)); + + HostResult result; + ares_gethostbyname(channel_, "españa.icom.museum", AF_INET, HostCallback, &result); + Process(); + EXPECT_TRUE(result.done_); + EXPECT_EQ(ARES_EBADNAME, result.status_); +} + static int sock_cb_count = 0; static int SocketConnectCallback(ares_socket_t fd, int type, void *data) { int rc = *(int*)data; @@ -572,7 +587,7 @@ TEST_P(MockTCPChannelTest, MalformedResponse) { ares_gethostbyname(channel_, "www.google.com.", AF_INET, HostCallback, &result); Process(); EXPECT_TRUE(result.done_); - EXPECT_EQ(ARES_ETIMEOUT, result.status_); + EXPECT_EQ(ARES_EBADRESP, result.status_); } TEST_P(MockTCPChannelTest, FormErrResponse) { @@ -1109,7 +1124,6 @@ TEST_P(MockChannelTest, V4WorksV6Timeout) { EXPECT_EQ("{'www.google.com' aliases=[] addrs=[1.2.3.4]}", ss.str()); } -#ifndef CARES_SYMBOL_HIDING // Test case for Issue #662 TEST_P(MockChannelTest, PartialQueryCancel) { std::vector nothing; @@ -1132,7 +1146,6 @@ TEST_P(MockChannelTest, PartialQueryCancel) { EXPECT_TRUE(result.done_); EXPECT_EQ(ARES_ECANCELLED, result.status_); } -#endif TEST_P(MockChannelTest, UnspecifiedFamilyV6) { DNSPacket rsp6; @@ -1606,20 +1619,6 @@ class NoRotateMultiMockTest : public MockMultiServerChannelTest { NoRotateMultiMockTest() : MockMultiServerChannelTest(nullptr, ARES_OPT_NOROTATE) {} }; -class ServerFailoverOptsMultiMockTest : public MockMultiServerChannelTest { - public: - ServerFailoverOptsMultiMockTest() - : MockMultiServerChannelTest(FillOptions(&opts_), - ARES_OPT_SERVER_FAILOVER | ARES_OPT_NOROTATE) {} - static struct ares_options* FillOptions(struct ares_options *opts) { - memset(opts, 0, sizeof(struct ares_options)); - opts->server_failover_opts.retry_chance = 1; - opts->server_failover_opts.retry_delay = 250; - return opts; - } - private: - struct ares_options opts_; -}; TEST_P(NoRotateMultiMockTest, ThirdServer) { struct ares_options opts; @@ -1740,10 +1739,26 @@ TEST_P(NoRotateMultiMockTest, ServerNoResponseFailover) { EXPECT_EQ("{'www.example.com' aliases=[] addrs=[2.3.4.5]}", ss4.str()); } +#define SERVER_FAILOVER_RETRY_DELAY 750 +class ServerFailoverOptsMultiMockTest : public MockMultiServerChannelTest { + public: + ServerFailoverOptsMultiMockTest() + : MockMultiServerChannelTest(FillOptions(&opts_), + ARES_OPT_SERVER_FAILOVER | ARES_OPT_NOROTATE) {} + static struct ares_options* FillOptions(struct ares_options *opts) { + memset(opts, 0, sizeof(struct ares_options)); + opts->server_failover_opts.retry_chance = 1; + opts->server_failover_opts.retry_delay = SERVER_FAILOVER_RETRY_DELAY; + return opts; + } + private: + struct ares_options opts_; +}; + // Test case to trigger server failover behavior. We use a retry chance of -// 100% and a retry delay of 250ms so that we can test behavior reliably. +// 100% and a retry delay so that we can test behavior reliably. TEST_P(ServerFailoverOptsMultiMockTest, ServerFailoverOpts) { - DNSPacket servfailrsp; + DNSPacket servfailrsp; servfailrsp.set_response().set_aa().set_rcode(SERVFAIL) .add_question(new DNSQuestion("www.example.com", T_A)); DNSPacket okrsp; @@ -1751,7 +1766,12 @@ TEST_P(ServerFailoverOptsMultiMockTest, ServerFailoverOpts) { .add_question(new DNSQuestion("www.example.com", T_A)) .add_answer(new DNSARR("www.example.com", 100, {2,3,4,5})); + auto tv_begin = std::chrono::high_resolution_clock::now(); + auto tv_now = std::chrono::high_resolution_clock::now(); + unsigned int delay_ms; + // 1. If all servers are healthy, then the first server should be selected. + if (verbose) std::cerr << std::chrono::duration_cast(tv_now - tv_begin).count() << "ms: First server should be selected" << std::endl; EXPECT_CALL(*servers_[0], OnRequest("www.example.com", T_A)) .WillOnce(SetReply(servers_[0].get(), &okrsp)); CheckExample(); @@ -1759,16 +1779,23 @@ TEST_P(ServerFailoverOptsMultiMockTest, ServerFailoverOpts) { // 2. Failed servers should be retried after the retry delay. // // Fail server #0 but leave server #1 as healthy. + tv_now = std::chrono::high_resolution_clock::now(); + if (verbose) std::cerr << std::chrono::duration_cast(tv_now - tv_begin).count() << "ms: Server0 will fail but leave Server1 as healthy" << std::endl; EXPECT_CALL(*servers_[0], OnRequest("www.example.com", T_A)) .WillOnce(SetReply(servers_[0].get(), &servfailrsp)); EXPECT_CALL(*servers_[1], OnRequest("www.example.com", T_A)) .WillOnce(SetReply(servers_[1].get(), &okrsp)); CheckExample(); - // Sleep for the retry delay (actually a little more than 250ms to account + // Sleep for the retry delay (actually a little more than the retry delay to account // for unreliable timing, e.g. NTP slew) and send in another query. Server #0 // should be retried. - std::this_thread::sleep_for(std::chrono::milliseconds(260)); + tv_now = std::chrono::high_resolution_clock::now(); + delay_ms = SERVER_FAILOVER_RETRY_DELAY + (SERVER_FAILOVER_RETRY_DELAY / 10); + if (verbose) std::cerr << std::chrono::duration_cast(tv_now - tv_begin).count() << "ms: sleep " << delay_ms << "ms" << std::endl; + ares_sleep_time(delay_ms); + tv_now = std::chrono::high_resolution_clock::now(); + if (verbose) std::cerr << std::chrono::duration_cast(tv_now - tv_begin).count() << "ms: Server0 should be past retry delay and should be tried again successfully" << std::endl; EXPECT_CALL(*servers_[0], OnRequest("www.example.com", T_A)) .WillOnce(SetReply(servers_[0].get(), &okrsp)); CheckExample(); @@ -1778,6 +1805,8 @@ TEST_P(ServerFailoverOptsMultiMockTest, ServerFailoverOpts) { // // Fail all servers for the first round of tries. On the second round server // #1 responds successfully. + tv_now = std::chrono::high_resolution_clock::now(); + if (verbose) std::cerr << std::chrono::duration_cast(tv_now - tv_begin).count() << "ms: All 3 servers will fail on the first attempt. On second attempt, Server0 will fail, but Server1 will answer correctly." << std::endl; EXPECT_CALL(*servers_[0], OnRequest("www.example.com", T_A)) .WillOnce(SetReply(servers_[0].get(), &servfailrsp)) .WillOnce(SetReply(servers_[0].get(), &servfailrsp)); @@ -1791,20 +1820,36 @@ TEST_P(ServerFailoverOptsMultiMockTest, ServerFailoverOpts) { // At this point the sorted servers look like [1] (f0) [2] (f1) [0] (f2). // Sleep for the retry delay and send in another query. Server #2 should be // retried first, and then server #0. - std::this_thread::sleep_for(std::chrono::milliseconds(260)); + tv_now = std::chrono::high_resolution_clock::now(); + delay_ms = SERVER_FAILOVER_RETRY_DELAY + (SERVER_FAILOVER_RETRY_DELAY / 10); + if (verbose) std::cerr << std::chrono::duration_cast(tv_now - tv_begin).count() << "ms: sleep " << delay_ms << "ms" << std::endl; + ares_sleep_time(delay_ms); + tv_now = std::chrono::high_resolution_clock::now(); + if (verbose) std::cerr << std::chrono::duration_cast(tv_now - tv_begin).count() << "ms: Past retry delay, so will choose Server2 and Server0 that are down. Server2 will fail but Server0 will succeed." << std::endl; EXPECT_CALL(*servers_[2], OnRequest("www.example.com", T_A)) .WillOnce(SetReply(servers_[2].get(), &servfailrsp)); EXPECT_CALL(*servers_[0], OnRequest("www.example.com", T_A)) .WillOnce(SetReply(servers_[0].get(), &okrsp)); CheckExample(); + // Test might take a while to run and the sleep may not be accurate, so we + // want to track this interval otherwise we may not pass the last test case + // on slow systems. + auto elapse_start = tv_now; + // 4. If there are multiple failed servers, then servers which have not yet // met the retry delay should be skipped. // // The sorted servers currently look like [0] (f0) [1] (f0) [2] (f2) and // server #2 has just been retried. - // Sleep for half the retry delay and trigger a failure on server #0. - std::this_thread::sleep_for(std::chrono::milliseconds(130)); + // Sleep for 1/2 the retry delay and trigger a failure on server #0. + tv_now = std::chrono::high_resolution_clock::now(); + delay_ms = (SERVER_FAILOVER_RETRY_DELAY/2); + if (verbose) std::cerr << std::chrono::duration_cast(tv_now - tv_begin).count() << "ms: sleep " << delay_ms << "ms" << std::endl; + ares_sleep_time(delay_ms); + tv_now = std::chrono::high_resolution_clock::now(); + + if (verbose) std::cerr << std::chrono::duration_cast(tv_now - tv_begin).count() << "ms: Retry delay has not been hit yet. Server0 was last successful, so should be tried first (and will fail), Server1 is also healthy so will respond." << std::endl; EXPECT_CALL(*servers_[0], OnRequest("www.example.com", T_A)) .WillOnce(SetReply(servers_[0].get(), &servfailrsp)); EXPECT_CALL(*servers_[1], OnRequest("www.example.com", T_A)) @@ -1812,10 +1857,22 @@ TEST_P(ServerFailoverOptsMultiMockTest, ServerFailoverOpts) { CheckExample(); // The sorted servers now look like [1] (f0) [0] (f1) [2] (f2). Server #0 - // has just failed whilst server #2 is halfway through the retry delay. - // Sleep for another half the retry delay and check that server #2 is retried - // whilst server #0 is not. - std::this_thread::sleep_for(std::chrono::milliseconds(130)); + // has just failed whilst server #2 is somewhere in its retry delay. + // Sleep until we know server #2s retry delay has elapsed but Server #0 has + // not. + tv_now = std::chrono::high_resolution_clock::now(); + + unsigned int elapsed_time = (unsigned int)std::chrono::duration_cast(tv_now - elapse_start).count(); + delay_ms = (SERVER_FAILOVER_RETRY_DELAY) + (SERVER_FAILOVER_RETRY_DELAY / 10); + if (elapsed_time > delay_ms) { + if (verbose) std::cerr << "elapsed duration " << elapsed_time << "ms greater than desired delay of " << delay_ms << "ms, not sleeping" << std::endl; + } else { + delay_ms -= elapsed_time; // subtract already elapsed time + if (verbose) std::cerr << std::chrono::duration_cast(tv_now - tv_begin).count() << "ms: sleep " << delay_ms << "ms" << std::endl; + ares_sleep_time(delay_ms); + } + tv_now = std::chrono::high_resolution_clock::now(); + if (verbose) std::cerr << std::chrono::duration_cast(tv_now - tv_begin).count() << "ms: Retry delay has expired on Server2 but not Server0, will try on Server2 and fail, then Server1 will answer" << std::endl; EXPECT_CALL(*servers_[2], OnRequest("www.example.com", T_A)) .WillOnce(SetReply(servers_[2].get(), &servfailrsp)); EXPECT_CALL(*servers_[1], OnRequest("www.example.com", T_A)) diff --git a/lib/c-ares-1.32.0/test/ares-test-ns.cc b/lib/c-ares-1.32.3/test/ares-test-ns.cc similarity index 100% rename from lib/c-ares-1.32.0/test/ares-test-ns.cc rename to lib/c-ares-1.32.3/test/ares-test-ns.cc diff --git a/lib/c-ares-1.32.0/test/ares-test-parse-a.cc b/lib/c-ares-1.32.3/test/ares-test-parse-a.cc similarity index 100% rename from lib/c-ares-1.32.0/test/ares-test-parse-a.cc rename to lib/c-ares-1.32.3/test/ares-test-parse-a.cc diff --git a/lib/c-ares-1.32.0/test/ares-test-parse-aaaa.cc b/lib/c-ares-1.32.3/test/ares-test-parse-aaaa.cc similarity index 100% rename from lib/c-ares-1.32.0/test/ares-test-parse-aaaa.cc rename to lib/c-ares-1.32.3/test/ares-test-parse-aaaa.cc diff --git a/lib/c-ares-1.32.0/test/ares-test-parse-caa.cc b/lib/c-ares-1.32.3/test/ares-test-parse-caa.cc similarity index 100% rename from lib/c-ares-1.32.0/test/ares-test-parse-caa.cc rename to lib/c-ares-1.32.3/test/ares-test-parse-caa.cc diff --git a/lib/c-ares-1.32.0/test/ares-test-parse-mx.cc b/lib/c-ares-1.32.3/test/ares-test-parse-mx.cc similarity index 100% rename from lib/c-ares-1.32.0/test/ares-test-parse-mx.cc rename to lib/c-ares-1.32.3/test/ares-test-parse-mx.cc diff --git a/lib/c-ares-1.32.0/test/ares-test-parse-naptr.cc b/lib/c-ares-1.32.3/test/ares-test-parse-naptr.cc similarity index 100% rename from lib/c-ares-1.32.0/test/ares-test-parse-naptr.cc rename to lib/c-ares-1.32.3/test/ares-test-parse-naptr.cc diff --git a/lib/c-ares-1.32.0/test/ares-test-parse-ns.cc b/lib/c-ares-1.32.3/test/ares-test-parse-ns.cc similarity index 100% rename from lib/c-ares-1.32.0/test/ares-test-parse-ns.cc rename to lib/c-ares-1.32.3/test/ares-test-parse-ns.cc diff --git a/lib/c-ares-1.32.0/test/ares-test-parse-ptr.cc b/lib/c-ares-1.32.3/test/ares-test-parse-ptr.cc similarity index 100% rename from lib/c-ares-1.32.0/test/ares-test-parse-ptr.cc rename to lib/c-ares-1.32.3/test/ares-test-parse-ptr.cc diff --git a/lib/c-ares-1.32.0/test/ares-test-parse-soa-any.cc b/lib/c-ares-1.32.3/test/ares-test-parse-soa-any.cc similarity index 100% rename from lib/c-ares-1.32.0/test/ares-test-parse-soa-any.cc rename to lib/c-ares-1.32.3/test/ares-test-parse-soa-any.cc diff --git a/lib/c-ares-1.32.0/test/ares-test-parse-soa.cc b/lib/c-ares-1.32.3/test/ares-test-parse-soa.cc similarity index 100% rename from lib/c-ares-1.32.0/test/ares-test-parse-soa.cc rename to lib/c-ares-1.32.3/test/ares-test-parse-soa.cc diff --git a/lib/c-ares-1.32.0/test/ares-test-parse-srv.cc b/lib/c-ares-1.32.3/test/ares-test-parse-srv.cc similarity index 100% rename from lib/c-ares-1.32.0/test/ares-test-parse-srv.cc rename to lib/c-ares-1.32.3/test/ares-test-parse-srv.cc diff --git a/lib/c-ares-1.32.0/test/ares-test-parse-txt.cc b/lib/c-ares-1.32.3/test/ares-test-parse-txt.cc similarity index 100% rename from lib/c-ares-1.32.0/test/ares-test-parse-txt.cc rename to lib/c-ares-1.32.3/test/ares-test-parse-txt.cc diff --git a/lib/c-ares-1.32.0/test/ares-test-parse-uri.cc b/lib/c-ares-1.32.3/test/ares-test-parse-uri.cc similarity index 100% rename from lib/c-ares-1.32.0/test/ares-test-parse-uri.cc rename to lib/c-ares-1.32.3/test/ares-test-parse-uri.cc diff --git a/lib/c-ares-1.32.0/test/ares-test-parse.cc b/lib/c-ares-1.32.3/test/ares-test-parse.cc similarity index 100% rename from lib/c-ares-1.32.0/test/ares-test-parse.cc rename to lib/c-ares-1.32.3/test/ares-test-parse.cc diff --git a/lib/c-ares-1.32.0/test/ares-test.cc b/lib/c-ares-1.32.3/test/ares-test.cc similarity index 94% rename from lib/c-ares-1.32.0/test/ares-test.cc rename to lib/c-ares-1.32.3/test/ares-test.cc index a0d16e34309..d78a5ebb263 100644 --- a/lib/c-ares-1.32.0/test/ares-test.cc +++ b/lib/c-ares-1.32.3/test/ares-test.cc @@ -59,6 +59,7 @@ extern "C" { #include #include #include +#include #ifdef WIN32 #define BYTE_CAST (char *) @@ -250,6 +251,16 @@ unsigned long long LibraryTest::fails_ = 0; std::map LibraryTest::size_fails_; std::mutex LibraryTest::lock_; +void ares_sleep_time(unsigned int ms) +{ + auto duration = std::chrono::milliseconds(ms); + auto start_time = std::chrono::high_resolution_clock::now(); + auto wake_time = start_time + duration; + std::this_thread::sleep_until(wake_time); + auto end_time = std::chrono::high_resolution_clock::now(); + if (verbose) std::cerr << "sleep requested " << ms << "ms, slept for " << std::chrono::duration_cast(end_time - start_time).count() << "ms" << std::endl; +} + void ProcessWork(ares_channel_t *channel, std::function()> get_extrafds, std::function process_extra, @@ -257,32 +268,15 @@ void ProcessWork(ares_channel_t *channel, int nfds, count; fd_set readers, writers; -#ifndef CARES_SYMBOL_HIDING - ares_timeval_t tv_begin; - ares_timeval_t tv_cancel; - - ares__tvnow(&tv_begin); - memcpy(&tv_cancel, &tv_begin, sizeof(tv_cancel)); + auto tv_begin = std::chrono::high_resolution_clock::now(); + auto tv_cancel = tv_begin; if (cancel_ms) { if (verbose) std::cerr << "ares_cancel will be called after " << cancel_ms << "ms" << std::endl; - tv_cancel.sec += (cancel_ms / 1000); - tv_cancel.usec += ((cancel_ms % 1000) * 1000); - } -#else - if (cancel_ms) { - std::cerr << "library built with symbol hiding, can't test with cancel support" << std::endl; - return; + tv_cancel += std::chrono::milliseconds(cancel_ms); } -#endif while (true) { -#ifndef CARES_SYMBOL_HIDING - ares_timeval_t tv_now; - ares_timeval_t atv_remaining; - - ares__tvnow(&tv_now); -#endif struct timeval tv; struct timeval *tv_select; @@ -308,29 +302,24 @@ void ProcessWork(ares_channel_t *channel, if (tv_select == NULL) return; -#ifndef CARES_SYMBOL_HIDING if (cancel_ms) { - unsigned int remaining_ms; - ares__timeval_remaining(&atv_remaining, - &tv_now, - &tv_cancel); + auto tv_now = std::chrono::high_resolution_clock::now(); + auto remaining_ms = std::chrono::duration_cast(tv_cancel - tv_now).count(); - remaining_ms = (unsigned int)((atv_remaining.sec * 1000) + (atv_remaining.usec / 1000)); - if (remaining_ms == 0) { + if (remaining_ms <= 0) { if (verbose) std::cerr << "Issuing ares_cancel()" << std::endl; ares_cancel(channel); cancel_ms = 0; /* Disable issuing cancel again */ } else { struct timeval tv_remaining; - tv_remaining.tv_sec = atv_remaining.sec; - tv_remaining.tv_usec = (int)atv_remaining.usec; + tv_remaining.tv_sec = remaining_ms / 1000; + tv_remaining.tv_usec = (int)(remaining_ms % 1000); /* Recalculate proper timeout since we also have a cancel to wait on */ tv_select = ares_timeout(channel, &tv_remaining, &tv); } } -#endif count = select(nfds, &readers, &writers, nullptr, tv_select); if (count < 0) { @@ -444,10 +433,16 @@ MockServer::MockServer(int family, unsigned short port) // Send TCP data right away. setsockopt(tcpfd_, IPPROTO_TCP, TCP_NODELAY, BYTE_CAST &optval , sizeof(int)); +#if defined(SO_NOSIGPIPE) + setsockopt(tcpfd_, SOL_SOCKET, SO_NOSIGPIPE, (void *)&optval, sizeof(optval)); +#endif // Create a UDP socket to receive data on. udpfd_ = socket(family, SOCK_DGRAM, 0); EXPECT_NE(ARES_SOCKET_BAD, udpfd_); +#if defined(SO_NOSIGPIPE) + setsockopt(udpfd_, SOL_SOCKET, SO_NOSIGPIPE, (void *)&optval, sizeof(optval)); +#endif // Bind the sockets to the given port. if (family == AF_INET) { @@ -676,6 +671,7 @@ void MockServer::ProcessRequest(ares_socket_t fd, struct sockaddr_storage* addr, /* DNS 0x20 will mix case, do case-insensitive matching of name in request */ char lower_name[256]; + int flags = 0; arestest_strtolower(lower_name, name, sizeof(lower_name)); // Before processing, let gMock know the request is happening. @@ -722,7 +718,11 @@ void MockServer::ProcessRequest(ares_socket_t fd, struct sockaddr_storage* addr, addrlen = 0; } - ares_ssize_t rc = (ares_ssize_t)sendto(fd, BYTE_CAST reply.data(), (SEND_TYPE_ARG3)reply.size(), 0, +#ifdef MSG_NOSIGNAL + flags |= MSG_NOSIGNAL; +#endif + + ares_ssize_t rc = (ares_ssize_t)sendto(fd, BYTE_CAST reply.data(), (SEND_TYPE_ARG3)reply.size(), flags, (struct sockaddr *)addr, addrlen); if (rc < static_cast(reply.size())) { std::cerr << "Failed to send full reply, rc=" << rc << std::endl; @@ -877,31 +877,17 @@ void MockChannelOptsTest::Process(unsigned int cancel_ms) { void MockEventThreadOptsTest::Process(unsigned int cancel_ms) { std::set fds; -#ifndef CARES_SYMBOL_HIDING - bool has_cancel_ms = (cancel_ms > 0)?true:false; - ares_timeval_t tv_begin; - ares_timeval_t tv_cancel; -#endif - -#ifndef CARES_SYMBOL_HIDING - ares_timeval_t tv_now; - ares_timeval_t atv_remaining; + auto tv_begin = std::chrono::high_resolution_clock::now(); + auto tv_cancel = tv_begin; - if (has_cancel_ms) { - ares__tvnow(&tv_begin); - memcpy(&tv_cancel, &tv_begin, sizeof(tv_cancel)); - if (verbose) std::cerr << "ares_cancel will be called after " << cancel_ms << "ms" << std::endl; - tv_cancel.sec += (cancel_ms / 1000); - tv_cancel.usec += ((cancel_ms % 1000) * 1000); - } -#else if (cancel_ms) { - std::cerr << "library built with symbol hiding, can't test with cancel support" << std::endl; - return; + if (verbose) std::cerr << "ares_cancel will be called after " << cancel_ms << "ms" << std::endl; + tv_cancel += std::chrono::milliseconds(cancel_ms); } -#endif while (ares_queue_active_queries(channel_)) { + //if (verbose) std::cerr << "pending queries: " << ares_queue_active_queries(channel_) << std::endl; + int nfds = 0; fd_set readers; @@ -918,32 +904,25 @@ void MockEventThreadOptsTest::Process(unsigned int cancel_ms) { } } - /* We just always wait 20ms then recheck. Not doing any complex signaling. */ + /* We just always wait 20ms then recheck if we're done. Not doing any + * complex signaling. */ tv.tv_sec = 0; tv.tv_usec = 20000; -#ifndef CARES_SYMBOL_HIDING - ares__tvnow(&tv_now); + if (cancel_ms) { + auto tv_now = std::chrono::high_resolution_clock::now(); + auto remaining_ms = std::chrono::duration_cast(tv_cancel - tv_now).count(); - unsigned int remaining_ms = 0; - if (has_cancel_ms) { - ares__timeval_remaining(&atv_remaining, - &tv_now, - &tv_cancel); - remaining_ms = (unsigned int)((atv_remaining.sec * 1000) + (atv_remaining.usec / 1000)); - if (remaining_ms == 0) { + if (remaining_ms <= 0) { if (verbose) std::cerr << "Issuing ares_cancel()" << std::endl; ares_cancel(channel_); cancel_ms = 0; /* Disable issuing cancel again */ - has_cancel_ms = false; + } else { + tv.tv_sec = remaining_ms / 1000; + tv.tv_usec = (int)(remaining_ms % 1000); } } - if (has_cancel_ms && remaining_ms < 20) { - tv.tv_usec = (int)remaining_ms * 1000; - } -#endif - if (select(nfds, &readers, nullptr, nullptr, &tv) < 0) { fprintf(stderr, "select() failed, errno %d\n", errno); return; @@ -956,6 +935,8 @@ void MockEventThreadOptsTest::Process(unsigned int cancel_ms) { } } } + + //if (verbose) std::cerr << "pending queries at process end: " << ares_queue_active_queries(channel_) << std::endl; } std::ostream& operator<<(std::ostream& os, const HostResult& result) { diff --git a/lib/c-ares-1.32.0/test/ares-test.h b/lib/c-ares-1.32.3/test/ares-test.h similarity index 99% rename from lib/c-ares-1.32.0/test/ares-test.h rename to lib/c-ares-1.32.3/test/ares-test.h index b1d9c8d6f6b..af37ab64c5c 100644 --- a/lib/c-ares-1.32.0/test/ares-test.h +++ b/lib/c-ares-1.32.3/test/ares-test.h @@ -84,6 +84,8 @@ extern std::vector> evsys_families; extern std::vector> families_modes; extern std::vector> evsys_families_modes; +// Hopefully a more accurate sleep than sleep_for() +void ares_sleep_time(unsigned int ms); // Process all pending work on ares-owned file descriptors, plus // optionally the given set-of-FDs + work function. diff --git a/lib/c-ares-1.32.0/test/ares_queryloop.c b/lib/c-ares-1.32.3/test/ares_queryloop.c similarity index 100% rename from lib/c-ares-1.32.0/test/ares_queryloop.c rename to lib/c-ares-1.32.3/test/ares_queryloop.c diff --git a/lib/c-ares-1.32.0/test/dns-dump.cc b/lib/c-ares-1.32.3/test/dns-dump.cc similarity index 100% rename from lib/c-ares-1.32.0/test/dns-dump.cc rename to lib/c-ares-1.32.3/test/dns-dump.cc diff --git a/lib/c-ares-1.32.0/test/dns-proto-test.cc b/lib/c-ares-1.32.3/test/dns-proto-test.cc similarity index 100% rename from lib/c-ares-1.32.0/test/dns-proto-test.cc rename to lib/c-ares-1.32.3/test/dns-proto-test.cc diff --git a/lib/c-ares-1.32.0/test/dns-proto.cc b/lib/c-ares-1.32.3/test/dns-proto.cc similarity index 100% rename from lib/c-ares-1.32.0/test/dns-proto.cc rename to lib/c-ares-1.32.3/test/dns-proto.cc diff --git a/lib/c-ares-1.32.0/test/dns-proto.h b/lib/c-ares-1.32.3/test/dns-proto.h similarity index 100% rename from lib/c-ares-1.32.0/test/dns-proto.h rename to lib/c-ares-1.32.3/test/dns-proto.h diff --git a/lib/c-ares-1.32.0/test/fuzzcheck.sh b/lib/c-ares-1.32.3/test/fuzzcheck.sh similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzcheck.sh rename to lib/c-ares-1.32.3/test/fuzzcheck.sh diff --git a/lib/c-ares-1.32.0/test/fuzzinput/004a216d3cff18b0c5c6b68b807f1529 b/lib/c-ares-1.32.3/test/fuzzinput/004a216d3cff18b0c5c6b68b807f1529 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/004a216d3cff18b0c5c6b68b807f1529 rename to lib/c-ares-1.32.3/test/fuzzinput/004a216d3cff18b0c5c6b68b807f1529 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/00539467ca159b36aea95e61f9729115 b/lib/c-ares-1.32.3/test/fuzzinput/00539467ca159b36aea95e61f9729115 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/00539467ca159b36aea95e61f9729115 rename to lib/c-ares-1.32.3/test/fuzzinput/00539467ca159b36aea95e61f9729115 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/00e846db8f43f2f507cd1666ed5a753e b/lib/c-ares-1.32.3/test/fuzzinput/00e846db8f43f2f507cd1666ed5a753e similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/00e846db8f43f2f507cd1666ed5a753e rename to lib/c-ares-1.32.3/test/fuzzinput/00e846db8f43f2f507cd1666ed5a753e diff --git a/lib/c-ares-1.32.0/test/fuzzinput/0177b7566f08c013699eaea9a77abeb3 b/lib/c-ares-1.32.3/test/fuzzinput/0177b7566f08c013699eaea9a77abeb3 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/0177b7566f08c013699eaea9a77abeb3 rename to lib/c-ares-1.32.3/test/fuzzinput/0177b7566f08c013699eaea9a77abeb3 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/020a4fa317715bfdb236ed13751e6b65 b/lib/c-ares-1.32.3/test/fuzzinput/020a4fa317715bfdb236ed13751e6b65 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/020a4fa317715bfdb236ed13751e6b65 rename to lib/c-ares-1.32.3/test/fuzzinput/020a4fa317715bfdb236ed13751e6b65 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/0310f2e81bea31f4fe3f330872a877dd b/lib/c-ares-1.32.3/test/fuzzinput/0310f2e81bea31f4fe3f330872a877dd similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/0310f2e81bea31f4fe3f330872a877dd rename to lib/c-ares-1.32.3/test/fuzzinput/0310f2e81bea31f4fe3f330872a877dd diff --git a/lib/c-ares-1.32.0/test/fuzzinput/0449be67df1730b2d0887d412a9b7cc4 b/lib/c-ares-1.32.3/test/fuzzinput/0449be67df1730b2d0887d412a9b7cc4 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/0449be67df1730b2d0887d412a9b7cc4 rename to lib/c-ares-1.32.3/test/fuzzinput/0449be67df1730b2d0887d412a9b7cc4 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/0449dd14f7aa94bf0d716bfe09b287a8 b/lib/c-ares-1.32.3/test/fuzzinput/0449dd14f7aa94bf0d716bfe09b287a8 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/0449dd14f7aa94bf0d716bfe09b287a8 rename to lib/c-ares-1.32.3/test/fuzzinput/0449dd14f7aa94bf0d716bfe09b287a8 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/04c93cdf7208979aa4df80a3a0d5a2d8 b/lib/c-ares-1.32.3/test/fuzzinput/04c93cdf7208979aa4df80a3a0d5a2d8 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/04c93cdf7208979aa4df80a3a0d5a2d8 rename to lib/c-ares-1.32.3/test/fuzzinput/04c93cdf7208979aa4df80a3a0d5a2d8 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/0567e7171e08e75f3f91c4ca74c17adc b/lib/c-ares-1.32.3/test/fuzzinput/0567e7171e08e75f3f91c4ca74c17adc similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/0567e7171e08e75f3f91c4ca74c17adc rename to lib/c-ares-1.32.3/test/fuzzinput/0567e7171e08e75f3f91c4ca74c17adc diff --git a/lib/c-ares-1.32.0/test/fuzzinput/05ba948578a397e9cbc6a7b3e78622fa b/lib/c-ares-1.32.3/test/fuzzinput/05ba948578a397e9cbc6a7b3e78622fa similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/05ba948578a397e9cbc6a7b3e78622fa rename to lib/c-ares-1.32.3/test/fuzzinput/05ba948578a397e9cbc6a7b3e78622fa diff --git a/lib/c-ares-1.32.0/test/fuzzinput/060afe5ed25f3e2e86167e545f27edca b/lib/c-ares-1.32.3/test/fuzzinput/060afe5ed25f3e2e86167e545f27edca similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/060afe5ed25f3e2e86167e545f27edca rename to lib/c-ares-1.32.3/test/fuzzinput/060afe5ed25f3e2e86167e545f27edca diff --git a/lib/c-ares-1.32.0/test/fuzzinput/06d47d3681493f1b1d41236f460d896f b/lib/c-ares-1.32.3/test/fuzzinput/06d47d3681493f1b1d41236f460d896f similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/06d47d3681493f1b1d41236f460d896f rename to lib/c-ares-1.32.3/test/fuzzinput/06d47d3681493f1b1d41236f460d896f diff --git a/lib/c-ares-1.32.0/test/fuzzinput/0724a810b0e131c2fddb6de9003b9064 b/lib/c-ares-1.32.3/test/fuzzinput/0724a810b0e131c2fddb6de9003b9064 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/0724a810b0e131c2fddb6de9003b9064 rename to lib/c-ares-1.32.3/test/fuzzinput/0724a810b0e131c2fddb6de9003b9064 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/0b5279148826f5b962bcf1896bdb4ede b/lib/c-ares-1.32.3/test/fuzzinput/0b5279148826f5b962bcf1896bdb4ede similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/0b5279148826f5b962bcf1896bdb4ede rename to lib/c-ares-1.32.3/test/fuzzinput/0b5279148826f5b962bcf1896bdb4ede diff --git a/lib/c-ares-1.32.0/test/fuzzinput/114048c0f6b10bdc67ce9166405d195e b/lib/c-ares-1.32.3/test/fuzzinput/114048c0f6b10bdc67ce9166405d195e similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/114048c0f6b10bdc67ce9166405d195e rename to lib/c-ares-1.32.3/test/fuzzinput/114048c0f6b10bdc67ce9166405d195e diff --git a/lib/c-ares-1.32.0/test/fuzzinput/11b8464a0ef8735d202955c34c36b0c7 b/lib/c-ares-1.32.3/test/fuzzinput/11b8464a0ef8735d202955c34c36b0c7 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/11b8464a0ef8735d202955c34c36b0c7 rename to lib/c-ares-1.32.3/test/fuzzinput/11b8464a0ef8735d202955c34c36b0c7 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/11cb626f1668c7b41954ce7d768fe528 b/lib/c-ares-1.32.3/test/fuzzinput/11cb626f1668c7b41954ce7d768fe528 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/11cb626f1668c7b41954ce7d768fe528 rename to lib/c-ares-1.32.3/test/fuzzinput/11cb626f1668c7b41954ce7d768fe528 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/14b133bf18125b75a1976fa63a1df6b7 b/lib/c-ares-1.32.3/test/fuzzinput/14b133bf18125b75a1976fa63a1df6b7 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/14b133bf18125b75a1976fa63a1df6b7 rename to lib/c-ares-1.32.3/test/fuzzinput/14b133bf18125b75a1976fa63a1df6b7 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/153c6b3afa8faa03c8bc28f936a6d4cf b/lib/c-ares-1.32.3/test/fuzzinput/153c6b3afa8faa03c8bc28f936a6d4cf similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/153c6b3afa8faa03c8bc28f936a6d4cf rename to lib/c-ares-1.32.3/test/fuzzinput/153c6b3afa8faa03c8bc28f936a6d4cf diff --git a/lib/c-ares-1.32.0/test/fuzzinput/182cad2a342ed7317b7c21a5d17020d1 b/lib/c-ares-1.32.3/test/fuzzinput/182cad2a342ed7317b7c21a5d17020d1 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/182cad2a342ed7317b7c21a5d17020d1 rename to lib/c-ares-1.32.3/test/fuzzinput/182cad2a342ed7317b7c21a5d17020d1 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/1c61a61bb7057b52c5b15188345a5238 b/lib/c-ares-1.32.3/test/fuzzinput/1c61a61bb7057b52c5b15188345a5238 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/1c61a61bb7057b52c5b15188345a5238 rename to lib/c-ares-1.32.3/test/fuzzinput/1c61a61bb7057b52c5b15188345a5238 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/1dbe2cf62ed2e4fa1c3cb473f08710b5 b/lib/c-ares-1.32.3/test/fuzzinput/1dbe2cf62ed2e4fa1c3cb473f08710b5 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/1dbe2cf62ed2e4fa1c3cb473f08710b5 rename to lib/c-ares-1.32.3/test/fuzzinput/1dbe2cf62ed2e4fa1c3cb473f08710b5 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/21199be504fcfece5c7096ee0dbba507 b/lib/c-ares-1.32.3/test/fuzzinput/21199be504fcfece5c7096ee0dbba507 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/21199be504fcfece5c7096ee0dbba507 rename to lib/c-ares-1.32.3/test/fuzzinput/21199be504fcfece5c7096ee0dbba507 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/21891480074b5635dbbe7137bdcabccd b/lib/c-ares-1.32.3/test/fuzzinput/21891480074b5635dbbe7137bdcabccd similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/21891480074b5635dbbe7137bdcabccd rename to lib/c-ares-1.32.3/test/fuzzinput/21891480074b5635dbbe7137bdcabccd diff --git a/lib/c-ares-1.32.0/test/fuzzinput/233aea42e15aa73e131eefabf16088c9 b/lib/c-ares-1.32.3/test/fuzzinput/233aea42e15aa73e131eefabf16088c9 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/233aea42e15aa73e131eefabf16088c9 rename to lib/c-ares-1.32.3/test/fuzzinput/233aea42e15aa73e131eefabf16088c9 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/24660d4e7ac7aa21d600ea7a3d198bbb b/lib/c-ares-1.32.3/test/fuzzinput/24660d4e7ac7aa21d600ea7a3d198bbb similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/24660d4e7ac7aa21d600ea7a3d198bbb rename to lib/c-ares-1.32.3/test/fuzzinput/24660d4e7ac7aa21d600ea7a3d198bbb diff --git a/lib/c-ares-1.32.0/test/fuzzinput/25589deb55c08429345f289d1c9b0254 b/lib/c-ares-1.32.3/test/fuzzinput/25589deb55c08429345f289d1c9b0254 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/25589deb55c08429345f289d1c9b0254 rename to lib/c-ares-1.32.3/test/fuzzinput/25589deb55c08429345f289d1c9b0254 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/2573bd823e4da11f727a17f8e1f35c26 b/lib/c-ares-1.32.3/test/fuzzinput/2573bd823e4da11f727a17f8e1f35c26 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/2573bd823e4da11f727a17f8e1f35c26 rename to lib/c-ares-1.32.3/test/fuzzinput/2573bd823e4da11f727a17f8e1f35c26 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/276f12da56866273e76059ad0e7be97e b/lib/c-ares-1.32.3/test/fuzzinput/276f12da56866273e76059ad0e7be97e similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/276f12da56866273e76059ad0e7be97e rename to lib/c-ares-1.32.3/test/fuzzinput/276f12da56866273e76059ad0e7be97e diff --git a/lib/c-ares-1.32.0/test/fuzzinput/29198a2e380cb19babec9e02116d213e b/lib/c-ares-1.32.3/test/fuzzinput/29198a2e380cb19babec9e02116d213e similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/29198a2e380cb19babec9e02116d213e rename to lib/c-ares-1.32.3/test/fuzzinput/29198a2e380cb19babec9e02116d213e diff --git a/lib/c-ares-1.32.0/test/fuzzinput/2c94ba9434b1a1b9396fc5364f101363 b/lib/c-ares-1.32.3/test/fuzzinput/2c94ba9434b1a1b9396fc5364f101363 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/2c94ba9434b1a1b9396fc5364f101363 rename to lib/c-ares-1.32.3/test/fuzzinput/2c94ba9434b1a1b9396fc5364f101363 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/2d578c357dc2f5e02dc55cddb30641d1 b/lib/c-ares-1.32.3/test/fuzzinput/2d578c357dc2f5e02dc55cddb30641d1 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/2d578c357dc2f5e02dc55cddb30641d1 rename to lib/c-ares-1.32.3/test/fuzzinput/2d578c357dc2f5e02dc55cddb30641d1 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/2dff6cc5a223e67fde9e5e79af456992 b/lib/c-ares-1.32.3/test/fuzzinput/2dff6cc5a223e67fde9e5e79af456992 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/2dff6cc5a223e67fde9e5e79af456992 rename to lib/c-ares-1.32.3/test/fuzzinput/2dff6cc5a223e67fde9e5e79af456992 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/2f103b1f9477f2d8934bd84328d51c75 b/lib/c-ares-1.32.3/test/fuzzinput/2f103b1f9477f2d8934bd84328d51c75 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/2f103b1f9477f2d8934bd84328d51c75 rename to lib/c-ares-1.32.3/test/fuzzinput/2f103b1f9477f2d8934bd84328d51c75 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/31cd3a8413de13d9624adbb1613784bf b/lib/c-ares-1.32.3/test/fuzzinput/31cd3a8413de13d9624adbb1613784bf similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/31cd3a8413de13d9624adbb1613784bf rename to lib/c-ares-1.32.3/test/fuzzinput/31cd3a8413de13d9624adbb1613784bf diff --git a/lib/c-ares-1.32.0/test/fuzzinput/36415bdf1d180098fe6234b4186e69f3 b/lib/c-ares-1.32.3/test/fuzzinput/36415bdf1d180098fe6234b4186e69f3 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/36415bdf1d180098fe6234b4186e69f3 rename to lib/c-ares-1.32.3/test/fuzzinput/36415bdf1d180098fe6234b4186e69f3 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/3a04a80f0242e8dff0cd732e7c4767da b/lib/c-ares-1.32.3/test/fuzzinput/3a04a80f0242e8dff0cd732e7c4767da similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/3a04a80f0242e8dff0cd732e7c4767da rename to lib/c-ares-1.32.3/test/fuzzinput/3a04a80f0242e8dff0cd732e7c4767da diff --git a/lib/c-ares-1.32.0/test/fuzzinput/44d0f973b7b0fb3e4a07770c943dcd5a b/lib/c-ares-1.32.3/test/fuzzinput/44d0f973b7b0fb3e4a07770c943dcd5a similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/44d0f973b7b0fb3e4a07770c943dcd5a rename to lib/c-ares-1.32.3/test/fuzzinput/44d0f973b7b0fb3e4a07770c943dcd5a diff --git a/lib/c-ares-1.32.0/test/fuzzinput/50bc00daa0ddcd6cfb2b5d9f62c81f47 b/lib/c-ares-1.32.3/test/fuzzinput/50bc00daa0ddcd6cfb2b5d9f62c81f47 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/50bc00daa0ddcd6cfb2b5d9f62c81f47 rename to lib/c-ares-1.32.3/test/fuzzinput/50bc00daa0ddcd6cfb2b5d9f62c81f47 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/51ed2d1fb77b3078b54e94e85606b7df b/lib/c-ares-1.32.3/test/fuzzinput/51ed2d1fb77b3078b54e94e85606b7df similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/51ed2d1fb77b3078b54e94e85606b7df rename to lib/c-ares-1.32.3/test/fuzzinput/51ed2d1fb77b3078b54e94e85606b7df diff --git a/lib/c-ares-1.32.0/test/fuzzinput/5c5e0e899cf2e7d053a9e45fb76f6e5a b/lib/c-ares-1.32.3/test/fuzzinput/5c5e0e899cf2e7d053a9e45fb76f6e5a similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/5c5e0e899cf2e7d053a9e45fb76f6e5a rename to lib/c-ares-1.32.3/test/fuzzinput/5c5e0e899cf2e7d053a9e45fb76f6e5a diff --git a/lib/c-ares-1.32.0/test/fuzzinput/70152ed033f139443fbfb1b858bb3b1b b/lib/c-ares-1.32.3/test/fuzzinput/70152ed033f139443fbfb1b858bb3b1b similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/70152ed033f139443fbfb1b858bb3b1b rename to lib/c-ares-1.32.3/test/fuzzinput/70152ed033f139443fbfb1b858bb3b1b diff --git a/lib/c-ares-1.32.0/test/fuzzinput/7030ca2b24e5a7f9dd8f62096a48eb33 b/lib/c-ares-1.32.3/test/fuzzinput/7030ca2b24e5a7f9dd8f62096a48eb33 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/7030ca2b24e5a7f9dd8f62096a48eb33 rename to lib/c-ares-1.32.3/test/fuzzinput/7030ca2b24e5a7f9dd8f62096a48eb33 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/71eec1a0ef2d25bb9e2ef17f23be7e9e b/lib/c-ares-1.32.3/test/fuzzinput/71eec1a0ef2d25bb9e2ef17f23be7e9e similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/71eec1a0ef2d25bb9e2ef17f23be7e9e rename to lib/c-ares-1.32.3/test/fuzzinput/71eec1a0ef2d25bb9e2ef17f23be7e9e diff --git a/lib/c-ares-1.32.0/test/fuzzinput/7a6b0177210ea4ef40b254daf99393c5 b/lib/c-ares-1.32.3/test/fuzzinput/7a6b0177210ea4ef40b254daf99393c5 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/7a6b0177210ea4ef40b254daf99393c5 rename to lib/c-ares-1.32.3/test/fuzzinput/7a6b0177210ea4ef40b254daf99393c5 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/7f1567733711ffb61839621af0cbfa33 b/lib/c-ares-1.32.3/test/fuzzinput/7f1567733711ffb61839621af0cbfa33 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/7f1567733711ffb61839621af0cbfa33 rename to lib/c-ares-1.32.3/test/fuzzinput/7f1567733711ffb61839621af0cbfa33 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/850c6d57c5bb7be8205fc2438d14d7e5 b/lib/c-ares-1.32.3/test/fuzzinput/850c6d57c5bb7be8205fc2438d14d7e5 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/850c6d57c5bb7be8205fc2438d14d7e5 rename to lib/c-ares-1.32.3/test/fuzzinput/850c6d57c5bb7be8205fc2438d14d7e5 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/a5c8cd2784a5792b9e91c2d7895b3b34 b/lib/c-ares-1.32.3/test/fuzzinput/a5c8cd2784a5792b9e91c2d7895b3b34 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/a5c8cd2784a5792b9e91c2d7895b3b34 rename to lib/c-ares-1.32.3/test/fuzzinput/a5c8cd2784a5792b9e91c2d7895b3b34 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/a9135cdc7151d023300ff194bad90af9 b/lib/c-ares-1.32.3/test/fuzzinput/a9135cdc7151d023300ff194bad90af9 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/a9135cdc7151d023300ff194bad90af9 rename to lib/c-ares-1.32.3/test/fuzzinput/a9135cdc7151d023300ff194bad90af9 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/af2597e8ac7dec1e8b4a47518312912a b/lib/c-ares-1.32.3/test/fuzzinput/af2597e8ac7dec1e8b4a47518312912a similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/af2597e8ac7dec1e8b4a47518312912a rename to lib/c-ares-1.32.3/test/fuzzinput/af2597e8ac7dec1e8b4a47518312912a diff --git a/lib/c-ares-1.32.0/test/fuzzinput/answer_a b/lib/c-ares-1.32.3/test/fuzzinput/answer_a similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/answer_a rename to lib/c-ares-1.32.3/test/fuzzinput/answer_a diff --git a/lib/c-ares-1.32.0/test/fuzzinput/answer_aaaa b/lib/c-ares-1.32.3/test/fuzzinput/answer_aaaa similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/answer_aaaa rename to lib/c-ares-1.32.3/test/fuzzinput/answer_aaaa diff --git a/lib/c-ares-1.32.0/test/fuzzinput/b3f53ef826b831bb09dd25c7f5960249 b/lib/c-ares-1.32.3/test/fuzzinput/b3f53ef826b831bb09dd25c7f5960249 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/b3f53ef826b831bb09dd25c7f5960249 rename to lib/c-ares-1.32.3/test/fuzzinput/b3f53ef826b831bb09dd25c7f5960249 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/cda0f8751f5c4993974c2b549d29bcc8 b/lib/c-ares-1.32.3/test/fuzzinput/cda0f8751f5c4993974c2b549d29bcc8 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/cda0f8751f5c4993974c2b549d29bcc8 rename to lib/c-ares-1.32.3/test/fuzzinput/cda0f8751f5c4993974c2b549d29bcc8 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/ce6c26c0e469339873d0e7f616ab0945 b/lib/c-ares-1.32.3/test/fuzzinput/ce6c26c0e469339873d0e7f616ab0945 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/ce6c26c0e469339873d0e7f616ab0945 rename to lib/c-ares-1.32.3/test/fuzzinput/ce6c26c0e469339873d0e7f616ab0945 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/clusterfuzz-5637790584012800 b/lib/c-ares-1.32.3/test/fuzzinput/clusterfuzz-5637790584012800 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/clusterfuzz-5637790584012800 rename to lib/c-ares-1.32.3/test/fuzzinput/clusterfuzz-5637790584012800 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/clusterfuzz-5650695891451904 b/lib/c-ares-1.32.3/test/fuzzinput/clusterfuzz-5650695891451904 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/clusterfuzz-5650695891451904 rename to lib/c-ares-1.32.3/test/fuzzinput/clusterfuzz-5650695891451904 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/clusterfuzz-5651369832218624 b/lib/c-ares-1.32.3/test/fuzzinput/clusterfuzz-5651369832218624 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/clusterfuzz-5651369832218624 rename to lib/c-ares-1.32.3/test/fuzzinput/clusterfuzz-5651369832218624 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/clusterfuzz-5674462260756480 b/lib/c-ares-1.32.3/test/fuzzinput/clusterfuzz-5674462260756480 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/clusterfuzz-5674462260756480 rename to lib/c-ares-1.32.3/test/fuzzinput/clusterfuzz-5674462260756480 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/clusterfuzz-5680630672654336 b/lib/c-ares-1.32.3/test/fuzzinput/clusterfuzz-5680630672654336 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/clusterfuzz-5680630672654336 rename to lib/c-ares-1.32.3/test/fuzzinput/clusterfuzz-5680630672654336 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/clusterfuzz-5683497160671232 b/lib/c-ares-1.32.3/test/fuzzinput/clusterfuzz-5683497160671232 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/clusterfuzz-5683497160671232 rename to lib/c-ares-1.32.3/test/fuzzinput/clusterfuzz-5683497160671232 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/clusterfuzz-5687310655422464 b/lib/c-ares-1.32.3/test/fuzzinput/clusterfuzz-5687310655422464 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/clusterfuzz-5687310655422464 rename to lib/c-ares-1.32.3/test/fuzzinput/clusterfuzz-5687310655422464 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/clusterfuzz-5695341573177344 b/lib/c-ares-1.32.3/test/fuzzinput/clusterfuzz-5695341573177344 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/clusterfuzz-5695341573177344 rename to lib/c-ares-1.32.3/test/fuzzinput/clusterfuzz-5695341573177344 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/clusterfuzz-5697835103682560 b/lib/c-ares-1.32.3/test/fuzzinput/clusterfuzz-5697835103682560 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/clusterfuzz-5697835103682560 rename to lib/c-ares-1.32.3/test/fuzzinput/clusterfuzz-5697835103682560 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/clusterfuzz-5728518081609728 b/lib/c-ares-1.32.3/test/fuzzinput/clusterfuzz-5728518081609728 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/clusterfuzz-5728518081609728 rename to lib/c-ares-1.32.3/test/fuzzinput/clusterfuzz-5728518081609728 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/clusterfuzz-5732960017317888 b/lib/c-ares-1.32.3/test/fuzzinput/clusterfuzz-5732960017317888 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/clusterfuzz-5732960017317888 rename to lib/c-ares-1.32.3/test/fuzzinput/clusterfuzz-5732960017317888 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/e4dd7e7c2dd4ed7c2e17a6af5d04f9c9 b/lib/c-ares-1.32.3/test/fuzzinput/e4dd7e7c2dd4ed7c2e17a6af5d04f9c9 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/e4dd7e7c2dd4ed7c2e17a6af5d04f9c9 rename to lib/c-ares-1.32.3/test/fuzzinput/e4dd7e7c2dd4ed7c2e17a6af5d04f9c9 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/ed50ed8ee36230a5a69746ad830437e5 b/lib/c-ares-1.32.3/test/fuzzinput/ed50ed8ee36230a5a69746ad830437e5 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/ed50ed8ee36230a5a69746ad830437e5 rename to lib/c-ares-1.32.3/test/fuzzinput/ed50ed8ee36230a5a69746ad830437e5 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/f1b900d50806021953321c3b604ee497 b/lib/c-ares-1.32.3/test/fuzzinput/f1b900d50806021953321c3b604ee497 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/f1b900d50806021953321c3b604ee497 rename to lib/c-ares-1.32.3/test/fuzzinput/f1b900d50806021953321c3b604ee497 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/f6606f624be8c628328cea01d2cd07a9 b/lib/c-ares-1.32.3/test/fuzzinput/f6606f624be8c628328cea01d2cd07a9 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/f6606f624be8c628328cea01d2cd07a9 rename to lib/c-ares-1.32.3/test/fuzzinput/f6606f624be8c628328cea01d2cd07a9 diff --git a/lib/c-ares-1.32.0/test/fuzzinput/f89f6c8176b564a7dd646f14305573ce b/lib/c-ares-1.32.3/test/fuzzinput/f89f6c8176b564a7dd646f14305573ce similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/f89f6c8176b564a7dd646f14305573ce rename to lib/c-ares-1.32.3/test/fuzzinput/f89f6c8176b564a7dd646f14305573ce diff --git a/lib/c-ares-1.32.0/test/fuzzinput/f9ad508d2dbd08d3aaaabc7d1174677d b/lib/c-ares-1.32.3/test/fuzzinput/f9ad508d2dbd08d3aaaabc7d1174677d similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/f9ad508d2dbd08d3aaaabc7d1174677d rename to lib/c-ares-1.32.3/test/fuzzinput/f9ad508d2dbd08d3aaaabc7d1174677d diff --git a/lib/c-ares-1.32.0/test/fuzzinput/multi-indir b/lib/c-ares-1.32.3/test/fuzzinput/multi-indir similarity index 100% rename from lib/c-ares-1.32.0/test/fuzzinput/multi-indir rename to lib/c-ares-1.32.3/test/fuzzinput/multi-indir diff --git a/lib/c-ares-1.32.0/test/fuzznames/name01 b/lib/c-ares-1.32.3/test/fuzznames/name01 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzznames/name01 rename to lib/c-ares-1.32.3/test/fuzznames/name01 diff --git a/lib/c-ares-1.32.0/test/fuzznames/name02 b/lib/c-ares-1.32.3/test/fuzznames/name02 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzznames/name02 rename to lib/c-ares-1.32.3/test/fuzznames/name02 diff --git a/lib/c-ares-1.32.0/test/fuzznames/name03 b/lib/c-ares-1.32.3/test/fuzznames/name03 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzznames/name03 rename to lib/c-ares-1.32.3/test/fuzznames/name03 diff --git a/lib/c-ares-1.32.0/test/fuzznames/name04 b/lib/c-ares-1.32.3/test/fuzznames/name04 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzznames/name04 rename to lib/c-ares-1.32.3/test/fuzznames/name04 diff --git a/lib/c-ares-1.32.0/test/fuzznames/name05 b/lib/c-ares-1.32.3/test/fuzznames/name05 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzznames/name05 rename to lib/c-ares-1.32.3/test/fuzznames/name05 diff --git a/lib/c-ares-1.32.0/test/fuzznames/name06 b/lib/c-ares-1.32.3/test/fuzznames/name06 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzznames/name06 rename to lib/c-ares-1.32.3/test/fuzznames/name06 diff --git a/lib/c-ares-1.32.0/test/fuzznames/name07 b/lib/c-ares-1.32.3/test/fuzznames/name07 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzznames/name07 rename to lib/c-ares-1.32.3/test/fuzznames/name07 diff --git a/lib/c-ares-1.32.0/test/fuzznames/name08 b/lib/c-ares-1.32.3/test/fuzznames/name08 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzznames/name08 rename to lib/c-ares-1.32.3/test/fuzznames/name08 diff --git a/lib/c-ares-1.32.0/test/fuzznames/name09 b/lib/c-ares-1.32.3/test/fuzznames/name09 similarity index 100% rename from lib/c-ares-1.32.0/test/fuzznames/name09 rename to lib/c-ares-1.32.3/test/fuzznames/name09 From c8049b2b9bc913daa6a099b809d5660ad03ef832 Mon Sep 17 00:00:00 2001 From: Eduardo Silva Date: Tue, 30 Jul 2024 11:15:01 -0600 Subject: [PATCH 2/2] build: libraries: update path to c-ares Signed-off-by: Eduardo Silva --- cmake/libraries.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/libraries.cmake b/cmake/libraries.cmake index 1c2378bc595..673784bc437 100644 --- a/cmake/libraries.cmake +++ b/cmake/libraries.cmake @@ -19,7 +19,7 @@ set(FLB_PATH_LIB_ONIGMO "lib/onigmo") set(FLB_PATH_LIB_MPACK "lib/mpack-amalgamation-1.1.1") set(FLB_PATH_LIB_MINIZ "lib/miniz") set(FLB_PATH_LIB_TUTF8E "lib/tutf8e") -set(FLB_PATH_LIB_CARES "lib/c-ares-1.32.0") +set(FLB_PATH_LIB_CARES "lib/c-ares-1.32.3") set(FLB_PATH_LIB_SNAPPY "lib/snappy-fef67ac") set(FLB_PATH_LIB_RDKAFKA "lib/librdkafka-2.4.0") set(FLB_PATH_LIB_RING_BUFFER "lib/lwrb")