summaryrefslogtreecommitdiffstats
path: root/ipsec-tools/acracoon.m4
diff options
context:
space:
mode:
authorChristian Mauderer <christian.mauderer@embedded-brains.de>2018-05-30 14:27:35 +0200
committerChristian Mauderer <christian.mauderer@embedded-brains.de>2018-08-01 09:55:27 +0200
commitff36f5e409707ada66506eefd4ac0a396cb28055 (patch)
tree9594b2a1aeb06b4ecaaae02644a65525adaf5bb5 /ipsec-tools/acracoon.m4
parentif_ipsec: Port and add to everything-buildset. (diff)
downloadrtems-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.m4195
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
+])