diff options
author | Christian Mauderer <christian.mauderer@embedded-brains.de> | 2018-05-30 14:27:35 +0200 |
---|---|---|
committer | Christian Mauderer <christian.mauderer@embedded-brains.de> | 2018-08-01 09:55:27 +0200 |
commit | ff36f5e409707ada66506eefd4ac0a396cb28055 (patch) | |
tree | 9594b2a1aeb06b4ecaaae02644a65525adaf5bb5 /ipsec-tools/acracoon.m4 | |
parent | if_ipsec: Port and add to everything-buildset. (diff) | |
download | rtems-libbsd-ff36f5e409707ada66506eefd4ac0a396cb28055.tar.bz2 |
Import ipsec-tools 0.8.2.
Import unchanged ipsec-tools sources in the release version 0.8.2. The
homepage of ipsec-tools is http://ipsec-tools.sourceforge.net/. The
sources can be obtained from there.
Diffstat (limited to 'ipsec-tools/acracoon.m4')
-rw-r--r-- | ipsec-tools/acracoon.m4 | 195 |
1 files changed, 195 insertions, 0 deletions
diff --git a/ipsec-tools/acracoon.m4 b/ipsec-tools/acracoon.m4 new file mode 100644 index 00000000..1f7e6c15 --- /dev/null +++ b/ipsec-tools/acracoon.m4 @@ -0,0 +1,195 @@ +dnl RACOON_PATH_LIBS(FUNCTION, LIB, SEARCH-PATHS [, ACTION-IF-FOUND +dnl [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]]) +dnl Search for a library defining FUNC, if it's not already available. + +AC_DEFUN([RACOON_PATH_LIBS], +[AC_PREREQ([2.13]) +AC_CACHE_CHECK([for $2 containing $1], [ac_cv_search_$1], +[ac_func_search_save_LIBS="$LIBS" +ac_cv_search_$1="no" +AC_TRY_LINK_FUNC([$1], [ac_cv_search_$1="none required"], + [LIBS="-l$2 $LIBS" + AC_TRY_LINK_FUNC([$1], [ac_cv_search_$1="-l$2"], [])]) +LIBS="$ac_func_search_save_LIBS" +ifelse("x$3", "x", , [ test "$ac_cv_search_$1" = "no" && for i in $3; do + LIBS="-L$i -l$2 $ac_func_search_save_LIBS" + AC_TRY_LINK_FUNC([$1], + [ac_cv_search_$1="-L$i -l$2" + break]) + done +LIBS="$ac_func_search_save_LIBS" ]) ]) +if test "$ac_cv_search_$1" != "no"; then + test "$ac_cv_search_$1" = "none required" || LIBS="$ac_cv_search_$1 $LIBS" + $4 +else : + $5 +fi]) + +dnl Check if either va_copy() or __va_copy() is available. On linux systems +dnl at least one of these should be present. +AC_DEFUN([RACOON_CHECK_VA_COPY], [ + saved_CFLAGS=$CFLAGS + CFLAGS="-Wall -O2" + AC_CACHE_CHECK([for an implementation of va_copy()], + ac_cv_va_copy,[ + AC_TRY_RUN([#include <stdarg.h> + void func (int i, ...) { + va_list args1, args2; + va_start (args1, i); + va_copy (args2, args1); + if (va_arg (args1, int) != 1 || va_arg (args2, int) != 1) + exit (1); + va_end (args1); + va_end (args2); + } + int main() { + func (0, 1); + return 0; + }], + [ac_cv_va_copy=yes], + [ac_cv_va_copy=no], + AC_MSG_WARN(Cross compiling... Unable to test va_copy) + [ac_cv_va_copy=no]) + ]) + if test x$ac_cv_va_copy != xyes; then + AC_CACHE_CHECK([for an implementation of __va_copy()], + ac_cv___va_copy,[ + AC_TRY_RUN([#include <stdarg.h> + void func (int i, ...) { + va_list args1, args2; + va_start (args1, i); + __va_copy (args2, args1); + if (va_arg (args1, int) != 1 || va_arg (args2, int) != 1) + exit (1); + va_end (args1); + va_end (args2); + } + int main() { + func (0, 1); + return 0; + }], + [ac_cv___va_copy=yes], + [ac_cv___va_copy=no], + AC_MSG_WARN(Cross compiling... Unable to test __va_copy) + [ac_cv___va_copy=no]) + ]) + fi + + if test "x$ac_cv_va_copy" = "xyes"; then + va_copy_func=va_copy + elif test "x$ac_cv___va_copy" = "xyes"; then + va_copy_func=__va_copy + fi + + if test -n "$va_copy_func"; then + AC_DEFINE_UNQUOTED(VA_COPY,$va_copy_func, + [A 'va_copy' style function]) + else + AC_MSG_WARN([Hmm, neither va_copy() nor __va_copy() found.]) + AC_MSG_WARN([Using a generic fallback.]) + fi + CFLAGS=$saved_CFLAGS + unset saved_CFLAGS +]) + +AC_DEFUN([RACOON_CHECK_BUGGY_GETADDRINFO], [ + AC_MSG_CHECKING(getaddrinfo bug) + saved_CFLAGS=$CFLAGS + CFLAGS="-Wall -O2" + AC_TRY_RUN([ + #include <sys/types.h> + #include <sys/socket.h> + #include <netdb.h> + #include <stdlib.h> + #include <string.h> + #include <netinet/in.h> + + int main() + { + int passive, gaierr, inet4 = 0, inet6 = 0; + struct addrinfo hints, *ai, *aitop; + char straddr[INET6_ADDRSTRLEN], strport[16]; + + for (passive = 0; passive <= 1; passive++) { + memset(&hints, 0, sizeof(hints)); + hints.ai_family = AF_UNSPEC; + hints.ai_flags = passive ? AI_PASSIVE : 0; + hints.ai_protocol = IPPROTO_TCP; + hints.ai_socktype = SOCK_STREAM; + if ((gaierr = getaddrinfo(NULL, "54321", &hints, &aitop)) != 0) { + (void)gai_strerror(gaierr); + goto bad; + } + for (ai = aitop; ai; ai = ai->ai_next) { + if (ai->ai_addr == NULL || + ai->ai_addrlen == 0 || + getnameinfo(ai->ai_addr, ai->ai_addrlen, + straddr, sizeof(straddr), strport, sizeof(strport), + NI_NUMERICHOST|NI_NUMERICSERV) != 0) { + goto bad; + } + switch (ai->ai_family) { + case AF_INET: + if (strcmp(strport, "54321") != 0) { + goto bad; + } + if (passive) { + if (strcmp(straddr, "0.0.0.0") != 0) { + goto bad; + } + } else { + if (strcmp(straddr, "127.0.0.1") != 0) { + goto bad; + } + } + inet4++; + break; + case AF_INET6: + if (strcmp(strport, "54321") != 0) { + goto bad; + } + if (passive) { + if (strcmp(straddr, "::") != 0) { + goto bad; + } + } else { + if (strcmp(straddr, "::1") != 0) { + goto bad; + } + } + inet6++; + break; + case AF_UNSPEC: + goto bad; + break; + default: + /* another family support? */ + break; + } + } + } + + if (!(inet4 == 0 || inet4 == 2)) + goto bad; + if (!(inet6 == 0 || inet6 == 2)) + goto bad; + + if (aitop) + freeaddrinfo(aitop); + exit(0); + + bad: + if (aitop) + freeaddrinfo(aitop); + exit(1); + } + ], + AC_MSG_RESULT(good) + buggygetaddrinfo=no, + AC_MSG_RESULT(buggy) + buggygetaddrinfo=yes, + AC_MSG_RESULT(Cross compiling ... Assuming getaddrinfo is not buggy.) + buggygetaddrinfo=no) + CFLAGS=$saved_CFLAGS + unset saved_CFLAGS +]) |