13b97a967SRobert Watson# -*- Autoconf -*- 23b97a967SRobert Watson# Process this file with autoconf to produce a configure script. 33b97a967SRobert Watson 43b97a967SRobert WatsonAC_PREREQ(2.59) 5*5e386598SRobert WatsonAC_INIT([OpenBSM], [1.2-alpha5], [trustedbsd-audit@TrustedBSD.org],[openbsm]) 6aa772005SRobert WatsonAC_CONFIG_MACRO_DIR([m4]) 73b97a967SRobert WatsonAC_CONFIG_SRCDIR([bin/auditreduce/auditreduce.c]) 83b97a967SRobert WatsonAC_CONFIG_AUX_DIR(config) 9aa772005SRobert WatsonAC_CONFIG_MACRO_DIR([m4]) 103b97a967SRobert WatsonAC_CONFIG_HEADER([config/config.h]) 113b97a967SRobert WatsonAM_MAINTAINER_MODE 123b97a967SRobert Watson 1352267f74SRobert Watson# --with-native-includes forces the use of the system bsm headers. 1452267f74SRobert WatsonAC_ARG_WITH([native-includes], 1552267f74SRobert Watson[AS_HELP_STRING([--with-native-includes], 1652267f74SRobert Watson[Use the system native include files instead of those included with openbsm.])], 1752267f74SRobert Watson[ 1852267f74SRobert WatsonAC_DEFINE(USE_NATIVE_INCLUDES,, Define to use native include files) 1952267f74SRobert Watsonuse_native_includes=true 2052267f74SRobert Watson], 2152267f74SRobert Watson[use_native_includes=false]) 2252267f74SRobert WatsonAM_CONDITIONAL(USE_NATIVE_INCLUDES, $use_native_includes) 2352267f74SRobert Watson 2452267f74SRobert WatsonAC_PATH_PROGS(MIG, mig) 2552267f74SRobert Watson 263b97a967SRobert Watson# Checks for programs. 273b97a967SRobert WatsonAC_PROG_CC 283b97a967SRobert WatsonAC_PROG_INSTALL 29aa772005SRobert WatsonAC_PROG_LEX 303b97a967SRobert WatsonAC_PROG_LIBTOOL 31b6a05070SChristian BruefferAC_PROG_LN_S 32aa772005SRobert WatsonAC_PROG_YACC 333b97a967SRobert Watson 343b97a967SRobert WatsonAM_INIT_AUTOMAKE(AC_PACKAGE_NAME, AC_PACKAGE_VERSION) 353b97a967SRobert Watson 36506764c6SRobert WatsonAC_SEARCH_LIBS(dlsym, dl) 37aa772005SRobert WatsonAC_SEARCH_LIBS(pthread_create, pthread) 38506764c6SRobert WatsonAC_SEARCH_LIBS(clock_gettime, rt) 39aa772005SRobert WatsonAC_SEARCH_LIBS(SSL_connect, ssl) 40aa772005SRobert WatsonAC_SEARCH_LIBS(humanize_number, util) 41aa772005SRobert WatsonAC_SEARCH_LIBS(pidfile_open, util) 423b97a967SRobert Watson 433b97a967SRobert Watson# Checks for header files. 443b97a967SRobert WatsonAC_HEADER_STDC 453b97a967SRobert WatsonAC_HEADER_SYS_WAIT 46aa772005SRobert WatsonAC_CHECK_HEADERS([mach/mach.h stdint.h pthread_np.h printf.h]) 473b97a967SRobert Watson 48c0020399SRobert WatsonAC_DEFINE([_GNU_SOURCE],,[Use extended API on platforms that require it]) 49c0020399SRobert Watson 503b97a967SRobert Watson# Checks for typedefs, structures, and compiler characteristics. 513b97a967SRobert WatsonAC_C_CONST 523b97a967SRobert WatsonAC_TYPE_UID_T 533b97a967SRobert WatsonAC_TYPE_PID_T 543b97a967SRobert WatsonAC_TYPE_SIZE_T 553b97a967SRobert WatsonAC_CHECK_MEMBERS([struct stat.st_rdev]) 563b97a967SRobert Watson 573b97a967SRobert WatsonAC_CHECK_MEMBER([struct ipc_perm.__key], 583b97a967SRobert Watson[AC_DEFINE(HAVE_IPC_PERM___KEY,, Define if ipc_perm.__key instead of key)], 593b97a967SRobert Watson[],[ 603b97a967SRobert Watson#include <sys/types.h> 613b97a967SRobert Watson#include <sys/ipc.h> 623b97a967SRobert Watson]) 633b97a967SRobert Watson 6452267f74SRobert WatsonAC_CHECK_MEMBER([struct ipc_perm._key], 6552267f74SRobert Watson[AC_DEFINE(HAVE_IPC_PERM__KEY,, Define if ipc_perm._key instead of key)], 6652267f74SRobert Watson[],[ 6752267f74SRobert Watson#include <sys/types.h> 6852267f74SRobert Watson#include <sys/ipc.h> 6952267f74SRobert Watson]) 7052267f74SRobert Watson 713b97a967SRobert WatsonAC_CHECK_MEMBER([struct ipc_perm.__seq], 723b97a967SRobert Watson[AC_DEFINE(HAVE_IPC_PERM___SEQ,, Define if ipc_perm.__seq instead of seq)], 733b97a967SRobert Watson[],[ 743b97a967SRobert Watson#include <sys/types.h> 753b97a967SRobert Watson#include <sys/ipc.h> 763b97a967SRobert Watson]) 773b97a967SRobert Watson 7852267f74SRobert WatsonAC_CHECK_MEMBER([struct ipc_perm._seq], 7952267f74SRobert Watson[AC_DEFINE(HAVE_IPC_PERM__SEQ,, Define if ipc_perm._seq instead of seq)], 8052267f74SRobert Watson[],[ 8152267f74SRobert Watson#include <sys/types.h> 8252267f74SRobert Watson#include <sys/ipc.h> 8352267f74SRobert Watson]) 8452267f74SRobert Watson 85aa772005SRobert WatsonAC_CHECK_MEMBER([struct sockaddr_storage.ss_len], 86aa772005SRobert Watson[AC_DEFINE(HAVE_SOCKADDR_STORAGE_SS_LEN,, Define if sockaddr_storage.ss_len field exists)], 87aa772005SRobert Watson[],[ 88aa772005SRobert Watson#include <sys/types.h> 89aa772005SRobert Watson#include <sys/socket.h> 90aa772005SRobert Watson]) 91aa772005SRobert Watson 923b97a967SRobert WatsonAC_HEADER_TIME 933b97a967SRobert WatsonAC_STRUCT_TM 943b97a967SRobert Watson 953b97a967SRobert Watson# Checks for library functions. 963b97a967SRobert WatsonAC_FUNC_CHOWN 973b97a967SRobert WatsonAC_FUNC_FORK 983b97a967SRobert WatsonAC_FUNC_MALLOC 993b97a967SRobert WatsonAC_FUNC_MKTIME 1003b97a967SRobert WatsonAC_TYPE_SIGNAL 1013b97a967SRobert WatsonAC_FUNC_STAT 1023b97a967SRobert WatsonAC_FUNC_STRFTIME 103aa772005SRobert WatsonAC_CHECK_FUNCS([arc4random arc4random_buf bzero cap_enter clock_gettime closefrom faccessat fdopendir fstatat ftruncate getresgid getresuid gettimeofday inet_ntoa jail kqueue memset openat pthread_cond_timedwait_relative_np pthread_condattr_setclock pthread_mutex_lock renameat setproctitle sigtimedwait strchr strerror strlcat strlcpy strndup strrchr strstr strtol strtoul unlinkat vis]) 1043b97a967SRobert Watson 1053b97a967SRobert Watson# sys/queue.h exists on most systems, but its capabilities vary a great deal. 106d9af45c4SRobert Watson# test for LIST_FIRST and TAILQ_FOREACH_SAFE, which appears to not exist in 107d9af45c4SRobert Watson# all of them, and are necessary for OpenBSM. 1083b97a967SRobert WatsonAC_TRY_LINK([ 1093b97a967SRobert Watson #include <sys/queue.h> 1103b97a967SRobert Watson], [ 1113b97a967SRobert Watson 112d9af45c4SRobert Watson #ifndef LIST_FIRST 113d9af45c4SRobert Watson #error LIST_FIRST missing 114d9af45c4SRobert Watson #endif 115d9af45c4SRobert Watson #ifndef TAILQ_FOREACH_SAFE 116d9af45c4SRobert Watson #error TAILQ_FOREACH_SAFE 117d9af45c4SRobert Watson #endif 1183b97a967SRobert Watson], [ 1193b97a967SRobert WatsonAC_DEFINE(HAVE_FULL_QUEUE_H,, Define if queue.h includes LIST_FIRST) 1203b97a967SRobert Watson]) 1213b97a967SRobert Watson 1223b97a967SRobert Watson# Systems may not define key audit system calls, in which case libbsm cannot 1233b97a967SRobert Watson# depend on them or it will generate link-time or run-time errors. Test for 1243b97a967SRobert Watson# just one. 1253b97a967SRobert WatsonAC_TRY_LINK([ 1267a0a89d2SRobert Watson #include <stddef.h> 1273b97a967SRobert Watson 1283b97a967SRobert Watson extern int auditon(int, void *, int); 1293b97a967SRobert Watson], [ 1303b97a967SRobert Watson int err; 1313b97a967SRobert Watson 1323b97a967SRobert Watson err = auditon(0, NULL, 0); 1333b97a967SRobert Watson], [ 1343b97a967SRobert WatsonAC_DEFINE(HAVE_AUDIT_SYSCALLS,, Define if audit system calls present) 1353b97a967SRobert Watsonhave_audit_syscalls=true 1363b97a967SRobert Watson], [ 1373b97a967SRobert Watsonhave_audit_syscalls=false 1383b97a967SRobert Watson]) 1393b97a967SRobert WatsonAM_CONDITIONAL(HAVE_AUDIT_SYSCALLS, $have_audit_syscalls) 1403b97a967SRobert Watson 1417a0a89d2SRobert Watson# 142aa772005SRobert Watson# We rely on the BSD be32toh() and be32enc()-style endian macros to perform 143aa772005SRobert Watson# byte order conversions. Availability of these varies considerably -- in 144aa772005SRobert Watson# general, a system might have neither, be32toh(), or be32toh() and be32enc(). 145aa772005SRobert Watson# There is also variation in which headers are even present, and whether they 146aa772005SRobert Watson# are macros or functions. Try to organise the world into some simpler cases. 147aa772005SRobert Watson# The following macros may be set at the end: 148aa772005SRobert Watson# 149aa772005SRobert Watson# USE_ENDIAN_H 150aa772005SRobert Watson# USE_SYS_ENDIAN_H 151aa772005SRobert Watson# USE_MACHINE_ENDIAN_H 152aa772005SRobert Watson# USE_COMPAT_ENDIAN_H 153aa772005SRobert Watson# USE_COMPAT_ENDIAN_ENC_H 154aa772005SRobert Watson# 155aa772005SRobert Watson# First, decide which system endian.h to use. 156aa772005SRobert Watson# 157aa772005SRobert WatsonAC_CHECK_HEADERS([endian.h], [ 158aa772005SRobert Watson have_endian_h=yes 159aa772005SRobert Watson], [ 160aa772005SRobert Watson have_endian_h=no 161aa772005SRobert Watson]) 162aa772005SRobert Watson 163aa772005SRobert WatsonAC_CHECK_HEADERS([sys/endian.h], [ 164aa772005SRobert Watson have_sys_endian_h=yes 165aa772005SRobert Watson], [ 166aa772005SRobert Watson have_sys_endian_h=no 167aa772005SRobert Watson]) 168aa772005SRobert Watson 169aa772005SRobert WatsonAC_CHECK_HEADERS([machine/endian.h], [ 170aa772005SRobert Watson have_machine_endian_h=yes 171aa772005SRobert Watson], [ 172aa772005SRobert Watson have_machine_endian_h=no 173aa772005SRobert Watson]) 174aa772005SRobert Watson 175aa772005SRobert Watsonif test $have_endian_h = yes; then 176aa772005SRobert Watson AC_DEFINE(USE_ENDIAN_H,, Define if endian.h should be included) 177aa772005SRobert Watsonelif test $have_sys_endian_h = yes; then 178aa772005SRobert Watson AC_DEFINE(USE_SYS_ENDIAN_H,, Define if sys/endian.h should be included) 179aa772005SRobert Watsonelif test $have_machine_endian_h = yes; then 180aa772005SRobert Watson AC_DEFINE(USE_MACHINE_ENDIAN_H,, Define if machine/endian.h should be included) 181aa772005SRobert Watsonelse 182aa772005SRobert Watson AC_MSG_ERROR([no endian.h]) 183aa772005SRobert Watsonfi 184aa772005SRobert Watson 185aa772005SRobert Watson# 186aa772005SRobert Watson# Next, decide if we need to supplement with compat headers. 1877a0a89d2SRobert Watson# 1887a0a89d2SRobert WatsonAC_TRY_LINK([ 189aa772005SRobert Watson #ifdef USE_ENDIAN_H 190aa772005SRobert Watson #include <endian.h> 191aa772005SRobert Watson #endif 192aa772005SRobert Watson #ifdef USE_SYS_ENDIAN_H 1937a0a89d2SRobert Watson #include <sys/endian.h> 194aa772005SRobert Watson #endif 195aa772005SRobert Watson #ifdef USE_MACHINE_ENDIAN_H 196aa772005SRobert Watson #include <machine/endian.h> 197aa772005SRobert Watson #endif 198aa772005SRobert Watson], [ 199aa772005SRobert Watson (void)be32toh(0); 200aa772005SRobert Watson], [], [ 201aa772005SRobert Watson AC_DEFINE(USE_COMPAT_ENDIAN_H,, Define if compat/endian.h is required) 202aa772005SRobert Watson AC_MSG_RESULT([using compat/endian.h]) 203aa772005SRobert Watson]) 204aa772005SRobert Watson 205aa772005SRobert WatsonAC_TRY_LINK([ 206aa772005SRobert Watson #ifdef USE_ENDIAN_H 207aa772005SRobert Watson #include <endian.h> 208aa772005SRobert Watson #endif 209aa772005SRobert Watson #ifdef USE_SYS_ENDIAN_H 210aa772005SRobert Watson #include <sys/endian.h> 211aa772005SRobert Watson #endif 212aa772005SRobert Watson #ifdef USE_MACHINE_ENDIAN_H 213aa772005SRobert Watson #include <machine/endian.h> 214aa772005SRobert Watson #endif 215aa772005SRobert Watson #ifdef USE_COMPAT_ENDIAN_H 216aa772005SRobert Watson #include "compat/endian.h" 217aa772005SRobert Watson #endif 2187a0a89d2SRobert Watson #include <stdlib.h> 2197a0a89d2SRobert Watson], [ 220f7d22997SRobert Watson int i; 221f7d22997SRobert Watson 222f7d22997SRobert Watson i = bswap16(0); 223f7d22997SRobert Watson i = bswap32(0); 224f7d22997SRobert Watson i = bswap64(0); 225aa772005SRobert Watson be32enc(NULL, 0); 226f7d22997SRobert Watson i = htole64(0); 227f7d22997SRobert Watson i = le64toh(0); 228aa772005SRobert Watson], [], [ 229aa772005SRobert Watson AC_DEFINE(USE_COMPAT_ENDIAN_ENC_H,, Define if compat/endian_enc.h is required) 230aa772005SRobert Watson AC_MSG_RESULT([using compat/endian_enc.h]) 2317a0a89d2SRobert Watson]) 2327a0a89d2SRobert Watson 23352267f74SRobert Watson# Check to see if Mach IPC is used for trigger messages. If so, use Mach IPC 23452267f74SRobert Watson# instead of the default for sending trigger messages to the audit components. 23552267f74SRobert WatsonAC_CHECK_FILE([/usr/include/mach/audit_triggers.defs], [ 23652267f74SRobert WatsonAC_DEFINE(USE_MACH_IPC,, Define if uses Mach IPC for Triggers messages) 23752267f74SRobert Watsonuse_mach_ipc=true 23852267f74SRobert Watson], [ 23952267f74SRobert Watsonuse_mach_ipc=false 24052267f74SRobert Watson]) 24152267f74SRobert WatsonAM_CONDITIONAL(USE_MACH_IPC, $use_mach_ipc) 24252267f74SRobert Watson 2433b97a967SRobert WatsonAC_CONFIG_FILES([Makefile 2443b97a967SRobert Watson bin/Makefile 2453b97a967SRobert Watson bin/audit/Makefile 2463b97a967SRobert Watson bin/auditd/Makefile 247aa772005SRobert Watson bin/auditdistd/Makefile 248506764c6SRobert Watson bin/auditfilterd/Makefile 2493b97a967SRobert Watson bin/auditreduce/Makefile 2503b97a967SRobert Watson bin/praudit/Makefile 2513b97a967SRobert Watson bsm/Makefile 2527a0a89d2SRobert Watson libauditd/Makefile 2533b97a967SRobert Watson libbsm/Makefile 254506764c6SRobert Watson modules/Makefile 255506764c6SRobert Watson modules/auditfilter_noop/Makefile 2563b97a967SRobert Watson man/Makefile 25752267f74SRobert Watson sys/Makefile 25852267f74SRobert Watson sys/bsm/Makefile 259506764c6SRobert Watson test/Makefile 260506764c6SRobert Watson test/bsm/Makefile 2613b97a967SRobert Watson tools/Makefile]) 2623b97a967SRobert Watson 2633b97a967SRobert WatsonAC_OUTPUT 264