make CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_ADDR

and CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_CANONNAME
internal to CHECK_FUNC_GETADDRINFO
This commit is contained in:
Yang Tse 2008-10-29 01:45:07 +00:00
parent 9c86097286
commit 23eb74e085
4 changed files with 270 additions and 278 deletions

View File

@ -554,8 +554,6 @@ CURL_CHECK_FUNC_SEND
CURL_CHECK_MSG_NOSIGNAL CURL_CHECK_MSG_NOSIGNAL
CARES_CHECK_FUNC_GETADDRINFO CARES_CHECK_FUNC_GETADDRINFO
CARES_CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_ADDR
CARES_CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_CANONNAME
CARES_CHECK_FUNC_GETHOSTNAME CARES_CHECK_FUNC_GETHOSTNAME
CARES_CHECK_FUNC_GETSERVBYPORT_R CARES_CHECK_FUNC_GETSERVBYPORT_R
CARES_CHECK_FUNC_INET_NTOP CARES_CHECK_FUNC_INET_NTOP

View File

@ -16,7 +16,7 @@
#*************************************************************************** #***************************************************************************
# File version for 'aclocal' use. Keep it a single number. # File version for 'aclocal' use. Keep it a single number.
# serial 13 # serial 14
dnl CARES_INCLUDES_ARPA_INET dnl CARES_INCLUDES_ARPA_INET
@ -243,6 +243,7 @@ AC_DEFUN([CARES_CHECK_FUNC_GETADDRINFO], [
AC_REQUIRE([CARES_INCLUDES_STDLIB])dnl AC_REQUIRE([CARES_INCLUDES_STDLIB])dnl
AC_REQUIRE([CARES_INCLUDES_SYS_SOCKET])dnl AC_REQUIRE([CARES_INCLUDES_SYS_SOCKET])dnl
AC_REQUIRE([CARES_INCLUDES_NETDB])dnl AC_REQUIRE([CARES_INCLUDES_NETDB])dnl
AC_REQUIRE([CARES_INCLUDES_STRING])dnl
# #
tst_links_getaddrinfo="unknown" tst_links_getaddrinfo="unknown"
tst_proto_getaddrinfo="unknown" tst_proto_getaddrinfo="unknown"
@ -363,20 +364,22 @@ AC_DEFUN([CARES_CHECK_FUNC_GETADDRINFO], [
AC_MSG_RESULT([no]) AC_MSG_RESULT([no])
ac_cv_func_getaddrinfo="no" ac_cv_func_getaddrinfo="no"
fi fi
#
if test "$ac_cv_func_getaddrinfo" = "yes"; then
DO_CARES_CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_ADDR
DO_CARES_CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_CANONNAME
fi
]) ])
dnl CARES_CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_ADDR dnl DO_CARES_CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_ADDR
dnl ------------------------------------------------- dnl -------------------------------------------------
dnl verify if the ai_addr pointer member of the addrinfo dnl verify if the ai_addr pointer member of the addrinfo
dnl struct returned by function getaddrinfo is a pointer dnl struct returned by function getaddrinfo is a pointer
dnl which can actually be free()ed or not. dnl which can actually be free()ed or not. This is an
dnl internal macro used by CARES_CHECK_FUNC_GETADDRINFO
AC_DEFUN([CARES_CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_ADDR], [ AC_DEFUN([DO_CARES_CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_ADDR], [
AC_REQUIRE([CARES_CHECK_FUNC_GETADDRINFO])dnl
AC_REQUIRE([CARES_INCLUDES_STRING])dnl
#
if test "$ac_cv_func_getaddrinfo" = "yes"; then
AC_MSG_CHECKING([if getaddrinfo returns unfreeable ai_addr]) AC_MSG_CHECKING([if getaddrinfo returns unfreeable ai_addr])
dnl only do runtime verification when not cross-compiling dnl only do runtime verification when not cross-compiling
if test "x$cross_compiling" != "xyes"; then if test "x$cross_compiling" != "xyes"; then
@ -406,8 +409,8 @@ AC_DEFUN([CARES_CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_ADDR], [
memset(&tmp_addr, 1, sizeof(tmp_addr)); memset(&tmp_addr, 1, sizeof(tmp_addr));
/* attempt to free ai_addr pointer */ /* attempt to free ai_addr pointer */
freed_ptr = ai_addr = ai->ai_addr; freed_ptr = ai_addr = ai->ai_addr;
/* seg-fault free'ing an unfreeable ptr would be */ /* seg-faulting when free'ing an unfreeable ptr would be nice */
/* nice, if this happen exit code will be non-zero. */ /* and desired here, if this happens exit code will be non-zero. */
free(ai_addr); free(ai_addr);
/* attempt to write free'ed memory */ /* attempt to write free'ed memory */
freed_ptr->sa_family = 'x'; freed_ptr->sa_family = 'x';
@ -415,7 +418,7 @@ AC_DEFUN([CARES_CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_ADDR], [
ai_addr = calloc(1, sizeof(struct sockaddr)); ai_addr = calloc(1, sizeof(struct sockaddr));
/* attempt to read free'ed memory */ /* attempt to read free'ed memory */
tmp_addr = *freed_ptr; tmp_addr = *freed_ptr;
/* verify if everithing has worked */ /* verify if everything has worked */
if(tmp_addr.sa_family == 'x') if(tmp_addr.sa_family == 'x')
/* ai_addr might be unfreeable, ouch! */ /* ai_addr might be unfreeable, ouch! */
exit(1); exit(1);
@ -436,21 +439,17 @@ AC_DEFUN([CARES_CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_ADDR], [
dnl for cross-compiling a static check would be nice. dnl for cross-compiling a static check would be nice.
AC_MSG_RESULT([unknown]) AC_MSG_RESULT([unknown])
fi fi
fi
]) ])
dnl CARES_CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_CANONNAME dnl DO_CARES_CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_CANONNAME
dnl ------------------------------------------------- dnl -------------------------------------------------
dnl verify if the ai_canonname pointer member of the addrinfo dnl verify if the ai_canonname pointer member of the addrinfo
dnl struct returned by function getaddrinfo is a pointer dnl struct returned by function getaddrinfo is a pointer
dnl which can actually be free()ed or not. dnl which can actually be free()ed or not. This is an
dnl internal macro used by CARES_CHECK_FUNC_GETADDRINFO
AC_DEFUN([CARES_CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_CANONNAME], [ AC_DEFUN([DO_CARES_CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_CANONNAME], [
AC_REQUIRE([CARES_CHECK_FUNC_GETADDRINFO])dnl
AC_REQUIRE([CARES_INCLUDES_STRING])dnl
#
if test "$ac_cv_func_getaddrinfo" = "yes"; then
AC_MSG_CHECKING([if getaddrinfo returns unfreeable ai_canonname]) AC_MSG_CHECKING([if getaddrinfo returns unfreeable ai_canonname])
dnl only do runtime verification when not cross-compiling dnl only do runtime verification when not cross-compiling
if test "x$cross_compiling" != "xyes"; then if test "x$cross_compiling" != "xyes"; then
@ -481,8 +480,8 @@ AC_DEFUN([CARES_CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_CANONNAME], [
memset(&tmp_canonname, 1, sizeof(tmp_canonname)); memset(&tmp_canonname, 1, sizeof(tmp_canonname));
/* attempt to free ai_canonname pointer */ /* attempt to free ai_canonname pointer */
freed_ptr = ai_canonname = ai->ai_canonname; freed_ptr = ai_canonname = ai->ai_canonname;
/* seg-fault free'ing an unfreeable ptr would be */ /* seg-faulting when free'ing an unfreeable ptr would be nice */
/* nice, if this happen exit code will be non-zero. */ /* and desired here, if this happens exit code will be non-zero. */
free(ai_canonname); free(ai_canonname);
/* attempt to write free'ed memory */ /* attempt to write free'ed memory */
freed_ptr[0] = 'x'; freed_ptr[0] = 'x';
@ -490,7 +489,7 @@ AC_DEFUN([CARES_CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_CANONNAME], [
ai_canonname = calloc(1, sizeof(tmp_canonname)); ai_canonname = calloc(1, sizeof(tmp_canonname));
/* attempt to read free'ed memory */ /* attempt to read free'ed memory */
tmp_canonname[0] = freed_ptr[0]; tmp_canonname[0] = freed_ptr[0];
/* verify if everithing has worked */ /* verify if everything has worked */
if(tmp_canonname[0] == 'x') if(tmp_canonname[0] == 'x')
/* ai_canonname might be unfreeable, ouch! */ /* ai_canonname might be unfreeable, ouch! */
exit(1); exit(1);
@ -502,7 +501,7 @@ AC_DEFUN([CARES_CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_CANONNAME], [
dnl exit code was zero, getaddrinfo behaves nicely. dnl exit code was zero, getaddrinfo behaves nicely.
AC_MSG_RESULT([no]) AC_MSG_RESULT([no])
],[ ],[
dnl exit code wasn't zero, getaddrinfo returns unfreeable ptr. dnl exit code wasn't zero, getaddrinfo returns unfreeable member ptr.
AC_MSG_RESULT([yes]) AC_MSG_RESULT([yes])
AC_DEFINE_UNQUOTED(HAVE_GETADDRINFO_UNFREEABLE_AI_CANONNAME, 1, AC_DEFINE_UNQUOTED(HAVE_GETADDRINFO_UNFREEABLE_AI_CANONNAME, 1,
[Define to 1 if getaddrinfo returns unfreeable ai_canonname pointer.]) [Define to 1 if getaddrinfo returns unfreeable ai_canonname pointer.])
@ -511,7 +510,6 @@ AC_DEFUN([CARES_CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_CANONNAME], [
dnl for cross-compiling a static check would be nice. dnl for cross-compiling a static check would be nice.
AC_MSG_RESULT([unknown]) AC_MSG_RESULT([unknown])
fi fi
fi
]) ])

View File

@ -2017,8 +2017,6 @@ CURL_CHECK_FUNC_ALARM
CURL_CHECK_FUNC_FDOPEN CURL_CHECK_FUNC_FDOPEN
CURL_CHECK_FUNC_FTRUNCATE CURL_CHECK_FUNC_FTRUNCATE
CURL_CHECK_FUNC_GETADDRINFO CURL_CHECK_FUNC_GETADDRINFO
CURL_CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_ADDR
CURL_CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_CANONNAME
CURL_CHECK_FUNC_GETHOSTBYADDR_R CURL_CHECK_FUNC_GETHOSTBYADDR_R
CURL_CHECK_FUNC_GETHOSTBYNAME_R CURL_CHECK_FUNC_GETHOSTBYNAME_R
CURL_CHECK_FUNC_GETHOSTNAME CURL_CHECK_FUNC_GETHOSTNAME

View File

@ -22,7 +22,7 @@
#*************************************************************************** #***************************************************************************
# File version for 'aclocal' use. Keep it a single number. # File version for 'aclocal' use. Keep it a single number.
# serial 29 # serial 30
dnl CURL_INCLUDES_ARPA_INET dnl CURL_INCLUDES_ARPA_INET
@ -596,6 +596,7 @@ AC_DEFUN([CURL_CHECK_FUNC_GETADDRINFO], [
AC_REQUIRE([CURL_INCLUDES_STDLIB])dnl AC_REQUIRE([CURL_INCLUDES_STDLIB])dnl
AC_REQUIRE([CURL_INCLUDES_SYS_SOCKET])dnl AC_REQUIRE([CURL_INCLUDES_SYS_SOCKET])dnl
AC_REQUIRE([CURL_INCLUDES_NETDB])dnl AC_REQUIRE([CURL_INCLUDES_NETDB])dnl
AC_REQUIRE([CURL_INCLUDES_STRING])dnl
# #
tst_links_getaddrinfo="unknown" tst_links_getaddrinfo="unknown"
tst_proto_getaddrinfo="unknown" tst_proto_getaddrinfo="unknown"
@ -716,20 +717,22 @@ AC_DEFUN([CURL_CHECK_FUNC_GETADDRINFO], [
AC_MSG_RESULT([no]) AC_MSG_RESULT([no])
ac_cv_func_getaddrinfo="no" ac_cv_func_getaddrinfo="no"
fi fi
#
if test "$ac_cv_func_getaddrinfo" = "yes"; then
DO_CURL_CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_ADDR
DO_CURL_CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_CANONNAME
fi
]) ])
dnl CURL_CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_ADDR dnl DO_CURL_CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_ADDR
dnl ------------------------------------------------- dnl -------------------------------------------------
dnl verify if the ai_addr pointer member of the addrinfo dnl verify if the ai_addr pointer member of the addrinfo
dnl struct returned by function getaddrinfo is a pointer dnl struct returned by function getaddrinfo is a pointer
dnl which can actually be free()ed or not. dnl which can actually be free()ed or not. This is an
dnl internal macro used by CURL_CHECK_FUNC_GETADDRINFO
AC_DEFUN([CURL_CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_ADDR], [ AC_DEFUN([DO_CURL_CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_ADDR], [
AC_REQUIRE([CURL_CHECK_FUNC_GETADDRINFO])dnl
AC_REQUIRE([CURL_INCLUDES_STRING])dnl
#
if test "$ac_cv_func_getaddrinfo" = "yes"; then
AC_MSG_CHECKING([if getaddrinfo returns unfreeable ai_addr]) AC_MSG_CHECKING([if getaddrinfo returns unfreeable ai_addr])
dnl only do runtime verification when not cross-compiling dnl only do runtime verification when not cross-compiling
if test "x$cross_compiling" != "xyes"; then if test "x$cross_compiling" != "xyes"; then
@ -759,8 +762,8 @@ AC_DEFUN([CURL_CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_ADDR], [
memset(&tmp_addr, 1, sizeof(tmp_addr)); memset(&tmp_addr, 1, sizeof(tmp_addr));
/* attempt to free ai_addr pointer */ /* attempt to free ai_addr pointer */
freed_ptr = ai_addr = ai->ai_addr; freed_ptr = ai_addr = ai->ai_addr;
/* seg-fault free'ing an unfreeable ptr would be */ /* seg-faulting when free'ing an unfreeable ptr would be nice */
/* nice, if this happen exit code will be non-zero. */ /* and desired here, if this happens exit code will be non-zero. */
free(ai_addr); free(ai_addr);
/* attempt to write free'ed memory */ /* attempt to write free'ed memory */
freed_ptr->sa_family = 'x'; freed_ptr->sa_family = 'x';
@ -768,7 +771,7 @@ AC_DEFUN([CURL_CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_ADDR], [
ai_addr = calloc(1, sizeof(struct sockaddr)); ai_addr = calloc(1, sizeof(struct sockaddr));
/* attempt to read free'ed memory */ /* attempt to read free'ed memory */
tmp_addr = *freed_ptr; tmp_addr = *freed_ptr;
/* verify if everithing has worked */ /* verify if everything has worked */
if(tmp_addr.sa_family == 'x') if(tmp_addr.sa_family == 'x')
/* ai_addr might be unfreeable, ouch! */ /* ai_addr might be unfreeable, ouch! */
exit(1); exit(1);
@ -780,7 +783,7 @@ AC_DEFUN([CURL_CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_ADDR], [
dnl exit code was zero, getaddrinfo behaves nicely. dnl exit code was zero, getaddrinfo behaves nicely.
AC_MSG_RESULT([no]) AC_MSG_RESULT([no])
],[ ],[
dnl exit code wasn't zero, getaddrinfo returns unfreeable ptr. dnl exit code wasn't zero, getaddrinfo returns unfreeable member ptr.
AC_MSG_RESULT([yes]) AC_MSG_RESULT([yes])
AC_DEFINE_UNQUOTED(HAVE_GETADDRINFO_UNFREEABLE_AI_ADDR, 1, AC_DEFINE_UNQUOTED(HAVE_GETADDRINFO_UNFREEABLE_AI_ADDR, 1,
[Define to 1 if getaddrinfo returns unfreeable ai_addr pointer.]) [Define to 1 if getaddrinfo returns unfreeable ai_addr pointer.])
@ -789,21 +792,17 @@ AC_DEFUN([CURL_CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_ADDR], [
dnl for cross-compiling a static check would be nice. dnl for cross-compiling a static check would be nice.
AC_MSG_RESULT([unknown]) AC_MSG_RESULT([unknown])
fi fi
fi
]) ])
dnl CURL_CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_CANONNAME dnl DO_CURL_CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_CANONNAME
dnl ------------------------------------------------- dnl -------------------------------------------------
dnl verify if the ai_canonname pointer member of the addrinfo dnl verify if the ai_canonname pointer member of the addrinfo
dnl struct returned by function getaddrinfo is a pointer dnl struct returned by function getaddrinfo is a pointer
dnl which can actually be free()ed or not. dnl which can actually be free()ed or not. This is an
dnl internal macro used by CURL_CHECK_FUNC_GETADDRINFO
AC_DEFUN([CURL_CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_CANONNAME], [ AC_DEFUN([DO_CURL_CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_CANONNAME], [
AC_REQUIRE([CURL_CHECK_FUNC_GETADDRINFO])dnl
AC_REQUIRE([CURL_INCLUDES_STRING])dnl
#
if test "$ac_cv_func_getaddrinfo" = "yes"; then
AC_MSG_CHECKING([if getaddrinfo returns unfreeable ai_canonname]) AC_MSG_CHECKING([if getaddrinfo returns unfreeable ai_canonname])
dnl only do runtime verification when not cross-compiling dnl only do runtime verification when not cross-compiling
if test "x$cross_compiling" != "xyes"; then if test "x$cross_compiling" != "xyes"; then
@ -834,8 +833,8 @@ AC_DEFUN([CURL_CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_CANONNAME], [
memset(&tmp_canonname, 1, sizeof(tmp_canonname)); memset(&tmp_canonname, 1, sizeof(tmp_canonname));
/* attempt to free ai_canonname pointer */ /* attempt to free ai_canonname pointer */
freed_ptr = ai_canonname = ai->ai_canonname; freed_ptr = ai_canonname = ai->ai_canonname;
/* seg-fault free'ing an unfreeable ptr would be */ /* seg-faulting when free'ing an unfreeable ptr would be nice */
/* nice, if this happen exit code will be non-zero. */ /* and desired here, if this happens exit code will be non-zero. */
free(ai_canonname); free(ai_canonname);
/* attempt to write free'ed memory */ /* attempt to write free'ed memory */
freed_ptr[0] = 'x'; freed_ptr[0] = 'x';
@ -843,7 +842,7 @@ AC_DEFUN([CURL_CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_CANONNAME], [
ai_canonname = calloc(1, sizeof(tmp_canonname)); ai_canonname = calloc(1, sizeof(tmp_canonname));
/* attempt to read free'ed memory */ /* attempt to read free'ed memory */
tmp_canonname[0] = freed_ptr[0]; tmp_canonname[0] = freed_ptr[0];
/* verify if everithing has worked */ /* verify if everything has worked */
if(tmp_canonname[0] == 'x') if(tmp_canonname[0] == 'x')
/* ai_canonname might be unfreeable, ouch! */ /* ai_canonname might be unfreeable, ouch! */
exit(1); exit(1);
@ -855,7 +854,7 @@ AC_DEFUN([CURL_CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_CANONNAME], [
dnl exit code was zero, getaddrinfo behaves nicely. dnl exit code was zero, getaddrinfo behaves nicely.
AC_MSG_RESULT([no]) AC_MSG_RESULT([no])
],[ ],[
dnl exit code wasn't zero, getaddrinfo returns unfreeable ptr. dnl exit code wasn't zero, getaddrinfo returns unfreeable member ptr.
AC_MSG_RESULT([yes]) AC_MSG_RESULT([yes])
AC_DEFINE_UNQUOTED(HAVE_GETADDRINFO_UNFREEABLE_AI_CANONNAME, 1, AC_DEFINE_UNQUOTED(HAVE_GETADDRINFO_UNFREEABLE_AI_CANONNAME, 1,
[Define to 1 if getaddrinfo returns unfreeable ai_canonname pointer.]) [Define to 1 if getaddrinfo returns unfreeable ai_canonname pointer.])
@ -864,7 +863,6 @@ AC_DEFUN([CURL_CHECK_FUNC_GETADDRINFO_UNFREEABLE_AI_CANONNAME], [
dnl for cross-compiling a static check would be nice. dnl for cross-compiling a static check would be nice.
AC_MSG_RESULT([unknown]) AC_MSG_RESULT([unknown])
fi fi
fi
]) ])