dns.c: Load IPv6 DNS resolvers if configured.
IPv6 nameserver addresses are stored in different part of the __res_state structure, so look there if we appear to have support for it. ASTERISK-28004 #close Change-Id: I67067077d8a406ee996664518d9c8fbf11f6977d
This commit is contained in:
parent
976521c9a2
commit
695fc3dbd7
|
@ -18657,6 +18657,17 @@ $as_echo "no" >&6; }
|
|||
fi
|
||||
rm -f core conftest.err conftest.$ac_objext \
|
||||
conftest$ac_exeext conftest.$ac_ext
|
||||
ac_fn_c_check_member "$LINENO" "struct __res_state" "_u._ext.nsaddrs" "ac_cv_member_struct___res_state__u__ext_nsaddrs" "#include <resolv.h>
|
||||
"
|
||||
if test "x$ac_cv_member_struct___res_state__u__ext_nsaddrs" = xyes; then :
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define HAVE_STRUCT___RES_STATE__U__EXT_NSADDRS 1
|
||||
_ACEOF
|
||||
|
||||
|
||||
fi
|
||||
|
||||
else
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
|
||||
$as_echo "no" >&6; }
|
||||
|
|
|
@ -1459,7 +1459,8 @@ AC_LINK_IFELSE(
|
|||
AC_MSG_RESULT(yes)
|
||||
AC_DEFINE([HAVE_RES_CLOSE], 1, [Define to 1 if your system has the close resolver function.]),
|
||||
AC_MSG_RESULT(no)
|
||||
),
|
||||
)
|
||||
AC_CHECK_MEMBERS([struct __res_state._u._ext.nsaddrs], [], [], [[#include <resolv.h>]]),
|
||||
AC_MSG_RESULT(no)
|
||||
)
|
||||
|
||||
|
|
|
@ -1052,6 +1052,9 @@
|
|||
/* Define to 1 if `uid' is a member of `struct ucred'. */
|
||||
#undef HAVE_STRUCT_UCRED_UID
|
||||
|
||||
/* Define to 1 if `_u._ext.nsaddrs' is a member of `struct __res_state'. */
|
||||
#undef HAVE_STRUCT___RES_STATE__U__EXT_NSADDRS
|
||||
|
||||
/* Define to 1 if you have the `swapctl' function. */
|
||||
#undef HAVE_SWAPCTL
|
||||
|
||||
|
|
17
main/dns.c
17
main/dns.c
|
@ -605,7 +605,22 @@ struct ao2_container *ast_dns_get_nameservers(void)
|
|||
#endif
|
||||
|
||||
for (i = 0; i < state->nscount; i++) {
|
||||
ast_str_container_add(nameservers, ast_inet_ntoa(state->nsaddr_list[i].sin_addr));
|
||||
char addr[INET6_ADDRSTRLEN];
|
||||
const char *addrp = NULL;
|
||||
|
||||
/* glibc sets sin_family to 0 when the nameserver is an IPv6 address */
|
||||
if (state->nsaddr_list[i].sin_family) {
|
||||
addrp = inet_ntop(AF_INET, &state->nsaddr_list[i].sin_addr, addr, sizeof(addr));
|
||||
#if defined(HAVE_RES_NINIT) && defined(HAVE_STRUCT___RES_STATE__U__EXT_NSADDRS)
|
||||
} else if (state->_u._ext.nsaddrs[i]) {
|
||||
addrp = inet_ntop(AF_INET6, &state->_u._ext.nsaddrs[i]->sin6_addr, addr, sizeof(addr));
|
||||
#endif
|
||||
}
|
||||
|
||||
if (addrp) {
|
||||
ast_debug(1, "Discovered nameserver: %s\n", addrp);
|
||||
ast_str_container_add(nameservers, addrp);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef HAVE_RES_NINIT
|
||||
|
|
Loading…
Reference in New Issue