diff options
author | Stefan Metzmacher <metze@samba.org> | 2020-03-18 17:01:48 +0100 |
---|---|---|
committer | Andreas Schneider <asn@samba.org> | 2020-03-20 13:20:57 +0100 |
commit | e47b20d78b1d5ba9b66cb054659ed338d43f469e (patch) | |
tree | 571cb5a08a94c435485fe7c8b43830da5bb89d59 | |
parent | 2cc59200e35fe6251871d60a53f8a0886ec82fb5 (diff) | |
download | resolv_wrapper-e47b20d78b1d5ba9b66cb054659ed338d43f469e.tar.gz resolv_wrapper-e47b20d78b1d5ba9b66cb054659ed338d43f469e.tar.xz resolv_wrapper-e47b20d78b1d5ba9b66cb054659ed338d43f469e.zip |
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 <metze@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
-rw-r--r-- | ConfigureChecks.cmake | 4 | ||||
-rw-r--r-- | config.h.cmake | 2 | ||||
-rw-r--r-- | src/resolv_wrapper.c | 4 | ||||
-rw-r--r-- | tests/test_res_init.c | 24 |
4 files changed, 20 insertions, 14 deletions
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 <resolv.h> +#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); |