From: Stefan Metzmacher Date: Wed, 18 Mar 2020 16:01:48 +0000 (+0100) Subject: rwrap: let configure use define HAVE_RES_STATE_U_EXT_NSADDRS X-Git-Tag: resolv_wrapper-1.1.6~11 X-Git-Url: http://git.samba.org/?p=resolv_wrapper.git;a=commitdiff_plain;h=e47b20d78b1d5ba9b66cb054659ed338d43f469e rwrap: let configure use define HAVE_RES_STATE_U_EXT_NSADDRS The configure check should describe what it checked for. Let the code logic decide if that means we expect HAVE_RESOLV_IPV6_NSADDRS to be defined. We'll get another condition that sets HAVE_RESOLV_IPV6_NSADDRS in the following commits. Signed-off-by: Stefan Metzmacher Reviewed-by: Andreas Schneider --- diff --git a/ConfigureChecks.cmake b/ConfigureChecks.cmake index ae9437b..4752cd4 100644 --- a/ConfigureChecks.cmake +++ b/ConfigureChecks.cmake @@ -173,7 +173,9 @@ int main(void) { return 0; }" HAVE_IPV6) -check_struct_has_member("struct __res_state" _u._ext.nsaddrs resolv.h HAVE_RESOLV_IPV6_NSADDRS) +check_struct_has_member("struct __res_state" _u._ext.nsaddrs + "sys/socket.h;netinet/in.h;resolv.h" + HAVE_RES_STATE_U_EXT_NSADDRS) check_c_source_compiles(" void log_fn(const char *format, ...) __attribute__ ((format (printf, 1, 2))); diff --git a/config.h.cmake b/config.h.cmake index 0c2fa35..75e6902 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -55,7 +55,7 @@ /**************************** OPTIONS ****************************/ #cmakedefine HAVE_IPV6 1 -#cmakedefine HAVE_RESOLV_IPV6_NSADDRS 1 +#cmakedefine HAVE_RES_STATE_U_EXT_NSADDRS 1 #cmakedefine HAVE_ATTRIBUTE_PRINTF_FORMAT 1 #cmakedefine HAVE_DESTRUCTOR_ATTRIBUTE 1 diff --git a/src/resolv_wrapper.c b/src/resolv_wrapper.c index 20ba2d1..0ee9fee 100644 --- a/src/resolv_wrapper.c +++ b/src/resolv_wrapper.c @@ -52,6 +52,10 @@ #include +#ifdef HAVE_RES_STATE_U_EXT_NSADDRS +#define HAVE_RESOLV_IPV6_NSADDRS 1 +#endif + /* GCC has printf type attribute check. */ #ifdef HAVE_ATTRIBUTE_PRINTF_FORMAT #define PRINTF_ATTRIBUTE(a,b) __attribute__ ((__format__ (__printf__, a, b))) diff --git a/tests/test_res_init.c b/tests/test_res_init.c index f0cd2ee..eb0eee7 100644 --- a/tests/test_res_init.c +++ b/tests/test_res_init.c @@ -92,7 +92,7 @@ static void test_res_ninit(void **state) int i; int rv; char straddr[INET6_ADDRSTRLEN] = { '\0' }; -#ifdef HAVE_RESOLV_IPV6_NSADDRS +#ifdef HAVE_RES_STATE_U_EXT_NSADDRS struct sockaddr_in6 *sa6; #endif @@ -141,7 +141,7 @@ static void test_res_ninit(void **state) inet_ntop(AF_INET, &(dnsstate.nsaddr_list[0].sin_addr), straddr, INET6_ADDRSTRLEN); assert_string_equal(nameservers[0], straddr); -#ifdef HAVE_RESOLV_IPV6_NSADDRS +#ifdef HAVE_RES_STATE_U_EXT_NSADDRS assert_null(dnsstate._u._ext.nsaddrs[0]); #endif @@ -150,11 +150,19 @@ static void test_res_ninit(void **state) inet_ntop(AF_INET, &(dnsstate.nsaddr_list[1].sin_addr), straddr, INET6_ADDRSTRLEN); assert_string_equal(nameservers[1], straddr); -#ifdef HAVE_RESOLV_IPV6_NSADDRS +#ifdef HAVE_RES_STATE_U_EXT_NSADDRS assert_null(dnsstate._u._ext.nsaddrs[1]); #endif -#ifndef HAVE_RESOLV_IPV6_NSADDRS +#ifdef HAVE_RES_STATE_U_EXT_NSADDRS + /* IPv6 */ + assert_non_null(dnsstate._u._ext.nsaddrs[2]); + sa6 = dnsstate._u._ext.nsaddrs[2]; + assert_int_equal(sa6->sin6_family, AF_INET6); + assert_int_equal(sa6->sin6_port, htons(53)); + inet_ntop(AF_INET6, &(sa6->sin6_addr), straddr, INET6_ADDRSTRLEN); + assert_string_equal(nameservers[2], straddr); +#else /* * On platforms that don't support IPv6, the v6 address is skipped * and we end up reading three v4 addresses. @@ -164,14 +172,6 @@ static void test_res_ninit(void **state) inet_ntop(AF_INET, &(dnsstate.nsaddr_list[2].sin_addr), straddr, INET6_ADDRSTRLEN); assert_string_equal(nameservers[3], straddr); -#else - /* IPv6 */ - assert_non_null(dnsstate._u._ext.nsaddrs[2]); - sa6 = dnsstate._u._ext.nsaddrs[2]; - assert_int_equal(sa6->sin6_family, AF_INET6); - assert_int_equal(sa6->sin6_port, htons(53)); - inet_ntop(AF_INET6, &(sa6->sin6_addr), straddr, INET6_ADDRSTRLEN); - assert_string_equal(nameservers[2], straddr); #endif res_nclose(&dnsstate);