aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2020-03-18 17:01:48 +0100
committerAndreas Schneider <asn@samba.org>2020-03-20 13:20:57 +0100
commite47b20d78b1d5ba9b66cb054659ed338d43f469e (patch)
tree571cb5a08a94c435485fe7c8b43830da5bb89d59
parent2cc59200e35fe6251871d60a53f8a0886ec82fb5 (diff)
downloadresolv_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.cmake4
-rw-r--r--config.h.cmake2
-rw-r--r--src/resolv_wrapper.c4
-rw-r--r--tests/test_res_init.c24
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);