diff --git a/0000-Use-RPM-compiler-options.patch b/0000-Use-RPM-compiler-options.patch deleted file mode 100644 index 721b71373b7f8b1ff0a427858d9d4ea84bb7d261..0000000000000000000000000000000000000000 --- a/0000-Use-RPM-compiler-options.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 7dada62a77e061c752123e672e844386ff3b01ea Mon Sep 17 00:00:00 2001 -From: Stephen Gallagher -Date: Wed, 10 Apr 2013 12:32:44 -0400 -Subject: [PATCH] Use RPM compiler options - ---- - m4/cares-compilers.m4 | 19 ++++++------------- - 1 file changed, 6 insertions(+), 13 deletions(-) - -diff --git a/m4/cares-compilers.m4 b/m4/cares-compilers.m4 -index 7ee8e0dbe741c1a64149a0d20b826f507b3ec620..d7708230fb5628ae80fbf1052da0d2c78ebbc160 100644 ---- a/m4/cares-compilers.m4 -+++ b/m4/cares-compilers.m4 -@@ -143,19 +143,12 @@ AC_DEFUN([CARES_CHECK_COMPILER_GNU_C], [ - gccvhi=`echo $gccver | cut -d . -f1` - gccvlo=`echo $gccver | cut -d . -f2` - compiler_num=`(expr $gccvhi "*" 100 + $gccvlo) 2>/dev/null` -- flags_dbg_all="-g -g0 -g1 -g2 -g3" -- flags_dbg_all="$flags_dbg_all -ggdb" -- flags_dbg_all="$flags_dbg_all -gstabs" -- flags_dbg_all="$flags_dbg_all -gstabs+" -- flags_dbg_all="$flags_dbg_all -gcoff" -- flags_dbg_all="$flags_dbg_all -gxcoff" -- flags_dbg_all="$flags_dbg_all -gdwarf-2" -- flags_dbg_all="$flags_dbg_all -gvms" -- flags_dbg_yes="-g" -- flags_dbg_off="-g0" -- flags_opt_all="-O -O0 -O1 -O2 -O3 -Os" -- flags_opt_yes="-O2" -- flags_opt_off="-O0" -+ flags_dbg_all="" -+ flags_dbg_yes="" -+ flags_dbg_off="" -+ flags_opt_all="" -+ flags_opt_yes="" -+ flags_opt_off="" - CURL_CHECK_DEF([_WIN32], [], [silent]) - else - AC_MSG_RESULT([no]) --- -1.8.1.4 diff --git a/backport-CVE-2024-25629.patch b/backport-CVE-2024-25629.patch deleted file mode 100644 index 0be930bf0c1e6785298d609f5db6ca3b4feb0aa8..0000000000000000000000000000000000000000 --- a/backport-CVE-2024-25629.patch +++ /dev/null @@ -1,30 +0,0 @@ -From a804c04ddc8245fc8adf0e92368709639125e183 Mon Sep 17 00:00:00 2001 -From: Brad House -Date: Thu, 22 Feb 2024 16:23:33 -0500 -Subject: [PATCH] Merge pull request from GHSA-mg26-v6qh-x48q - ---- - src/lib/ares__read_line.c | 8 ++++++++ - 1 file changed, 8 insertions(+) - -diff --git a/src/lib/ares__read_line.c b/src/lib/ares__read_line.c -index d65ac1fcf..018f55e8b 100644 ---- a/src/lib/ares__read_line.c -+++ b/src/lib/ares__read_line.c -@@ -49,6 +49,14 @@ int ares__read_line(FILE *fp, char **buf, size_t *bufsize) - if (!fgets(*buf + offset, bytestoread, fp)) - return (offset != 0) ? 0 : (ferror(fp)) ? ARES_EFILE : ARES_EOF; - len = offset + strlen(*buf + offset); -+ -+ /* Probably means there was an embedded NULL as the first character in -+ * the line, throw away line */ -+ if (len == 0) { -+ offset = 0; -+ continue; -+ } -+ - if ((*buf)[len - 1] == '\n') - { - (*buf)[len - 1] = 0; --- -2.20.1 diff --git a/backport-disable-live-tests.patch b/backport-disable-live-tests.patch deleted file mode 100644 index 6314e0ec51fb7dd7c83ddb7c9c85cb6cd52508ce..0000000000000000000000000000000000000000 --- a/backport-disable-live-tests.patch +++ /dev/null @@ -1,26 +0,0 @@ -Conflict:NA -Reference:https://build.opensuse.org/package/view_file/openSUSE:Factory/c-ares/disable-live-tests.patch?expand=1 -From 5b3d9a337dbf0cf990ebc5639c950e092de86539 Mon Sep 17 00:00:00 2001 -From: chengyechun -Date: Tue, 8 Feb 2022 19:57:57 +0800 -Subject: [PATCH] disable live test - ---- - test/Makefile.inc | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/test/Makefile.inc b/test/Makefile.inc -index 820afdb..c625a68 100644 ---- a/test/Makefile.inc -+++ b/test/Makefile.inc -@@ -16,7 +16,6 @@ TESTSOURCES = ares-test-main.cc \ - ares-test-parse-txt.cc \ - ares-test-parse-uri.cc \ - ares-test-misc.cc \ -- ares-test-live.cc \ - ares-test-mock.cc \ - ares-test-mock-ai.cc \ - ares-test-internal.cc \ --- -1.8.3.1 - diff --git a/backport-tests-Convert-some-live-tests-to-Mock-tests-954.patch b/backport-tests-Convert-some-live-tests-to-Mock-tests-954.patch new file mode 100644 index 0000000000000000000000000000000000000000..41de8f894f4c93ad9b011f2317584c59e14ea96d --- /dev/null +++ b/backport-tests-Convert-some-live-tests-to-Mock-tests-954.patch @@ -0,0 +1,326 @@ +From a531524a3d085fcd9a5e25d5f6cbdb953082c2b9 Mon Sep 17 00:00:00 2001 +From: Brad House +Date: Fri, 3 Jan 2025 12:55:54 -0500 +Subject: [PATCH] tests: Convert some live tests to Mock tests (#954) + +In Issue #953 `GetTCPSock` and `VerifySocketFunctionCallback` tests +might rely on the fact that `connect()` doesn't return an immediate +failure. If `connect()` returned `EWOULDBLOCK`/`EAGAIN` the test would +succeed, but on systems that check on the call for available routes or +listening servers on localhost the `connect()` function would return an +immediate failure. + +These functions were not actually tagged with a `Live` prefix so they +would run even callers exclude Live tests. These are testing functions +that shouldn't be limited to live scenarios so we need to move them to +the Mock frameworks and test appropriately. + +Fixes #953 +Signed-off-by: Brad House (@bradh352) + +Conflict: NA +Reference: https://github.com/c-ares/c-ares/commit/a531524a3d085fcd9a5e25d5f6cbdb953082c2b9 +--- + test/ares-test-live.cc | 108 ---------------------------------- + test/ares-test-mock.cc | 129 +++++++++++++++++++++++++++++++++++++++++ + test/ares-test.cc | 8 ++- + test/ares-test.h | 1 + + 4 files changed, 136 insertions(+), 110 deletions(-) + +diff --git a/test/ares-test-live.cc b/test/ares-test-live.cc +index e23dadfe23..557c485e36 100644 +--- a/test/ares-test-live.cc ++++ b/test/ares-test-live.cc +@@ -669,115 +669,7 @@ VIRT_NONVIRT_TEST_F(DefaultChannelTest, LiveGetNameInfoAllocFail) { + EXPECT_EQ(ARES_ENOMEM, result.status_); + } + +-VIRT_NONVIRT_TEST_F(DefaultChannelTest, GetSock) { +- ares_socket_t socks[3] = {ARES_SOCKET_BAD, ARES_SOCKET_BAD, ARES_SOCKET_BAD}; +- int bitmask = ares_getsock(channel_, socks, 3); +- EXPECT_EQ(0, bitmask); +- bitmask = ares_getsock(channel_, nullptr, 0); +- EXPECT_EQ(0, bitmask); +- +- // Ask again with a pending query. +- HostResult result; +- ares_gethostbyname(channel_, "www.google.com.", AF_INET, HostCallback, &result); +- bitmask = ares_getsock(channel_, socks, 3); +- EXPECT_NE(0, bitmask); +- +- size_t sock_cnt = 0; +- for (size_t i=0; i<3; i++) { +- if (ARES_GETSOCK_READABLE(bitmask, i) || ARES_GETSOCK_WRITABLE(bitmask, i)) { +- EXPECT_NE(ARES_SOCKET_BAD, socks[i]); +- if (socks[i] != ARES_SOCKET_BAD) +- sock_cnt++; +- } +- } +- EXPECT_NE((size_t)0, sock_cnt); +- +- bitmask = ares_getsock(channel_, nullptr, 0); +- EXPECT_EQ(0, bitmask); +- +- Process(); +-} +- +-TEST_F(LibraryTest, GetTCPSock) { +- ares_channel_t *channel; +- struct ares_options opts; +- memset(&opts, 0, sizeof(opts)); +- opts.tcp_port = 53; +- opts.flags = ARES_FLAG_USEVC; +- int optmask = ARES_OPT_TCP_PORT | ARES_OPT_FLAGS; +- EXPECT_EQ(ARES_SUCCESS, ares_init_options(&channel, &opts, optmask)); +- EXPECT_NE(nullptr, channel); +- +- ares_socket_t socks[3] = {ARES_SOCKET_BAD, ARES_SOCKET_BAD, ARES_SOCKET_BAD}; +- int bitmask = ares_getsock(channel, socks, 3); +- EXPECT_EQ(0, bitmask); +- bitmask = ares_getsock(channel, nullptr, 0); +- EXPECT_EQ(0, bitmask); +- +- // Ask again with a pending query. +- HostResult result; +- ares_gethostbyname(channel, "www.google.com.", AF_INET, HostCallback, &result); +- bitmask = ares_getsock(channel, socks, 3); +- EXPECT_NE(0, bitmask); +- +- size_t sock_cnt = 0; +- for (size_t i=0; i<3; i++) { +- if (ARES_GETSOCK_READABLE(bitmask, i) || ARES_GETSOCK_WRITABLE(bitmask, i)) { +- EXPECT_NE(ARES_SOCKET_BAD, socks[i]); +- if (socks[i] != ARES_SOCKET_BAD) +- sock_cnt++; +- } +- } +- EXPECT_NE((size_t)0, sock_cnt); +- +- bitmask = ares_getsock(channel, nullptr, 0); +- EXPECT_EQ(0, bitmask); +- +- ProcessWork(channel, NoExtraFDs, nullptr); + +- ares_destroy(channel); +-} +- +-TEST_F(DefaultChannelTest, VerifySocketFunctionCallback) { +- VirtualizeIO vio(channel_); +- +- auto my_functions = VirtualizeIO::default_functions; +- size_t count = 0; +- +- my_functions.asocket = [](int af, int type, int protocol, void * p) -> ares_socket_t { +- EXPECT_NE(nullptr, p); +- (*reinterpret_cast(p))++; +- return ::socket(af, type, protocol); +- }; +- +- ares_set_socket_functions(channel_, &my_functions, &count); +- +- { +- count = 0; +- HostResult result; +- ares_gethostbyname(channel_, "www.google.com.", AF_INET, HostCallback, &result); +- Process(); +- +- EXPECT_TRUE(result.done_); +- EXPECT_NE((size_t)0, count); +- } +- +- { +- count = 0; +- ares_channel_t *copy; +- EXPECT_EQ(ARES_SUCCESS, ares_dup(©, channel_)); +- +- HostResult result; +- ares_gethostbyname(copy, "www.google.com.", AF_INET, HostCallback, &result); +- +- ProcessWork(copy, NoExtraFDs, nullptr); +- +- EXPECT_TRUE(result.done_); +- ares_destroy(copy); +- EXPECT_NE((size_t)0, count); +- } +- +-} + + TEST_F(DefaultChannelTest, LiveSetServers) { + struct ares_addr_node server1; +diff --git a/test/ares-test-mock.cc b/test/ares-test-mock.cc +index 8c74c05f33..ebae7140aa 100644 +--- a/test/ares-test-mock.cc ++++ b/test/ares-test-mock.cc +@@ -1662,6 +1662,135 @@ TEST_P(MockChannelTest, GetHostByAddrDestroy) { + EXPECT_EQ(0, result.timeouts_); + } + ++TEST_P(MockUDPChannelTest, GetSock) { ++ DNSPacket reply; ++ reply.set_response().set_aa() ++ .add_question(new DNSQuestion("www.google.com", T_A)) ++ .add_answer(new DNSARR("www.google.com", 0x0100, {0x01, 0x02, 0x03, 0x04})); ++ ON_CALL(server_, OnRequest("www.google.com", T_A)) ++ .WillByDefault(SetReply(&server_, &reply)); ++ ++ ares_socket_t socks[3] = {ARES_SOCKET_BAD, ARES_SOCKET_BAD, ARES_SOCKET_BAD}; ++ int bitmask; ++ ++ bitmask = ares_getsock(channel_, socks, 3); ++ EXPECT_EQ(0, bitmask); ++ bitmask = ares_getsock(channel_, nullptr, 0); ++ EXPECT_EQ(0, bitmask); ++ ++ // Ask again with a pending query. ++ HostResult result; ++ ares_gethostbyname(channel_, "www.google.com.", AF_INET, HostCallback, &result); ++ bitmask = ares_getsock(channel_, socks, 3); ++ EXPECT_NE(0, bitmask); ++ ++ size_t sock_cnt = 0; ++ for (size_t i=0; i<3; i++) { ++ if (ARES_GETSOCK_READABLE(bitmask, i) || ARES_GETSOCK_WRITABLE(bitmask, i)) { ++ EXPECT_NE(ARES_SOCKET_BAD, socks[i]); ++ if (socks[i] != ARES_SOCKET_BAD) ++ sock_cnt++; ++ } ++ } ++ EXPECT_NE((size_t)0, sock_cnt); ++ ++ Process(); ++ ++ bitmask = ares_getsock(channel_, nullptr, 0); ++ EXPECT_EQ(0, bitmask); ++} ++ ++TEST_P(MockTCPChannelTest, GetSock) { ++ DNSPacket reply; ++ reply.set_response().set_aa() ++ .add_question(new DNSQuestion("www.google.com", T_A)) ++ .add_answer(new DNSARR("www.google.com", 0x0100, {0x01, 0x02, 0x03, 0x04})); ++ ON_CALL(server_, OnRequest("www.google.com", T_A)) ++ .WillByDefault(SetReply(&server_, &reply)); ++ ++ ares_socket_t socks[3] = {ARES_SOCKET_BAD, ARES_SOCKET_BAD, ARES_SOCKET_BAD}; ++ int bitmask; ++ ++ bitmask = ares_getsock(channel_, socks, 3); ++ EXPECT_EQ(0, bitmask); ++ bitmask = ares_getsock(channel_, nullptr, 0); ++ EXPECT_EQ(0, bitmask); ++ ++ // Ask again with a pending query. ++ HostResult result; ++ ares_gethostbyname(channel_, "www.google.com.", AF_INET, HostCallback, &result); ++ bitmask = ares_getsock(channel_, socks, 3); ++ EXPECT_NE(0, bitmask); ++ ++ size_t sock_cnt = 0; ++ for (size_t i=0; i<3; i++) { ++ if (ARES_GETSOCK_READABLE(bitmask, i) || ARES_GETSOCK_WRITABLE(bitmask, i)) { ++ EXPECT_NE(ARES_SOCKET_BAD, socks[i]); ++ if (socks[i] != ARES_SOCKET_BAD) ++ sock_cnt++; ++ } ++ } ++ EXPECT_NE((size_t)0, sock_cnt); ++ ++ Process(); ++ ++ bitmask = ares_getsock(channel_, nullptr, 0); ++ EXPECT_EQ(0, bitmask); ++} ++ ++ ++TEST_P(MockChannelTest, VerifySocketFunctionCallback) { ++ ares_socket_functions sock_funcs; ++ memset(&sock_funcs, 0, sizeof(sock_funcs)); ++ ++ DNSPacket reply; ++ reply.set_response().set_aa() ++ .add_question(new DNSQuestion("www.google.com", T_A)) ++ .add_answer(new DNSARR("www.google.com", 0x0100, {0x01, 0x02, 0x03, 0x04})); ++ ON_CALL(server_, OnRequest("www.google.com", T_A)) ++ .WillByDefault(SetReply(&server_, &reply)); ++ ++ size_t count = 0; ++ ++ sock_funcs.asocket = [](int af, int type, int protocol, void * p) -> ares_socket_t { ++ EXPECT_NE(nullptr, p); ++ (*reinterpret_cast(p))++; ++ return ::socket(af, type, protocol); ++ }; ++ ++ ares_set_socket_functions(channel_, &sock_funcs, &count); ++ ++ { ++ count = 0; ++ HostResult result; ++ ares_gethostbyname(channel_, "www.google.com.", AF_INET, HostCallback, &result); ++ Process(); ++ ++ EXPECT_TRUE(result.done_); ++ EXPECT_EQ(ARES_SUCCESS, result.status_); ++ EXPECT_EQ(0, result.timeouts_); ++ EXPECT_NE((size_t)0, count); ++ } ++ ++ { ++ count = 0; ++ ares_channel_t *copy; ++ EXPECT_EQ(ARES_SUCCESS, ares_dup(©, channel_)); ++ ++ HostResult result; ++ ares_gethostbyname(copy, "www.google.com.", AF_INET, HostCallback, &result); ++ ++ ProcessAltChannel(copy); ++ ++ EXPECT_TRUE(result.done_); ++ ares_destroy(copy); ++ EXPECT_NE((size_t)0, count); ++ EXPECT_EQ(ARES_SUCCESS, result.status_); ++ EXPECT_EQ(0, result.timeouts_); ++ } ++ ++} ++ + static const unsigned char * + fetch_server_cookie(const ares_dns_record_t *dnsrec, size_t *len) + { +diff --git a/test/ares-test.cc b/test/ares-test.cc +index 99ab0a0085..f383ecbe13 100644 +--- a/test/ares-test.cc ++++ b/test/ares-test.cc +@@ -888,14 +888,18 @@ void MockChannelOptsTest::ProcessFD(ares_socket_t fd) { + } + } + +-void MockChannelOptsTest::Process(unsigned int cancel_ms) { ++void MockChannelOptsTest::ProcessAltChannel(ares_channel_t *chan, unsigned int cancel_ms) { + using namespace std::placeholders; +- ProcessWork(channel_, ++ ProcessWork(chan, + std::bind(&MockChannelOptsTest::fds, this), + std::bind(&MockChannelOptsTest::ProcessFD, this, _1), + cancel_ms); + } + ++void MockChannelOptsTest::Process(unsigned int cancel_ms) { ++ ProcessAltChannel(channel_, cancel_ms); ++} ++ + void MockEventThreadOptsTest::Process(unsigned int cancel_ms) { + std::set fds; + +diff --git a/test/ares-test.h b/test/ares-test.h +index 612759212a..77baa902ad 100644 +--- a/test/ares-test.h ++++ b/test/ares-test.h +@@ -328,6 +328,7 @@ class MockChannelOptsTest : public LibraryTest { + + // Process all pending work on ares-owned and mock-server-owned file + // descriptors. ++ void ProcessAltChannel(ares_channel_t *chan, unsigned int cancel_ms = 0); + void Process(unsigned int cancel_ms = 0); + + protected: diff --git a/c-ares-1.19.1.tar.gz b/c-ares-1.19.1.tar.gz deleted file mode 100644 index 4237a53f7a5dc1cfb4d04a6b6374f8674c32e271..0000000000000000000000000000000000000000 Binary files a/c-ares-1.19.1.tar.gz and /dev/null differ diff --git a/c-ares-1.34.4.tar.gz b/c-ares-1.34.4.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..d63c4fc444f6bdab781aef66af593c9dd4f1e852 Binary files /dev/null and b/c-ares-1.34.4.tar.gz differ diff --git a/c-ares.spec b/c-ares.spec index 6a5d389b2db9984bf8313736d425020e06c8ec36..94914d6b0fd63d960e491f4913146fe3ed98c23d 100644 --- a/c-ares.spec +++ b/c-ares.spec @@ -1,17 +1,15 @@ Name: c-ares -Version: 1.19.1 -Release: 3 +Version: 1.34.4 +Release: 1 Summary: A C library for asynchronous DNS requests License: MIT URL: https://c-ares.org/ -Source0: https://c-ares.org/download/%{name}-%{version}.tar.gz +Source0: https://github.com/%{name}/%{name}/releases/download/v%{version}/%{name}-%{version}.tar.gz -BuildRequires: gcc autoconf automake libtool g++ -# Patch0 from Redhat is applied for stopping overriding AC_CONFIG_MACRO_DIR -Patch0: 0000-Use-RPM-compiler-options.patch -Patch1: backport-disable-live-tests.patch -Patch2: backport-CVE-2024-25629.patch +BuildRequires: gcc autoconf automake libtool g++ gmock-devel + +Patch0: backport-tests-Convert-some-live-tests-to-Mock-tests-954.patch %description This is c-ares, an asynchronous resolver library. It is intended for applications @@ -44,14 +42,11 @@ make %{?_smp_mflags} %ldconfig_scriptlets %check -cd test -./configure -cd ../ -%make_build -C test -./test/arestest +./test/arestest --gtest_filter=-*.Live* %files -%doc CHANGES LICENSE.md +%license LICENSE.md +%doc RELEASE-NOTES.md %{_libdir}/*.so.* %files devel @@ -60,10 +55,16 @@ cd ../ %{_includedir}/*.h %files help -%doc NEWS README.cares README.md +%doc README.md %{_mandir}/man3/* %changelog +* Fri Feb 21 2025 xinghe - 1.34.4-1 +- Type:requirements +- ID:NA +- SUG:NA +- DESC:update c-ares to 1.34.4 + * Mon Apr 1 2024 liyunfei - 1.19.1-3 - Type:bugfix - ID:NA