diff options
Diffstat (limited to 'configure')
-rwxr-xr-x | configure | 314 |
1 files changed, 256 insertions, 58 deletions
diff --git a/configure b/configure index 19eb431816e7..0a28a0cff777 100755 --- a/configure +++ b/configure @@ -13,6 +13,7 @@ IPV4LL= INET6= PRIVSEP= PRIVSEP_USER= +SECCOMP= ARC4RANDOM= CLOSEFROM= RBTREE= @@ -36,6 +37,7 @@ POLL= SMALL= SANITIZE=no STATUSARG= +OPENSSL= DHCPCD_DEFS=dhcpcd-definitions.conf @@ -70,8 +72,10 @@ for x do --enable-auth) AUTH=yes;; --disable-privsep) PRIVSEP=no;; --enable-privsep) PRIVSEP=yes;; + --disable-seccomp) SECCOMP=no;; + --enable-seccomp) SECCOMP=yes;; --privsepuser) PRIVSEP_USER=$var;; - --prefix) PREFIX=$var;; + --prefix) PREFIX=$var;prefix=$var;; # prefix is set for autotools compat --sysconfdir) SYSCONFDIR=$var;; --bindir|--sbindir) SBINDIR=$var;; --libexecdir) LIBEXECDIR=$var;; @@ -107,6 +111,8 @@ for x do --with-udev) DEV=yes; UDEV=yes;; --without-udev) UDEV=no;; --with-poll) POLL="$var";; + --with-openssl) OPENSSL=yes;; + --without-openssl) OPENSSL=no;; --sanitise|--sanitize) SANITIZEADDRESS="yes";; --serviceexists) SERVICEEXISTS=$var;; --servicecmd) SERVICECMD=$var;; @@ -115,7 +121,7 @@ for x do --statusarg) STATUSARG=$var;; --infodir) ;; # ignore autotools --disable-maintainer-mode|--disable-dependency-tracking) ;; - --disable-silent-rules) ;; + --disable-option-checking|--disable-silent-rules) ;; -V|--version) v=$(sed -ne 's/.*VERSION[[:space:]]*"\([^"]*\).*/\1/p' defs.h); c=$(sed -ne 's/^.*copyright\[\] = "\([^"]*\).*/\1/p' dhcpcd.c); @@ -257,6 +263,10 @@ echo "Configuring dhcpcd for ... $OS" rm -f $CONFIG_H $CONFIG_MK echo "# $OS" >$CONFIG_MK echo "/* $OS */" >$CONFIG_H +echo >>$CONFIG_H +echo "#ifndef CONFIG_H">>$CONFIG_H +echo "#define CONFIG_H">>$CONFIG_H +echo >>$CONFIG_H : ${SYSCONFDIR:=$PREFIX/etc} : ${SBINDIR:=$PREFIX/sbin} @@ -357,7 +367,7 @@ else ALLOW_USR_LIBS=true fi case "$OS" in -linux*|solaris*|sunos*|kfreebsd*) ;; +linux*|solaris*|sunos*|kfreebsd*|dragonfly*|freebsd*) ;; *) # There might be more than one ... for LDELFN in /libexec/ld-elf.so.[0-9]*; do @@ -585,7 +595,12 @@ if [ "$PRIVSEP" = yes ]; then echo "PRIVSEP_SRCS+= privsep-bpf.c" >>$CONFIG_MK fi case "$OS" in - linux*) echo "PRIVSEP_SRCS+= privsep-linux.c" >>$CONFIG_MK;; + linux*) + echo "PRIVSEP_SRCS+= privsep-linux.c" >>$CONFIG_MK + if [ -n "$SECCOMP" ] && [ "$SECCOMP" = no ]; then + echo "#define DISABLE_SECCOMP" >>$CONFIG_H + fi + ;; solaris*|sunos*) echo "PRIVSEP_SRCS+= privsep-sun.c" >>$CONFIG_MK;; *) echo "PRIVSEP_SRCS+= privsep-bsd.c" >>$CONFIG_MK;; esac @@ -796,6 +811,28 @@ fi rm -f _clock_gettime.c _clock_gettime $abort && exit 1 +if [ -z "$CLOSEFROM" ]; then + printf "Testing for closefrom ... " + cat <<EOF >_closefrom.c +#include <unistd.h> +int main(void) { + closefrom(3); + return 0; +} +EOF + if $XCC _closefrom.c -o _closefrom 2>&3; then + CLOSEFROM=yes + else + CLOSEFROM=no + fi + echo "$CLOSEFROM" +fi +rm -f _closefrom.c _closefrom +if [ "$CLOSEFROM" = no ]; then + echo "COMPAT_SRCS+= compat/closefrom.c" >>$CONFIG_MK + echo "#include \"compat/closefrom.h\"" >>$CONFIG_H +fi + printf "Testing ioctl request type ... " cat <<EOF >_ioctl.c #include <sys/ioctl.h> @@ -848,8 +885,7 @@ if [ -z "$ARC4RANDOM" ]; then cat <<EOF >_arc4random.c #include <stdlib.h> int main(void) { - arc4random(); - return 0; + return (int)arc4random(); } EOF if $XCC _arc4random.c -o _arc4random 2>&3; then @@ -870,8 +906,7 @@ if [ -z "$ARC4RANDOM_UNIFORM" ]; then cat <<EOF >_arc4random_uniform.c #include <stdlib.h> int main(void) { - arc4random_uniform(100); - return 0; + return (int)arc4random_uniform(100); } EOF if $XCC _arc4random_uniform.c -o _arc4random_uniform 2>&3; then @@ -887,6 +922,76 @@ if [ "$ARC4RANDOM_UNIFORM" = no ]; then echo "#include \"compat/arc4random_uniform.h\"" >>$CONFIG_H fi +# Our arc4random compat needs memset_explicit, explicit_bzero or memset_s +if [ -z "$MEMSET_EXPLICIT" ]; then + printf "Testing for memset_explicit ... " + cat <<EOF >_memset_explicit.c +#include <string.h> +int main(void) { + int a; + (void)memset_explicit(&a, 0, sizeof(a)); + return 0; +} +EOF + if $XCC _memset_explicit.c -o _memset_explicit 2>&3; then + MEMSET_EXPLICIT=yes + else + MEMSET_EXPLICIT=no + fi + echo "$MEMSET_EXPLICIT" + rm -f _memset_explicit.c _memset_explicit +fi +if [ "$MEMSET_EXPLICIT" = yes ]; then + echo "#define HAVE_MEMSET_EXPLICIT" >>$CONFIG_H +fi + +if [ -z "$EXPLICIT_BZERO" ]; then + printf "Testing for explicit_bzero ... " + cat <<EOF >_explicit_bzero.c +#define _BSD_SOURCE // musl, will be added for Linux in config.h +#include <string.h> +int main(void) { + int a; + explicit_bzero(&a, sizeof(a)); + return 0; +} +EOF + if $XCC _explicit_bzero.c -o _explicit_bzero 2>&3; then + EXPLICIT_BZERO=yes + else + EXPLICIT_BZERO=no + fi + echo "$EXPLICIT_BZERO" + rm -f _explicit_bzero.c _explicit_bzero +fi +if [ "$EXPLICIT_BZERO" = yes ]; then + echo "#define HAVE_EXPLICIT_BZERO" >>$CONFIG_H +fi + +if [ -z "$MEMSET_S" ]; then + printf "Testing for memset_s ... " + cat <<EOF >_memset_s.c +#define __STDC_WANT_LIB_EXT1__ 1 +#include <string.h> +int main(void) { + int a; + memset_s(&a, sizeof(a), 0, sizeof(a)); + return 0; +} +EOF + if $XCC _memset_s.c -o _memset_s 2>&3; then + MEMSET_S=yes + else + MEMSET_S=no + fi + echo "$MEMSET_S" + rm -f _memset_s.c _memset_s +fi +if [ "$MEMSET_S" = yes ]; then + echo "#define __STDC_WANT_LIB_EXT1__ 1" >>$CONFIG_H + echo "#define HAVE_MEMSET_S" >>$CONFIG_H +fi + if [ -z "$OPEN_MEMSTREAM" ]; then printf "Testing for open_memstream ... " cat <<EOF >_open_memstream.c @@ -915,8 +1020,7 @@ if [ -z "$PIDFILE_LOCK" ]; then #include <stdlib.h> #include <util.h> int main(void) { - pidfile_lock(NULL); - return 0; + return (int)pidfile_lock(NULL); } EOF # We only want to link to libutil if it exists in /lib @@ -985,8 +1089,7 @@ if [ -z "$STRLCPY" ]; then int main(void) { const char s1[] = "foo"; char s2[10]; - strlcpy(s2, s1, sizeof(s2)); - return 0; + return (int)strlcpy(s2, s1, sizeof(s2)); } EOF if $XCC _strlcpy.c -o _strlcpy 2>&3; then @@ -1010,8 +1113,7 @@ if [ -z "$STRTOI" ]; then #include <inttypes.h> int main(void) { int e; - strtoi("1234", NULL, 0, 0, INT32_MAX, &e); - return 0; + return (int)strtoi("1234", NULL, 0, 0, INT32_MAX, &e); } EOF if $XCC _strtoi.c -o _strtoi 2>&3; then @@ -1189,6 +1291,7 @@ EOF rm -f _rbtree.c _rbtree fi if [ "$RBTREE" = no ]; then + echo "#define HAVE_NBTOOL_CONFIG_H 0" >>$CONFIG_H echo "#define RBTEST" >>$CONFIG_H echo "COMPAT_SRCS+= compat/rb.c" >>$CONFIG_MK echo "#include \"compat/rbtree.h\"" >>$CONFIG_H @@ -1221,6 +1324,9 @@ fi # Set this for eloop echo "#define HAVE_REALLOCARRAY" >>$CONFIG_H +# Detect a polling mechanism. +# See src/eloop.c as to why we only detect ppoll, pollts and pselect and +# not others like epoll or kqueue. if [ -z "$POLL" ]; then printf "Testing for ppoll ... " cat <<EOF >_ppoll.c @@ -1263,8 +1369,7 @@ if [ -z "$POLL" ]; then #include <sys/select.h> #include <stdlib.h> int main(void) { - pselect(0, NULL, NULL, NULL, NULL, NULL); - return 0; + return pselect(0, NULL, NULL, NULL, NULL, NULL); } EOF if $XCC _pselect.c -o _pselect 2>&3; then @@ -1276,6 +1381,17 @@ EOF rm -f _pselect.c _pselect fi case "$POLL" in +kqueue1) + echo "#define HAVE_KQUEUE" >>$CONFIG_H + echo "#define HAVE_KQUEUE1" >>$CONFIG_H + POLL=kqueue + ;; +kqueue) + echo "#define HAVE_KQUEUE" >>$CONFIG_H + ;; +epoll) + echo "#define HAVE_EPOLL" >>$CONFIG_H + ;; ppoll) echo "#define HAVE_PPOLL" >>$CONFIG_H ;; @@ -1333,14 +1449,6 @@ if [ "$FLS64" = yes ]; then echo "#define HAVE_SYS_BITOPS_H" >>$CONFIG_H fi -# Workaround for DragonFlyBSD import -if [ "$OS" = dragonfly ]; then - echo "#ifdef USE_PRIVATECRYPTO" >>$CONFIG_H - echo "#define HAVE_MD5_H" >>$CONFIG_H - echo "#define SHA2_H <openssl/sha.h>" >>$CONFIG_H - echo "#else" >>$CONFIG_H -fi - if [ -z "$MD5" ]; then MD5_LIB= printf "Testing for MD5Init ... " @@ -1371,14 +1479,6 @@ EOF echo "$MD5" rm -f _md5.c _md5 fi -if [ "$MD5" = no ]; then - echo "#include \"compat/crypt/md5.h\"" >>$CONFIG_H - echo "MD5_SRC= compat/crypt/md5.c" >>$CONFIG_MK -else - echo "MD5_SRC=" >>$CONFIG_MK - echo "#define HAVE_MD5_H" >>$CONFIG_H - [ -n "$MD5_LIB" ] && echo "LDADD+= $MD5_LIB" >>$CONFIG_MK -fi if [ -z "$SHA2_H" ]; then if [ -z "$SHA2" ] || [ "$SHA2" != no ]; then @@ -1464,23 +1564,6 @@ EOF rm -f _sha256.c _sha256 fi fi -if [ "$SHA2" = no ]; then - echo "#include \"compat/crypt/sha256.h\"" >>$CONFIG_H - echo "SHA256_SRC= compat/crypt/sha256.c" >>$CONFIG_MK -else - echo "SHA256_SRC=" >>$CONFIG_MK - echo "#define SHA2_H <$SHA2_H>" >>$CONFIG_H - if [ "$SHA2_RENAMED" = yes ]; then - echo "#define SHA256_CTX SHA2_CTX" >>$CONFIG_H - echo "#define SHA256_Init SHA256Init" >>$CONFIG_H - echo "#define SHA256_Update SHA256Update" >>$CONFIG_H - echo "#define SHA256_Final SHA256Final" >>$CONFIG_H - fi - [ -n "$SHA2_LIB" ] && echo "LDADD+= $SHA2_LIB" >>$CONFIG_MK -fi - -# Workarond for DragonFlyBSD import -[ "$OS" = dragonfly ] && echo "#endif" >>$CONFIG_H if [ -z "$HMAC" ]; then HMAC_LIB= @@ -1489,8 +1572,7 @@ if [ -z "$HMAC" ]; then #include <stdlib.h> #include <hmac.h> int main(void) { - hmac(NULL, NULL, 0, NULL, 0, NULL, 0); - return 0; + return (int)hmac(NULL, NULL, 0, NULL, 0, NULL, 0); } EOF if $XCC _hmac.c $MD5_LIB -o _hmac 2>&3; then @@ -1502,8 +1584,7 @@ EOF cat <<EOF >_hmac.c #include <stdlib.h> int main(void) { - hmac(NULL, NULL, 0, NULL, 0, NULL, 0); - return 0; + return (int)hmac(NULL, NULL, 0, NULL, 0, NULL, 0); } EOF if $XCC _hmac.c $MD5_LIB -o _hmac 2>&3; then @@ -1515,7 +1596,108 @@ EOF echo "$HMAC" rm -f _hmac.c _hmac fi -if [ "$HMAC" = no ]; then + +if [ "$OPENSSL" = yes ] || + { [ -z "$OPENSSL" ] && [ "$ALLOW_USR_LIBS" = true ] && + [ "$SHA2" = no ] && [ "$HMAC" = no ]; + }; then + printf "Testing for openssl ... " + if type "$PKG_CONFIG" >/dev/null 2>&1; then + LIBCRYPTO_CFLAGS=$("$PKG_CONFIG" --cflags libcrypto 2>&3) + LIBCRYPTO_LIBS=$("$PKG_CONFIG" --libs libcrypto 2>&3) + fi + + cat <<EOF >_openssl.c +#include <stdio.h> +#include <openssl/crypto.h> +int main(void) { + return OPENSSL_init_crypto(0, NULL) == 1; +} +EOF + if $XCC $LIBCRYPTO_CFLAGS _openssl.c -o _openssl $LIBCRYPTO_LIBS 2>&3; + then + OPENSSL=yes + MD5=yes + MD5_LIB= + if [ -n "$LIBCRYPTO_CFLAGS" ]; then + echo "CFLAGS+= $LIBCRYPTO_CFLAGS" >>$CONFIG_MK + fi + echo "LDADD+= $LIBCRYPTO_LIBS" >>$CONFIG_MK + echo "#define HAVE_OPENSSL" >>$CONFIG_H + else + OPENSSL=no + fi + echo "$OPENSSL" + rm -f _openssl.c _openssl +fi + +if [ "$OPENSSL" = yes ]; then + printf "Testing for openssl/sha.h ... " + cat <<EOF >_openssl_sha.c +#include <stdio.h> +#include <openssl/sha.h> + +int main(void) { + SHA256_CTX ctx; + SHA256_Init(&ctx); + return 0; +} +EOF + if $XCC $LIBCRYPTO_CFLAGS _openssl_sha.c -o _openssl_sha \ + $LIBCRYPTO_LIBS 2>&3; then + SHA2_H=openssl/sha.h + SHA2="yes (-lcrypto)" + else + SHA2=no + fi + SHA2_LIB= + SHA2_RENAMED= + echo "$SHA2" + rm -f _openssl_sha.c _openssl_sha +fi + +# Workaround for DragonFlyBSD import +if [ "$OS" = dragonfly ]; then + echo "#ifdef USE_PRIVATECRYPTO" >>$CONFIG_H + echo "#define HAVE_MD5_H" >>$CONFIG_H + echo "#define SHA2_H <openssl/sha.h>" >>$CONFIG_H + echo "#else" >>$CONFIG_H +fi + +if [ "$MD5" = no ]; then + echo "#include \"compat/crypt/md5.h\"" >>$CONFIG_H + echo "MD5_SRC= compat/crypt/md5.c" >>$CONFIG_MK +else + echo "MD5_SRC=" >>$CONFIG_MK + [ "$OPENSSL" != yes ] && echo "#define HAVE_MD5_H" >>$CONFIG_H + [ -n "$MD5_LIB" ] && echo "LDADD+= $MD5_LIB" >>$CONFIG_MK +fi + +if [ "$OPENSSL" = yes ] && [ "$SHA2" = no ]; then + echo "#include \"compat/crypt_openssl/sha256.h\"" >>$CONFIG_H + echo "SHA256_SRC= compat/crypt_openssl/sha256.c" >>$CONFIG_MK +elif [ "$SHA2" = no ]; then + echo "#include \"compat/crypt/sha256.h\"" >>$CONFIG_H + echo "SHA256_SRC= compat/crypt/sha256.c" >>$CONFIG_MK +else + echo "SHA256_SRC=" >>$CONFIG_MK + echo "#define SHA2_H <$SHA2_H>" >>$CONFIG_H + if [ "$SHA2_RENAMED" = yes ]; then + echo "#define SHA256_CTX SHA2_CTX" >>$CONFIG_H + echo "#define SHA256_Init SHA256Init" >>$CONFIG_H + echo "#define SHA256_Update SHA256Update" >>$CONFIG_H + echo "#define SHA256_Final SHA256Final" >>$CONFIG_H + fi + [ -n "$SHA2_LIB" ] && echo "LDADD+= $SHA2_LIB" >>$CONFIG_MK +fi + +# Workarond for DragonFlyBSD import +[ "$OS" = dragonfly ] && echo "#endif" >>$CONFIG_H + +if [ "$OPENSSL" = yes ]; then + echo "#include \"compat/crypt_openssl/hmac.h\"" >>$CONFIG_H + echo "HMAC_SRC= compat/crypt_openssl/hmac.c" >>$CONFIG_MK +elif [ "$HMAC" = no ]; then echo "#include \"compat/crypt/hmac.h\"" >>$CONFIG_H echo "HMAC_SRC= compat/crypt/hmac.c" >>$CONFIG_MK else @@ -1575,8 +1757,7 @@ if [ "$DEV" != no ] && [ "$UDEV" != no ] && [ -n "$LIBUDEV_LIBS" ]; then #include <libudev.h> #include <stdlib.h> int main(void) { - udev_monitor_filter_add_match_subsystem_devtype(NULL, NULL, NULL); - return 0; + return udev_monitor_filter_add_match_subsystem_devtype(NULL, NULL, NULL); } EOF if $XCC $LIBUDEV_CFLAGS _udev.c -o _udev $LIBUDEV_LIBS 2>&3 @@ -1593,8 +1774,7 @@ EOF #include <libudev.h> #include <stdlib.h> int main(void) { - udev_device_get_is_initialized(NULL); - return 0; + return udev_device_get_is_initialized(NULL); } EOF if $XCC $LIBUDEV_CFLAGS _udev.c -o _udev $LIBUDEV_LIBS 2>&3 @@ -1693,6 +1873,21 @@ if ! $HOOKSET; then echo "NTP will default to $NTPD" fi + printf "Checking for timesyncd ... " + TIMESYNCD= + for x in /usr/lib/systemd/systemd-timesyncd; do + if [ -x "$x" ]; then + TIMESYNCD=$x + break + fi + done + if [ -n "$TIMESYNCD" ]; then + echo "$TIMESYNCD" + HOOKS="$HOOKS${HOOKS:+ }50-timesyncd.conf" + else + echo "not found" + fi + printf "Checking for ypbind ... " YPBIND=$(_which ypbind) if [ -n "$YPBIND" ]; then @@ -1749,6 +1944,9 @@ if ! $HOOKSET; then fi fi +echo >>$CONFIG_H +echo "#endif /*CONFIG_H*/">>$CONFIG_H + find_hook() { for h in [0-9][0-9]"-$x" [0-9][0-9]"-$x.in" \ |