rwrap: let configure use define HAVE_RES_STATE_U_EXT_NSADDRS
authorStefan Metzmacher <metze@samba.org>
Wed, 18 Mar 2020 16:01:48 +0000 (17:01 +0100)
committerAndreas Schneider <asn@samba.org>
Fri, 20 Mar 2020 12:20:57 +0000 (13:20 +0100)
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>
ConfigureChecks.cmake
config.h.cmake
src/resolv_wrapper.c
tests/test_res_init.c

index ae9437bd92fa53029190a4a1b16b86b69061532f..4752cd441233e90219215f36e55e6baea85c62f3 100644 (file)
@@ -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)));
index 0c2fa35a1a41863997b87798049bf06164b4e6ec..75e6902def71d6e8d1f3d2c7e28224257262d249 100644 (file)
@@ -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
index 20ba2d1a899536977daaa20ac6bd9d5dacbf7272..0ee9fee05d5f2a55b060dff1b84121fa75ebc54d 100644 (file)
 
 #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)))
index f0cd2ee6b116c0b1961458f1e062f2b773dce483..eb0eee716eef0f29522db4a18a2585003c79a255 100644 (file)
@@ -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);