diff --git a/configure b/configure index 3a2a6a4d87..174659d5e4 100755 --- a/configure +++ b/configure @@ -1296,7 +1296,6 @@ BUILD_OS BUILD_VENDOR BUILD_CPU BUILD_PLATFORM -astcachedir astvarrundir astlogdir astspooldir @@ -1309,6 +1308,7 @@ astmoddir astlibdir astheaderdir astetcdir +astcachedir astsbindir EGREP GREP @@ -1349,6 +1349,7 @@ infodir docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -1538,6 +1539,7 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -1790,6 +1792,15 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1927,7 +1938,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir + libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -2080,6 +2091,7 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -10848,6 +10860,7 @@ fi + MISDN_DESCRIP="mISDN user" MISDN_OPTION="misdn" PBX_MISDN=0 @@ -14688,7 +14701,7 @@ else We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -14734,7 +14747,7 @@ else We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -14758,7 +14771,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -14803,7 +14816,7 @@ else We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -14827,7 +14840,7 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; @@ -16127,6 +16140,8 @@ main () if (*(data + i) != *(data3 + i)) return 14; close (fd); + free (data); + free (data3); return 0; } _ACEOF @@ -18957,6 +18972,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 +" +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; } diff --git a/configure.ac b/configure.ac index 4fb75f29e0..e5d1595d70 100644 --- a/configure.ac +++ b/configure.ac @@ -1466,7 +1466,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 ]]), AC_MSG_RESULT(no) ) diff --git a/include/asterisk/autoconfig.h.in b/include/asterisk/autoconfig.h.in index 2c770d1433..968e97d48a 100644 --- a/include/asterisk/autoconfig.h.in +++ b/include/asterisk/autoconfig.h.in @@ -1073,6 +1073,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 mISDN Supplemental Services library. */ #undef HAVE_SUPPSERV diff --git a/main/dns.c b/main/dns.c index 782d4a8f8d..9cf0cf41de 100644 --- a/main/dns.c +++ b/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