1# 2# Copyright (c) 1999-2004 Damien Miller 3# 4# Permission to use, copy, modify, and distribute this software for any 5# purpose with or without fee is hereby granted, provided that the above 6# copyright notice and this permission notice appear in all copies. 7# 8# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 11# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 13# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15 16AC_INIT([OpenSSH], [Portable], [openssh-unix-dev@mindrot.org]) 17AC_CONFIG_MACRO_DIR([m4]) 18AC_CONFIG_SRCDIR([ssh.c]) 19AC_LANG([C]) 20 21AC_CONFIG_HEADERS([config.h]) 22AC_PROG_CC([cc gcc]) 23 24# XXX relax this after reimplementing logit() etc. 25AC_MSG_CHECKING([if $CC supports C99-style variadic macros]) 26AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 27int f(int a, int b, int c) { return a + b + c; } 28#define F(a, ...) f(a, __VA_ARGS__) 29]], [[return F(1, 2, -3);]])], 30 [ AC_MSG_RESULT([yes]) ], 31 [ AC_MSG_ERROR([*** OpenSSH requires support for C99-style variadic macros]) ] 32) 33 34AC_CANONICAL_HOST 35AC_C_BIGENDIAN 36 37# Checks for programs. 38AC_PROG_AWK 39AC_PROG_CPP 40AC_PROG_RANLIB 41AC_PROG_INSTALL 42AC_PROG_EGREP 43AC_PROG_MKDIR_P 44AC_CHECK_TOOLS([AR], [ar]) 45AC_PATH_PROG([CAT], [cat]) 46AC_PATH_PROG([KILL], [kill]) 47AC_PATH_PROG([SED], [sed]) 48AC_PATH_PROG([TEST_MINUS_S_SH], [bash]) 49AC_PATH_PROG([TEST_MINUS_S_SH], [ksh]) 50AC_PATH_PROG([TEST_MINUS_S_SH], [sh]) 51AC_PATH_PROG([SH], [sh]) 52AC_PATH_PROG([GROFF], [groff]) 53AC_PATH_PROG([NROFF], [nroff awf]) 54AC_PATH_PROG([MANDOC], [mandoc]) 55AC_SUBST([TEST_SHELL], [sh]) 56 57dnl select manpage formatter to be used to build "cat" format pages. 58if test "x$MANDOC" != "x" ; then 59 MANFMT="$MANDOC" 60elif test "x$NROFF" != "x" ; then 61 MANFMT="$NROFF -mandoc" 62elif test "x$GROFF" != "x" ; then 63 MANFMT="$GROFF -mandoc -Tascii" 64else 65 AC_MSG_WARN([no manpage formatter found]) 66 MANFMT="false" 67fi 68AC_SUBST([MANFMT]) 69 70dnl for buildpkg.sh 71AC_PATH_PROG([PATH_GROUPADD_PROG], [groupadd], [groupadd], 72 [/usr/sbin${PATH_SEPARATOR}/etc]) 73AC_PATH_PROG([PATH_USERADD_PROG], [useradd], [useradd], 74 [/usr/sbin${PATH_SEPARATOR}/etc]) 75AC_CHECK_PROG([MAKE_PACKAGE_SUPPORTED], [pkgmk], [yes], [no]) 76if test -x /sbin/sh; then 77 AC_SUBST([STARTUP_SCRIPT_SHELL], [/sbin/sh]) 78else 79 AC_SUBST([STARTUP_SCRIPT_SHELL], [/bin/sh]) 80fi 81 82# System features 83AC_SYS_LARGEFILE 84 85if test -z "$AR" ; then 86 AC_MSG_ERROR([*** 'ar' missing, please install or fix your \$PATH ***]) 87fi 88 89AC_PATH_PROG([PATH_PASSWD_PROG], [passwd]) 90if test ! -z "$PATH_PASSWD_PROG" ; then 91 AC_DEFINE_UNQUOTED([_PATH_PASSWD_PROG], ["$PATH_PASSWD_PROG"], 92 [Full path of your "passwd" program]) 93fi 94 95dnl Since autoconf doesn't support it very well, we no longer allow users to 96dnl override LD, however keeping the hook here for now in case there's a use 97dnl use case we overlooked and someone needs to re-enable it. Unless a good 98dnl reason is found we'll be removing this in future. 99LD="$CC" 100AC_SUBST([LD]) 101 102AC_C_INLINE 103 104AC_CHECK_DECL([LLONG_MAX], [have_llong_max=1], , [#include <limits.h>]) 105AC_CHECK_DECL([LONG_LONG_MAX], [have_long_long_max=1], , [#include <limits.h>]) 106AC_CHECK_DECL([SYSTR_POLICY_KILL], [have_systr_policy_kill=1], , [ 107 #include <sys/types.h> 108 #include <sys/param.h> 109 #include <dev/systrace.h> 110]) 111AC_CHECK_DECL([RLIMIT_NPROC], 112 [AC_DEFINE([HAVE_RLIMIT_NPROC], [], [sys/resource.h has RLIMIT_NPROC])], , [ 113 #include <sys/types.h> 114 #include <sys/resource.h> 115]) 116AC_CHECK_DECL([PR_SET_NO_NEW_PRIVS], [have_linux_no_new_privs=1], , [ 117 #include <sys/types.h> 118 #include <linux/prctl.h> 119]) 120 121openssl=yes 122AC_ARG_WITH([openssl], 123 [ --without-openssl Disable use of OpenSSL; use only limited internal crypto **EXPERIMENTAL** ], 124 [ if test "x$withval" = "xno" ; then 125 openssl=no 126 fi 127 ] 128) 129AC_MSG_CHECKING([whether OpenSSL will be used for cryptography]) 130if test "x$openssl" = "xyes" ; then 131 AC_MSG_RESULT([yes]) 132 AC_DEFINE_UNQUOTED([WITH_OPENSSL], [1], [use libcrypto for cryptography]) 133else 134 AC_MSG_RESULT([no]) 135fi 136 137use_stack_protector=1 138use_toolchain_hardening=1 139AC_ARG_WITH([stackprotect], 140 [ --without-stackprotect Don't use compiler's stack protection], [ 141 if test "x$withval" = "xno"; then 142 use_stack_protector=0 143 fi ]) 144AC_ARG_WITH([hardening], 145 [ --without-hardening Don't use toolchain hardening flags], [ 146 if test "x$withval" = "xno"; then 147 use_toolchain_hardening=0 148 fi ]) 149 150# We use -Werror for the tests only so that we catch warnings like "this is 151# on by default" for things like -fPIE. 152AC_MSG_CHECKING([if $CC supports -Werror]) 153saved_CFLAGS="$CFLAGS" 154CFLAGS="$CFLAGS -Werror" 155AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int main(void) { return 0; }]])], 156 [ AC_MSG_RESULT([yes]) 157 WERROR="-Werror"], 158 [ AC_MSG_RESULT([no]) 159 WERROR="" ] 160) 161CFLAGS="$saved_CFLAGS" 162 163if test "$GCC" = "yes" || test "$GCC" = "egcs"; then 164 OSSH_CHECK_CFLAG_COMPILE([-pipe]) 165 OSSH_CHECK_CFLAG_COMPILE([-Wunknown-warning-option]) 166 OSSH_CHECK_CFLAG_COMPILE([-Wno-error=format-truncation]) 167 OSSH_CHECK_CFLAG_COMPILE([-Qunused-arguments]) 168 OSSH_CHECK_CFLAG_COMPILE([-Wall]) 169 OSSH_CHECK_CFLAG_COMPILE([-Wextra]) 170 OSSH_CHECK_CFLAG_COMPILE([-Wpointer-arith]) 171 OSSH_CHECK_CFLAG_COMPILE([-Wuninitialized]) 172 OSSH_CHECK_CFLAG_COMPILE([-Wsign-compare]) 173 OSSH_CHECK_CFLAG_COMPILE([-Wformat-security]) 174 OSSH_CHECK_CFLAG_COMPILE([-Wsizeof-pointer-memaccess]) 175 OSSH_CHECK_CFLAG_COMPILE([-Wpointer-sign], [-Wno-pointer-sign]) 176 OSSH_CHECK_CFLAG_COMPILE([-Wunused-parameter], [-Wno-unused-parameter]) 177 OSSH_CHECK_CFLAG_COMPILE([-Wunused-result], [-Wno-unused-result]) 178 OSSH_CHECK_CFLAG_COMPILE([-Wimplicit-fallthrough]) 179 OSSH_CHECK_CFLAG_COMPILE([-fno-strict-aliasing]) 180 if test "x$use_toolchain_hardening" = "x1"; then 181 OSSH_CHECK_CFLAG_COMPILE([-mretpoline]) # clang 182 OSSH_CHECK_LDFLAG_LINK([-Wl,-z,retpolineplt]) 183 OSSH_CHECK_CFLAG_COMPILE([-D_FORTIFY_SOURCE=2]) 184 OSSH_CHECK_LDFLAG_LINK([-Wl,-z,relro]) 185 OSSH_CHECK_LDFLAG_LINK([-Wl,-z,now]) 186 OSSH_CHECK_LDFLAG_LINK([-Wl,-z,noexecstack]) 187 # NB. -ftrapv expects certain support functions to be present in 188 # the compiler library (libgcc or similar) to detect integer operations 189 # that can overflow. We must check that the result of enabling it 190 # actually links. The test program compiled/linked includes a number 191 # of integer operations that should exercise this. 192 OSSH_CHECK_CFLAG_LINK([-ftrapv]) 193 fi 194 AC_MSG_CHECKING([gcc version]) 195 GCC_VER=`$CC -v 2>&1 | $AWK '/gcc version /{print $3}'` 196 case $GCC_VER in 197 1.*) no_attrib_nonnull=1 ;; 198 2.8* | 2.9*) 199 no_attrib_nonnull=1 200 ;; 201 2.*) no_attrib_nonnull=1 ;; 202 *) ;; 203 esac 204 AC_MSG_RESULT([$GCC_VER]) 205 206 AC_MSG_CHECKING([if $CC accepts -fno-builtin-memset]) 207 saved_CFLAGS="$CFLAGS" 208 CFLAGS="$CFLAGS -fno-builtin-memset" 209 AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include <string.h> ]], 210 [[ char b[10]; memset(b, 0, sizeof(b)); ]])], 211 [ AC_MSG_RESULT([yes]) ], 212 [ AC_MSG_RESULT([no]) 213 CFLAGS="$saved_CFLAGS" ] 214 ) 215 216 # -fstack-protector-all doesn't always work for some GCC versions 217 # and/or platforms, so we test if we can. If it's not supported 218 # on a given platform gcc will emit a warning so we use -Werror. 219 if test "x$use_stack_protector" = "x1"; then 220 for t in -fstack-protector-strong -fstack-protector-all \ 221 -fstack-protector; do 222 AC_MSG_CHECKING([if $CC supports $t]) 223 saved_CFLAGS="$CFLAGS" 224 saved_LDFLAGS="$LDFLAGS" 225 CFLAGS="$CFLAGS $t -Werror" 226 LDFLAGS="$LDFLAGS $t -Werror" 227 AC_LINK_IFELSE( 228 [AC_LANG_PROGRAM([[ 229 #include <stdio.h> 230 int func (int t) {char b[100]; snprintf(b,sizeof b,"%d",t); return t;} 231 ]], 232 [[ 233 char x[256]; 234 snprintf(x, sizeof(x), "XXX%d", func(1)); 235 ]])], 236 [ AC_MSG_RESULT([yes]) 237 CFLAGS="$saved_CFLAGS $t" 238 LDFLAGS="$saved_LDFLAGS $t" 239 AC_MSG_CHECKING([if $t works]) 240 AC_RUN_IFELSE( 241 [AC_LANG_PROGRAM([[ 242 #include <stdio.h> 243 int func (int t) {char b[100]; snprintf(b,sizeof b,"%d",t); return t;} 244 ]], 245 [[ 246 char x[256]; 247 snprintf(x, sizeof(x), "XXX%d", func(1)); 248 ]])], 249 [ AC_MSG_RESULT([yes]) 250 break ], 251 [ AC_MSG_RESULT([no]) ], 252 [ AC_MSG_WARN([cross compiling: cannot test]) 253 break ] 254 ) 255 ], 256 [ AC_MSG_RESULT([no]) ] 257 ) 258 CFLAGS="$saved_CFLAGS" 259 LDFLAGS="$saved_LDFLAGS" 260 done 261 fi 262 263 if test -z "$have_llong_max"; then 264 # retry LLONG_MAX with -std=gnu99, needed on some Linuxes 265 unset ac_cv_have_decl_LLONG_MAX 266 saved_CFLAGS="$CFLAGS" 267 CFLAGS="$CFLAGS -std=gnu99" 268 AC_CHECK_DECL([LLONG_MAX], 269 [have_llong_max=1], 270 [CFLAGS="$saved_CFLAGS"], 271 [#include <limits.h>] 272 ) 273 fi 274fi 275 276AC_MSG_CHECKING([if compiler allows __attribute__ on return types]) 277AC_COMPILE_IFELSE( 278 [AC_LANG_PROGRAM([[ 279#include <stdlib.h> 280__attribute__((__unused__)) static void foo(void){return;}]], 281 [[ exit(0); ]])], 282 [ AC_MSG_RESULT([yes]) ], 283 [ AC_MSG_RESULT([no]) 284 AC_DEFINE(NO_ATTRIBUTE_ON_RETURN_TYPE, 1, 285 [compiler does not accept __attribute__ on return types]) ] 286) 287 288AC_MSG_CHECKING([if compiler allows __attribute__ prototype args]) 289AC_COMPILE_IFELSE( 290 [AC_LANG_PROGRAM([[ 291#include <stdlib.h> 292typedef void foo(const char *, ...) __attribute__((format(printf, 1, 2)));]], 293 [[ exit(0); ]])], 294 [ AC_MSG_RESULT([yes]) ], 295 [ AC_MSG_RESULT([no]) 296 AC_DEFINE(NO_ATTRIBUTE_ON_PROTOTYPE_ARGS, 1, 297 [compiler does not accept __attribute__ on prototype args]) ] 298) 299 300AC_MSG_CHECKING([if compiler supports variable length arrays]) 301AC_COMPILE_IFELSE( 302 [AC_LANG_PROGRAM([[#include <stdlib.h>]], 303 [[ int i; for (i=0; i<3; i++){int a[i]; a[i-1]=0;} exit(0); ]])], 304 [ AC_MSG_RESULT([yes]) 305 AC_DEFINE(VARIABLE_LENGTH_ARRAYS, [1], 306 [compiler supports variable length arrays]) ], 307 [ AC_MSG_RESULT([no]) ] 308) 309 310AC_MSG_CHECKING([if compiler accepts variable declarations after code]) 311AC_COMPILE_IFELSE( 312 [AC_LANG_PROGRAM([[#include <stdlib.h>]], 313 [[ int a; a = 1; int b = 1; exit(a-b); ]])], 314 [ AC_MSG_RESULT([yes]) 315 AC_DEFINE(VARIABLE_DECLARATION_AFTER_CODE, [1], 316 [compiler variable declarations after code]) ], 317 [ AC_MSG_RESULT([no]) ] 318) 319 320if test "x$no_attrib_nonnull" != "x1" ; then 321 AC_DEFINE([HAVE_ATTRIBUTE__NONNULL__], [1], [Have attribute nonnull]) 322fi 323 324AC_ARG_WITH([rpath], 325 [ --without-rpath Disable auto-added -R linker paths], 326 [ 327 if test "x$withval" = "xno" ; then 328 rpath_opt="" 329 elif test "x$withval" = "xyes" ; then 330 rpath_opt="-R" 331 else 332 rpath_opt="$withval" 333 fi 334 ] 335) 336 337# Allow user to specify flags 338AC_ARG_WITH([cflags], 339 [ --with-cflags Specify additional flags to pass to compiler], 340 [ 341 if test -n "$withval" && test "x$withval" != "xno" && \ 342 test "x${withval}" != "xyes"; then 343 CFLAGS="$CFLAGS $withval" 344 fi 345 ] 346) 347 348AC_ARG_WITH([cflags-after], 349 [ --with-cflags-after Specify additional flags to pass to compiler after configure], 350 [ 351 if test -n "$withval" && test "x$withval" != "xno" && \ 352 test "x${withval}" != "xyes"; then 353 CFLAGS_AFTER="$withval" 354 fi 355 ] 356) 357AC_ARG_WITH([cppflags], 358 [ --with-cppflags Specify additional flags to pass to preprocessor] , 359 [ 360 if test -n "$withval" && test "x$withval" != "xno" && \ 361 test "x${withval}" != "xyes"; then 362 CPPFLAGS="$CPPFLAGS $withval" 363 fi 364 ] 365) 366AC_ARG_WITH([ldflags], 367 [ --with-ldflags Specify additional flags to pass to linker], 368 [ 369 if test -n "$withval" && test "x$withval" != "xno" && \ 370 test "x${withval}" != "xyes"; then 371 LDFLAGS="$LDFLAGS $withval" 372 fi 373 ] 374) 375AC_ARG_WITH([ldflags-after], 376 [ --with-ldflags-after Specify additional flags to pass to linker after configure], 377 [ 378 if test -n "$withval" && test "x$withval" != "xno" && \ 379 test "x${withval}" != "xyes"; then 380 LDFLAGS_AFTER="$withval" 381 fi 382 ] 383) 384AC_ARG_WITH([libs], 385 [ --with-libs Specify additional libraries to link with], 386 [ 387 if test -n "$withval" && test "x$withval" != "xno" && \ 388 test "x${withval}" != "xyes"; then 389 LIBS="$LIBS $withval" 390 fi 391 ] 392) 393AC_ARG_WITH([Werror], 394 [ --with-Werror Build main code with -Werror], 395 [ 396 if test -n "$withval" && test "x$withval" != "xno"; then 397 werror_flags="-Werror" 398 if test "x${withval}" != "xyes"; then 399 werror_flags="$withval" 400 fi 401 fi 402 ] 403) 404 405AC_CHECK_HEADERS([ \ 406 blf.h \ 407 bstring.h \ 408 crypt.h \ 409 crypto/sha2.h \ 410 dirent.h \ 411 endian.h \ 412 elf.h \ 413 err.h \ 414 features.h \ 415 fcntl.h \ 416 floatingpoint.h \ 417 fnmatch.h \ 418 getopt.h \ 419 glob.h \ 420 ia.h \ 421 iaf.h \ 422 ifaddrs.h \ 423 inttypes.h \ 424 langinfo.h \ 425 limits.h \ 426 locale.h \ 427 login.h \ 428 maillock.h \ 429 ndir.h \ 430 net/if_tun.h \ 431 netdb.h \ 432 netgroup.h \ 433 pam/pam_appl.h \ 434 paths.h \ 435 poll.h \ 436 pty.h \ 437 readpassphrase.h \ 438 rpc/types.h \ 439 security/pam_appl.h \ 440 sha2.h \ 441 shadow.h \ 442 stddef.h \ 443 stdint.h \ 444 string.h \ 445 strings.h \ 446 sys/bitypes.h \ 447 sys/byteorder.h \ 448 sys/bsdtty.h \ 449 sys/cdefs.h \ 450 sys/dir.h \ 451 sys/file.h \ 452 sys/mman.h \ 453 sys/label.h \ 454 sys/ndir.h \ 455 sys/poll.h \ 456 sys/prctl.h \ 457 sys/procctl.h \ 458 sys/pstat.h \ 459 sys/ptrace.h \ 460 sys/random.h \ 461 sys/select.h \ 462 sys/stat.h \ 463 sys/stream.h \ 464 sys/stropts.h \ 465 sys/strtio.h \ 466 sys/statvfs.h \ 467 sys/sysmacros.h \ 468 sys/time.h \ 469 sys/timers.h \ 470 sys/vfs.h \ 471 time.h \ 472 tmpdir.h \ 473 ttyent.h \ 474 ucred.h \ 475 unistd.h \ 476 usersec.h \ 477 util.h \ 478 utime.h \ 479 utmp.h \ 480 utmpx.h \ 481 vis.h \ 482 wchar.h \ 483]) 484 485# On some platforms (eg SunOS4) sys/audit.h requires sys/[time|types|label.h] 486# to be included first. 487AC_CHECK_HEADERS([sys/audit.h], [], [], [ 488#ifdef HAVE_SYS_TIME_H 489# include <sys/time.h> 490#endif 491#ifdef HAVE_SYS_TYPES_H 492# include <sys/types.h> 493#endif 494#ifdef HAVE_SYS_LABEL_H 495# include <sys/label.h> 496#endif 497]) 498 499# sys/capsicum.h requires sys/types.h 500AC_CHECK_HEADERS([sys/capsicum.h], [], [], [ 501#ifdef HAVE_SYS_TYPES_H 502# include <sys/types.h> 503#endif 504]) 505 506# net/route.h requires sys/socket.h and sys/types.h. 507# sys/sysctl.h also requires sys/param.h 508AC_CHECK_HEADERS([net/route.h sys/sysctl.h], [], [], [ 509#ifdef HAVE_SYS_TYPES_H 510# include <sys/types.h> 511#endif 512#include <sys/param.h> 513#include <sys/socket.h> 514]) 515 516# lastlog.h requires sys/time.h to be included first on Solaris 517AC_CHECK_HEADERS([lastlog.h], [], [], [ 518#ifdef HAVE_SYS_TIME_H 519# include <sys/time.h> 520#endif 521]) 522 523# sys/ptms.h requires sys/stream.h to be included first on Solaris 524AC_CHECK_HEADERS([sys/ptms.h], [], [], [ 525#ifdef HAVE_SYS_STREAM_H 526# include <sys/stream.h> 527#endif 528]) 529 530# login_cap.h requires sys/types.h on NetBSD 531AC_CHECK_HEADERS([login_cap.h], [], [], [ 532#include <sys/types.h> 533]) 534 535# older BSDs need sys/param.h before sys/mount.h 536AC_CHECK_HEADERS([sys/mount.h], [], [], [ 537#include <sys/param.h> 538]) 539 540# Android requires sys/socket.h to be included before sys/un.h 541AC_CHECK_HEADERS([sys/un.h], [], [], [ 542#include <sys/types.h> 543#include <sys/socket.h> 544]) 545 546# Messages for features tested for in target-specific section 547SIA_MSG="no" 548SPC_MSG="no" 549SP_MSG="no" 550SPP_MSG="no" 551 552# Support for Solaris/Illumos privileges (this test is used by both 553# the --with-solaris-privs option and --with-sandbox=solaris). 554SOLARIS_PRIVS="no" 555 556# Check for some target-specific stuff 557case "$host" in 558*-*-aix*) 559 # Some versions of VAC won't allow macro redefinitions at 560 # -qlanglevel=ansi, and autoconf 2.60 sometimes insists on using that 561 # particularly with older versions of vac or xlc. 562 # It also throws errors about null macro arguments, but these are 563 # not fatal. 564 AC_MSG_CHECKING([if compiler allows macro redefinitions]) 565 AC_COMPILE_IFELSE( 566 [AC_LANG_PROGRAM([[ 567#define testmacro foo 568#define testmacro bar]], 569 [[ exit(0); ]])], 570 [ AC_MSG_RESULT([yes]) ], 571 [ AC_MSG_RESULT([no]) 572 CC="`echo $CC | sed 's/-qlanglvl\=ansi//g'`" 573 CFLAGS="`echo $CFLAGS | sed 's/-qlanglvl\=ansi//g'`" 574 CPPFLAGS="`echo $CPPFLAGS | sed 's/-qlanglvl\=ansi//g'`" 575 ] 576 ) 577 578 AC_MSG_CHECKING([how to specify blibpath for linker ($LD)]) 579 if (test -z "$blibpath"); then 580 blibpath="/usr/lib:/lib" 581 fi 582 saved_LDFLAGS="$LDFLAGS" 583 if test "$GCC" = "yes"; then 584 flags="-Wl,-blibpath: -Wl,-rpath, -blibpath:" 585 else 586 flags="-blibpath: -Wl,-blibpath: -Wl,-rpath," 587 fi 588 for tryflags in $flags ;do 589 if (test -z "$blibflags"); then 590 LDFLAGS="$saved_LDFLAGS $tryflags$blibpath" 591 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])], 592 [blibflags=$tryflags], []) 593 fi 594 done 595 if (test -z "$blibflags"); then 596 AC_MSG_RESULT([not found]) 597 AC_MSG_ERROR([*** must be able to specify blibpath on AIX - check config.log]) 598 else 599 AC_MSG_RESULT([$blibflags]) 600 fi 601 LDFLAGS="$saved_LDFLAGS" 602 dnl Check for authenticate. Might be in libs.a on older AIXes 603 AC_CHECK_FUNC([authenticate], [AC_DEFINE([WITH_AIXAUTHENTICATE], [1], 604 [Define if you want to enable AIX4's authenticate function])], 605 [AC_CHECK_LIB([s], [authenticate], 606 [ AC_DEFINE([WITH_AIXAUTHENTICATE]) 607 LIBS="$LIBS -ls" 608 ]) 609 ]) 610 dnl Check for various auth function declarations in headers. 611 AC_CHECK_DECLS([authenticate, loginrestrictions, loginsuccess, 612 passwdexpired, setauthdb], , , [#include <usersec.h>]) 613 dnl Check if loginfailed is declared and takes 4 arguments (AIX >= 5.2) 614 AC_CHECK_DECLS([loginfailed], 615 [AC_MSG_CHECKING([if loginfailed takes 4 arguments]) 616 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <usersec.h> ]], 617 [[ (void)loginfailed("user","host","tty",0); ]])], 618 [AC_MSG_RESULT([yes]) 619 AC_DEFINE([AIX_LOGINFAILED_4ARG], [1], 620 [Define if your AIX loginfailed() function 621 takes 4 arguments (AIX >= 5.2)])], [AC_MSG_RESULT([no]) 622 ])], 623 [], 624 [#include <usersec.h>] 625 ) 626 AC_CHECK_FUNCS([getgrset setauthdb]) 627 AC_CHECK_DECL([F_CLOSEM], 628 AC_DEFINE([HAVE_FCNTL_CLOSEM], [1], [Use F_CLOSEM fcntl for closefrom]), 629 [], 630 [ #include <limits.h> 631 #include <fcntl.h> ] 632 ) 633 check_for_aix_broken_getaddrinfo=1 634 AC_DEFINE([SETEUID_BREAKS_SETUID], [1], 635 [Define if your platform breaks doing a seteuid before a setuid]) 636 AC_DEFINE([BROKEN_SETREUID], [1], [Define if your setreuid() is broken]) 637 AC_DEFINE([BROKEN_SETREGID], [1], [Define if your setregid() is broken]) 638 dnl AIX handles lastlog as part of its login message 639 AC_DEFINE([DISABLE_LASTLOG], [1], [Define if you don't want to use lastlog]) 640 AC_DEFINE([LOGIN_NEEDS_UTMPX], [1], 641 [Some systems need a utmpx entry for /bin/login to work]) 642 AC_DEFINE([SPT_TYPE], [SPT_REUSEARGV], 643 [Define to a Set Process Title type if your system is 644 supported by bsd-setproctitle.c]) 645 AC_DEFINE([SSHPAM_CHAUTHTOK_NEEDS_RUID], [1], 646 [AIX 5.2 and 5.3 (and presumably newer) require this]) 647 AC_DEFINE([PTY_ZEROREAD], [1], [read(1) can return 0 for a non-closed fd]) 648 AC_DEFINE([PLATFORM_SYS_DIR_UID], 2, [System dirs owned by bin (uid 2)]) 649 AC_DEFINE([BROKEN_STRNDUP], 1, [strndup broken, see APAR IY61211]) 650 AC_DEFINE([BROKEN_STRNLEN], 1, [strnlen broken, see APAR IY62551]) 651 ;; 652*-*-android*) 653 AC_DEFINE([DISABLE_UTMP], [1], [Define if you don't want to use utmp]) 654 AC_DEFINE([DISABLE_WTMP], [1], [Define if you don't want to use wtmp]) 655 ;; 656*-*-cygwin*) 657 check_for_libcrypt_later=1 658 LIBS="$LIBS /usr/lib/textreadmode.o" 659 AC_DEFINE([HAVE_CYGWIN], [1], [Define if you are on Cygwin]) 660 AC_DEFINE([USE_PIPES], [1], [Use PIPES instead of a socketpair()]) 661 AC_DEFINE([NO_UID_RESTORATION_TEST], [1], 662 [Define to disable UID restoration test]) 663 AC_DEFINE([DISABLE_SHADOW], [1], 664 [Define if you want to disable shadow passwords]) 665 AC_DEFINE([NO_X11_UNIX_SOCKETS], [1], 666 [Define if X11 doesn't support AF_UNIX sockets on that system]) 667 AC_DEFINE([DISABLE_FD_PASSING], [1], 668 [Define if your platform needs to skip post auth 669 file descriptor passing]) 670 AC_DEFINE([SSH_IOBUFSZ], [65535], [Windows is sensitive to read buffer size]) 671 AC_DEFINE([FILESYSTEM_NO_BACKSLASH], [1], [File names may not contain backslash characters]) 672 # Cygwin defines optargs, optargs as declspec(dllimport) for historical 673 # reasons which cause compile warnings, so we disable those warnings. 674 OSSH_CHECK_CFLAG_COMPILE([-Wno-attributes]) 675 ;; 676*-*-dgux*) 677 AC_DEFINE([IP_TOS_IS_BROKEN], [1], 678 [Define if your system choked on IP TOS setting]) 679 AC_DEFINE([SETEUID_BREAKS_SETUID]) 680 AC_DEFINE([BROKEN_SETREUID]) 681 AC_DEFINE([BROKEN_SETREGID]) 682 ;; 683*-*-darwin*) 684 use_pie=auto 685 AC_MSG_CHECKING([if we have working getaddrinfo]) 686 AC_RUN_IFELSE([AC_LANG_SOURCE([[ 687#include <mach-o/dyld.h> 688#include <stdlib.h> 689main() { if (NSVersionOfRunTimeLibrary("System") >= (60 << 16)) 690 exit(0); 691 else 692 exit(1); 693} 694 ]])], 695 [AC_MSG_RESULT([working])], 696 [AC_MSG_RESULT([buggy]) 697 AC_DEFINE([BROKEN_GETADDRINFO], [1], 698 [getaddrinfo is broken (if present)]) 699 ], 700 [AC_MSG_RESULT([assume it is working])]) 701 AC_DEFINE([SETEUID_BREAKS_SETUID]) 702 AC_DEFINE([BROKEN_SETREUID]) 703 AC_DEFINE([BROKEN_SETREGID]) 704 AC_DEFINE([BROKEN_GLOB], [1], [OS X glob does not do what we expect]) 705 AC_DEFINE_UNQUOTED([BIND_8_COMPAT], [1], 706 [Define if your resolver libs need this for getrrsetbyname]) 707 AC_DEFINE([SSH_TUN_FREEBSD], [1], [Open tunnel devices the FreeBSD way]) 708 AC_DEFINE([SSH_TUN_COMPAT_AF], [1], 709 [Use tunnel device compatibility to OpenBSD]) 710 AC_DEFINE([SSH_TUN_PREPEND_AF], [1], 711 [Prepend the address family to IP tunnel traffic]) 712 m4_pattern_allow([AU_IPv]) 713 AC_CHECK_DECL([AU_IPv4], [], 714 AC_DEFINE([AU_IPv4], [0], [System only supports IPv4 audit records]) 715 [#include <bsm/audit.h>] 716 AC_DEFINE([LASTLOG_WRITE_PUTUTXLINE], [1], 717 [Define if pututxline updates lastlog too]) 718 ) 719 AC_DEFINE([SPT_TYPE], [SPT_REUSEARGV], 720 [Define to a Set Process Title type if your system is 721 supported by bsd-setproctitle.c]) 722 AC_CHECK_FUNCS([sandbox_init]) 723 AC_CHECK_HEADERS([sandbox.h]) 724 AC_CHECK_LIB([sandbox], [sandbox_apply], [ 725 SSHDLIBS="$SSHDLIBS -lsandbox" 726 ]) 727 # proc_pidinfo()-based closefrom() replacement. 728 AC_CHECK_HEADERS([libproc.h]) 729 AC_CHECK_FUNCS([proc_pidinfo]) 730 ;; 731*-*-dragonfly*) 732 SSHDLIBS="$SSHDLIBS -lcrypt" 733 TEST_MALLOC_OPTIONS="AFGJPRX" 734 ;; 735*-*-haiku*) 736 LIBS="$LIBS -lbsd " 737 CFLAGS="$CFLAGS -D_BSD_SOURCE" 738 AC_CHECK_LIB([network], [socket]) 739 AC_DEFINE([HAVE_U_INT64_T]) 740 AC_DEFINE([DISABLE_UTMPX], [1], [no utmpx]) 741 MANTYPE=man 742 ;; 743*-*-hpux*) 744 # first we define all of the options common to all HP-UX releases 745 CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1" 746 IPADDR_IN_DISPLAY=yes 747 AC_DEFINE([USE_PIPES]) 748 AC_DEFINE([LOGIN_NEEDS_UTMPX]) 749 AC_DEFINE([LOCKED_PASSWD_STRING], ["*"], 750 [String used in /etc/passwd to denote locked account]) 751 AC_DEFINE([SPT_TYPE], [SPT_PSTAT]) 752 AC_DEFINE([PLATFORM_SYS_DIR_UID], 2, [System dirs owned by bin (uid 2)]) 753 maildir="/var/mail" 754 LIBS="$LIBS -lsec" 755 AC_CHECK_LIB([xnet], [t_error], , 756 [AC_MSG_ERROR([*** -lxnet needed on HP-UX - check config.log ***])]) 757 758 # next, we define all of the options specific to major releases 759 case "$host" in 760 *-*-hpux10*) 761 if test -z "$GCC"; then 762 CFLAGS="$CFLAGS -Ae" 763 fi 764 ;; 765 *-*-hpux11*) 766 AC_DEFINE([PAM_SUN_CODEBASE], [1], 767 [Define if you are using Solaris-derived PAM which 768 passes pam_messages to the conversation function 769 with an extra level of indirection]) 770 AC_DEFINE([DISABLE_UTMP], [1], 771 [Define if you don't want to use utmp]) 772 AC_DEFINE([USE_BTMP], [1], [Use btmp to log bad logins]) 773 check_for_hpux_broken_getaddrinfo=1 774 check_for_conflicting_getspnam=1 775 ;; 776 esac 777 778 # lastly, we define options specific to minor releases 779 case "$host" in 780 *-*-hpux10.26) 781 AC_DEFINE([HAVE_SECUREWARE], [1], 782 [Define if you have SecureWare-based 783 protected password database]) 784 disable_ptmx_check=yes 785 LIBS="$LIBS -lsecpw" 786 ;; 787 esac 788 ;; 789*-*-irix5*) 790 PATH="$PATH:/usr/etc" 791 AC_DEFINE([BROKEN_INET_NTOA], [1], 792 [Define if you system's inet_ntoa is busted 793 (e.g. Irix gcc issue)]) 794 AC_DEFINE([SETEUID_BREAKS_SETUID]) 795 AC_DEFINE([BROKEN_SETREUID]) 796 AC_DEFINE([BROKEN_SETREGID]) 797 AC_DEFINE([WITH_ABBREV_NO_TTY], [1], 798 [Define if you shouldn't strip 'tty' from your 799 ttyname in [uw]tmp]) 800 AC_DEFINE([LOCKED_PASSWD_STRING], ["*LK*"]) 801 ;; 802*-*-irix6*) 803 PATH="$PATH:/usr/etc" 804 AC_DEFINE([WITH_IRIX_ARRAY], [1], 805 [Define if you have/want arrays 806 (cluster-wide session management, not C arrays)]) 807 AC_DEFINE([WITH_IRIX_PROJECT], [1], 808 [Define if you want IRIX project management]) 809 AC_DEFINE([WITH_IRIX_AUDIT], [1], 810 [Define if you want IRIX audit trails]) 811 AC_CHECK_FUNC([jlimit_startjob], [AC_DEFINE([WITH_IRIX_JOBS], [1], 812 [Define if you want IRIX kernel jobs])]) 813 AC_DEFINE([BROKEN_INET_NTOA]) 814 AC_DEFINE([SETEUID_BREAKS_SETUID]) 815 AC_DEFINE([BROKEN_SETREUID]) 816 AC_DEFINE([BROKEN_SETREGID]) 817 AC_DEFINE([BROKEN_UPDWTMPX], [1], [updwtmpx is broken (if present)]) 818 AC_DEFINE([WITH_ABBREV_NO_TTY]) 819 AC_DEFINE([LOCKED_PASSWD_STRING], ["*LK*"]) 820 ;; 821*-*-k*bsd*-gnu | *-*-kopensolaris*-gnu) 822 check_for_libcrypt_later=1 823 AC_DEFINE([PAM_TTY_KLUDGE]) 824 AC_DEFINE([LOCKED_PASSWD_PREFIX], ["!"]) 825 AC_DEFINE([SPT_TYPE], [SPT_REUSEARGV]) 826 AC_DEFINE([_PATH_BTMP], ["/var/log/btmp"], [log for bad login attempts]) 827 AC_DEFINE([USE_BTMP], [1], [Use btmp to log bad logins]) 828 ;; 829*-*-linux*) 830 no_dev_ptmx=1 831 use_pie=auto 832 check_for_libcrypt_later=1 833 check_for_openpty_ctty_bug=1 834 dnl Target SUSv3/POSIX.1-2001 plus BSD specifics. 835 dnl _DEFAULT_SOURCE is the new name for _BSD_SOURCE 836 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=600 -D_BSD_SOURCE -D_DEFAULT_SOURCE" 837 AC_DEFINE([PAM_TTY_KLUDGE], [1], 838 [Work around problematic Linux PAM modules handling of PAM_TTY]) 839 AC_DEFINE([LOCKED_PASSWD_PREFIX], ["!"], 840 [String used in /etc/passwd to denote locked account]) 841 AC_DEFINE([SPT_TYPE], [SPT_REUSEARGV]) 842 AC_DEFINE([LINK_OPNOTSUPP_ERRNO], [EPERM], 843 [Define to whatever link() returns for "not supported" 844 if it doesn't return EOPNOTSUPP.]) 845 AC_DEFINE([_PATH_BTMP], ["/var/log/btmp"], [log for bad login attempts]) 846 AC_DEFINE([USE_BTMP]) 847 AC_DEFINE([LINUX_OOM_ADJUST], [1], [Adjust Linux out-of-memory killer]) 848 inet6_default_4in6=yes 849 case `uname -r` in 850 1.*|2.0.*) 851 AC_DEFINE([BROKEN_CMSG_TYPE], [1], 852 [Define if cmsg_type is not passed correctly]) 853 ;; 854 esac 855 # tun(4) forwarding compat code 856 AC_CHECK_HEADERS([linux/if_tun.h]) 857 if test "x$ac_cv_header_linux_if_tun_h" = "xyes" ; then 858 AC_DEFINE([SSH_TUN_LINUX], [1], 859 [Open tunnel devices the Linux tun/tap way]) 860 AC_DEFINE([SSH_TUN_COMPAT_AF], [1], 861 [Use tunnel device compatibility to OpenBSD]) 862 AC_DEFINE([SSH_TUN_PREPEND_AF], [1], 863 [Prepend the address family to IP tunnel traffic]) 864 fi 865 AC_CHECK_HEADER([linux/if.h], 866 AC_DEFINE([SYS_RDOMAIN_LINUX], [1], 867 [Support routing domains using Linux VRF]), [], [ 868#ifdef HAVE_SYS_TYPES_H 869# include <sys/types.h> 870#endif 871 ]) 872 AC_CHECK_HEADERS([linux/seccomp.h linux/filter.h linux/audit.h], [], 873 [], [#include <linux/types.h>]) 874 # Obtain MIPS ABI 875 case "$host" in 876 mips*) 877 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 878#if _MIPS_SIM != _ABIO32 879#error 880#endif 881 ]])],[mips_abi="o32"],[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 882#if _MIPS_SIM != _ABIN32 883#error 884#endif 885 ]])],[mips_abi="n32"],[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 886#if _MIPS_SIM != _ABI64 887#error 888#endif 889 ]])],[mips_abi="n64"],[AC_MSG_ERROR([unknown MIPS ABI]) 890 ]) 891 ]) 892 ]) 893 ;; 894 esac 895 AC_MSG_CHECKING([for seccomp architecture]) 896 seccomp_audit_arch= 897 case "$host" in 898 x86_64-*) 899 seccomp_audit_arch=AUDIT_ARCH_X86_64 900 ;; 901 i*86-*) 902 seccomp_audit_arch=AUDIT_ARCH_I386 903 ;; 904 arm*-*) 905 seccomp_audit_arch=AUDIT_ARCH_ARM 906 ;; 907 aarch64*-*) 908 seccomp_audit_arch=AUDIT_ARCH_AARCH64 909 ;; 910 s390x-*) 911 seccomp_audit_arch=AUDIT_ARCH_S390X 912 ;; 913 s390-*) 914 seccomp_audit_arch=AUDIT_ARCH_S390 915 ;; 916 powerpc64-*) 917 seccomp_audit_arch=AUDIT_ARCH_PPC64 918 ;; 919 powerpc64le-*) 920 seccomp_audit_arch=AUDIT_ARCH_PPC64LE 921 ;; 922 mips-*) 923 seccomp_audit_arch=AUDIT_ARCH_MIPS 924 ;; 925 mipsel-*) 926 seccomp_audit_arch=AUDIT_ARCH_MIPSEL 927 ;; 928 mips64-*) 929 case "$mips_abi" in 930 "n32") 931 seccomp_audit_arch=AUDIT_ARCH_MIPS64N32 932 ;; 933 "n64") 934 seccomp_audit_arch=AUDIT_ARCH_MIPS64 935 ;; 936 esac 937 ;; 938 mips64el-*) 939 case "$mips_abi" in 940 "n32") 941 seccomp_audit_arch=AUDIT_ARCH_MIPSEL64N32 942 ;; 943 "n64") 944 seccomp_audit_arch=AUDIT_ARCH_MIPSEL64 945 ;; 946 esac 947 ;; 948 riscv64-*) 949 seccomp_audit_arch=AUDIT_ARCH_RISCV64 950 ;; 951 esac 952 if test "x$seccomp_audit_arch" != "x" ; then 953 AC_MSG_RESULT(["$seccomp_audit_arch"]) 954 AC_DEFINE_UNQUOTED([SECCOMP_AUDIT_ARCH], [$seccomp_audit_arch], 955 [Specify the system call convention in use]) 956 else 957 AC_MSG_RESULT([architecture not supported]) 958 fi 959 ;; 960mips-sony-bsd|mips-sony-newsos4) 961 AC_DEFINE([NEED_SETPGRP], [1], [Need setpgrp to acquire controlling tty]) 962 SONY=1 963 ;; 964*-*-netbsd*) 965 check_for_libcrypt_before=1 966 if test "x$withval" != "xno" ; then 967 rpath_opt="-R" 968 fi 969 CPPFLAGS="$CPPFLAGS -D_OPENBSD_SOURCE" 970 AC_DEFINE([SSH_TUN_FREEBSD], [1], [Open tunnel devices the FreeBSD way]) 971 AC_CHECK_HEADER([net/if_tap.h], , 972 AC_DEFINE([SSH_TUN_NO_L2], [1], [No layer 2 tunnel support])) 973 AC_DEFINE([SSH_TUN_PREPEND_AF], [1], 974 [Prepend the address family to IP tunnel traffic]) 975 TEST_MALLOC_OPTIONS="AJRX" 976 AC_DEFINE([BROKEN_READ_COMPARISON], [1], 977 [NetBSD read function is sometimes redirected, breaking atomicio comparisons against it]) 978 ;; 979*-*-freebsd*) 980 check_for_libcrypt_later=1 981 AC_DEFINE([LOCKED_PASSWD_PREFIX], ["*LOCKED*"], [Account locked with pw(1)]) 982 AC_DEFINE([SSH_TUN_FREEBSD], [1], [Open tunnel devices the FreeBSD way]) 983 AC_CHECK_HEADER([net/if_tap.h], , 984 AC_DEFINE([SSH_TUN_NO_L2], [1], [No layer 2 tunnel support])) 985 AC_DEFINE([BROKEN_GLOB], [1], [FreeBSD glob does not do what we need]) 986 TEST_MALLOC_OPTIONS="AJRX" 987 # Preauth crypto occasionally uses file descriptors for crypto offload 988 # and will crash if they cannot be opened. 989 AC_DEFINE([SANDBOX_SKIP_RLIMIT_NOFILE], [1], 990 [define if setrlimit RLIMIT_NOFILE breaks things]) 991 ;; 992*-*-bsdi*) 993 AC_DEFINE([SETEUID_BREAKS_SETUID]) 994 AC_DEFINE([BROKEN_SETREUID]) 995 AC_DEFINE([BROKEN_SETREGID]) 996 ;; 997*-next-*) 998 conf_lastlog_location="/usr/adm/lastlog" 999 conf_utmp_location=/etc/utmp 1000 conf_wtmp_location=/usr/adm/wtmp 1001 maildir=/usr/spool/mail 1002 AC_DEFINE([HAVE_NEXT], [1], [Define if you are on NeXT]) 1003 AC_DEFINE([USE_PIPES]) 1004 AC_DEFINE([BROKEN_SAVED_UIDS], [1], [Needed for NeXT]) 1005 ;; 1006*-*-openbsd*) 1007 use_pie=auto 1008 AC_DEFINE([HAVE_ATTRIBUTE__SENTINEL__], [1], [OpenBSD's gcc has sentinel]) 1009 AC_DEFINE([HAVE_ATTRIBUTE__BOUNDED__], [1], [OpenBSD's gcc has bounded]) 1010 AC_DEFINE([SSH_TUN_OPENBSD], [1], [Open tunnel devices the OpenBSD way]) 1011 AC_DEFINE([SYSLOG_R_SAFE_IN_SIGHAND], [1], 1012 [syslog_r function is safe to use in in a signal handler]) 1013 TEST_MALLOC_OPTIONS="AFGJPRX" 1014 ;; 1015*-*-solaris*) 1016 if test "x$withval" != "xno" ; then 1017 rpath_opt="-R" 1018 fi 1019 AC_DEFINE([PAM_SUN_CODEBASE]) 1020 AC_DEFINE([LOGIN_NEEDS_UTMPX]) 1021 AC_DEFINE([PAM_TTY_KLUDGE]) 1022 AC_DEFINE([SSHPAM_CHAUTHTOK_NEEDS_RUID], [1], 1023 [Define if pam_chauthtok wants real uid set 1024 to the unpriv'ed user]) 1025 AC_DEFINE([LOCKED_PASSWD_STRING], ["*LK*"]) 1026 # Pushing STREAMS modules will cause sshd to acquire a controlling tty. 1027 AC_DEFINE([SSHD_ACQUIRES_CTTY], [1], 1028 [Define if sshd somehow reacquires a controlling TTY 1029 after setsid()]) 1030 AC_DEFINE([PASSWD_NEEDS_USERNAME], [1], [must supply username to passwd 1031 in case the name is longer than 8 chars]) 1032 AC_DEFINE([BROKEN_TCGETATTR_ICANON], [1], [tcgetattr with ICANON may hang]) 1033 external_path_file=/etc/default/login 1034 # hardwire lastlog location (can't detect it on some versions) 1035 conf_lastlog_location="/var/adm/lastlog" 1036 AC_MSG_CHECKING([for obsolete utmp and wtmp in solaris2.x]) 1037 sol2ver=`echo "$host"| sed -e 's/.*[[0-9]]\.//'` 1038 if test "$sol2ver" -ge 8; then 1039 AC_MSG_RESULT([yes]) 1040 AC_DEFINE([DISABLE_UTMP]) 1041 AC_DEFINE([DISABLE_WTMP], [1], 1042 [Define if you don't want to use wtmp]) 1043 else 1044 AC_MSG_RESULT([no]) 1045 fi 1046 AC_CHECK_FUNCS([setpflags]) 1047 AC_CHECK_FUNCS([setppriv]) 1048 AC_CHECK_FUNCS([priv_basicset]) 1049 AC_CHECK_HEADERS([priv.h]) 1050 AC_ARG_WITH([solaris-contracts], 1051 [ --with-solaris-contracts Enable Solaris process contracts (experimental)], 1052 [ 1053 AC_CHECK_LIB([contract], [ct_tmpl_activate], 1054 [ AC_DEFINE([USE_SOLARIS_PROCESS_CONTRACTS], [1], 1055 [Define if you have Solaris process contracts]) 1056 LIBS="$LIBS -lcontract" 1057 SPC_MSG="yes" ], ) 1058 ], 1059 ) 1060 AC_ARG_WITH([solaris-projects], 1061 [ --with-solaris-projects Enable Solaris projects (experimental)], 1062 [ 1063 AC_CHECK_LIB([project], [setproject], 1064 [ AC_DEFINE([USE_SOLARIS_PROJECTS], [1], 1065 [Define if you have Solaris projects]) 1066 LIBS="$LIBS -lproject" 1067 SP_MSG="yes" ], ) 1068 ], 1069 ) 1070 AC_ARG_WITH([solaris-privs], 1071 [ --with-solaris-privs Enable Solaris/Illumos privileges (experimental)], 1072 [ 1073 AC_MSG_CHECKING([for Solaris/Illumos privilege support]) 1074 if test "x$ac_cv_func_setppriv" = "xyes" -a \ 1075 "x$ac_cv_header_priv_h" = "xyes" ; then 1076 SOLARIS_PRIVS=yes 1077 AC_MSG_RESULT([found]) 1078 AC_DEFINE([NO_UID_RESTORATION_TEST], [1], 1079 [Define to disable UID restoration test]) 1080 AC_DEFINE([USE_SOLARIS_PRIVS], [1], 1081 [Define if you have Solaris privileges]) 1082 SPP_MSG="yes" 1083 else 1084 AC_MSG_RESULT([not found]) 1085 AC_MSG_ERROR([*** must have support for Solaris privileges to use --with-solaris-privs]) 1086 fi 1087 ], 1088 ) 1089 TEST_SHELL=$SHELL # let configure find us a capable shell 1090 ;; 1091*-*-sunos4*) 1092 CPPFLAGS="$CPPFLAGS -DSUNOS4" 1093 AC_CHECK_FUNCS([getpwanam]) 1094 AC_DEFINE([PAM_SUN_CODEBASE]) 1095 conf_utmp_location=/etc/utmp 1096 conf_wtmp_location=/var/adm/wtmp 1097 conf_lastlog_location=/var/adm/lastlog 1098 AC_DEFINE([USE_PIPES]) 1099 AC_DEFINE([DISABLE_UTMPX], [1], [no utmpx]) 1100 ;; 1101*-ncr-sysv*) 1102 LIBS="$LIBS -lc89" 1103 AC_DEFINE([USE_PIPES]) 1104 AC_DEFINE([SSHD_ACQUIRES_CTTY]) 1105 AC_DEFINE([SETEUID_BREAKS_SETUID]) 1106 AC_DEFINE([BROKEN_SETREUID]) 1107 AC_DEFINE([BROKEN_SETREGID]) 1108 ;; 1109*-sni-sysv*) 1110 # /usr/ucblib MUST NOT be searched on ReliantUNIX 1111 AC_CHECK_LIB([dl], [dlsym], ,) 1112 # -lresolv needs to be at the end of LIBS or DNS lookups break 1113 AC_CHECK_LIB([resolv], [res_query], [ LIBS="$LIBS -lresolv" ]) 1114 IPADDR_IN_DISPLAY=yes 1115 AC_DEFINE([USE_PIPES]) 1116 AC_DEFINE([IP_TOS_IS_BROKEN]) 1117 AC_DEFINE([SETEUID_BREAKS_SETUID]) 1118 AC_DEFINE([BROKEN_SETREUID]) 1119 AC_DEFINE([BROKEN_SETREGID]) 1120 AC_DEFINE([SSHD_ACQUIRES_CTTY]) 1121 external_path_file=/etc/default/login 1122 # /usr/ucblib/libucb.a no longer needed on ReliantUNIX 1123 # Attention: always take care to bind libsocket and libnsl before libc, 1124 # otherwise you will find lots of "SIOCGPGRP errno 22" on syslog 1125 ;; 1126# UnixWare 1.x, UnixWare 2.x, and others based on code from Univel. 1127*-*-sysv4.2*) 1128 AC_DEFINE([USE_PIPES]) 1129 AC_DEFINE([SETEUID_BREAKS_SETUID]) 1130 AC_DEFINE([BROKEN_SETREUID]) 1131 AC_DEFINE([BROKEN_SETREGID]) 1132 AC_DEFINE([PASSWD_NEEDS_USERNAME], [1], [must supply username to passwd]) 1133 AC_DEFINE([LOCKED_PASSWD_STRING], ["*LK*"]) 1134 TEST_SHELL=$SHELL # let configure find us a capable shell 1135 ;; 1136# UnixWare 7.x, OpenUNIX 8 1137*-*-sysv5*) 1138 CPPFLAGS="$CPPFLAGS -Dvsnprintf=_xvsnprintf -Dsnprintf=_xsnprintf" 1139 AC_DEFINE([UNIXWARE_LONG_PASSWORDS], [1], [Support passwords > 8 chars]) 1140 AC_DEFINE([USE_PIPES]) 1141 AC_DEFINE([SETEUID_BREAKS_SETUID]) 1142 AC_DEFINE([BROKEN_GETADDRINFO]) 1143 AC_DEFINE([BROKEN_SETREUID]) 1144 AC_DEFINE([BROKEN_SETREGID]) 1145 AC_DEFINE([PASSWD_NEEDS_USERNAME]) 1146 AC_DEFINE([BROKEN_TCGETATTR_ICANON]) 1147 TEST_SHELL=$SHELL # let configure find us a capable shell 1148 check_for_libcrypt_later=1 1149 case "$host" in 1150 *-*-sysv5SCO_SV*) # SCO OpenServer 6.x 1151 maildir=/var/spool/mail 1152 AC_DEFINE([BROKEN_UPDWTMPX]) 1153 AC_CHECK_LIB([prot], [getluid], [ LIBS="$LIBS -lprot" 1154 AC_CHECK_FUNCS([getluid setluid], , , [-lprot]) 1155 ], , ) 1156 ;; 1157 *) AC_DEFINE([LOCKED_PASSWD_STRING], ["*LK*"]) 1158 ;; 1159 esac 1160 ;; 1161*-*-sysv*) 1162 ;; 1163# SCO UNIX and OEM versions of SCO UNIX 1164*-*-sco3.2v4*) 1165 AC_MSG_ERROR("This Platform is no longer supported.") 1166 ;; 1167# SCO OpenServer 5.x 1168*-*-sco3.2v5*) 1169 if test -z "$GCC"; then 1170 CFLAGS="$CFLAGS -belf" 1171 fi 1172 LIBS="$LIBS -lprot -lx -ltinfo -lm" 1173 no_dev_ptmx=1 1174 AC_DEFINE([USE_PIPES]) 1175 AC_DEFINE([HAVE_SECUREWARE]) 1176 AC_DEFINE([DISABLE_SHADOW]) 1177 AC_DEFINE([DISABLE_FD_PASSING]) 1178 AC_DEFINE([SETEUID_BREAKS_SETUID]) 1179 AC_DEFINE([BROKEN_GETADDRINFO]) 1180 AC_DEFINE([BROKEN_SETREUID]) 1181 AC_DEFINE([BROKEN_SETREGID]) 1182 AC_DEFINE([WITH_ABBREV_NO_TTY]) 1183 AC_DEFINE([BROKEN_UPDWTMPX]) 1184 AC_DEFINE([PASSWD_NEEDS_USERNAME]) 1185 AC_CHECK_FUNCS([getluid setluid]) 1186 MANTYPE=man 1187 TEST_SHELL=$SHELL # let configure find us a capable shell 1188 SKIP_DISABLE_LASTLOG_DEFINE=yes 1189 ;; 1190*-dec-osf*) 1191 AC_MSG_CHECKING([for Digital Unix SIA]) 1192 no_osfsia="" 1193 AC_ARG_WITH([osfsia], 1194 [ --with-osfsia Enable Digital Unix SIA], 1195 [ 1196 if test "x$withval" = "xno" ; then 1197 AC_MSG_RESULT([disabled]) 1198 no_osfsia=1 1199 fi 1200 ], 1201 ) 1202 if test -z "$no_osfsia" ; then 1203 if test -f /etc/sia/matrix.conf; then 1204 AC_MSG_RESULT([yes]) 1205 AC_DEFINE([HAVE_OSF_SIA], [1], 1206 [Define if you have Digital Unix Security 1207 Integration Architecture]) 1208 AC_DEFINE([DISABLE_LOGIN], [1], 1209 [Define if you don't want to use your 1210 system's login() call]) 1211 AC_DEFINE([DISABLE_FD_PASSING]) 1212 LIBS="$LIBS -lsecurity -ldb -lm -laud" 1213 SIA_MSG="yes" 1214 else 1215 AC_MSG_RESULT([no]) 1216 AC_DEFINE([LOCKED_PASSWD_SUBSTR], ["Nologin"], 1217 [String used in /etc/passwd to denote locked account]) 1218 fi 1219 fi 1220 AC_DEFINE([BROKEN_GETADDRINFO]) 1221 AC_DEFINE([SETEUID_BREAKS_SETUID]) 1222 AC_DEFINE([BROKEN_SETREUID]) 1223 AC_DEFINE([BROKEN_SETREGID]) 1224 AC_DEFINE([BROKEN_READV_COMPARISON], [1], [Can't do comparisons on readv]) 1225 ;; 1226 1227*-*-nto-qnx*) 1228 AC_DEFINE([USE_PIPES]) 1229 AC_DEFINE([NO_X11_UNIX_SOCKETS]) 1230 AC_DEFINE([DISABLE_LASTLOG]) 1231 AC_DEFINE([SSHD_ACQUIRES_CTTY]) 1232 AC_DEFINE([BROKEN_SHADOW_EXPIRE], [1], [QNX shadow support is broken]) 1233 enable_etc_default_login=no # has incompatible /etc/default/login 1234 case "$host" in 1235 *-*-nto-qnx6*) 1236 AC_DEFINE([DISABLE_FD_PASSING]) 1237 ;; 1238 esac 1239 ;; 1240 1241*-*-ultrix*) 1242 AC_DEFINE([BROKEN_GETGROUPS], [1], [getgroups(0,NULL) will return -1]) 1243 AC_DEFINE([NEED_SETPGRP], [1], [Need setpgrp to for controlling tty]) 1244 AC_DEFINE([HAVE_SYS_SYSLOG_H], [1], [Force use of sys/syslog.h on Ultrix]) 1245 AC_DEFINE([DISABLE_UTMPX], [1], [Disable utmpx]) 1246 # DISABLE_FD_PASSING so that we call setpgrp as root, otherwise we 1247 # don't get a controlling tty. 1248 AC_DEFINE([DISABLE_FD_PASSING], [1], [Need to call setpgrp as root]) 1249 # On Ultrix some headers are not protected against multiple includes, 1250 # so we create wrappers and put it where the compiler will find it. 1251 AC_MSG_WARN([creating compat wrappers for headers]) 1252 mkdir -p netinet 1253 for header in netinet/ip.h netdb.h resolv.h; do 1254 name=`echo $header | tr 'a-z/.' 'A-Z__'` 1255 cat >$header <<EOD 1256#ifndef _SSH_COMPAT_${name} 1257#define _SSH_COMPAT_${name} 1258#include "/usr/include/${header}" 1259#endif 1260EOD 1261 done 1262 ;; 1263 1264*-*-lynxos) 1265 CFLAGS="$CFLAGS -D__NO_INCLUDE_WARN__" 1266 AC_DEFINE([BROKEN_SETVBUF], [1], 1267 [LynxOS has broken setvbuf() implementation]) 1268 ;; 1269esac 1270 1271AC_MSG_CHECKING([compiler and flags for sanity]) 1272AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include <stdlib.h> ]], [[ exit(0); ]])], 1273 [ AC_MSG_RESULT([yes]) ], 1274 [ 1275 AC_MSG_RESULT([no]) 1276 AC_MSG_ERROR([*** compiler cannot create working executables, check config.log ***]) 1277 ], 1278 [ AC_MSG_WARN([cross compiling: not checking compiler sanity]) ] 1279) 1280 1281dnl Checks for header files. 1282# Checks for libraries. 1283AC_CHECK_FUNC([setsockopt], , [AC_CHECK_LIB([socket], [setsockopt])]) 1284 1285dnl IRIX and Solaris 2.5.1 have dirname() in libgen 1286AC_CHECK_FUNCS([dirname], [AC_CHECK_HEADERS([libgen.h])] , [ 1287 AC_CHECK_LIB([gen], [dirname], [ 1288 AC_CACHE_CHECK([for broken dirname], 1289 ac_cv_have_broken_dirname, [ 1290 save_LIBS="$LIBS" 1291 LIBS="$LIBS -lgen" 1292 AC_RUN_IFELSE( 1293 [AC_LANG_SOURCE([[ 1294#include <libgen.h> 1295#include <string.h> 1296#include <stdlib.h> 1297 1298int main(int argc, char **argv) { 1299 char *s, buf[32]; 1300 1301 strncpy(buf,"/etc", 32); 1302 s = dirname(buf); 1303 if (!s || strncmp(s, "/", 32) != 0) { 1304 exit(1); 1305 } else { 1306 exit(0); 1307 } 1308} 1309 ]])], 1310 [ ac_cv_have_broken_dirname="no" ], 1311 [ ac_cv_have_broken_dirname="yes" ], 1312 [ ac_cv_have_broken_dirname="no" ], 1313 ) 1314 LIBS="$save_LIBS" 1315 ]) 1316 if test "x$ac_cv_have_broken_dirname" = "xno" ; then 1317 LIBS="$LIBS -lgen" 1318 AC_DEFINE([HAVE_DIRNAME]) 1319 AC_CHECK_HEADERS([libgen.h]) 1320 fi 1321 ]) 1322]) 1323 1324AC_CHECK_FUNC([getspnam], , 1325 [AC_CHECK_LIB([gen], [getspnam], [LIBS="$LIBS -lgen"])]) 1326AC_SEARCH_LIBS([basename], [gen], [AC_DEFINE([HAVE_BASENAME], [1], 1327 [Define if you have the basename function.])]) 1328 1329dnl zlib defaults to enabled 1330zlib=yes 1331AC_ARG_WITH([zlib], 1332 [ --with-zlib=PATH Use zlib in PATH], 1333 [ if test "x$withval" = "xno" ; then 1334 zlib=no 1335 elif test "x$withval" != "xyes"; then 1336 if test -d "$withval/lib"; then 1337 if test -n "${rpath_opt}"; then 1338 LDFLAGS="-L${withval}/lib ${rpath_opt}${withval}/lib ${LDFLAGS}" 1339 else 1340 LDFLAGS="-L${withval}/lib ${LDFLAGS}" 1341 fi 1342 else 1343 if test -n "${rpath_opt}"; then 1344 LDFLAGS="-L${withval} ${rpath_opt}${withval} ${LDFLAGS}" 1345 else 1346 LDFLAGS="-L${withval} ${LDFLAGS}" 1347 fi 1348 fi 1349 if test -d "$withval/include"; then 1350 CPPFLAGS="-I${withval}/include ${CPPFLAGS}" 1351 else 1352 CPPFLAGS="-I${withval} ${CPPFLAGS}" 1353 fi 1354 fi ] 1355) 1356 1357AC_MSG_CHECKING([for zlib]) 1358if test "x${zlib}" = "xno"; then 1359 AC_MSG_RESULT([no]) 1360else 1361 AC_MSG_RESULT([yes]) 1362 AC_DEFINE([WITH_ZLIB], [1], [Enable zlib]) 1363 AC_CHECK_HEADER([zlib.h], ,[AC_MSG_ERROR([*** zlib.h missing - please install first or check config.log ***])]) 1364 AC_CHECK_LIB([z], [deflate], , 1365 [ 1366 saved_CPPFLAGS="$CPPFLAGS" 1367 saved_LDFLAGS="$LDFLAGS" 1368 save_LIBS="$LIBS" 1369 dnl Check default zlib install dir 1370 if test -n "${rpath_opt}"; then 1371 LDFLAGS="-L/usr/local/lib ${rpath_opt}/usr/local/lib ${saved_LDFLAGS}" 1372 else 1373 LDFLAGS="-L/usr/local/lib ${saved_LDFLAGS}" 1374 fi 1375 CPPFLAGS="-I/usr/local/include ${saved_CPPFLAGS}" 1376 LIBS="$LIBS -lz" 1377 AC_TRY_LINK_FUNC([deflate], [AC_DEFINE([HAVE_LIBZ])], 1378 [ 1379 AC_MSG_ERROR([*** zlib missing - please install first or check config.log ***]) 1380 ] 1381 ) 1382 ] 1383 ) 1384 1385 AC_ARG_WITH([zlib-version-check], 1386 [ --without-zlib-version-check Disable zlib version check], 1387 [ if test "x$withval" = "xno" ; then 1388 zlib_check_nonfatal=1 1389 fi 1390 ] 1391 ) 1392 1393 AC_MSG_CHECKING([for possibly buggy zlib]) 1394 AC_RUN_IFELSE([AC_LANG_PROGRAM([[ 1395#include <stdio.h> 1396#include <stdlib.h> 1397#include <zlib.h> 1398 ]], 1399 [[ 1400 int a=0, b=0, c=0, d=0, n, v; 1401 n = sscanf(ZLIB_VERSION, "%d.%d.%d.%d", &a, &b, &c, &d); 1402 if (n != 3 && n != 4) 1403 exit(1); 1404 v = a*1000000 + b*10000 + c*100 + d; 1405 fprintf(stderr, "found zlib version %s (%d)\n", ZLIB_VERSION, v); 1406 1407 /* 1.1.4 is OK */ 1408 if (a == 1 && b == 1 && c >= 4) 1409 exit(0); 1410 1411 /* 1.2.3 and up are OK */ 1412 if (v >= 1020300) 1413 exit(0); 1414 1415 exit(2); 1416 ]])], 1417 AC_MSG_RESULT([no]), 1418 [ AC_MSG_RESULT([yes]) 1419 if test -z "$zlib_check_nonfatal" ; then 1420 AC_MSG_ERROR([*** zlib too old - check config.log *** 1421Your reported zlib version has known security problems. It's possible your 1422vendor has fixed these problems without changing the version number. If you 1423are sure this is the case, you can disable the check by running 1424"./configure --without-zlib-version-check". 1425If you are in doubt, upgrade zlib to version 1.2.3 or greater. 1426See http://www.gzip.org/zlib/ for details.]) 1427 else 1428 AC_MSG_WARN([zlib version may have security problems]) 1429 fi 1430 ], 1431 [ AC_MSG_WARN([cross compiling: not checking zlib version]) ] 1432 ) 1433fi 1434 1435dnl UnixWare 2.x 1436AC_CHECK_FUNC([strcasecmp], 1437 [], [ AC_CHECK_LIB([resolv], [strcasecmp], [LIBS="$LIBS -lresolv"]) ] 1438) 1439AC_CHECK_FUNCS([utimes], 1440 [], [ AC_CHECK_LIB([c89], [utimes], [AC_DEFINE([HAVE_UTIMES]) 1441 LIBS="$LIBS -lc89"]) ] 1442) 1443 1444dnl Checks for libutil functions 1445AC_CHECK_HEADERS([bsd/libutil.h libutil.h]) 1446AC_SEARCH_LIBS([fmt_scaled], [util bsd]) 1447AC_SEARCH_LIBS([scan_scaled], [util bsd]) 1448AC_SEARCH_LIBS([login], [util bsd]) 1449AC_SEARCH_LIBS([logout], [util bsd]) 1450AC_SEARCH_LIBS([logwtmp], [util bsd]) 1451AC_SEARCH_LIBS([openpty], [util bsd]) 1452AC_SEARCH_LIBS([updwtmp], [util bsd]) 1453AC_CHECK_FUNCS([fmt_scaled scan_scaled login logout openpty updwtmp logwtmp]) 1454 1455# On some platforms, inet_ntop and gethostbyname may be found in libresolv 1456# or libnsl. 1457AC_SEARCH_LIBS([inet_ntop], [resolv nsl]) 1458AC_SEARCH_LIBS([gethostbyname], [resolv nsl]) 1459 1460# Some Linux distribtions ship the BSD libc hashing functions in 1461# separate libraries. 1462AC_SEARCH_LIBS([SHA256Update], [md bsd]) 1463 1464# "Particular Function Checks" 1465# see https://www.gnu.org/software/autoconf/manual/autoconf-2.69/html_node/Particular-Functions.html 1466AC_FUNC_STRFTIME 1467AC_FUNC_MALLOC 1468AC_FUNC_REALLOC 1469# autoconf doesn't have AC_FUNC_CALLOC so fake it if malloc returns NULL; 1470AC_MSG_CHECKING([if calloc(0, N) returns non-null]) 1471AC_RUN_IFELSE( 1472 [AC_LANG_PROGRAM( 1473 [[ #include <stdlib.h> ]], 1474 [[ void *p = calloc(0, 1); exit(p == NULL); ]] 1475 )], 1476 [ func_calloc_0_nonnull=yes ], 1477 [ func_calloc_0_nonnull=no ], 1478 [ AC_MSG_WARN([cross compiling: assuming same as malloc]) 1479 func_calloc_0_nonnull="$ac_cv_func_malloc_0_nonnull"] 1480) 1481AC_MSG_RESULT([$func_calloc_0_nonnull]) 1482 1483if test "x$func_calloc_0_nonnull" = "xyes"; then 1484 AC_DEFINE(HAVE_CALLOC, 1, [calloc(0, x) returns non-null]) 1485else 1486 AC_DEFINE(HAVE_CALLOC, 0, [calloc(0, x) returns NULL]) 1487 AC_DEFINE(calloc, rpl_calloc, 1488 [Define to rpl_calloc if the replacement function should be used.]) 1489fi 1490 1491# Check for ALTDIRFUNC glob() extension 1492AC_MSG_CHECKING([for GLOB_ALTDIRFUNC support]) 1493AC_EGREP_CPP([FOUNDIT], 1494 [ 1495 #include <glob.h> 1496 #ifdef GLOB_ALTDIRFUNC 1497 FOUNDIT 1498 #endif 1499 ], 1500 [ 1501 AC_DEFINE([GLOB_HAS_ALTDIRFUNC], [1], 1502 [Define if your system glob() function has 1503 the GLOB_ALTDIRFUNC extension]) 1504 AC_MSG_RESULT([yes]) 1505 ], 1506 [ 1507 AC_MSG_RESULT([no]) 1508 ] 1509) 1510 1511# Check for g.gl_matchc glob() extension 1512AC_MSG_CHECKING([for gl_matchc field in glob_t]) 1513AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <glob.h> ]], 1514 [[ glob_t g; g.gl_matchc = 1; ]])], 1515 [ 1516 AC_DEFINE([GLOB_HAS_GL_MATCHC], [1], 1517 [Define if your system glob() function has 1518 gl_matchc options in glob_t]) 1519 AC_MSG_RESULT([yes]) 1520 ], [ 1521 AC_MSG_RESULT([no]) 1522]) 1523 1524# Check for g.gl_statv glob() extension 1525AC_MSG_CHECKING([for gl_statv and GLOB_KEEPSTAT extensions for glob]) 1526AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <glob.h> ]], [[ 1527#ifndef GLOB_KEEPSTAT 1528#error "glob does not support GLOB_KEEPSTAT extension" 1529#endif 1530glob_t g; 1531g.gl_statv = NULL; 1532]])], 1533 [ 1534 AC_DEFINE([GLOB_HAS_GL_STATV], [1], 1535 [Define if your system glob() function has 1536 gl_statv options in glob_t]) 1537 AC_MSG_RESULT([yes]) 1538 ], [ 1539 AC_MSG_RESULT([no]) 1540 1541]) 1542 1543AC_CHECK_DECLS([GLOB_NOMATCH], , , [#include <glob.h>]) 1544 1545AC_CHECK_DECL([VIS_ALL], , 1546 AC_DEFINE(BROKEN_STRNVIS, 1, [missing VIS_ALL]), [#include <vis.h>]) 1547 1548AC_MSG_CHECKING([whether struct dirent allocates space for d_name]) 1549AC_RUN_IFELSE( 1550 [AC_LANG_PROGRAM([[ 1551#include <sys/types.h> 1552#include <dirent.h> 1553#include <stdlib.h> 1554 ]], 1555 [[ 1556 struct dirent d; 1557 exit(sizeof(d.d_name)<=sizeof(char)); 1558 ]])], 1559 [AC_MSG_RESULT([yes])], 1560 [ 1561 AC_MSG_RESULT([no]) 1562 AC_DEFINE([BROKEN_ONE_BYTE_DIRENT_D_NAME], [1], 1563 [Define if your struct dirent expects you to 1564 allocate extra space for d_name]) 1565 ], 1566 [ 1567 AC_MSG_WARN([cross compiling: assuming BROKEN_ONE_BYTE_DIRENT_D_NAME]) 1568 AC_DEFINE([BROKEN_ONE_BYTE_DIRENT_D_NAME]) 1569 ] 1570) 1571 1572AC_MSG_CHECKING([for /proc/pid/fd directory]) 1573if test -d "/proc/$$/fd" ; then 1574 AC_DEFINE([HAVE_PROC_PID], [1], [Define if you have /proc/$pid/fd]) 1575 AC_MSG_RESULT([yes]) 1576else 1577 AC_MSG_RESULT([no]) 1578fi 1579 1580# Check whether user wants TCP wrappers support 1581TCPW_MSG="no" 1582AC_ARG_WITH([tcp-wrappers], 1583 [ --with-tcp-wrappers[[=PATH]] Enable tcpwrappers support (optionally in PATH)], 1584 [ 1585 if test "x$withval" != "xno" ; then 1586 saved_LIBS="$LIBS" 1587 saved_LDFLAGS="$LDFLAGS" 1588 saved_CPPFLAGS="$CPPFLAGS" 1589 if test -n "${withval}" && \ 1590 test "x${withval}" != "xyes"; then 1591 if test -d "${withval}/lib"; then 1592 if test -n "${need_dash_r}"; then 1593 LDFLAGS="-L${withval}/lib -R${withval}/lib ${LDFLAGS}" 1594 else 1595 LDFLAGS="-L${withval}/lib ${LDFLAGS}" 1596 fi 1597 else 1598 if test -n "${need_dash_r}"; then 1599 LDFLAGS="-L${withval} -R${withval} ${LDFLAGS}" 1600 else 1601 LDFLAGS="-L${withval} ${LDFLAGS}" 1602 fi 1603 fi 1604 if test -d "${withval}/include"; then 1605 CPPFLAGS="-I${withval}/include ${CPPFLAGS}" 1606 else 1607 CPPFLAGS="-I${withval} ${CPPFLAGS}" 1608 fi 1609 fi 1610 LIBS="-lwrap $LIBS" 1611 AC_MSG_CHECKING([for libwrap]) 1612 AC_LINK_IFELSE([AC_LANG_PROGRAM([[ 1613#include <sys/types.h> 1614#include <sys/socket.h> 1615#include <netinet/in.h> 1616#include <tcpd.h> 1617int deny_severity = 0, allow_severity = 0; 1618 ]], [[ 1619 hosts_access(0); 1620 ]])], [ 1621 AC_MSG_RESULT([yes]) 1622 AC_DEFINE([LIBWRAP], [1], 1623 [Define if you want 1624 TCP Wrappers support]) 1625 SSHDLIBS="$SSHDLIBS -lwrap" 1626 TCPW_MSG="yes" 1627 ], [ 1628 AC_MSG_ERROR([*** libwrap missing]) 1629 ]) 1630 LIBS="$saved_LIBS" 1631 fi 1632 ] 1633) 1634 1635# Check whether user wants to use ldns 1636LDNS_MSG="no" 1637AC_ARG_WITH(ldns, 1638 [ --with-ldns[[=PATH]] Use ldns for DNSSEC support (optionally in PATH)], 1639 [ 1640 ldns="" 1641 if test "x$withval" = "xyes" ; then 1642 AC_PATH_TOOL([LDNSCONFIG], [ldns-config], [no]) 1643 if test "x$LDNSCONFIG" = "xno"; then 1644 LIBS="-lldns $LIBS" 1645 ldns=yes 1646 else 1647 LIBS="$LIBS `$LDNSCONFIG --libs`" 1648 CPPFLAGS="$CPPFLAGS `$LDNSCONFIG --cflags`" 1649 ldns=yes 1650 fi 1651 elif test "x$withval" != "xno" ; then 1652 CPPFLAGS="$CPPFLAGS -I${withval}/include" 1653 LDFLAGS="$LDFLAGS -L${withval}/lib" 1654 LIBS="-lldns $LIBS" 1655 ldns=yes 1656 fi 1657 1658 # Verify that it works. 1659 if test "x$ldns" = "xyes" ; then 1660 AC_DEFINE(HAVE_LDNS, 1, [Define if you want ldns support]) 1661 LDNS_MSG="yes" 1662 AC_MSG_CHECKING([for ldns support]) 1663 AC_LINK_IFELSE( 1664 [AC_LANG_SOURCE([[ 1665#include <stdio.h> 1666#include <stdlib.h> 1667#ifdef HAVE_STDINT_H 1668# include <stdint.h> 1669#endif 1670#include <ldns/ldns.h> 1671int main() { ldns_status status = ldns_verify_trusted(NULL, NULL, NULL, NULL); status=LDNS_STATUS_OK; exit(0); } 1672 ]]) 1673 ], 1674 [AC_MSG_RESULT(yes)], 1675 [ 1676 AC_MSG_RESULT(no) 1677 AC_MSG_ERROR([** Incomplete or missing ldns libraries.]) 1678 ]) 1679 fi 1680]) 1681 1682# Check whether user wants libedit support 1683LIBEDIT_MSG="no" 1684AC_ARG_WITH([libedit], 1685 [ --with-libedit[[=PATH]] Enable libedit support for sftp], 1686 [ if test "x$withval" != "xno" ; then 1687 if test "x$withval" = "xyes" ; then 1688 AC_PATH_TOOL([PKGCONFIG], [pkg-config], [no]) 1689 if test "x$PKGCONFIG" != "xno"; then 1690 AC_MSG_CHECKING([if $PKGCONFIG knows about libedit]) 1691 if "$PKGCONFIG" libedit; then 1692 AC_MSG_RESULT([yes]) 1693 use_pkgconfig_for_libedit=yes 1694 else 1695 AC_MSG_RESULT([no]) 1696 fi 1697 fi 1698 else 1699 CPPFLAGS="$CPPFLAGS -I${withval}/include" 1700 if test -n "${rpath_opt}"; then 1701 LDFLAGS="-L${withval}/lib ${rpath_opt}${withval}/lib ${LDFLAGS}" 1702 else 1703 LDFLAGS="-L${withval}/lib ${LDFLAGS}" 1704 fi 1705 fi 1706 if test "x$use_pkgconfig_for_libedit" = "xyes"; then 1707 LIBEDIT=`$PKGCONFIG --libs libedit` 1708 CPPFLAGS="$CPPFLAGS `$PKGCONFIG --cflags libedit`" 1709 else 1710 LIBEDIT="-ledit -lcurses" 1711 fi 1712 OTHERLIBS=`echo $LIBEDIT | sed 's/-ledit//'` 1713 AC_CHECK_LIB([edit], [el_init], 1714 [ AC_DEFINE([USE_LIBEDIT], [1], [Use libedit for sftp]) 1715 LIBEDIT_MSG="yes" 1716 AC_SUBST([LIBEDIT]) 1717 ], 1718 [ AC_MSG_ERROR([libedit not found]) ], 1719 [ $OTHERLIBS ] 1720 ) 1721 AC_MSG_CHECKING([if libedit version is compatible]) 1722 AC_COMPILE_IFELSE( 1723 [AC_LANG_PROGRAM([[ 1724#include <histedit.h> 1725#include <stdlib.h> 1726 ]], 1727 [[ 1728 int i = H_SETSIZE; 1729 el_init("", NULL, NULL, NULL); 1730 exit(0); 1731 ]])], 1732 [ AC_MSG_RESULT([yes]) ], 1733 [ AC_MSG_RESULT([no]) 1734 AC_MSG_ERROR([libedit version is not compatible]) ] 1735 ) 1736 fi ] 1737) 1738 1739AUDIT_MODULE=none 1740AC_ARG_WITH([audit], 1741 [ --with-audit=module Enable audit support (modules=debug,bsm,linux)], 1742 [ 1743 AC_MSG_CHECKING([for supported audit module]) 1744 case "$withval" in 1745 bsm) 1746 AC_MSG_RESULT([bsm]) 1747 AUDIT_MODULE=bsm 1748 dnl Checks for headers, libs and functions 1749 AC_CHECK_HEADERS([bsm/audit.h], [], 1750 [AC_MSG_ERROR([BSM enabled and bsm/audit.h not found])], 1751 [ 1752#ifdef HAVE_TIME_H 1753# include <time.h> 1754#endif 1755 ] 1756) 1757 AC_CHECK_LIB([bsm], [getaudit], [], 1758 [AC_MSG_ERROR([BSM enabled and required library not found])]) 1759 AC_CHECK_FUNCS([getaudit], [], 1760 [AC_MSG_ERROR([BSM enabled and required function not found])]) 1761 # These are optional 1762 AC_CHECK_FUNCS([getaudit_addr aug_get_machine]) 1763 AC_DEFINE([USE_BSM_AUDIT], [1], [Use BSM audit module]) 1764 if test "$sol2ver" -ge 11; then 1765 SSHDLIBS="$SSHDLIBS -lscf" 1766 AC_DEFINE([BROKEN_BSM_API], [1], 1767 [The system has incomplete BSM API]) 1768 fi 1769 ;; 1770 linux) 1771 AC_MSG_RESULT([linux]) 1772 AUDIT_MODULE=linux 1773 dnl Checks for headers, libs and functions 1774 AC_CHECK_HEADERS([libaudit.h]) 1775 SSHDLIBS="$SSHDLIBS -laudit" 1776 AC_DEFINE([USE_LINUX_AUDIT], [1], [Use Linux audit module]) 1777 ;; 1778 debug) 1779 AUDIT_MODULE=debug 1780 AC_MSG_RESULT([debug]) 1781 AC_DEFINE([SSH_AUDIT_EVENTS], [1], [Use audit debugging module]) 1782 ;; 1783 no) 1784 AC_MSG_RESULT([no]) 1785 ;; 1786 *) 1787 AC_MSG_ERROR([Unknown audit module $withval]) 1788 ;; 1789 esac ] 1790) 1791 1792AC_ARG_WITH([pie], 1793 [ --with-pie Build Position Independent Executables if possible], [ 1794 if test "x$withval" = "xno"; then 1795 use_pie=no 1796 fi 1797 if test "x$withval" = "xyes"; then 1798 use_pie=yes 1799 fi 1800 ] 1801) 1802if test "x$use_pie" = "x"; then 1803 use_pie=no 1804fi 1805if test "x$use_toolchain_hardening" != "x1" && test "x$use_pie" = "xauto"; then 1806 # Turn off automatic PIE when toolchain hardening is off. 1807 use_pie=no 1808fi 1809if test "x$use_pie" = "xauto"; then 1810 # Automatic PIE requires gcc >= 4.x 1811 AC_MSG_CHECKING([for gcc >= 4.x]) 1812 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ 1813#if !defined(__GNUC__) || __GNUC__ < 4 1814#error gcc is too old 1815#endif 1816]])], 1817 [ AC_MSG_RESULT([yes]) ], 1818 [ AC_MSG_RESULT([no]) 1819 use_pie=no ] 1820) 1821fi 1822if test "x$use_pie" != "xno"; then 1823 SAVED_CFLAGS="$CFLAGS" 1824 SAVED_LDFLAGS="$LDFLAGS" 1825 OSSH_CHECK_CFLAG_COMPILE([-fPIE]) 1826 OSSH_CHECK_LDFLAG_LINK([-pie]) 1827 # We use both -fPIE and -pie or neither. 1828 AC_MSG_CHECKING([whether both -fPIE and -pie are supported]) 1829 if echo "x $CFLAGS" | grep ' -fPIE' >/dev/null 2>&1 && \ 1830 echo "x $LDFLAGS" | grep ' -pie' >/dev/null 2>&1 ; then 1831 AC_MSG_RESULT([yes]) 1832 else 1833 AC_MSG_RESULT([no]) 1834 CFLAGS="$SAVED_CFLAGS" 1835 LDFLAGS="$SAVED_LDFLAGS" 1836 fi 1837fi 1838 1839AC_MSG_CHECKING([whether -fPIC is accepted]) 1840SAVED_CFLAGS="$CFLAGS" 1841CFLAGS="$CFLAGS -fPIC" 1842AC_COMPILE_IFELSE( 1843 [AC_LANG_PROGRAM( [[ #include <stdlib.h> ]], [[ exit(0); ]] )], 1844 [AC_MSG_RESULT([yes]) 1845 PICFLAG="-fPIC"; ], 1846 [AC_MSG_RESULT([no]) 1847 PICFLAG=""; ]) 1848CFLAGS="$SAVED_CFLAGS" 1849AC_SUBST([PICFLAG]) 1850 1851dnl Checks for library functions. Please keep in alphabetical order 1852AC_CHECK_FUNCS([ \ 1853 auth_hostok \ 1854 auth_timeok \ 1855 Blowfish_initstate \ 1856 Blowfish_expandstate \ 1857 Blowfish_expand0state \ 1858 Blowfish_stream2word \ 1859 SHA256Update \ 1860 SHA384Update \ 1861 SHA512Update \ 1862 asprintf \ 1863 b64_ntop \ 1864 __b64_ntop \ 1865 b64_pton \ 1866 __b64_pton \ 1867 bcopy \ 1868 bcrypt_pbkdf \ 1869 bindresvport_sa \ 1870 blf_enc \ 1871 bzero \ 1872 cap_rights_limit \ 1873 clock \ 1874 closefrom \ 1875 dirfd \ 1876 endgrent \ 1877 err \ 1878 errx \ 1879 explicit_bzero \ 1880 explicit_memset \ 1881 fchmod \ 1882 fchmodat \ 1883 fchown \ 1884 fchownat \ 1885 flock \ 1886 fnmatch \ 1887 freeaddrinfo \ 1888 freezero \ 1889 fstatfs \ 1890 fstatvfs \ 1891 futimes \ 1892 getaddrinfo \ 1893 getcwd \ 1894 getgrouplist \ 1895 getline \ 1896 getnameinfo \ 1897 getopt \ 1898 getpagesize \ 1899 getpeereid \ 1900 getpeerucred \ 1901 getpgid \ 1902 _getpty \ 1903 getrlimit \ 1904 getrandom \ 1905 getsid \ 1906 getttyent \ 1907 glob \ 1908 group_from_gid \ 1909 inet_aton \ 1910 inet_ntoa \ 1911 inet_ntop \ 1912 innetgr \ 1913 llabs \ 1914 localtime_r \ 1915 login_getcapbool \ 1916 login_getpwclass \ 1917 md5_crypt \ 1918 memmem \ 1919 memmove \ 1920 memset_s \ 1921 mkdtemp \ 1922 ngetaddrinfo \ 1923 nsleep \ 1924 ogetaddrinfo \ 1925 openlog_r \ 1926 pledge \ 1927 poll \ 1928 prctl \ 1929 procctl \ 1930 pselect \ 1931 pstat \ 1932 raise \ 1933 readpassphrase \ 1934 reallocarray \ 1935 realpath \ 1936 recvmsg \ 1937 recallocarray \ 1938 rresvport_af \ 1939 sendmsg \ 1940 setdtablesize \ 1941 setegid \ 1942 setenv \ 1943 seteuid \ 1944 setgroupent \ 1945 setgroups \ 1946 setlinebuf \ 1947 setlogin \ 1948 setpassent\ 1949 setpcred \ 1950 setproctitle \ 1951 setregid \ 1952 setreuid \ 1953 setrlimit \ 1954 setsid \ 1955 setvbuf \ 1956 sigaction \ 1957 sigvec \ 1958 snprintf \ 1959 socketpair \ 1960 statfs \ 1961 statvfs \ 1962 strcasestr \ 1963 strdup \ 1964 strerror \ 1965 strlcat \ 1966 strlcpy \ 1967 strmode \ 1968 strndup \ 1969 strnlen \ 1970 strnvis \ 1971 strptime \ 1972 strsignal \ 1973 strtonum \ 1974 strtoll \ 1975 strtoul \ 1976 strtoull \ 1977 swap32 \ 1978 sysconf \ 1979 tcgetpgrp \ 1980 timingsafe_bcmp \ 1981 truncate \ 1982 unsetenv \ 1983 updwtmpx \ 1984 utimensat \ 1985 user_from_uid \ 1986 usleep \ 1987 vasprintf \ 1988 vsnprintf \ 1989 waitpid \ 1990 warn \ 1991]) 1992 1993AC_CHECK_DECLS([bzero, memmem]) 1994 1995dnl Wide character support. 1996AC_CHECK_FUNCS([mblen mbtowc nl_langinfo wcwidth]) 1997 1998TEST_SSH_UTF8=${TEST_SSH_UTF8:=yes} 1999AC_MSG_CHECKING([for utf8 locale support]) 2000AC_RUN_IFELSE( 2001 [AC_LANG_PROGRAM([[ 2002#include <locale.h> 2003#include <stdlib.h> 2004 ]], [[ 2005 char *loc = setlocale(LC_CTYPE, "en_US.UTF-8"); 2006 if (loc != NULL) 2007 exit(0); 2008 exit(1); 2009 ]])], 2010 AC_MSG_RESULT(yes), 2011 [AC_MSG_RESULT(no) 2012 TEST_SSH_UTF8=no], 2013 AC_MSG_WARN([cross compiling: assuming yes]) 2014) 2015 2016AC_LINK_IFELSE( 2017 [AC_LANG_PROGRAM( 2018 [[ #include <ctype.h> ]], 2019 [[ return (isblank('a')); ]])], 2020 [AC_DEFINE([HAVE_ISBLANK], [1], [Define if you have isblank(3C).]) 2021]) 2022 2023disable_pkcs11= 2024AC_ARG_ENABLE([pkcs11], 2025 [ --disable-pkcs11 disable PKCS#11 support code [no]], 2026 [ 2027 if test "x$enableval" = "xno" ; then 2028 disable_pkcs11=1 2029 fi 2030 ] 2031) 2032 2033disable_sk= 2034AC_ARG_ENABLE([security-key], 2035 [ --disable-security-key disable U2F/FIDO support code [no]], 2036 [ 2037 if test "x$enableval" = "xno" ; then 2038 disable_sk=1 2039 fi 2040 ] 2041) 2042enable_sk_internal= 2043AC_ARG_WITH([security-key-builtin], 2044 [ --with-security-key-builtin include builtin U2F/FIDO support], 2045 [ 2046 if test "x$withval" != "xno" ; then 2047 enable_sk_internal=yes 2048 fi 2049 ] 2050) 2051test "x$disable_sk" != "x" && enable_sk_internal="" 2052 2053AC_SEARCH_LIBS([dlopen], [dl]) 2054AC_CHECK_FUNCS([dlopen]) 2055AC_CHECK_DECL([RTLD_NOW], [], [], [#include <dlfcn.h>]) 2056 2057# IRIX has a const char return value for gai_strerror() 2058AC_CHECK_FUNCS([gai_strerror], [ 2059 AC_DEFINE([HAVE_GAI_STRERROR]) 2060 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 2061#include <sys/types.h> 2062#include <sys/socket.h> 2063#include <netdb.h> 2064 2065const char *gai_strerror(int); 2066 ]], [[ 2067 char *str; 2068 str = gai_strerror(0); 2069 ]])], [ 2070 AC_DEFINE([HAVE_CONST_GAI_STRERROR_PROTO], [1], 2071 [Define if gai_strerror() returns const char *])], [])]) 2072 2073AC_SEARCH_LIBS([nanosleep], [rt posix4], [AC_DEFINE([HAVE_NANOSLEEP], [1], 2074 [Some systems put nanosleep outside of libc])]) 2075 2076AC_SEARCH_LIBS([clock_gettime], [rt], 2077 [AC_DEFINE([HAVE_CLOCK_GETTIME], [1], [Have clock_gettime])]) 2078 2079dnl check if we need -D_REENTRANT for localtime_r declaration. 2080AC_CHECK_DECL([localtime_r], [], 2081 [ saved_CPPFLAGS="$CPPFLAGS" 2082 CPPFLAGS="$CPPFLAGS -D_REENTRANT" 2083 unset ac_cv_have_decl_localtime_r 2084 AC_CHECK_DECL([localtime_r], [], 2085 [ CPPFLAGS="$saved_CPPFLAGS" ], 2086 [ #include <time.h> ] 2087 ) 2088 ], 2089 [ #include <time.h> ] 2090) 2091 2092dnl Make sure prototypes are defined for these before using them. 2093AC_CHECK_DECL([strsep], 2094 [AC_CHECK_FUNCS([strsep])], 2095 [], 2096 [ 2097#ifdef HAVE_STRING_H 2098# include <string.h> 2099#endif 2100 ]) 2101 2102dnl tcsendbreak might be a macro 2103AC_CHECK_DECL([tcsendbreak], 2104 [AC_DEFINE([HAVE_TCSENDBREAK])], 2105 [AC_CHECK_FUNCS([tcsendbreak])], 2106 [#include <termios.h>] 2107) 2108 2109AC_CHECK_DECLS([h_errno], , ,[#include <netdb.h>]) 2110 2111AC_CHECK_DECLS([SHUT_RD, getpeereid], , , 2112 [ 2113#include <sys/types.h> 2114#include <sys/socket.h> 2115#include <unistd.h> 2116 ]) 2117 2118AC_CHECK_DECLS([O_NONBLOCK], , , 2119 [ 2120#include <sys/types.h> 2121#ifdef HAVE_SYS_STAT_H 2122# include <sys/stat.h> 2123#endif 2124#ifdef HAVE_FCNTL_H 2125# include <fcntl.h> 2126#endif 2127 ]) 2128 2129AC_CHECK_DECLS([readv, writev], , , [ 2130#include <sys/types.h> 2131#include <sys/uio.h> 2132#include <unistd.h> 2133 ]) 2134 2135AC_CHECK_DECLS([MAXSYMLINKS], , , [ 2136#include <sys/param.h> 2137 ]) 2138 2139AC_CHECK_DECLS([offsetof], , , [ 2140#include <stddef.h> 2141 ]) 2142 2143# extra bits for select(2) 2144AC_CHECK_DECLS([howmany, NFDBITS], [], [], [[ 2145#include <sys/param.h> 2146#include <sys/types.h> 2147#ifdef HAVE_SYS_SYSMACROS_H 2148#include <sys/sysmacros.h> 2149#endif 2150#ifdef HAVE_SYS_SELECT_H 2151#include <sys/select.h> 2152#endif 2153#ifdef HAVE_SYS_TIME_H 2154#include <sys/time.h> 2155#endif 2156#ifdef HAVE_UNISTD_H 2157#include <unistd.h> 2158#endif 2159 ]]) 2160AC_CHECK_TYPES([fd_mask], [], [], [[ 2161#include <sys/param.h> 2162#include <sys/types.h> 2163#ifdef HAVE_SYS_SELECT_H 2164#include <sys/select.h> 2165#endif 2166#ifdef HAVE_SYS_TIME_H 2167#include <sys/time.h> 2168#endif 2169#ifdef HAVE_UNISTD_H 2170#include <unistd.h> 2171#endif 2172 ]]) 2173 2174AC_CHECK_FUNCS([setresuid], [ 2175 dnl Some platorms have setresuid that isn't implemented, test for this 2176 AC_MSG_CHECKING([if setresuid seems to work]) 2177 AC_RUN_IFELSE( 2178 [AC_LANG_PROGRAM([[ 2179#include <stdlib.h> 2180#include <errno.h> 2181 ]], [[ 2182 errno=0; 2183 setresuid(0,0,0); 2184 if (errno==ENOSYS) 2185 exit(1); 2186 else 2187 exit(0); 2188 ]])], 2189 [AC_MSG_RESULT([yes])], 2190 [AC_DEFINE([BROKEN_SETRESUID], [1], 2191 [Define if your setresuid() is broken]) 2192 AC_MSG_RESULT([not implemented])], 2193 [AC_MSG_WARN([cross compiling: not checking setresuid])] 2194 ) 2195]) 2196 2197AC_CHECK_FUNCS([setresgid], [ 2198 dnl Some platorms have setresgid that isn't implemented, test for this 2199 AC_MSG_CHECKING([if setresgid seems to work]) 2200 AC_RUN_IFELSE( 2201 [AC_LANG_PROGRAM([[ 2202#include <stdlib.h> 2203#include <errno.h> 2204 ]], [[ 2205 errno=0; 2206 setresgid(0,0,0); 2207 if (errno==ENOSYS) 2208 exit(1); 2209 else 2210 exit(0); 2211 ]])], 2212 [AC_MSG_RESULT([yes])], 2213 [AC_DEFINE([BROKEN_SETRESGID], [1], 2214 [Define if your setresgid() is broken]) 2215 AC_MSG_RESULT([not implemented])], 2216 [AC_MSG_WARN([cross compiling: not checking setresuid])] 2217 ) 2218]) 2219 2220AC_MSG_CHECKING([for working fflush(NULL)]) 2221AC_RUN_IFELSE( 2222 [AC_LANG_PROGRAM([[ 2223#include <stdio.h> 2224#include <stdlib.h> 2225 ]], 2226 [[fflush(NULL); exit(0);]])], 2227 AC_MSG_RESULT([yes]), 2228 [AC_MSG_RESULT([no]) 2229 AC_DEFINE([FFLUSH_NULL_BUG], [1], 2230 [define if fflush(NULL) does not work])], 2231 AC_MSG_WARN([cross compiling: assuming working]) 2232) 2233 2234dnl Checks for time functions 2235AC_CHECK_FUNCS([gettimeofday time]) 2236dnl Checks for utmp functions 2237AC_CHECK_FUNCS([endutent getutent getutid getutline pututline setutent]) 2238AC_CHECK_FUNCS([utmpname]) 2239dnl Checks for utmpx functions 2240AC_CHECK_FUNCS([endutxent getutxent getutxid getutxline getutxuser pututxline]) 2241AC_CHECK_FUNCS([setutxdb setutxent utmpxname]) 2242dnl Checks for lastlog functions 2243AC_CHECK_FUNCS([getlastlogxbyname]) 2244 2245AC_CHECK_FUNC([daemon], 2246 [AC_DEFINE([HAVE_DAEMON], [1], [Define if your libraries define daemon()])], 2247 [AC_CHECK_LIB([bsd], [daemon], 2248 [LIBS="$LIBS -lbsd"; AC_DEFINE([HAVE_DAEMON])])] 2249) 2250 2251AC_CHECK_FUNC([getpagesize], 2252 [AC_DEFINE([HAVE_GETPAGESIZE], [1], 2253 [Define if your libraries define getpagesize()])], 2254 [AC_CHECK_LIB([ucb], [getpagesize], 2255 [LIBS="$LIBS -lucb"; AC_DEFINE([HAVE_GETPAGESIZE])])] 2256) 2257 2258# Check for broken snprintf 2259if test "x$ac_cv_func_snprintf" = "xyes" ; then 2260 AC_MSG_CHECKING([whether snprintf correctly terminates long strings]) 2261 AC_RUN_IFELSE( 2262 [AC_LANG_PROGRAM([[ 2263#include <stdio.h> 2264#include <stdlib.h> 2265 ]], 2266 [[ 2267 char b[5]; 2268 snprintf(b,5,"123456789"); 2269 exit(b[4]!='\0'); 2270 ]])], 2271 [AC_MSG_RESULT([yes])], 2272 [ 2273 AC_MSG_RESULT([no]) 2274 AC_DEFINE([BROKEN_SNPRINTF], [1], 2275 [Define if your snprintf is busted]) 2276 AC_MSG_WARN([****** Your snprintf() function is broken, complain to your vendor]) 2277 ], 2278 [ AC_MSG_WARN([cross compiling: Assuming working snprintf()]) ] 2279 ) 2280fi 2281 2282if test "x$ac_cv_func_snprintf" = "xyes" ; then 2283 AC_MSG_CHECKING([whether snprintf understands %zu]) 2284 AC_RUN_IFELSE( 2285 [AC_LANG_PROGRAM([[ 2286#include <sys/types.h> 2287#include <stdio.h> 2288#include <stdlib.h> 2289#include <string.h> 2290 ]], 2291 [[ 2292 size_t a = 1, b = 2; 2293 char z[128]; 2294 snprintf(z, sizeof z, "%zu%zu", a, b); 2295 exit(strcmp(z, "12")); 2296 ]])], 2297 [AC_MSG_RESULT([yes])], 2298 [ 2299 AC_MSG_RESULT([no]) 2300 AC_DEFINE([BROKEN_SNPRINTF], [1], 2301 [snprintf does not understand %zu]) 2302 ], 2303 [ AC_MSG_WARN([cross compiling: Assuming working snprintf()]) ] 2304 ) 2305fi 2306 2307# We depend on vsnprintf returning the right thing on overflow: the 2308# number of characters it tried to create (as per SUSv3) 2309if test "x$ac_cv_func_vsnprintf" = "xyes" ; then 2310 AC_MSG_CHECKING([whether vsnprintf returns correct values on overflow]) 2311 AC_RUN_IFELSE( 2312 [AC_LANG_PROGRAM([[ 2313#include <sys/types.h> 2314#include <stdio.h> 2315#include <stdarg.h> 2316 2317int x_snprintf(char *str, size_t count, const char *fmt, ...) 2318{ 2319 size_t ret; 2320 va_list ap; 2321 2322 va_start(ap, fmt); 2323 ret = vsnprintf(str, count, fmt, ap); 2324 va_end(ap); 2325 return ret; 2326} 2327 ]], [[ 2328char x[1]; 2329if (x_snprintf(x, 1, "%s %d", "hello", 12345) != 11) 2330 return 1; 2331if (x_snprintf(NULL, 0, "%s %d", "hello", 12345) != 11) 2332 return 1; 2333return 0; 2334 ]])], 2335 [AC_MSG_RESULT([yes])], 2336 [ 2337 AC_MSG_RESULT([no]) 2338 AC_DEFINE([BROKEN_SNPRINTF], [1], 2339 [Define if your snprintf is busted]) 2340 AC_MSG_WARN([****** Your vsnprintf() function is broken, complain to your vendor]) 2341 ], 2342 [ AC_MSG_WARN([cross compiling: Assuming working vsnprintf()]) ] 2343 ) 2344fi 2345 2346# On systems where [v]snprintf is broken, but is declared in stdio, 2347# check that the fmt argument is const char * or just char *. 2348# This is only useful for when BROKEN_SNPRINTF 2349AC_MSG_CHECKING([whether snprintf can declare const char *fmt]) 2350AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 2351#include <stdio.h> 2352int snprintf(char *a, size_t b, const char *c, ...) { return 0; } 2353 ]], [[ 2354 snprintf(0, 0, 0); 2355 ]])], 2356 [AC_MSG_RESULT([yes]) 2357 AC_DEFINE([SNPRINTF_CONST], [const], 2358 [Define as const if snprintf() can declare const char *fmt])], 2359 [AC_MSG_RESULT([no]) 2360 AC_DEFINE([SNPRINTF_CONST], [/* not const */])]) 2361 2362# Check for missing getpeereid (or equiv) support 2363NO_PEERCHECK="" 2364if test "x$ac_cv_func_getpeereid" != "xyes" -a "x$ac_cv_func_getpeerucred" != "xyes"; then 2365 AC_MSG_CHECKING([whether system supports SO_PEERCRED getsockopt]) 2366 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 2367#include <sys/types.h> 2368#include <sys/socket.h>]], [[int i = SO_PEERCRED;]])], 2369 [ AC_MSG_RESULT([yes]) 2370 AC_DEFINE([HAVE_SO_PEERCRED], [1], [Have PEERCRED socket option]) 2371 ], [AC_MSG_RESULT([no]) 2372 NO_PEERCHECK=1 2373 ]) 2374fi 2375 2376dnl make sure that openpty does not reacquire controlling terminal 2377if test ! -z "$check_for_openpty_ctty_bug"; then 2378 AC_MSG_CHECKING([if openpty correctly handles controlling tty]) 2379 AC_RUN_IFELSE( 2380 [AC_LANG_PROGRAM([[ 2381#include <stdio.h> 2382#include <stdlib.h> 2383#include <unistd.h> 2384#include <sys/fcntl.h> 2385#include <sys/types.h> 2386#include <sys/wait.h> 2387 ]], [[ 2388 pid_t pid; 2389 int fd, ptyfd, ttyfd, status; 2390 2391 pid = fork(); 2392 if (pid < 0) { /* failed */ 2393 exit(1); 2394 } else if (pid > 0) { /* parent */ 2395 waitpid(pid, &status, 0); 2396 if (WIFEXITED(status)) 2397 exit(WEXITSTATUS(status)); 2398 else 2399 exit(2); 2400 } else { /* child */ 2401 close(0); close(1); close(2); 2402 setsid(); 2403 openpty(&ptyfd, &ttyfd, NULL, NULL, NULL); 2404 fd = open("/dev/tty", O_RDWR | O_NOCTTY); 2405 if (fd >= 0) 2406 exit(3); /* Acquired ctty: broken */ 2407 else 2408 exit(0); /* Did not acquire ctty: OK */ 2409 } 2410 ]])], 2411 [ 2412 AC_MSG_RESULT([yes]) 2413 ], 2414 [ 2415 AC_MSG_RESULT([no]) 2416 AC_DEFINE([SSHD_ACQUIRES_CTTY]) 2417 ], 2418 [ 2419 AC_MSG_RESULT([cross-compiling, assuming yes]) 2420 ] 2421 ) 2422fi 2423 2424if test "x$ac_cv_func_getaddrinfo" = "xyes" && \ 2425 test "x$check_for_hpux_broken_getaddrinfo" = "x1"; then 2426 AC_MSG_CHECKING([if getaddrinfo seems to work]) 2427 AC_RUN_IFELSE( 2428 [AC_LANG_PROGRAM([[ 2429#include <stdio.h> 2430#include <stdlib.h> 2431#include <sys/socket.h> 2432#include <netdb.h> 2433#include <errno.h> 2434#include <netinet/in.h> 2435 2436#define TEST_PORT "2222" 2437 ]], [[ 2438 int err, sock; 2439 struct addrinfo *gai_ai, *ai, hints; 2440 char ntop[NI_MAXHOST], strport[NI_MAXSERV], *name = NULL; 2441 2442 memset(&hints, 0, sizeof(hints)); 2443 hints.ai_family = PF_UNSPEC; 2444 hints.ai_socktype = SOCK_STREAM; 2445 hints.ai_flags = AI_PASSIVE; 2446 2447 err = getaddrinfo(name, TEST_PORT, &hints, &gai_ai); 2448 if (err != 0) { 2449 fprintf(stderr, "getaddrinfo failed (%s)", gai_strerror(err)); 2450 exit(1); 2451 } 2452 2453 for (ai = gai_ai; ai != NULL; ai = ai->ai_next) { 2454 if (ai->ai_family != AF_INET6) 2455 continue; 2456 2457 err = getnameinfo(ai->ai_addr, ai->ai_addrlen, ntop, 2458 sizeof(ntop), strport, sizeof(strport), 2459 NI_NUMERICHOST|NI_NUMERICSERV); 2460 2461 if (err != 0) { 2462 if (err == EAI_SYSTEM) 2463 perror("getnameinfo EAI_SYSTEM"); 2464 else 2465 fprintf(stderr, "getnameinfo failed: %s\n", 2466 gai_strerror(err)); 2467 exit(2); 2468 } 2469 2470 sock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); 2471 if (sock < 0) 2472 perror("socket"); 2473 if (bind(sock, ai->ai_addr, ai->ai_addrlen) < 0) { 2474 if (errno == EBADF) 2475 exit(3); 2476 } 2477 } 2478 exit(0); 2479 ]])], 2480 [ 2481 AC_MSG_RESULT([yes]) 2482 ], 2483 [ 2484 AC_MSG_RESULT([no]) 2485 AC_DEFINE([BROKEN_GETADDRINFO]) 2486 ], 2487 [ 2488 AC_MSG_RESULT([cross-compiling, assuming yes]) 2489 ] 2490 ) 2491fi 2492 2493if test "x$ac_cv_func_getaddrinfo" = "xyes" && \ 2494 test "x$check_for_aix_broken_getaddrinfo" = "x1"; then 2495 AC_MSG_CHECKING([if getaddrinfo seems to work]) 2496 AC_RUN_IFELSE( 2497 [AC_LANG_PROGRAM([[ 2498#include <stdio.h> 2499#include <stdlib.h> 2500#include <sys/socket.h> 2501#include <netdb.h> 2502#include <errno.h> 2503#include <netinet/in.h> 2504 2505#define TEST_PORT "2222" 2506 ]], [[ 2507 int err, sock; 2508 struct addrinfo *gai_ai, *ai, hints; 2509 char ntop[NI_MAXHOST], strport[NI_MAXSERV], *name = NULL; 2510 2511 memset(&hints, 0, sizeof(hints)); 2512 hints.ai_family = PF_UNSPEC; 2513 hints.ai_socktype = SOCK_STREAM; 2514 hints.ai_flags = AI_PASSIVE; 2515 2516 err = getaddrinfo(name, TEST_PORT, &hints, &gai_ai); 2517 if (err != 0) { 2518 fprintf(stderr, "getaddrinfo failed (%s)", gai_strerror(err)); 2519 exit(1); 2520 } 2521 2522 for (ai = gai_ai; ai != NULL; ai = ai->ai_next) { 2523 if (ai->ai_family != AF_INET && ai->ai_family != AF_INET6) 2524 continue; 2525 2526 err = getnameinfo(ai->ai_addr, ai->ai_addrlen, ntop, 2527 sizeof(ntop), strport, sizeof(strport), 2528 NI_NUMERICHOST|NI_NUMERICSERV); 2529 2530 if (ai->ai_family == AF_INET && err != 0) { 2531 perror("getnameinfo"); 2532 exit(2); 2533 } 2534 } 2535 exit(0); 2536 ]])], 2537 [ 2538 AC_MSG_RESULT([yes]) 2539 AC_DEFINE([AIX_GETNAMEINFO_HACK], [1], 2540 [Define if you have a getaddrinfo that fails 2541 for the all-zeros IPv6 address]) 2542 ], 2543 [ 2544 AC_MSG_RESULT([no]) 2545 AC_DEFINE([BROKEN_GETADDRINFO]) 2546 ], 2547 [ 2548 AC_MSG_RESULT([cross-compiling, assuming no]) 2549 ] 2550 ) 2551fi 2552 2553if test "x$ac_cv_func_getaddrinfo" = "xyes"; then 2554 AC_CHECK_DECLS(AI_NUMERICSERV, , , 2555 [#include <sys/types.h> 2556 #include <sys/socket.h> 2557 #include <netdb.h>]) 2558fi 2559 2560if test "x$check_for_conflicting_getspnam" = "x1"; then 2561 AC_MSG_CHECKING([for conflicting getspnam in shadow.h]) 2562 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 2563#include <shadow.h> 2564#include <stdlib.h> 2565 ]], 2566 [[ exit(0); ]])], 2567 [ 2568 AC_MSG_RESULT([no]) 2569 ], 2570 [ 2571 AC_MSG_RESULT([yes]) 2572 AC_DEFINE([GETSPNAM_CONFLICTING_DEFS], [1], 2573 [Conflicting defs for getspnam]) 2574 ] 2575 ) 2576fi 2577 2578dnl NetBSD added an strnvis and unfortunately made it incompatible with the 2579dnl existing one in OpenBSD and Linux's libbsd (the former having existed 2580dnl for over ten years). Despite this incompatibility being reported during 2581dnl development (see http://gnats.netbsd.org/44977) they still shipped it. 2582dnl Even more unfortunately FreeBSD and later MacOS picked up this incompatible 2583dnl implementation. Try to detect this mess, and assume the only safe option 2584dnl if we're cross compiling. 2585dnl 2586dnl OpenBSD, 2001: strnvis(char *dst, const char *src, size_t dlen, int flag); 2587dnl NetBSD: 2012, strnvis(char *dst, size_t dlen, const char *src, int flag); 2588if test "x$ac_cv_func_strnvis" = "xyes"; then 2589 AC_MSG_CHECKING([for working strnvis]) 2590 AC_RUN_IFELSE( 2591 [AC_LANG_PROGRAM([[ 2592#include <signal.h> 2593#include <stdlib.h> 2594#include <string.h> 2595#include <unistd.h> 2596#include <vis.h> 2597static void sighandler(int sig) { _exit(1); } 2598 ]], [[ 2599 char dst[16]; 2600 2601 signal(SIGSEGV, sighandler); 2602 if (strnvis(dst, "src", 4, 0) && strcmp(dst, "src") == 0) 2603 exit(0); 2604 exit(1) 2605 ]])], 2606 [AC_MSG_RESULT([yes])], 2607 [AC_MSG_RESULT([no]) 2608 AC_DEFINE([BROKEN_STRNVIS], [1], [strnvis detected broken])], 2609 [AC_MSG_WARN([cross compiling: assuming broken]) 2610 AC_DEFINE([BROKEN_STRNVIS], [1], [strnvis assumed broken])] 2611 ) 2612fi 2613 2614AC_MSG_CHECKING([if SA_RESTARTed signals interrupt select()]) 2615AC_RUN_IFELSE( 2616 [AC_LANG_PROGRAM([[ 2617#ifdef HAVE_SYS_SELECT 2618# include <sys/select.h> 2619#endif 2620#include <sys/types.h> 2621#include <sys/time.h> 2622#include <stdlib.h> 2623#include <signal.h> 2624#include <unistd.h> 2625static void sighandler(int sig) { } 2626 ]], [[ 2627 int r; 2628 pid_t pid; 2629 struct sigaction sa; 2630 2631 sa.sa_handler = sighandler; 2632 sa.sa_flags = SA_RESTART; 2633 (void)sigaction(SIGTERM, &sa, NULL); 2634 if ((pid = fork()) == 0) { /* child */ 2635 pid = getppid(); 2636 sleep(1); 2637 kill(pid, SIGTERM); 2638 sleep(1); 2639 if (getppid() == pid) /* if parent did not exit, shoot it */ 2640 kill(pid, SIGKILL); 2641 exit(0); 2642 } else { /* parent */ 2643 r = select(0, NULL, NULL, NULL, NULL); 2644 } 2645 exit(r == -1 ? 0 : 1); 2646 ]])], 2647 [AC_MSG_RESULT([yes])], 2648 [AC_MSG_RESULT([no]) 2649 AC_DEFINE([NO_SA_RESTART], [1], 2650 [SA_RESTARTed signals do no interrupt select])], 2651 [AC_MSG_WARN([cross compiling: assuming yes])] 2652) 2653 2654AC_CHECK_FUNCS([getpgrp],[ 2655 AC_MSG_CHECKING([if getpgrp accepts zero args]) 2656 AC_COMPILE_IFELSE( 2657 [AC_LANG_PROGRAM([[$ac_includes_default]], [[ getpgrp(); ]])], 2658 [ AC_MSG_RESULT([yes]) 2659 AC_DEFINE([GETPGRP_VOID], [1], [getpgrp takes zero args])], 2660 [ AC_MSG_RESULT([no]) 2661 AC_DEFINE([GETPGRP_VOID], [0], [getpgrp takes one arg])] 2662 ) 2663]) 2664 2665# Search for OpenSSL 2666saved_CPPFLAGS="$CPPFLAGS" 2667saved_LDFLAGS="$LDFLAGS" 2668AC_ARG_WITH([ssl-dir], 2669 [ --with-ssl-dir=PATH Specify path to OpenSSL installation ], 2670 [ 2671 if test "x$openssl" = "xno" ; then 2672 AC_MSG_ERROR([cannot use --with-ssl-dir when OpenSSL disabled]) 2673 fi 2674 if test "x$withval" != "xno" ; then 2675 case "$withval" in 2676 # Relative paths 2677 ./*|../*) withval="`pwd`/$withval" 2678 esac 2679 if test -d "$withval/lib"; then 2680 if test -n "${rpath_opt}"; then 2681 LDFLAGS="-L${withval}/lib ${rpath_opt}${withval}/lib ${LDFLAGS}" 2682 else 2683 LDFLAGS="-L${withval}/lib ${LDFLAGS}" 2684 fi 2685 elif test -d "$withval/lib64"; then 2686 if test -n "${rpath_opt}"; then 2687 LDFLAGS="-L${withval}/lib64 ${rpath_opt}${withval}/lib64 ${LDFLAGS}" 2688 else 2689 LDFLAGS="-L${withval}/lib64 ${LDFLAGS}" 2690 fi 2691 else 2692 if test -n "${rpath_opt}"; then 2693 LDFLAGS="-L${withval} ${rpath_opt}${withval} ${LDFLAGS}" 2694 else 2695 LDFLAGS="-L${withval} ${LDFLAGS}" 2696 fi 2697 fi 2698 if test -d "$withval/include"; then 2699 CPPFLAGS="-I${withval}/include ${CPPFLAGS}" 2700 else 2701 CPPFLAGS="-I${withval} ${CPPFLAGS}" 2702 fi 2703 fi 2704 ] 2705) 2706 2707AC_ARG_WITH([openssl-header-check], 2708 [ --without-openssl-header-check Disable OpenSSL version consistency check], 2709 [ 2710 if test "x$withval" = "xno" ; then 2711 openssl_check_nonfatal=1 2712 fi 2713 ] 2714) 2715 2716openssl_engine=no 2717AC_ARG_WITH([ssl-engine], 2718 [ --with-ssl-engine Enable OpenSSL (hardware) ENGINE support ], 2719 [ 2720 if test "x$withval" != "xno" ; then 2721 if test "x$openssl" = "xno" ; then 2722 AC_MSG_ERROR([cannot use --with-ssl-engine when OpenSSL disabled]) 2723 fi 2724 openssl_engine=yes 2725 fi 2726 ] 2727) 2728 2729if test "x$openssl" = "xyes" ; then 2730 LIBS="-lcrypto $LIBS" 2731 AC_TRY_LINK_FUNC([RAND_add], , 2732 [AC_MSG_ERROR([*** working libcrypto not found, check config.log])]) 2733 AC_CHECK_HEADER([openssl/opensslv.h], , 2734 [AC_MSG_ERROR([*** OpenSSL headers missing - please install first or check config.log ***])]) 2735 2736 # Determine OpenSSL header version 2737 AC_MSG_CHECKING([OpenSSL header version]) 2738 AC_RUN_IFELSE( 2739 [AC_LANG_PROGRAM([[ 2740 #include <stdlib.h> 2741 #include <stdio.h> 2742 #include <string.h> 2743 #include <openssl/opensslv.h> 2744 #define DATA "conftest.sslincver" 2745 ]], [[ 2746 FILE *fd; 2747 int rc; 2748 2749 fd = fopen(DATA,"w"); 2750 if(fd == NULL) 2751 exit(1); 2752 2753 if ((rc = fprintf(fd, "%08lx (%s)\n", 2754 (unsigned long)OPENSSL_VERSION_NUMBER, 2755 OPENSSL_VERSION_TEXT)) < 0) 2756 exit(1); 2757 2758 exit(0); 2759 ]])], 2760 [ 2761 ssl_header_ver=`cat conftest.sslincver` 2762 AC_MSG_RESULT([$ssl_header_ver]) 2763 ], 2764 [ 2765 AC_MSG_RESULT([not found]) 2766 AC_MSG_ERROR([OpenSSL version header not found.]) 2767 ], 2768 [ 2769 AC_MSG_WARN([cross compiling: not checking]) 2770 ] 2771 ) 2772 2773 # Determining OpenSSL library version is version dependent. 2774 AC_CHECK_FUNCS([OpenSSL_version OpenSSL_version_num]) 2775 2776 # Determine OpenSSL library version 2777 AC_MSG_CHECKING([OpenSSL library version]) 2778 AC_RUN_IFELSE( 2779 [AC_LANG_PROGRAM([[ 2780 #include <stdio.h> 2781 #include <stdlib.h> 2782 #include <string.h> 2783 #include <openssl/opensslv.h> 2784 #include <openssl/crypto.h> 2785 #define DATA "conftest.ssllibver" 2786 ]], [[ 2787 FILE *fd; 2788 int rc; 2789 2790 fd = fopen(DATA,"w"); 2791 if(fd == NULL) 2792 exit(1); 2793#ifndef OPENSSL_VERSION 2794# define OPENSSL_VERSION SSLEAY_VERSION 2795#endif 2796#ifndef HAVE_OPENSSL_VERSION 2797# define OpenSSL_version SSLeay_version 2798#endif 2799#ifndef HAVE_OPENSSL_VERSION_NUM 2800# define OpenSSL_version_num SSLeay 2801#endif 2802 if ((rc = fprintf(fd, "%08lx (%s)\n", 2803 (unsigned long)OpenSSL_version_num(), 2804 OpenSSL_version(OPENSSL_VERSION))) < 0) 2805 exit(1); 2806 2807 exit(0); 2808 ]])], 2809 [ 2810 ssl_library_ver=`cat conftest.ssllibver` 2811 # Check version is supported. 2812 case "$ssl_library_ver" in 2813 10000*|0*) 2814 AC_MSG_ERROR([OpenSSL >= 1.0.1 required (have "$ssl_library_ver")]) 2815 ;; 2816 100*) ;; # 1.0.x 2817 101000[[0123456]]*) 2818 # https://github.com/openssl/openssl/pull/4613 2819 AC_MSG_ERROR([OpenSSL 1.1.x versions prior to 1.1.0g have a bug that breaks their use with OpenSSH (have "$ssl_library_ver")]) 2820 ;; 2821 101*) ;; # 1.1.x 2822 200*) ;; # LibreSSL 2823 300*) ;; # OpenSSL 3 2824 301*) ;; # OpenSSL development branch. 2825 *) 2826 AC_MSG_ERROR([Unknown/unsupported OpenSSL version ("$ssl_library_ver")]) 2827 ;; 2828 esac 2829 AC_MSG_RESULT([$ssl_library_ver]) 2830 ], 2831 [ 2832 AC_MSG_RESULT([not found]) 2833 AC_MSG_ERROR([OpenSSL library not found.]) 2834 ], 2835 [ 2836 AC_MSG_WARN([cross compiling: not checking]) 2837 ] 2838 ) 2839 2840 # Sanity check OpenSSL headers 2841 AC_MSG_CHECKING([whether OpenSSL's headers match the library]) 2842 AC_RUN_IFELSE( 2843 [AC_LANG_PROGRAM([[ 2844 #include <stdlib.h> 2845 #include <string.h> 2846 #include <openssl/opensslv.h> 2847 #include <openssl/crypto.h> 2848 ]], [[ 2849#ifndef HAVE_OPENSSL_VERSION_NUM 2850# define OpenSSL_version_num SSLeay 2851#endif 2852 exit(OpenSSL_version_num() == OPENSSL_VERSION_NUMBER ? 0 : 1); 2853 ]])], 2854 [ 2855 AC_MSG_RESULT([yes]) 2856 ], 2857 [ 2858 AC_MSG_RESULT([no]) 2859 if test "x$openssl_check_nonfatal" = "x"; then 2860 AC_MSG_ERROR([Your OpenSSL headers do not match your 2861 library. Check config.log for details. 2862 If you are sure your installation is consistent, you can disable the check 2863 by running "./configure --without-openssl-header-check". 2864 Also see contrib/findssl.sh for help identifying header/library mismatches. 2865 ]) 2866 else 2867 AC_MSG_WARN([Your OpenSSL headers do not match your 2868 library. Check config.log for details. 2869 Also see contrib/findssl.sh for help identifying header/library mismatches.]) 2870 fi 2871 ], 2872 [ 2873 AC_MSG_WARN([cross compiling: not checking]) 2874 ] 2875 ) 2876 2877 AC_MSG_CHECKING([if programs using OpenSSL functions will link]) 2878 AC_LINK_IFELSE( 2879 [AC_LANG_PROGRAM([[ #include <openssl/err.h> ]], 2880 [[ ERR_load_crypto_strings(); ]])], 2881 [ 2882 AC_MSG_RESULT([yes]) 2883 ], 2884 [ 2885 AC_MSG_RESULT([no]) 2886 saved_LIBS="$LIBS" 2887 LIBS="$LIBS -ldl" 2888 AC_MSG_CHECKING([if programs using OpenSSL need -ldl]) 2889 AC_LINK_IFELSE( 2890 [AC_LANG_PROGRAM([[ #include <openssl/err.h> ]], 2891 [[ ERR_load_crypto_strings(); ]])], 2892 [ 2893 AC_MSG_RESULT([yes]) 2894 ], 2895 [ 2896 AC_MSG_RESULT([no]) 2897 LIBS="$saved_LIBS" 2898 ] 2899 ) 2900 ] 2901 ) 2902 2903 AC_CHECK_FUNCS([ \ 2904 BN_is_prime_ex \ 2905 DSA_generate_parameters_ex \ 2906 EVP_CIPHER_CTX_ctrl \ 2907 EVP_DigestFinal_ex \ 2908 EVP_DigestInit_ex \ 2909 EVP_MD_CTX_cleanup \ 2910 EVP_MD_CTX_copy_ex \ 2911 EVP_MD_CTX_init \ 2912 HMAC_CTX_init \ 2913 RSA_generate_key_ex \ 2914 RSA_get_default_method \ 2915 ]) 2916 2917 # OpenSSL_add_all_algorithms may be a macro. 2918 AC_CHECK_FUNC(OpenSSL_add_all_algorithms, 2919 AC_DEFINE(HAVE_OPENSSL_ADD_ALL_ALGORITHMS, 1, [as a function]), 2920 AC_CHECK_DECL(OpenSSL_add_all_algorithms, 2921 AC_DEFINE(HAVE_OPENSSL_ADD_ALL_ALGORITHMS, 1, [as a macro]), , 2922 [[#include <openssl/evp.h>]] 2923 ) 2924 ) 2925 2926 # LibreSSL/OpenSSL 1.1x API 2927 AC_CHECK_FUNCS([ \ 2928 OPENSSL_init_crypto \ 2929 DH_get0_key \ 2930 DH_get0_pqg \ 2931 DH_set0_key \ 2932 DH_set_length \ 2933 DH_set0_pqg \ 2934 DSA_get0_key \ 2935 DSA_get0_pqg \ 2936 DSA_set0_key \ 2937 DSA_set0_pqg \ 2938 DSA_SIG_get0 \ 2939 DSA_SIG_set0 \ 2940 ECDSA_SIG_get0 \ 2941 ECDSA_SIG_set0 \ 2942 EVP_CIPHER_CTX_iv \ 2943 EVP_CIPHER_CTX_iv_noconst \ 2944 EVP_CIPHER_CTX_get_iv \ 2945 EVP_CIPHER_CTX_get_updated_iv \ 2946 EVP_CIPHER_CTX_set_iv \ 2947 RSA_get0_crt_params \ 2948 RSA_get0_factors \ 2949 RSA_get0_key \ 2950 RSA_set0_crt_params \ 2951 RSA_set0_factors \ 2952 RSA_set0_key \ 2953 RSA_meth_free \ 2954 RSA_meth_dup \ 2955 RSA_meth_set1_name \ 2956 RSA_meth_get_finish \ 2957 RSA_meth_set_priv_enc \ 2958 RSA_meth_set_priv_dec \ 2959 RSA_meth_set_finish \ 2960 EVP_PKEY_get0_RSA \ 2961 EVP_MD_CTX_new \ 2962 EVP_MD_CTX_free \ 2963 EVP_chacha20 \ 2964 ]) 2965 2966 if test "x$openssl_engine" = "xyes" ; then 2967 AC_MSG_CHECKING([for OpenSSL ENGINE support]) 2968 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 2969 #include <openssl/engine.h> 2970 ]], [[ 2971 ENGINE_load_builtin_engines(); 2972 ENGINE_register_all_complete(); 2973 ]])], 2974 [ AC_MSG_RESULT([yes]) 2975 AC_DEFINE([USE_OPENSSL_ENGINE], [1], 2976 [Enable OpenSSL engine support]) 2977 ], [ AC_MSG_ERROR([OpenSSL ENGINE support not found]) 2978 ]) 2979 fi 2980 2981 # Check for OpenSSL without EVP_aes_{192,256}_cbc 2982 AC_MSG_CHECKING([whether OpenSSL has crippled AES support]) 2983 AC_LINK_IFELSE( 2984 [AC_LANG_PROGRAM([[ 2985 #include <stdlib.h> 2986 #include <string.h> 2987 #include <openssl/evp.h> 2988 ]], [[ 2989 exit(EVP_aes_192_cbc() == NULL || EVP_aes_256_cbc() == NULL); 2990 ]])], 2991 [ 2992 AC_MSG_RESULT([no]) 2993 ], 2994 [ 2995 AC_MSG_RESULT([yes]) 2996 AC_DEFINE([OPENSSL_LOBOTOMISED_AES], [1], 2997 [libcrypto is missing AES 192 and 256 bit functions]) 2998 ] 2999 ) 3000 3001 # Check for OpenSSL with EVP_aes_*ctr 3002 AC_MSG_CHECKING([whether OpenSSL has AES CTR via EVP]) 3003 AC_LINK_IFELSE( 3004 [AC_LANG_PROGRAM([[ 3005 #include <stdlib.h> 3006 #include <string.h> 3007 #include <openssl/evp.h> 3008 ]], [[ 3009 exit(EVP_aes_128_ctr() == NULL || 3010 EVP_aes_192_cbc() == NULL || 3011 EVP_aes_256_cbc() == NULL); 3012 ]])], 3013 [ 3014 AC_MSG_RESULT([yes]) 3015 AC_DEFINE([OPENSSL_HAVE_EVPCTR], [1], 3016 [libcrypto has EVP AES CTR]) 3017 ], 3018 [ 3019 AC_MSG_RESULT([no]) 3020 ] 3021 ) 3022 3023 # Check for OpenSSL with EVP_aes_*gcm 3024 AC_MSG_CHECKING([whether OpenSSL has AES GCM via EVP]) 3025 AC_LINK_IFELSE( 3026 [AC_LANG_PROGRAM([[ 3027 #include <stdlib.h> 3028 #include <string.h> 3029 #include <openssl/evp.h> 3030 ]], [[ 3031 exit(EVP_aes_128_gcm() == NULL || 3032 EVP_aes_256_gcm() == NULL || 3033 EVP_CTRL_GCM_SET_IV_FIXED == 0 || 3034 EVP_CTRL_GCM_IV_GEN == 0 || 3035 EVP_CTRL_GCM_SET_TAG == 0 || 3036 EVP_CTRL_GCM_GET_TAG == 0 || 3037 EVP_CIPHER_CTX_ctrl(NULL, 0, 0, NULL) == 0); 3038 ]])], 3039 [ 3040 AC_MSG_RESULT([yes]) 3041 AC_DEFINE([OPENSSL_HAVE_EVPGCM], [1], 3042 [libcrypto has EVP AES GCM]) 3043 ], 3044 [ 3045 AC_MSG_RESULT([no]) 3046 unsupported_algorithms="$unsupported_cipers \ 3047 aes128-gcm@openssh.com \ 3048 aes256-gcm@openssh.com" 3049 ] 3050 ) 3051 3052 AC_MSG_CHECKING([if EVP_DigestUpdate returns an int]) 3053 AC_LINK_IFELSE( 3054 [AC_LANG_PROGRAM([[ 3055 #include <stdlib.h> 3056 #include <string.h> 3057 #include <openssl/evp.h> 3058 ]], [[ 3059 if(EVP_DigestUpdate(NULL, NULL,0)) 3060 exit(0); 3061 ]])], 3062 [ 3063 AC_MSG_RESULT([yes]) 3064 ], 3065 [ 3066 AC_MSG_RESULT([no]) 3067 AC_DEFINE([OPENSSL_EVP_DIGESTUPDATE_VOID], [1], 3068 [Define if EVP_DigestUpdate returns void]) 3069 ] 3070 ) 3071 3072 # Some systems want crypt() from libcrypt, *not* the version in OpenSSL, 3073 # because the system crypt() is more featureful. 3074 if test "x$check_for_libcrypt_before" = "x1"; then 3075 AC_CHECK_LIB([crypt], [crypt]) 3076 fi 3077 3078 # Some Linux systems (Slackware) need crypt() from libcrypt, *not* the 3079 # version in OpenSSL. 3080 if test "x$check_for_libcrypt_later" = "x1"; then 3081 AC_CHECK_LIB([crypt], [crypt], [LIBS="$LIBS -lcrypt"]) 3082 fi 3083 AC_CHECK_FUNCS([crypt DES_crypt]) 3084 3085 # Check for SHA256, SHA384 and SHA512 support in OpenSSL 3086 AC_CHECK_FUNCS([EVP_sha256 EVP_sha384 EVP_sha512]) 3087 3088 # Check complete ECC support in OpenSSL 3089 AC_MSG_CHECKING([whether OpenSSL has NID_X9_62_prime256v1]) 3090 AC_LINK_IFELSE( 3091 [AC_LANG_PROGRAM([[ 3092 #include <openssl/ec.h> 3093 #include <openssl/ecdh.h> 3094 #include <openssl/ecdsa.h> 3095 #include <openssl/evp.h> 3096 #include <openssl/objects.h> 3097 #include <openssl/opensslv.h> 3098 ]], [[ 3099 EC_KEY *e = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1); 3100 const EVP_MD *m = EVP_sha256(); /* We need this too */ 3101 ]])], 3102 [ AC_MSG_RESULT([yes]) 3103 enable_nistp256=1 ], 3104 [ AC_MSG_RESULT([no]) ] 3105 ) 3106 3107 AC_MSG_CHECKING([whether OpenSSL has NID_secp384r1]) 3108 AC_LINK_IFELSE( 3109 [AC_LANG_PROGRAM([[ 3110 #include <openssl/ec.h> 3111 #include <openssl/ecdh.h> 3112 #include <openssl/ecdsa.h> 3113 #include <openssl/evp.h> 3114 #include <openssl/objects.h> 3115 #include <openssl/opensslv.h> 3116 ]], [[ 3117 EC_KEY *e = EC_KEY_new_by_curve_name(NID_secp384r1); 3118 const EVP_MD *m = EVP_sha384(); /* We need this too */ 3119 ]])], 3120 [ AC_MSG_RESULT([yes]) 3121 enable_nistp384=1 ], 3122 [ AC_MSG_RESULT([no]) ] 3123 ) 3124 3125 AC_MSG_CHECKING([whether OpenSSL has NID_secp521r1]) 3126 AC_LINK_IFELSE( 3127 [AC_LANG_PROGRAM([[ 3128 #include <openssl/ec.h> 3129 #include <openssl/ecdh.h> 3130 #include <openssl/ecdsa.h> 3131 #include <openssl/evp.h> 3132 #include <openssl/objects.h> 3133 #include <openssl/opensslv.h> 3134 ]], [[ 3135 EC_KEY *e = EC_KEY_new_by_curve_name(NID_secp521r1); 3136 const EVP_MD *m = EVP_sha512(); /* We need this too */ 3137 ]])], 3138 [ AC_MSG_RESULT([yes]) 3139 AC_MSG_CHECKING([if OpenSSL's NID_secp521r1 is functional]) 3140 AC_RUN_IFELSE( 3141 [AC_LANG_PROGRAM([[ 3142 #include <stdlib.h> 3143 #include <openssl/ec.h> 3144 #include <openssl/ecdh.h> 3145 #include <openssl/ecdsa.h> 3146 #include <openssl/evp.h> 3147 #include <openssl/objects.h> 3148 #include <openssl/opensslv.h> 3149 ]],[[ 3150 EC_KEY *e = EC_KEY_new_by_curve_name(NID_secp521r1); 3151 const EVP_MD *m = EVP_sha512(); /* We need this too */ 3152 exit(e == NULL || m == NULL); 3153 ]])], 3154 [ AC_MSG_RESULT([yes]) 3155 enable_nistp521=1 ], 3156 [ AC_MSG_RESULT([no]) ], 3157 [ AC_MSG_WARN([cross-compiling: assuming yes]) 3158 enable_nistp521=1 ] 3159 )], 3160 AC_MSG_RESULT([no]) 3161 ) 3162 3163 TEST_SSH_ECC=no 3164 3165 if test x$enable_nistp256 = x1 || test x$enable_nistp384 = x1 || \ 3166 test x$enable_nistp521 = x1; then 3167 AC_DEFINE(OPENSSL_HAS_ECC, [1], [OpenSSL has ECC]) 3168 AC_CHECK_FUNCS([EC_KEY_METHOD_new]) 3169 openssl_ecc=yes 3170 else 3171 openssl_ecc=no 3172 fi 3173 if test x$enable_nistp256 = x1; then 3174 AC_DEFINE([OPENSSL_HAS_NISTP256], [1], 3175 [libcrypto has NID_X9_62_prime256v1]) 3176 TEST_SSH_ECC=yes 3177 else 3178 unsupported_algorithms="$unsupported_algorithms \ 3179 ecdsa-sha2-nistp256 \ 3180 ecdh-sha2-nistp256 \ 3181 ecdsa-sha2-nistp256-cert-v01@openssh.com" 3182 fi 3183 if test x$enable_nistp384 = x1; then 3184 AC_DEFINE([OPENSSL_HAS_NISTP384], [1], [libcrypto has NID_secp384r1]) 3185 TEST_SSH_ECC=yes 3186 else 3187 unsupported_algorithms="$unsupported_algorithms \ 3188 ecdsa-sha2-nistp384 \ 3189 ecdh-sha2-nistp384 \ 3190 ecdsa-sha2-nistp384-cert-v01@openssh.com" 3191 fi 3192 if test x$enable_nistp521 = x1; then 3193 AC_DEFINE([OPENSSL_HAS_NISTP521], [1], [libcrypto has NID_secp521r1]) 3194 TEST_SSH_ECC=yes 3195 else 3196 unsupported_algorithms="$unsupported_algorithms \ 3197 ecdh-sha2-nistp521 \ 3198 ecdsa-sha2-nistp521 \ 3199 ecdsa-sha2-nistp521-cert-v01@openssh.com" 3200 fi 3201 3202 AC_SUBST([TEST_SSH_ECC]) 3203else 3204 AC_CHECK_LIB([crypt], [crypt], [LIBS="$LIBS -lcrypt"]) 3205 AC_CHECK_FUNCS([crypt]) 3206fi 3207 3208# PKCS11/U2F depend on OpenSSL and dlopen(). 3209enable_pkcs11=yes 3210enable_sk=yes 3211if test "x$openssl" != "xyes" ; then 3212 enable_pkcs11="disabled; missing libcrypto" 3213 enable_sk="disabled; missing libcrypto" 3214fi 3215if test "x$openssl_ecc" != "xyes" ; then 3216 enable_sk="disabled; OpenSSL has no ECC support" 3217fi 3218if test "x$ac_cv_func_dlopen" != "xyes" ; then 3219 enable_pkcs11="disabled; missing dlopen(3)" 3220 enable_sk="disabled; missing dlopen(3)" 3221fi 3222if test "x$ac_cv_have_decl_RTLD_NOW" != "xyes" ; then 3223 enable_pkcs11="disabled; missing RTLD_NOW" 3224 enable_sk="disabled; missing RTLD_NOW" 3225fi 3226if test ! -z "$disable_pkcs11" ; then 3227 enable_pkcs11="disabled by user" 3228fi 3229if test ! -z "$disable_sk" ; then 3230 enable_sk="disabled by user" 3231fi 3232 3233AC_MSG_CHECKING([whether to enable PKCS11]) 3234if test "x$enable_pkcs11" = "xyes" ; then 3235 AC_DEFINE([ENABLE_PKCS11], [], [Enable for PKCS#11 support]) 3236fi 3237AC_MSG_RESULT([$enable_pkcs11]) 3238 3239AC_MSG_CHECKING([whether to enable U2F]) 3240if test "x$enable_sk" = "xyes" ; then 3241 AC_DEFINE([ENABLE_SK], [], [Enable for U2F/FIDO support]) 3242 AC_SUBST(SK_DUMMY_LIBRARY, [regress/misc/sk-dummy/sk-dummy.so]) 3243else 3244 # Do not try to build sk-dummy library. 3245 AC_SUBST(SK_DUMMY_LIBRARY, [""]) 3246fi 3247AC_MSG_RESULT([$enable_sk]) 3248 3249# Now check for built-in security key support. 3250if test "x$enable_sk" = "xyes" -a "x$enable_sk_internal" = "xyes" ; then 3251 AC_PATH_TOOL([PKGCONFIG], [pkg-config], [no]) 3252 use_pkgconfig_for_libfido2= 3253 if test "x$PKGCONFIG" != "xno"; then 3254 AC_MSG_CHECKING([if $PKGCONFIG knows about libfido2]) 3255 if "$PKGCONFIG" libfido2; then 3256 AC_MSG_RESULT([yes]) 3257 use_pkgconfig_for_libfido2=yes 3258 else 3259 AC_MSG_RESULT([no]) 3260 fi 3261 fi 3262 if test "x$use_pkgconfig_for_libfido2" = "xyes"; then 3263 LIBFIDO2=`$PKGCONFIG --libs libfido2` 3264 CPPFLAGS="$CPPFLAGS `$PKGCONFIG --cflags libfido2`" 3265 else 3266 LIBFIDO2="-lfido2 -lcbor" 3267 fi 3268 OTHERLIBS=`echo $LIBFIDO2 | sed 's/-lfido2//'` 3269 AC_CHECK_LIB([fido2], [fido_init], 3270 [ 3271 AC_SUBST([LIBFIDO2]) 3272 AC_DEFINE([ENABLE_SK_INTERNAL], [], 3273 [Enable for built-in U2F/FIDO support]) 3274 enable_sk="built-in" 3275 ], [ AC_MSG_ERROR([no usable libfido2 found]) ], 3276 [ $OTHERLIBS ] 3277 ) 3278 saved_LIBS="$LIBS" 3279 LIBS="$LIBS $LIBFIDO2" 3280 AC_CHECK_FUNCS([ \ 3281 fido_cred_prot \ 3282 fido_cred_set_prot \ 3283 fido_dev_get_touch_begin \ 3284 fido_dev_get_touch_status \ 3285 fido_dev_supports_cred_prot \ 3286 ]) 3287 LIBS="$saved_LIBS" 3288 AC_CHECK_HEADER([fido.h], [], 3289 AC_MSG_ERROR([missing fido.h from libfido2])) 3290 AC_CHECK_HEADER([fido/credman.h], [], 3291 AC_MSG_ERROR([missing fido/credman.h from libfido2]), 3292 [#include <fido.h>] 3293 ) 3294fi 3295 3296AC_CHECK_FUNCS([ \ 3297 arc4random \ 3298 arc4random_buf \ 3299 arc4random_stir \ 3300 arc4random_uniform \ 3301]) 3302 3303saved_LIBS="$LIBS" 3304AC_CHECK_LIB([iaf], [ia_openinfo], [ 3305 LIBS="$LIBS -liaf" 3306 AC_CHECK_FUNCS([set_id], [SSHDLIBS="$SSHDLIBS -liaf" 3307 AC_DEFINE([HAVE_LIBIAF], [1], 3308 [Define if system has libiaf that supports set_id]) 3309 ]) 3310]) 3311LIBS="$saved_LIBS" 3312 3313### Configure cryptographic random number support 3314 3315# Check whether OpenSSL seeds itself 3316if test "x$openssl" = "xyes" ; then 3317 AC_MSG_CHECKING([whether OpenSSL's PRNG is internally seeded]) 3318 AC_RUN_IFELSE( 3319 [AC_LANG_PROGRAM([[ 3320 #include <stdlib.h> 3321 #include <string.h> 3322 #include <openssl/rand.h> 3323 ]], [[ 3324 exit(RAND_status() == 1 ? 0 : 1); 3325 ]])], 3326 [ 3327 OPENSSL_SEEDS_ITSELF=yes 3328 AC_MSG_RESULT([yes]) 3329 ], 3330 [ 3331 AC_MSG_RESULT([no]) 3332 ], 3333 [ 3334 AC_MSG_WARN([cross compiling: assuming yes]) 3335 # This is safe, since we will fatal() at runtime if 3336 # OpenSSL is not seeded correctly. 3337 OPENSSL_SEEDS_ITSELF=yes 3338 ] 3339 ) 3340fi 3341 3342# PRNGD TCP socket 3343AC_ARG_WITH([prngd-port], 3344 [ --with-prngd-port=PORT read entropy from PRNGD/EGD TCP localhost:PORT], 3345 [ 3346 case "$withval" in 3347 no) 3348 withval="" 3349 ;; 3350 [[0-9]]*) 3351 ;; 3352 *) 3353 AC_MSG_ERROR([You must specify a numeric port number for --with-prngd-port]) 3354 ;; 3355 esac 3356 if test ! -z "$withval" ; then 3357 PRNGD_PORT="$withval" 3358 AC_DEFINE_UNQUOTED([PRNGD_PORT], [$PRNGD_PORT], 3359 [Port number of PRNGD/EGD random number socket]) 3360 fi 3361 ] 3362) 3363 3364# PRNGD Unix domain socket 3365AC_ARG_WITH([prngd-socket], 3366 [ --with-prngd-socket=FILE read entropy from PRNGD/EGD socket FILE (default=/var/run/egd-pool)], 3367 [ 3368 case "$withval" in 3369 yes) 3370 withval="/var/run/egd-pool" 3371 ;; 3372 no) 3373 withval="" 3374 ;; 3375 /*) 3376 ;; 3377 *) 3378 AC_MSG_ERROR([You must specify an absolute path to the entropy socket]) 3379 ;; 3380 esac 3381 3382 if test ! -z "$withval" ; then 3383 if test ! -z "$PRNGD_PORT" ; then 3384 AC_MSG_ERROR([You may not specify both a PRNGD/EGD port and socket]) 3385 fi 3386 if test ! -r "$withval" ; then 3387 AC_MSG_WARN([Entropy socket is not readable]) 3388 fi 3389 PRNGD_SOCKET="$withval" 3390 AC_DEFINE_UNQUOTED([PRNGD_SOCKET], ["$PRNGD_SOCKET"], 3391 [Location of PRNGD/EGD random number socket]) 3392 fi 3393 ], 3394 [ 3395 # Check for existing socket only if we don't have a random device already 3396 if test "x$OPENSSL_SEEDS_ITSELF" != "xyes" ; then 3397 AC_MSG_CHECKING([for PRNGD/EGD socket]) 3398 # Insert other locations here 3399 for sock in /var/run/egd-pool /dev/egd-pool /etc/entropy; do 3400 if test -r $sock && $TEST_MINUS_S_SH -c "test -S $sock -o -p $sock" ; then 3401 PRNGD_SOCKET="$sock" 3402 AC_DEFINE_UNQUOTED([PRNGD_SOCKET], ["$PRNGD_SOCKET"]) 3403 break; 3404 fi 3405 done 3406 if test ! -z "$PRNGD_SOCKET" ; then 3407 AC_MSG_RESULT([$PRNGD_SOCKET]) 3408 else 3409 AC_MSG_RESULT([not found]) 3410 fi 3411 fi 3412 ] 3413) 3414 3415# Which randomness source do we use? 3416if test ! -z "$PRNGD_PORT" ; then 3417 RAND_MSG="PRNGd port $PRNGD_PORT" 3418elif test ! -z "$PRNGD_SOCKET" ; then 3419 RAND_MSG="PRNGd socket $PRNGD_SOCKET" 3420elif test ! -z "$OPENSSL_SEEDS_ITSELF" ; then 3421 AC_DEFINE([OPENSSL_PRNG_ONLY], [1], 3422 [Define if you want the OpenSSL internally seeded PRNG only]) 3423 RAND_MSG="OpenSSL internal ONLY" 3424elif test "x$openssl" = "xno" ; then 3425 AC_MSG_WARN([OpenSSH will use /dev/urandom as a source of random numbers. It will fail if this device is not supported or accessible]) 3426else 3427 AC_MSG_ERROR([OpenSSH has no source of random numbers. Please configure OpenSSL with an entropy source or re-run configure using one of the --with-prngd-port or --with-prngd-socket options]) 3428fi 3429 3430# Check for PAM libs 3431PAM_MSG="no" 3432AC_ARG_WITH([pam], 3433 [ --with-pam Enable PAM support ], 3434 [ 3435 if test "x$withval" != "xno" ; then 3436 if test "x$ac_cv_header_security_pam_appl_h" != "xyes" && \ 3437 test "x$ac_cv_header_pam_pam_appl_h" != "xyes" ; then 3438 AC_MSG_ERROR([PAM headers not found]) 3439 fi 3440 3441 saved_LIBS="$LIBS" 3442 AC_CHECK_LIB([dl], [dlopen], , ) 3443 AC_CHECK_LIB([pam], [pam_set_item], , [AC_MSG_ERROR([*** libpam missing])]) 3444 AC_CHECK_FUNCS([pam_getenvlist]) 3445 AC_CHECK_FUNCS([pam_putenv]) 3446 LIBS="$saved_LIBS" 3447 3448 PAM_MSG="yes" 3449 3450 SSHDLIBS="$SSHDLIBS -lpam" 3451 AC_DEFINE([USE_PAM], [1], 3452 [Define if you want to enable PAM support]) 3453 3454 if test $ac_cv_lib_dl_dlopen = yes; then 3455 case "$LIBS" in 3456 *-ldl*) 3457 # libdl already in LIBS 3458 ;; 3459 *) 3460 SSHDLIBS="$SSHDLIBS -ldl" 3461 ;; 3462 esac 3463 fi 3464 fi 3465 ] 3466) 3467 3468AC_ARG_WITH([pam-service], 3469 [ --with-pam-service=name Specify PAM service name ], 3470 [ 3471 if test "x$withval" != "xno" && \ 3472 test "x$withval" != "xyes" ; then 3473 AC_DEFINE_UNQUOTED([SSHD_PAM_SERVICE], 3474 ["$withval"], [sshd PAM service name]) 3475 fi 3476 ] 3477) 3478 3479# Check for older PAM 3480if test "x$PAM_MSG" = "xyes" ; then 3481 # Check PAM strerror arguments (old PAM) 3482 AC_MSG_CHECKING([whether pam_strerror takes only one argument]) 3483 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 3484#include <stdlib.h> 3485#if defined(HAVE_SECURITY_PAM_APPL_H) 3486#include <security/pam_appl.h> 3487#elif defined (HAVE_PAM_PAM_APPL_H) 3488#include <pam/pam_appl.h> 3489#endif 3490 ]], [[ 3491(void)pam_strerror((pam_handle_t *)NULL, -1); 3492 ]])], [AC_MSG_RESULT([no])], [ 3493 AC_DEFINE([HAVE_OLD_PAM], [1], 3494 [Define if you have an old version of PAM 3495 which takes only one argument to pam_strerror]) 3496 AC_MSG_RESULT([yes]) 3497 PAM_MSG="yes (old library)" 3498 3499 ]) 3500fi 3501 3502case "$host" in 3503*-*-cygwin*) 3504 SSH_PRIVSEP_USER=CYGWIN_SSH_PRIVSEP_USER 3505 ;; 3506*) 3507 SSH_PRIVSEP_USER=sshd 3508 ;; 3509esac 3510AC_ARG_WITH([privsep-user], 3511 [ --with-privsep-user=user Specify non-privileged user for privilege separation], 3512 [ 3513 if test -n "$withval" && test "x$withval" != "xno" && \ 3514 test "x${withval}" != "xyes"; then 3515 SSH_PRIVSEP_USER=$withval 3516 fi 3517 ] 3518) 3519if test "x$SSH_PRIVSEP_USER" = "xCYGWIN_SSH_PRIVSEP_USER" ; then 3520 AC_DEFINE_UNQUOTED([SSH_PRIVSEP_USER], [CYGWIN_SSH_PRIVSEP_USER], 3521 [Cygwin function to fetch non-privileged user for privilege separation]) 3522else 3523 AC_DEFINE_UNQUOTED([SSH_PRIVSEP_USER], ["$SSH_PRIVSEP_USER"], 3524 [non-privileged user for privilege separation]) 3525fi 3526AC_SUBST([SSH_PRIVSEP_USER]) 3527 3528if test "x$have_linux_no_new_privs" = "x1" ; then 3529AC_CHECK_DECL([SECCOMP_MODE_FILTER], [have_seccomp_filter=1], , [ 3530 #include <sys/types.h> 3531 #include <linux/seccomp.h> 3532]) 3533fi 3534if test "x$have_seccomp_filter" = "x1" ; then 3535AC_MSG_CHECKING([kernel for seccomp_filter support]) 3536AC_LINK_IFELSE([AC_LANG_PROGRAM([[ 3537 #include <errno.h> 3538 #include <elf.h> 3539 #include <linux/audit.h> 3540 #include <linux/seccomp.h> 3541 #include <stdlib.h> 3542 #include <sys/prctl.h> 3543 ]], 3544 [[ int i = $seccomp_audit_arch; 3545 errno = 0; 3546 prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, NULL, 0, 0); 3547 exit(errno == EFAULT ? 0 : 1); ]])], 3548 [ AC_MSG_RESULT([yes]) ], [ 3549 AC_MSG_RESULT([no]) 3550 # Disable seccomp filter as a target 3551 have_seccomp_filter=0 3552 ] 3553) 3554fi 3555 3556# Decide which sandbox style to use 3557sandbox_arg="" 3558AC_ARG_WITH([sandbox], 3559 [ --with-sandbox=style Specify privilege separation sandbox (no, capsicum, darwin, rlimit, seccomp_filter, systrace, pledge)], 3560 [ 3561 if test "x$withval" = "xyes" ; then 3562 sandbox_arg="" 3563 else 3564 sandbox_arg="$withval" 3565 fi 3566 ] 3567) 3568 3569# Some platforms (seems to be the ones that have a kernel poll(2)-type 3570# function with which they implement select(2)) use an extra file descriptor 3571# when calling select(2), which means we can't use the rlimit sandbox. 3572AC_MSG_CHECKING([if select works with descriptor rlimit]) 3573AC_RUN_IFELSE( 3574 [AC_LANG_PROGRAM([[ 3575#include <sys/types.h> 3576#ifdef HAVE_SYS_TIME_H 3577# include <sys/time.h> 3578#endif 3579#include <sys/resource.h> 3580#ifdef HAVE_SYS_SELECT_H 3581# include <sys/select.h> 3582#endif 3583#include <errno.h> 3584#include <fcntl.h> 3585#include <stdlib.h> 3586 ]],[[ 3587 struct rlimit rl_zero; 3588 int fd, r; 3589 fd_set fds; 3590 struct timeval tv; 3591 3592 fd = open("/dev/null", O_RDONLY); 3593 FD_ZERO(&fds); 3594 FD_SET(fd, &fds); 3595 rl_zero.rlim_cur = rl_zero.rlim_max = 0; 3596 setrlimit(RLIMIT_FSIZE, &rl_zero); 3597 setrlimit(RLIMIT_NOFILE, &rl_zero); 3598 tv.tv_sec = 1; 3599 tv.tv_usec = 0; 3600 r = select(fd+1, &fds, NULL, NULL, &tv); 3601 exit (r == -1 ? 1 : 0); 3602 ]])], 3603 [AC_MSG_RESULT([yes]) 3604 select_works_with_rlimit=yes], 3605 [AC_MSG_RESULT([no]) 3606 select_works_with_rlimit=no], 3607 [AC_MSG_WARN([cross compiling: assuming yes]) 3608 select_works_with_rlimit=yes] 3609) 3610 3611AC_MSG_CHECKING([if setrlimit(RLIMIT_NOFILE,{0,0}) works]) 3612AC_RUN_IFELSE( 3613 [AC_LANG_PROGRAM([[ 3614#include <sys/types.h> 3615#ifdef HAVE_SYS_TIME_H 3616# include <sys/time.h> 3617#endif 3618#include <sys/resource.h> 3619#include <errno.h> 3620#include <stdlib.h> 3621 ]],[[ 3622 struct rlimit rl_zero; 3623 int r; 3624 3625 rl_zero.rlim_cur = rl_zero.rlim_max = 0; 3626 r = setrlimit(RLIMIT_NOFILE, &rl_zero); 3627 exit (r == -1 ? 1 : 0); 3628 ]])], 3629 [AC_MSG_RESULT([yes]) 3630 rlimit_nofile_zero_works=yes], 3631 [AC_MSG_RESULT([no]) 3632 rlimit_nofile_zero_works=no], 3633 [AC_MSG_WARN([cross compiling: assuming yes]) 3634 rlimit_nofile_zero_works=yes] 3635) 3636 3637AC_MSG_CHECKING([if setrlimit RLIMIT_FSIZE works]) 3638AC_RUN_IFELSE( 3639 [AC_LANG_PROGRAM([[ 3640#include <sys/types.h> 3641#include <sys/resource.h> 3642#include <stdlib.h> 3643 ]],[[ 3644 struct rlimit rl_zero; 3645 3646 rl_zero.rlim_cur = rl_zero.rlim_max = 0; 3647 exit(setrlimit(RLIMIT_FSIZE, &rl_zero) != 0); 3648 ]])], 3649 [AC_MSG_RESULT([yes])], 3650 [AC_MSG_RESULT([no]) 3651 AC_DEFINE(SANDBOX_SKIP_RLIMIT_FSIZE, 1, 3652 [setrlimit RLIMIT_FSIZE works])], 3653 [AC_MSG_WARN([cross compiling: assuming yes])] 3654) 3655 3656if test "x$sandbox_arg" = "xpledge" || \ 3657 ( test -z "$sandbox_arg" && test "x$ac_cv_func_pledge" = "xyes" ) ; then 3658 test "x$ac_cv_func_pledge" != "xyes" && \ 3659 AC_MSG_ERROR([pledge sandbox requires pledge(2) support]) 3660 SANDBOX_STYLE="pledge" 3661 AC_DEFINE([SANDBOX_PLEDGE], [1], [Sandbox using pledge(2)]) 3662elif test "x$sandbox_arg" = "xsystrace" || \ 3663 ( test -z "$sandbox_arg" && test "x$have_systr_policy_kill" = "x1" ) ; then 3664 test "x$have_systr_policy_kill" != "x1" && \ 3665 AC_MSG_ERROR([systrace sandbox requires systrace headers and SYSTR_POLICY_KILL support]) 3666 SANDBOX_STYLE="systrace" 3667 AC_DEFINE([SANDBOX_SYSTRACE], [1], [Sandbox using systrace(4)]) 3668elif test "x$sandbox_arg" = "xdarwin" || \ 3669 ( test -z "$sandbox_arg" && test "x$ac_cv_func_sandbox_init" = "xyes" && \ 3670 test "x$ac_cv_header_sandbox_h" = "xyes") ; then 3671 test "x$ac_cv_func_sandbox_init" != "xyes" -o \ 3672 "x$ac_cv_header_sandbox_h" != "xyes" && \ 3673 AC_MSG_ERROR([Darwin seatbelt sandbox requires sandbox.h and sandbox_init function]) 3674 SANDBOX_STYLE="darwin" 3675 AC_DEFINE([SANDBOX_DARWIN], [1], [Sandbox using Darwin sandbox_init(3)]) 3676elif test "x$sandbox_arg" = "xseccomp_filter" || \ 3677 ( test -z "$sandbox_arg" && \ 3678 test "x$have_seccomp_filter" = "x1" && \ 3679 test "x$ac_cv_header_elf_h" = "xyes" && \ 3680 test "x$ac_cv_header_linux_audit_h" = "xyes" && \ 3681 test "x$ac_cv_header_linux_filter_h" = "xyes" && \ 3682 test "x$seccomp_audit_arch" != "x" && \ 3683 test "x$have_linux_no_new_privs" = "x1" && \ 3684 test "x$ac_cv_func_prctl" = "xyes" ) ; then 3685 test "x$seccomp_audit_arch" = "x" && \ 3686 AC_MSG_ERROR([seccomp_filter sandbox not supported on $host]) 3687 test "x$have_linux_no_new_privs" != "x1" && \ 3688 AC_MSG_ERROR([seccomp_filter sandbox requires PR_SET_NO_NEW_PRIVS]) 3689 test "x$have_seccomp_filter" != "x1" && \ 3690 AC_MSG_ERROR([seccomp_filter sandbox requires seccomp headers]) 3691 test "x$ac_cv_func_prctl" != "xyes" && \ 3692 AC_MSG_ERROR([seccomp_filter sandbox requires prctl function]) 3693 SANDBOX_STYLE="seccomp_filter" 3694 AC_DEFINE([SANDBOX_SECCOMP_FILTER], [1], [Sandbox using seccomp filter]) 3695elif test "x$sandbox_arg" = "xcapsicum" || \ 3696 ( test -z "$sandbox_arg" && \ 3697 test "x$ac_cv_header_sys_capsicum_h" = "xyes" && \ 3698 test "x$ac_cv_func_cap_rights_limit" = "xyes") ; then 3699 test "x$ac_cv_header_sys_capsicum_h" != "xyes" && \ 3700 AC_MSG_ERROR([capsicum sandbox requires sys/capsicum.h header]) 3701 test "x$ac_cv_func_cap_rights_limit" != "xyes" && \ 3702 AC_MSG_ERROR([capsicum sandbox requires cap_rights_limit function]) 3703 SANDBOX_STYLE="capsicum" 3704 AC_DEFINE([SANDBOX_CAPSICUM], [1], [Sandbox using capsicum]) 3705elif test "x$sandbox_arg" = "xrlimit" || \ 3706 ( test -z "$sandbox_arg" && test "x$ac_cv_func_setrlimit" = "xyes" && \ 3707 test "x$select_works_with_rlimit" = "xyes" && \ 3708 test "x$rlimit_nofile_zero_works" = "xyes" ) ; then 3709 test "x$ac_cv_func_setrlimit" != "xyes" && \ 3710 AC_MSG_ERROR([rlimit sandbox requires setrlimit function]) 3711 test "x$select_works_with_rlimit" != "xyes" && \ 3712 AC_MSG_ERROR([rlimit sandbox requires select to work with rlimit]) 3713 SANDBOX_STYLE="rlimit" 3714 AC_DEFINE([SANDBOX_RLIMIT], [1], [Sandbox using setrlimit(2)]) 3715elif test "x$sandbox_arg" = "xsolaris" || \ 3716 ( test -z "$sandbox_arg" && test "x$SOLARIS_PRIVS" = "xyes" ) ; then 3717 SANDBOX_STYLE="solaris" 3718 AC_DEFINE([SANDBOX_SOLARIS], [1], [Sandbox using Solaris/Illumos privileges]) 3719elif test -z "$sandbox_arg" || test "x$sandbox_arg" = "xno" || \ 3720 test "x$sandbox_arg" = "xnone" || test "x$sandbox_arg" = "xnull" ; then 3721 SANDBOX_STYLE="none" 3722 AC_DEFINE([SANDBOX_NULL], [1], [no privsep sandboxing]) 3723else 3724 AC_MSG_ERROR([unsupported --with-sandbox]) 3725fi 3726 3727# Cheap hack to ensure NEWS-OS libraries are arranged right. 3728if test ! -z "$SONY" ; then 3729 LIBS="$LIBS -liberty"; 3730fi 3731 3732# Check for long long datatypes 3733AC_CHECK_TYPES([long long, unsigned long long, long double]) 3734 3735# Check datatype sizes 3736AC_CHECK_SIZEOF([short int]) 3737AC_CHECK_SIZEOF([int]) 3738AC_CHECK_SIZEOF([long int]) 3739AC_CHECK_SIZEOF([long long int]) 3740AC_CHECK_SIZEOF([time_t], [], [[ 3741 #include <sys/types.h> 3742 #ifdef HAVE_SYS_TIME_H 3743 # include <sys/time.h> 3744 #endif 3745 #ifdef HAVE_TIME_H 3746 # include <time.h> 3747 #endif 3748 ]] 3749) 3750 3751# Sanity check long long for some platforms (AIX) 3752if test "x$ac_cv_sizeof_long_long_int" = "x4" ; then 3753 ac_cv_sizeof_long_long_int=0 3754fi 3755 3756# compute LLONG_MIN and LLONG_MAX if we don't know them. 3757if test -z "$have_llong_max" && test -z "$have_long_long_max"; then 3758 AC_MSG_CHECKING([for max value of long long]) 3759 AC_RUN_IFELSE( 3760 [AC_LANG_PROGRAM([[ 3761#include <stdio.h> 3762#include <stdlib.h> 3763/* Why is this so damn hard? */ 3764#ifdef __GNUC__ 3765# undef __GNUC__ 3766#endif 3767#define __USE_ISOC99 3768#include <limits.h> 3769#define DATA "conftest.llminmax" 3770#define my_abs(a) ((a) < 0 ? ((a) * -1) : (a)) 3771 3772/* 3773 * printf in libc on some platforms (eg old Tru64) does not understand %lld so 3774 * we do this the hard way. 3775 */ 3776static int 3777fprint_ll(FILE *f, long long n) 3778{ 3779 unsigned int i; 3780 int l[sizeof(long long) * 8]; 3781 3782 if (n < 0) 3783 if (fprintf(f, "-") < 0) 3784 return -1; 3785 for (i = 0; n != 0; i++) { 3786 l[i] = my_abs(n % 10); 3787 n /= 10; 3788 } 3789 do { 3790 if (fprintf(f, "%d", l[--i]) < 0) 3791 return -1; 3792 } while (i != 0); 3793 if (fprintf(f, " ") < 0) 3794 return -1; 3795 return 0; 3796} 3797 ]], [[ 3798 FILE *f; 3799 long long i, llmin, llmax = 0; 3800 3801 if((f = fopen(DATA,"w")) == NULL) 3802 exit(1); 3803 3804#if defined(LLONG_MIN) && defined(LLONG_MAX) 3805 fprintf(stderr, "Using system header for LLONG_MIN and LLONG_MAX\n"); 3806 llmin = LLONG_MIN; 3807 llmax = LLONG_MAX; 3808#else 3809 fprintf(stderr, "Calculating LLONG_MIN and LLONG_MAX\n"); 3810 /* This will work on one's complement and two's complement */ 3811 for (i = 1; i > llmax; i <<= 1, i++) 3812 llmax = i; 3813 llmin = llmax + 1LL; /* wrap */ 3814#endif 3815 3816 /* Sanity check */ 3817 if (llmin + 1 < llmin || llmin - 1 < llmin || llmax + 1 > llmax 3818 || llmax - 1 > llmax || llmin == llmax || llmin == 0 3819 || llmax == 0 || llmax < LONG_MAX || llmin > LONG_MIN) { 3820 fprintf(f, "unknown unknown\n"); 3821 exit(2); 3822 } 3823 3824 if (fprint_ll(f, llmin) < 0) 3825 exit(3); 3826 if (fprint_ll(f, llmax) < 0) 3827 exit(4); 3828 if (fclose(f) < 0) 3829 exit(5); 3830 exit(0); 3831 ]])], 3832 [ 3833 llong_min=`$AWK '{print $1}' conftest.llminmax` 3834 llong_max=`$AWK '{print $2}' conftest.llminmax` 3835 3836 AC_MSG_RESULT([$llong_max]) 3837 AC_DEFINE_UNQUOTED([LLONG_MAX], [${llong_max}LL], 3838 [max value of long long calculated by configure]) 3839 AC_MSG_CHECKING([for min value of long long]) 3840 AC_MSG_RESULT([$llong_min]) 3841 AC_DEFINE_UNQUOTED([LLONG_MIN], [${llong_min}LL], 3842 [min value of long long calculated by configure]) 3843 ], 3844 [ 3845 AC_MSG_RESULT([not found]) 3846 ], 3847 [ 3848 AC_MSG_WARN([cross compiling: not checking]) 3849 ] 3850 ) 3851fi 3852 3853AC_CHECK_DECLS([UINT32_MAX], , , [[ 3854#ifdef HAVE_SYS_LIMITS_H 3855# include <sys/limits.h> 3856#endif 3857#ifdef HAVE_LIMITS_H 3858# include <limits.h> 3859#endif 3860#ifdef HAVE_STDINT_H 3861# include <stdint.h> 3862#endif 3863]]) 3864 3865# More checks for data types 3866AC_CACHE_CHECK([for u_int type], ac_cv_have_u_int, [ 3867 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> ]], 3868 [[ u_int a; a = 1;]])], 3869 [ ac_cv_have_u_int="yes" ], [ ac_cv_have_u_int="no" 3870 ]) 3871]) 3872if test "x$ac_cv_have_u_int" = "xyes" ; then 3873 AC_DEFINE([HAVE_U_INT], [1], [define if you have u_int data type]) 3874 have_u_int=1 3875fi 3876 3877AC_CACHE_CHECK([for intXX_t types], ac_cv_have_intxx_t, [ 3878 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> ]], 3879 [[ int8_t a; int16_t b; int32_t c; a = b = c = 1;]])], 3880 [ ac_cv_have_intxx_t="yes" ], [ ac_cv_have_intxx_t="no" 3881 ]) 3882]) 3883if test "x$ac_cv_have_intxx_t" = "xyes" ; then 3884 AC_DEFINE([HAVE_INTXX_T], [1], [define if you have intxx_t data type]) 3885 have_intxx_t=1 3886fi 3887 3888if (test -z "$have_intxx_t" && \ 3889 test "x$ac_cv_header_stdint_h" = "xyes") 3890then 3891 AC_MSG_CHECKING([for intXX_t types in stdint.h]) 3892 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <stdint.h> ]], 3893 [[ int8_t a; int16_t b; int32_t c; a = b = c = 1;]])], 3894 [ 3895 AC_DEFINE([HAVE_INTXX_T]) 3896 AC_MSG_RESULT([yes]) 3897 ], [ AC_MSG_RESULT([no]) 3898 ]) 3899fi 3900 3901AC_CACHE_CHECK([for int64_t type], ac_cv_have_int64_t, [ 3902 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 3903#include <sys/types.h> 3904#ifdef HAVE_STDINT_H 3905# include <stdint.h> 3906#endif 3907#include <sys/socket.h> 3908#ifdef HAVE_SYS_BITYPES_H 3909# include <sys/bitypes.h> 3910#endif 3911 ]], [[ 3912int64_t a; a = 1; 3913 ]])], 3914 [ ac_cv_have_int64_t="yes" ], [ ac_cv_have_int64_t="no" 3915 ]) 3916]) 3917if test "x$ac_cv_have_int64_t" = "xyes" ; then 3918 AC_DEFINE([HAVE_INT64_T], [1], [define if you have int64_t data type]) 3919fi 3920 3921AC_CACHE_CHECK([for u_intXX_t types], ac_cv_have_u_intxx_t, [ 3922 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> ]], 3923 [[ u_int8_t a; u_int16_t b; u_int32_t c; a = b = c = 1;]])], 3924 [ ac_cv_have_u_intxx_t="yes" ], [ ac_cv_have_u_intxx_t="no" 3925 ]) 3926]) 3927if test "x$ac_cv_have_u_intxx_t" = "xyes" ; then 3928 AC_DEFINE([HAVE_U_INTXX_T], [1], [define if you have u_intxx_t data type]) 3929 have_u_intxx_t=1 3930fi 3931 3932if test -z "$have_u_intxx_t" ; then 3933 AC_MSG_CHECKING([for u_intXX_t types in sys/socket.h]) 3934 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/socket.h> ]], 3935 [[ u_int8_t a; u_int16_t b; u_int32_t c; a = b = c = 1;]])], 3936 [ 3937 AC_DEFINE([HAVE_U_INTXX_T]) 3938 AC_MSG_RESULT([yes]) 3939 ], [ AC_MSG_RESULT([no]) 3940 ]) 3941fi 3942 3943AC_CACHE_CHECK([for u_int64_t types], ac_cv_have_u_int64_t, [ 3944 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> ]], 3945 [[ u_int64_t a; a = 1;]])], 3946 [ ac_cv_have_u_int64_t="yes" ], [ ac_cv_have_u_int64_t="no" 3947 ]) 3948]) 3949if test "x$ac_cv_have_u_int64_t" = "xyes" ; then 3950 AC_DEFINE([HAVE_U_INT64_T], [1], [define if you have u_int64_t data type]) 3951 have_u_int64_t=1 3952fi 3953 3954if (test -z "$have_u_int64_t" && \ 3955 test "x$ac_cv_header_sys_bitypes_h" = "xyes") 3956then 3957 AC_MSG_CHECKING([for u_int64_t type in sys/bitypes.h]) 3958 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/bitypes.h> ]], 3959 [[ u_int64_t a; a = 1]])], 3960 [ 3961 AC_DEFINE([HAVE_U_INT64_T]) 3962 AC_MSG_RESULT([yes]) 3963 ], [ AC_MSG_RESULT([no]) 3964 ]) 3965fi 3966 3967if test -z "$have_u_intxx_t" ; then 3968 AC_CACHE_CHECK([for uintXX_t types], ac_cv_have_uintxx_t, [ 3969 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 3970#include <sys/types.h> 3971 ]], [[ 3972 uint8_t a; 3973 uint16_t b; 3974 uint32_t c; 3975 a = b = c = 1; 3976 ]])], 3977 [ ac_cv_have_uintxx_t="yes" ], [ ac_cv_have_uintxx_t="no" 3978 ]) 3979 ]) 3980 if test "x$ac_cv_have_uintxx_t" = "xyes" ; then 3981 AC_DEFINE([HAVE_UINTXX_T], [1], 3982 [define if you have uintxx_t data type]) 3983 fi 3984fi 3985 3986if (test -z "$have_uintxx_t" && \ 3987 test "x$ac_cv_header_stdint_h" = "xyes") 3988then 3989 AC_MSG_CHECKING([for uintXX_t types in stdint.h]) 3990 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <stdint.h> ]], 3991 [[ uint8_t a; uint16_t b; uint32_t c; a = b = c = 1;]])], 3992 [ 3993 AC_DEFINE([HAVE_UINTXX_T]) 3994 AC_MSG_RESULT([yes]) 3995 ], [ AC_MSG_RESULT([no]) 3996 ]) 3997fi 3998 3999if (test -z "$have_uintxx_t" && \ 4000 test "x$ac_cv_header_inttypes_h" = "xyes") 4001then 4002 AC_MSG_CHECKING([for uintXX_t types in inttypes.h]) 4003 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <inttypes.h> ]], 4004 [[ uint8_t a; uint16_t b; uint32_t c; a = b = c = 1;]])], 4005 [ 4006 AC_DEFINE([HAVE_UINTXX_T]) 4007 AC_MSG_RESULT([yes]) 4008 ], [ AC_MSG_RESULT([no]) 4009 ]) 4010fi 4011 4012if (test -z "$have_u_intxx_t" || test -z "$have_intxx_t" && \ 4013 test "x$ac_cv_header_sys_bitypes_h" = "xyes") 4014then 4015 AC_MSG_CHECKING([for intXX_t and u_intXX_t types in sys/bitypes.h]) 4016 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 4017#include <sys/bitypes.h> 4018 ]], [[ 4019 int8_t a; int16_t b; int32_t c; 4020 u_int8_t e; u_int16_t f; u_int32_t g; 4021 a = b = c = e = f = g = 1; 4022 ]])], 4023 [ 4024 AC_DEFINE([HAVE_U_INTXX_T]) 4025 AC_DEFINE([HAVE_INTXX_T]) 4026 AC_MSG_RESULT([yes]) 4027 ], [AC_MSG_RESULT([no]) 4028 ]) 4029fi 4030 4031 4032AC_CACHE_CHECK([for u_char], ac_cv_have_u_char, [ 4033 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> ]], 4034 [[ u_char foo; foo = 125; ]])], 4035 [ ac_cv_have_u_char="yes" ], [ ac_cv_have_u_char="no" 4036 ]) 4037]) 4038if test "x$ac_cv_have_u_char" = "xyes" ; then 4039 AC_DEFINE([HAVE_U_CHAR], [1], [define if you have u_char data type]) 4040fi 4041 4042AC_CHECK_TYPES([intmax_t, uintmax_t], , , [ 4043#include <sys/types.h> 4044#ifdef HAVE_STDINT_H 4045# include <stdint.h> 4046#endif 4047]) 4048 4049TYPE_SOCKLEN_T 4050 4051AC_CHECK_TYPES([sig_atomic_t, sighandler_t], , , [#include <signal.h>]) 4052AC_CHECK_TYPES([fsblkcnt_t, fsfilcnt_t], , , [ 4053#include <sys/types.h> 4054#ifdef HAVE_SYS_BITYPES_H 4055#include <sys/bitypes.h> 4056#endif 4057#ifdef HAVE_SYS_STATFS_H 4058#include <sys/statfs.h> 4059#endif 4060#ifdef HAVE_SYS_STATVFS_H 4061#include <sys/statvfs.h> 4062#endif 4063]) 4064 4065AC_CHECK_MEMBERS([struct statfs.f_files, struct statfs.f_flags], [], [], [[ 4066#include <sys/param.h> 4067#include <sys/types.h> 4068#ifdef HAVE_SYS_BITYPES_H 4069#include <sys/bitypes.h> 4070#endif 4071#ifdef HAVE_SYS_STATFS_H 4072#include <sys/statfs.h> 4073#endif 4074#ifdef HAVE_SYS_STATVFS_H 4075#include <sys/statvfs.h> 4076#endif 4077#ifdef HAVE_SYS_VFS_H 4078#include <sys/vfs.h> 4079#endif 4080#ifdef HAVE_SYS_MOUNT_H 4081#include <sys/mount.h> 4082#endif 4083]]) 4084 4085 4086AC_CHECK_TYPES([in_addr_t, in_port_t], , , 4087[#include <sys/types.h> 4088#include <netinet/in.h>]) 4089 4090AC_CACHE_CHECK([for size_t], ac_cv_have_size_t, [ 4091 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> ]], 4092 [[ size_t foo; foo = 1235; ]])], 4093 [ ac_cv_have_size_t="yes" ], [ ac_cv_have_size_t="no" 4094 ]) 4095]) 4096if test "x$ac_cv_have_size_t" = "xyes" ; then 4097 AC_DEFINE([HAVE_SIZE_T], [1], [define if you have size_t data type]) 4098fi 4099 4100AC_CACHE_CHECK([for ssize_t], ac_cv_have_ssize_t, [ 4101 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> ]], 4102 [[ ssize_t foo; foo = 1235; ]])], 4103 [ ac_cv_have_ssize_t="yes" ], [ ac_cv_have_ssize_t="no" 4104 ]) 4105]) 4106if test "x$ac_cv_have_ssize_t" = "xyes" ; then 4107 AC_DEFINE([HAVE_SSIZE_T], [1], [define if you have ssize_t data type]) 4108fi 4109 4110AC_CACHE_CHECK([for clock_t], ac_cv_have_clock_t, [ 4111 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <time.h> ]], 4112 [[ clock_t foo; foo = 1235; ]])], 4113 [ ac_cv_have_clock_t="yes" ], [ ac_cv_have_clock_t="no" 4114 ]) 4115]) 4116if test "x$ac_cv_have_clock_t" = "xyes" ; then 4117 AC_DEFINE([HAVE_CLOCK_T], [1], [define if you have clock_t data type]) 4118fi 4119 4120AC_CACHE_CHECK([for sa_family_t], ac_cv_have_sa_family_t, [ 4121 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 4122#include <sys/types.h> 4123#include <sys/socket.h> 4124 ]], [[ sa_family_t foo; foo = 1235; ]])], 4125 [ ac_cv_have_sa_family_t="yes" ], 4126 [ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 4127#include <sys/types.h> 4128#include <sys/socket.h> 4129#include <netinet/in.h> 4130 ]], [[ sa_family_t foo; foo = 1235; ]])], 4131 [ ac_cv_have_sa_family_t="yes" ], 4132 [ ac_cv_have_sa_family_t="no" ] 4133 ) 4134 ]) 4135]) 4136if test "x$ac_cv_have_sa_family_t" = "xyes" ; then 4137 AC_DEFINE([HAVE_SA_FAMILY_T], [1], 4138 [define if you have sa_family_t data type]) 4139fi 4140 4141AC_CACHE_CHECK([for pid_t], ac_cv_have_pid_t, [ 4142 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> ]], 4143 [[ pid_t foo; foo = 1235; ]])], 4144 [ ac_cv_have_pid_t="yes" ], [ ac_cv_have_pid_t="no" 4145 ]) 4146]) 4147if test "x$ac_cv_have_pid_t" = "xyes" ; then 4148 AC_DEFINE([HAVE_PID_T], [1], [define if you have pid_t data type]) 4149fi 4150 4151AC_CACHE_CHECK([for mode_t], ac_cv_have_mode_t, [ 4152 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> ]], 4153 [[ mode_t foo; foo = 1235; ]])], 4154 [ ac_cv_have_mode_t="yes" ], [ ac_cv_have_mode_t="no" 4155 ]) 4156]) 4157if test "x$ac_cv_have_mode_t" = "xyes" ; then 4158 AC_DEFINE([HAVE_MODE_T], [1], [define if you have mode_t data type]) 4159fi 4160 4161 4162AC_CACHE_CHECK([for struct sockaddr_storage], ac_cv_have_struct_sockaddr_storage, [ 4163 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 4164#include <sys/types.h> 4165#include <sys/socket.h> 4166 ]], [[ struct sockaddr_storage s; ]])], 4167 [ ac_cv_have_struct_sockaddr_storage="yes" ], 4168 [ ac_cv_have_struct_sockaddr_storage="no" 4169 ]) 4170]) 4171if test "x$ac_cv_have_struct_sockaddr_storage" = "xyes" ; then 4172 AC_DEFINE([HAVE_STRUCT_SOCKADDR_STORAGE], [1], 4173 [define if you have struct sockaddr_storage data type]) 4174fi 4175 4176AC_CACHE_CHECK([for struct sockaddr_in6], ac_cv_have_struct_sockaddr_in6, [ 4177 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 4178#include <sys/types.h> 4179#include <netinet/in.h> 4180 ]], [[ struct sockaddr_in6 s; s.sin6_family = 0; ]])], 4181 [ ac_cv_have_struct_sockaddr_in6="yes" ], 4182 [ ac_cv_have_struct_sockaddr_in6="no" 4183 ]) 4184]) 4185if test "x$ac_cv_have_struct_sockaddr_in6" = "xyes" ; then 4186 AC_DEFINE([HAVE_STRUCT_SOCKADDR_IN6], [1], 4187 [define if you have struct sockaddr_in6 data type]) 4188fi 4189 4190AC_CACHE_CHECK([for struct in6_addr], ac_cv_have_struct_in6_addr, [ 4191 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 4192#include <sys/types.h> 4193#include <netinet/in.h> 4194 ]], [[ struct in6_addr s; s.s6_addr[0] = 0; ]])], 4195 [ ac_cv_have_struct_in6_addr="yes" ], 4196 [ ac_cv_have_struct_in6_addr="no" 4197 ]) 4198]) 4199if test "x$ac_cv_have_struct_in6_addr" = "xyes" ; then 4200 AC_DEFINE([HAVE_STRUCT_IN6_ADDR], [1], 4201 [define if you have struct in6_addr data type]) 4202 4203dnl Now check for sin6_scope_id 4204 AC_CHECK_MEMBERS([struct sockaddr_in6.sin6_scope_id], , , 4205 [ 4206#ifdef HAVE_SYS_TYPES_H 4207#include <sys/types.h> 4208#endif 4209#include <netinet/in.h> 4210 ]) 4211fi 4212 4213AC_CACHE_CHECK([for struct addrinfo], ac_cv_have_struct_addrinfo, [ 4214 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 4215#include <sys/types.h> 4216#include <sys/socket.h> 4217#include <netdb.h> 4218 ]], [[ struct addrinfo s; s.ai_flags = AI_PASSIVE; ]])], 4219 [ ac_cv_have_struct_addrinfo="yes" ], 4220 [ ac_cv_have_struct_addrinfo="no" 4221 ]) 4222]) 4223if test "x$ac_cv_have_struct_addrinfo" = "xyes" ; then 4224 AC_DEFINE([HAVE_STRUCT_ADDRINFO], [1], 4225 [define if you have struct addrinfo data type]) 4226fi 4227 4228AC_CACHE_CHECK([for struct timeval], ac_cv_have_struct_timeval, [ 4229 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/time.h> ]], 4230 [[ struct timeval tv; tv.tv_sec = 1;]])], 4231 [ ac_cv_have_struct_timeval="yes" ], 4232 [ ac_cv_have_struct_timeval="no" 4233 ]) 4234]) 4235if test "x$ac_cv_have_struct_timeval" = "xyes" ; then 4236 AC_DEFINE([HAVE_STRUCT_TIMEVAL], [1], [define if you have struct timeval]) 4237 have_struct_timeval=1 4238fi 4239 4240AC_CACHE_CHECK([for struct timespec], ac_cv_have_struct_timespec, [ 4241 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 4242 #ifdef HAVE_SYS_TIME_H 4243 # include <sys/time.h> 4244 #endif 4245 #ifdef HAVE_TIME_H 4246 # include <time.h> 4247 #endif 4248 ]], 4249 [[ struct timespec ts; ts.tv_sec = 1;]])], 4250 [ ac_cv_have_struct_timespec="yes" ], 4251 [ ac_cv_have_struct_timespec="no" 4252 ]) 4253]) 4254if test "x$ac_cv_have_struct_timespec" = "xyes" ; then 4255 AC_DEFINE([HAVE_STRUCT_TIMESPEC], [1], [define if you have struct timespec]) 4256 have_struct_timespec=1 4257fi 4258 4259# We need int64_t or else certain parts of the compile will fail. 4260if test "x$ac_cv_have_int64_t" = "xno" && \ 4261 test "x$ac_cv_sizeof_long_int" != "x8" && \ 4262 test "x$ac_cv_sizeof_long_long_int" = "x0" ; then 4263 echo "OpenSSH requires int64_t support. Contact your vendor or install" 4264 echo "an alternative compiler (I.E., GCC) before continuing." 4265 echo "" 4266 exit 1; 4267else 4268dnl test snprintf (broken on SCO w/gcc) 4269 AC_RUN_IFELSE( 4270 [AC_LANG_SOURCE([[ 4271#include <stdio.h> 4272#include <stdlib.h> 4273#include <string.h> 4274#ifdef HAVE_SNPRINTF 4275main() 4276{ 4277 char buf[50]; 4278 char expected_out[50]; 4279 int mazsize = 50 ; 4280#if (SIZEOF_LONG_INT == 8) 4281 long int num = 0x7fffffffffffffff; 4282#else 4283 long long num = 0x7fffffffffffffffll; 4284#endif 4285 strcpy(expected_out, "9223372036854775807"); 4286 snprintf(buf, mazsize, "%lld", num); 4287 if(strcmp(buf, expected_out) != 0) 4288 exit(1); 4289 exit(0); 4290} 4291#else 4292main() { exit(0); } 4293#endif 4294 ]])], [ true ], [ AC_DEFINE([BROKEN_SNPRINTF]) ], 4295 AC_MSG_WARN([cross compiling: Assuming working snprintf()]) 4296 ) 4297fi 4298 4299dnl Checks for structure members 4300OSSH_CHECK_HEADER_FOR_FIELD([ut_host], [utmp.h], [HAVE_HOST_IN_UTMP]) 4301OSSH_CHECK_HEADER_FOR_FIELD([ut_host], [utmpx.h], [HAVE_HOST_IN_UTMPX]) 4302OSSH_CHECK_HEADER_FOR_FIELD([syslen], [utmpx.h], [HAVE_SYSLEN_IN_UTMPX]) 4303OSSH_CHECK_HEADER_FOR_FIELD([ut_pid], [utmp.h], [HAVE_PID_IN_UTMP]) 4304OSSH_CHECK_HEADER_FOR_FIELD([ut_type], [utmp.h], [HAVE_TYPE_IN_UTMP]) 4305OSSH_CHECK_HEADER_FOR_FIELD([ut_type], [utmpx.h], [HAVE_TYPE_IN_UTMPX]) 4306OSSH_CHECK_HEADER_FOR_FIELD([ut_tv], [utmp.h], [HAVE_TV_IN_UTMP]) 4307OSSH_CHECK_HEADER_FOR_FIELD([ut_id], [utmp.h], [HAVE_ID_IN_UTMP]) 4308OSSH_CHECK_HEADER_FOR_FIELD([ut_id], [utmpx.h], [HAVE_ID_IN_UTMPX]) 4309OSSH_CHECK_HEADER_FOR_FIELD([ut_addr], [utmp.h], [HAVE_ADDR_IN_UTMP]) 4310OSSH_CHECK_HEADER_FOR_FIELD([ut_addr], [utmpx.h], [HAVE_ADDR_IN_UTMPX]) 4311OSSH_CHECK_HEADER_FOR_FIELD([ut_addr_v6], [utmp.h], [HAVE_ADDR_V6_IN_UTMP]) 4312OSSH_CHECK_HEADER_FOR_FIELD([ut_addr_v6], [utmpx.h], [HAVE_ADDR_V6_IN_UTMPX]) 4313OSSH_CHECK_HEADER_FOR_FIELD([ut_exit], [utmp.h], [HAVE_EXIT_IN_UTMP]) 4314OSSH_CHECK_HEADER_FOR_FIELD([ut_time], [utmp.h], [HAVE_TIME_IN_UTMP]) 4315OSSH_CHECK_HEADER_FOR_FIELD([ut_time], [utmpx.h], [HAVE_TIME_IN_UTMPX]) 4316OSSH_CHECK_HEADER_FOR_FIELD([ut_tv], [utmpx.h], [HAVE_TV_IN_UTMPX]) 4317OSSH_CHECK_HEADER_FOR_FIELD([ut_ss], [utmpx.h], [HAVE_SS_IN_UTMPX]) 4318 4319AC_CHECK_MEMBERS([struct stat.st_blksize]) 4320AC_CHECK_MEMBERS([struct stat.st_mtim]) 4321AC_CHECK_MEMBERS([struct stat.st_mtime]) 4322AC_CHECK_MEMBERS([struct passwd.pw_gecos, struct passwd.pw_class, 4323struct passwd.pw_change, struct passwd.pw_expire], 4324[], [], [[ 4325#include <sys/types.h> 4326#include <pwd.h> 4327]]) 4328 4329AC_CHECK_MEMBER([struct __res_state.retrans], [], [AC_DEFINE([__res_state], [state], 4330 [Define if we don't have struct __res_state in resolv.h])], 4331[[ 4332#include <stdio.h> 4333#if HAVE_SYS_TYPES_H 4334# include <sys/types.h> 4335#endif 4336#include <netinet/in.h> 4337#include <arpa/nameser.h> 4338#include <resolv.h> 4339]]) 4340 4341AC_CACHE_CHECK([for ss_family field in struct sockaddr_storage], 4342 ac_cv_have_ss_family_in_struct_ss, [ 4343 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 4344#include <sys/types.h> 4345#include <sys/socket.h> 4346 ]], [[ struct sockaddr_storage s; s.ss_family = 1; ]])], 4347 [ ac_cv_have_ss_family_in_struct_ss="yes" ], 4348 [ ac_cv_have_ss_family_in_struct_ss="no" ]) 4349]) 4350if test "x$ac_cv_have_ss_family_in_struct_ss" = "xyes" ; then 4351 AC_DEFINE([HAVE_SS_FAMILY_IN_SS], [1], [Fields in struct sockaddr_storage]) 4352fi 4353 4354AC_CACHE_CHECK([for __ss_family field in struct sockaddr_storage], 4355 ac_cv_have___ss_family_in_struct_ss, [ 4356 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 4357#include <sys/types.h> 4358#include <sys/socket.h> 4359 ]], [[ struct sockaddr_storage s; s.__ss_family = 1; ]])], 4360 [ ac_cv_have___ss_family_in_struct_ss="yes" ], 4361 [ ac_cv_have___ss_family_in_struct_ss="no" 4362 ]) 4363]) 4364if test "x$ac_cv_have___ss_family_in_struct_ss" = "xyes" ; then 4365 AC_DEFINE([HAVE___SS_FAMILY_IN_SS], [1], 4366 [Fields in struct sockaddr_storage]) 4367fi 4368 4369dnl make sure we're using the real structure members and not defines 4370AC_CACHE_CHECK([for msg_accrights field in struct msghdr], 4371 ac_cv_have_accrights_in_msghdr, [ 4372 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 4373#include <sys/types.h> 4374#include <sys/socket.h> 4375#include <sys/uio.h> 4376#include <stdlib.h> 4377 ]], [[ 4378#ifdef msg_accrights 4379#error "msg_accrights is a macro" 4380exit(1); 4381#endif 4382struct msghdr m; 4383m.msg_accrights = 0; 4384exit(0); 4385 ]])], 4386 [ ac_cv_have_accrights_in_msghdr="yes" ], 4387 [ ac_cv_have_accrights_in_msghdr="no" ] 4388 ) 4389]) 4390if test "x$ac_cv_have_accrights_in_msghdr" = "xyes" ; then 4391 AC_DEFINE([HAVE_ACCRIGHTS_IN_MSGHDR], [1], 4392 [Define if your system uses access rights style 4393 file descriptor passing]) 4394fi 4395 4396AC_MSG_CHECKING([if struct statvfs.f_fsid is integral type]) 4397AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 4398#include <sys/param.h> 4399#include <sys/stat.h> 4400#ifdef HAVE_SYS_TIME_H 4401# include <sys/time.h> 4402#endif 4403#ifdef HAVE_SYS_MOUNT_H 4404#include <sys/mount.h> 4405#endif 4406#ifdef HAVE_SYS_STATVFS_H 4407#include <sys/statvfs.h> 4408#endif 4409 ]], [[ struct statvfs s; s.f_fsid = 0; ]])], 4410 [ AC_MSG_RESULT([yes]) ], 4411 [ AC_MSG_RESULT([no]) 4412 4413 AC_MSG_CHECKING([if fsid_t has member val]) 4414 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 4415#include <sys/types.h> 4416#include <sys/statvfs.h> 4417 ]], [[ fsid_t t; t.val[0] = 0; ]])], 4418 [ AC_MSG_RESULT([yes]) 4419 AC_DEFINE([FSID_HAS_VAL], [1], [fsid_t has member val]) ], 4420 [ AC_MSG_RESULT([no]) ]) 4421 4422 AC_MSG_CHECKING([if f_fsid has member __val]) 4423 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 4424#include <sys/types.h> 4425#include <sys/statvfs.h> 4426 ]], [[ fsid_t t; t.__val[0] = 0; ]])], 4427 [ AC_MSG_RESULT([yes]) 4428 AC_DEFINE([FSID_HAS___VAL], [1], [fsid_t has member __val]) ], 4429 [ AC_MSG_RESULT([no]) ]) 4430]) 4431 4432AC_CACHE_CHECK([for msg_control field in struct msghdr], 4433 ac_cv_have_control_in_msghdr, [ 4434 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 4435#include <sys/types.h> 4436#include <sys/socket.h> 4437#include <sys/uio.h> 4438#include <stdlib.h> 4439 ]], [[ 4440#ifdef msg_control 4441#error "msg_control is a macro" 4442exit(1); 4443#endif 4444struct msghdr m; 4445m.msg_control = 0; 4446exit(0); 4447 ]])], 4448 [ ac_cv_have_control_in_msghdr="yes" ], 4449 [ ac_cv_have_control_in_msghdr="no" ] 4450 ) 4451]) 4452if test "x$ac_cv_have_control_in_msghdr" = "xyes" ; then 4453 AC_DEFINE([HAVE_CONTROL_IN_MSGHDR], [1], 4454 [Define if your system uses ancillary data style 4455 file descriptor passing]) 4456fi 4457 4458AC_CACHE_CHECK([if libc defines __progname], ac_cv_libc_defines___progname, [ 4459 AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include <stdio.h> ]], 4460 [[ extern char *__progname; printf("%s", __progname); ]])], 4461 [ ac_cv_libc_defines___progname="yes" ], 4462 [ ac_cv_libc_defines___progname="no" 4463 ]) 4464]) 4465if test "x$ac_cv_libc_defines___progname" = "xyes" ; then 4466 AC_DEFINE([HAVE___PROGNAME], [1], [Define if libc defines __progname]) 4467fi 4468 4469AC_CACHE_CHECK([whether $CC implements __FUNCTION__], ac_cv_cc_implements___FUNCTION__, [ 4470 AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include <stdio.h> ]], 4471 [[ printf("%s", __FUNCTION__); ]])], 4472 [ ac_cv_cc_implements___FUNCTION__="yes" ], 4473 [ ac_cv_cc_implements___FUNCTION__="no" 4474 ]) 4475]) 4476if test "x$ac_cv_cc_implements___FUNCTION__" = "xyes" ; then 4477 AC_DEFINE([HAVE___FUNCTION__], [1], 4478 [Define if compiler implements __FUNCTION__]) 4479fi 4480 4481AC_CACHE_CHECK([whether $CC implements __func__], ac_cv_cc_implements___func__, [ 4482 AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include <stdio.h> ]], 4483 [[ printf("%s", __func__); ]])], 4484 [ ac_cv_cc_implements___func__="yes" ], 4485 [ ac_cv_cc_implements___func__="no" 4486 ]) 4487]) 4488if test "x$ac_cv_cc_implements___func__" = "xyes" ; then 4489 AC_DEFINE([HAVE___func__], [1], [Define if compiler implements __func__]) 4490fi 4491 4492AC_CACHE_CHECK([whether va_copy exists], ac_cv_have_va_copy, [ 4493 AC_LINK_IFELSE([AC_LANG_PROGRAM([[ 4494#include <stdarg.h> 4495va_list x,y; 4496 ]], [[ va_copy(x,y); ]])], 4497 [ ac_cv_have_va_copy="yes" ], 4498 [ ac_cv_have_va_copy="no" 4499 ]) 4500]) 4501if test "x$ac_cv_have_va_copy" = "xyes" ; then 4502 AC_DEFINE([HAVE_VA_COPY], [1], [Define if va_copy exists]) 4503fi 4504 4505AC_CACHE_CHECK([whether __va_copy exists], ac_cv_have___va_copy, [ 4506 AC_LINK_IFELSE([AC_LANG_PROGRAM([[ 4507#include <stdarg.h> 4508va_list x,y; 4509 ]], [[ __va_copy(x,y); ]])], 4510 [ ac_cv_have___va_copy="yes" ], [ ac_cv_have___va_copy="no" 4511 ]) 4512]) 4513if test "x$ac_cv_have___va_copy" = "xyes" ; then 4514 AC_DEFINE([HAVE___VA_COPY], [1], [Define if __va_copy exists]) 4515fi 4516 4517AC_CACHE_CHECK([whether getopt has optreset support], 4518 ac_cv_have_getopt_optreset, [ 4519 AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include <getopt.h> ]], 4520 [[ extern int optreset; optreset = 0; ]])], 4521 [ ac_cv_have_getopt_optreset="yes" ], 4522 [ ac_cv_have_getopt_optreset="no" 4523 ]) 4524]) 4525if test "x$ac_cv_have_getopt_optreset" = "xyes" ; then 4526 AC_DEFINE([HAVE_GETOPT_OPTRESET], [1], 4527 [Define if your getopt(3) defines and uses optreset]) 4528fi 4529 4530AC_CACHE_CHECK([if libc defines sys_errlist], ac_cv_libc_defines_sys_errlist, [ 4531 AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include <stdio.h> ]], 4532[[ extern const char *const sys_errlist[]; printf("%s", sys_errlist[0]);]])], 4533 [ ac_cv_libc_defines_sys_errlist="yes" ], 4534 [ ac_cv_libc_defines_sys_errlist="no" 4535 ]) 4536]) 4537if test "x$ac_cv_libc_defines_sys_errlist" = "xyes" ; then 4538 AC_DEFINE([HAVE_SYS_ERRLIST], [1], 4539 [Define if your system defines sys_errlist[]]) 4540fi 4541 4542 4543AC_CACHE_CHECK([if libc defines sys_nerr], ac_cv_libc_defines_sys_nerr, [ 4544 AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include <stdio.h> ]], 4545[[ extern int sys_nerr; printf("%i", sys_nerr);]])], 4546 [ ac_cv_libc_defines_sys_nerr="yes" ], 4547 [ ac_cv_libc_defines_sys_nerr="no" 4548 ]) 4549]) 4550if test "x$ac_cv_libc_defines_sys_nerr" = "xyes" ; then 4551 AC_DEFINE([HAVE_SYS_NERR], [1], [Define if your system defines sys_nerr]) 4552fi 4553 4554# Check libraries needed by DNS fingerprint support 4555AC_SEARCH_LIBS([getrrsetbyname], [resolv], 4556 [AC_DEFINE([HAVE_GETRRSETBYNAME], [1], 4557 [Define if getrrsetbyname() exists])], 4558 [ 4559 # Needed by our getrrsetbyname() 4560 AC_SEARCH_LIBS([res_query], [resolv]) 4561 AC_SEARCH_LIBS([dn_expand], [resolv]) 4562 AC_MSG_CHECKING([if res_query will link]) 4563 AC_LINK_IFELSE([AC_LANG_PROGRAM([[ 4564#include <sys/types.h> 4565#include <netinet/in.h> 4566#include <arpa/nameser.h> 4567#include <netdb.h> 4568#include <resolv.h> 4569 ]], [[ 4570 res_query (0, 0, 0, 0, 0); 4571 ]])], 4572 AC_MSG_RESULT([yes]), 4573 [AC_MSG_RESULT([no]) 4574 saved_LIBS="$LIBS" 4575 LIBS="$LIBS -lresolv" 4576 AC_MSG_CHECKING([for res_query in -lresolv]) 4577 AC_LINK_IFELSE([AC_LANG_PROGRAM([[ 4578#include <sys/types.h> 4579#include <netinet/in.h> 4580#include <arpa/nameser.h> 4581#include <netdb.h> 4582#include <resolv.h> 4583 ]], [[ 4584 res_query (0, 0, 0, 0, 0); 4585 ]])], 4586 [AC_MSG_RESULT([yes])], 4587 [LIBS="$saved_LIBS" 4588 AC_MSG_RESULT([no])]) 4589 ]) 4590 AC_CHECK_FUNCS([_getshort _getlong]) 4591 AC_CHECK_DECLS([_getshort, _getlong], , , 4592 [#include <sys/types.h> 4593 #include <arpa/nameser.h>]) 4594 AC_CHECK_MEMBER([HEADER.ad], 4595 [AC_DEFINE([HAVE_HEADER_AD], [1], 4596 [Define if HEADER.ad exists in arpa/nameser.h])], , 4597 [#include <arpa/nameser.h>]) 4598 ]) 4599 4600AC_MSG_CHECKING([if struct __res_state _res is an extern]) 4601AC_LINK_IFELSE([AC_LANG_PROGRAM([[ 4602#include <stdio.h> 4603#if HAVE_SYS_TYPES_H 4604# include <sys/types.h> 4605#endif 4606#include <netinet/in.h> 4607#include <arpa/nameser.h> 4608#include <resolv.h> 4609extern struct __res_state _res; 4610 ]], [[ 4611struct __res_state *volatile p = &_res; /* force resolution of _res */ 4612return 0; 4613 ]],)], 4614 [AC_MSG_RESULT([yes]) 4615 AC_DEFINE([HAVE__RES_EXTERN], [1], 4616 [Define if you have struct __res_state _res as an extern]) 4617 ], 4618 [ AC_MSG_RESULT([no]) ] 4619) 4620 4621# Check whether user wants SELinux support 4622SELINUX_MSG="no" 4623LIBSELINUX="" 4624AC_ARG_WITH([selinux], 4625 [ --with-selinux Enable SELinux support], 4626 [ if test "x$withval" != "xno" ; then 4627 save_LIBS="$LIBS" 4628 AC_DEFINE([WITH_SELINUX], [1], 4629 [Define if you want SELinux support.]) 4630 SELINUX_MSG="yes" 4631 AC_CHECK_HEADER([selinux/selinux.h], , 4632 AC_MSG_ERROR([SELinux support requires selinux.h header])) 4633 AC_CHECK_LIB([selinux], [setexeccon], 4634 [ LIBSELINUX="-lselinux" 4635 LIBS="$LIBS -lselinux" 4636 ], 4637 AC_MSG_ERROR([SELinux support requires libselinux library])) 4638 AC_CHECK_FUNCS([getseuserbyname get_default_context_with_level]) 4639 LIBS="$save_LIBS $LIBSELINUX" 4640 fi ] 4641) 4642AC_SUBST([SSHDLIBS]) 4643 4644# Check whether user wants Kerberos 5 support 4645KRB5_MSG="no" 4646AC_ARG_WITH([kerberos5], 4647 [ --with-kerberos5=PATH Enable Kerberos 5 support], 4648 [ if test "x$withval" != "xno" ; then 4649 if test "x$withval" = "xyes" ; then 4650 KRB5ROOT="/usr/local" 4651 else 4652 KRB5ROOT=${withval} 4653 fi 4654 4655 AC_DEFINE([KRB5], [1], [Define if you want Kerberos 5 support]) 4656 KRB5_MSG="yes" 4657 4658 AC_PATH_TOOL([PKGCONFIG], [pkg-config], [no]) 4659 use_pkgconfig_for_krb5= 4660 if test "x$PKGCONFIG" != "xno"; then 4661 AC_MSG_CHECKING([if $PKGCONFIG knows about kerberos5]) 4662 if "$PKGCONFIG" krb5; then 4663 AC_MSG_RESULT([yes]) 4664 use_pkgconfig_for_krb5=yes 4665 else 4666 AC_MSG_RESULT([no]) 4667 fi 4668 fi 4669 if test "x$use_pkgconfig_for_krb5" = "xyes"; then 4670 K5CFLAGS=`$PKGCONFIG --cflags krb5` 4671 K5LIBS=`$PKGCONFIG --libs krb5` 4672 CPPFLAGS="$CPPFLAGS $K5CFLAGS" 4673 4674 AC_MSG_CHECKING([for gssapi support]) 4675 if "$PKGCONFIG" krb5-gssapi; then 4676 AC_MSG_RESULT([yes]) 4677 AC_DEFINE([GSSAPI], [1], 4678 [Define this if you want GSSAPI 4679 support in the version 2 protocol]) 4680 GSSCFLAGS="`$PKGCONFIG --cflags krb5-gssapi`" 4681 GSSLIBS="`$PKGCONFIG --libs krb5-gssapi`" 4682 CPPFLAGS="$CPPFLAGS $GSSCFLAGS" 4683 else 4684 AC_MSG_RESULT([no]) 4685 fi 4686 AC_MSG_CHECKING([whether we are using Heimdal]) 4687 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <krb5.h> 4688 ]], [[ char *tmp = heimdal_version; ]])], 4689 [ AC_MSG_RESULT([yes]) 4690 AC_DEFINE([HEIMDAL], [1], 4691 [Define this if you are using the Heimdal 4692 version of Kerberos V5]) ], 4693 [AC_MSG_RESULT([no]) 4694 ]) 4695 else 4696 AC_PATH_TOOL([KRB5CONF], [krb5-config], 4697 [$KRB5ROOT/bin/krb5-config], 4698 [$KRB5ROOT/bin:$PATH]) 4699 if test -x $KRB5CONF ; then 4700 K5CFLAGS="`$KRB5CONF --cflags`" 4701 K5LIBS="`$KRB5CONF --libs`" 4702 CPPFLAGS="$CPPFLAGS $K5CFLAGS" 4703 4704 AC_MSG_CHECKING([for gssapi support]) 4705 if $KRB5CONF | grep gssapi >/dev/null ; then 4706 AC_MSG_RESULT([yes]) 4707 AC_DEFINE([GSSAPI], [1], 4708 [Define this if you want GSSAPI 4709 support in the version 2 protocol]) 4710 GSSCFLAGS="`$KRB5CONF --cflags gssapi`" 4711 GSSLIBS="`$KRB5CONF --libs gssapi`" 4712 CPPFLAGS="$CPPFLAGS $GSSCFLAGS" 4713 else 4714 AC_MSG_RESULT([no]) 4715 fi 4716 AC_MSG_CHECKING([whether we are using Heimdal]) 4717 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <krb5.h> 4718 ]], [[ char *tmp = heimdal_version; ]])], 4719 [ AC_MSG_RESULT([yes]) 4720 AC_DEFINE([HEIMDAL], [1], 4721 [Define this if you are using the Heimdal 4722 version of Kerberos V5]) ], 4723 [AC_MSG_RESULT([no]) 4724 ]) 4725 else 4726 CPPFLAGS="$CPPFLAGS -I${KRB5ROOT}/include" 4727 LDFLAGS="$LDFLAGS -L${KRB5ROOT}/lib" 4728 AC_MSG_CHECKING([whether we are using Heimdal]) 4729 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <krb5.h> 4730 ]], [[ char *tmp = heimdal_version; ]])], 4731 [ AC_MSG_RESULT([yes]) 4732 AC_DEFINE([HEIMDAL]) 4733 K5LIBS="-lkrb5" 4734 K5LIBS="$K5LIBS -lcom_err -lasn1" 4735 AC_CHECK_LIB([roken], [net_write], 4736 [K5LIBS="$K5LIBS -lroken"]) 4737 AC_CHECK_LIB([des], [des_cbc_encrypt], 4738 [K5LIBS="$K5LIBS -ldes"]) 4739 ], [ AC_MSG_RESULT([no]) 4740 K5LIBS="-lkrb5 -lk5crypto -lcom_err" 4741 ]) 4742 AC_SEARCH_LIBS([dn_expand], [resolv]) 4743 4744 AC_CHECK_LIB([gssapi_krb5], [gss_init_sec_context], 4745 [ AC_DEFINE([GSSAPI]) 4746 GSSLIBS="-lgssapi_krb5" ], 4747 [ AC_CHECK_LIB([gssapi], [gss_init_sec_context], 4748 [ AC_DEFINE([GSSAPI]) 4749 GSSLIBS="-lgssapi" ], 4750 [ AC_CHECK_LIB([gss], [gss_init_sec_context], 4751 [ AC_DEFINE([GSSAPI]) 4752 GSSLIBS="-lgss" ], 4753 AC_MSG_WARN([Cannot find any suitable gss-api library - build may fail])) 4754 ]) 4755 ]) 4756 4757 AC_CHECK_HEADER([gssapi.h], , 4758 [ unset ac_cv_header_gssapi_h 4759 CPPFLAGS="$CPPFLAGS -I${KRB5ROOT}/include/gssapi" 4760 AC_CHECK_HEADERS([gssapi.h], , 4761 AC_MSG_WARN([Cannot find any suitable gss-api header - build may fail]) 4762 ) 4763 ] 4764 ) 4765 4766 oldCPP="$CPPFLAGS" 4767 CPPFLAGS="$CPPFLAGS -I${KRB5ROOT}/include/gssapi" 4768 AC_CHECK_HEADER([gssapi_krb5.h], , 4769 [ CPPFLAGS="$oldCPP" ]) 4770 4771 fi 4772 fi 4773 if test -n "${rpath_opt}" ; then 4774 LDFLAGS="$LDFLAGS ${rpath_opt}${KRB5ROOT}/lib" 4775 fi 4776 if test ! -z "$blibpath" ; then 4777 blibpath="$blibpath:${KRB5ROOT}/lib" 4778 fi 4779 4780 AC_CHECK_HEADERS([gssapi.h gssapi/gssapi.h]) 4781 AC_CHECK_HEADERS([gssapi_krb5.h gssapi/gssapi_krb5.h]) 4782 AC_CHECK_HEADERS([gssapi_generic.h gssapi/gssapi_generic.h]) 4783 4784 AC_SEARCH_LIBS([k_hasafs], [kafs], [AC_DEFINE([USE_AFS], [1], 4785 [Define this if you want to use libkafs' AFS support])]) 4786 4787 AC_CHECK_DECLS([GSS_C_NT_HOSTBASED_SERVICE], [], [], [[ 4788#ifdef HAVE_GSSAPI_H 4789# include <gssapi.h> 4790#elif defined(HAVE_GSSAPI_GSSAPI_H) 4791# include <gssapi/gssapi.h> 4792#endif 4793 4794#ifdef HAVE_GSSAPI_GENERIC_H 4795# include <gssapi_generic.h> 4796#elif defined(HAVE_GSSAPI_GSSAPI_GENERIC_H) 4797# include <gssapi/gssapi_generic.h> 4798#endif 4799 ]]) 4800 saved_LIBS="$LIBS" 4801 LIBS="$LIBS $K5LIBS" 4802 AC_CHECK_FUNCS([krb5_cc_new_unique krb5_get_error_message krb5_free_error_message]) 4803 LIBS="$saved_LIBS" 4804 4805 fi 4806 ] 4807) 4808AC_SUBST([GSSLIBS]) 4809AC_SUBST([K5LIBS]) 4810 4811# Looking for programs, paths and files 4812 4813PRIVSEP_PATH=/var/empty 4814AC_ARG_WITH([privsep-path], 4815 [ --with-privsep-path=xxx Path for privilege separation chroot (default=/var/empty)], 4816 [ 4817 if test -n "$withval" && test "x$withval" != "xno" && \ 4818 test "x${withval}" != "xyes"; then 4819 PRIVSEP_PATH=$withval 4820 fi 4821 ] 4822) 4823AC_SUBST([PRIVSEP_PATH]) 4824 4825AC_ARG_WITH([xauth], 4826 [ --with-xauth=PATH Specify path to xauth program ], 4827 [ 4828 if test -n "$withval" && test "x$withval" != "xno" && \ 4829 test "x${withval}" != "xyes"; then 4830 xauth_path=$withval 4831 fi 4832 ], 4833 [ 4834 TestPath="$PATH" 4835 TestPath="${TestPath}${PATH_SEPARATOR}/usr/X/bin" 4836 TestPath="${TestPath}${PATH_SEPARATOR}/usr/bin/X11" 4837 TestPath="${TestPath}${PATH_SEPARATOR}/usr/X11R6/bin" 4838 TestPath="${TestPath}${PATH_SEPARATOR}/usr/openwin/bin" 4839 AC_PATH_PROG([xauth_path], [xauth], , [$TestPath]) 4840 if (test ! -z "$xauth_path" && test -x "/usr/openwin/bin/xauth") ; then 4841 xauth_path="/usr/openwin/bin/xauth" 4842 fi 4843 ] 4844) 4845 4846STRIP_OPT=-s 4847AC_ARG_ENABLE([strip], 4848 [ --disable-strip Disable calling strip(1) on install], 4849 [ 4850 if test "x$enableval" = "xno" ; then 4851 STRIP_OPT= 4852 fi 4853 ] 4854) 4855AC_SUBST([STRIP_OPT]) 4856 4857if test -z "$xauth_path" ; then 4858 XAUTH_PATH="undefined" 4859 AC_SUBST([XAUTH_PATH]) 4860else 4861 AC_DEFINE_UNQUOTED([XAUTH_PATH], ["$xauth_path"], 4862 [Define if xauth is found in your path]) 4863 XAUTH_PATH=$xauth_path 4864 AC_SUBST([XAUTH_PATH]) 4865fi 4866 4867dnl # --with-maildir=/path/to/mail gets top priority. 4868dnl # if maildir is set in the platform case statement above we use that. 4869dnl # Otherwise we run a program to get the dir from system headers. 4870dnl # We first look for _PATH_MAILDIR then MAILDIR then _PATH_MAIL 4871dnl # If we find _PATH_MAILDIR we do nothing because that is what 4872dnl # session.c expects anyway. Otherwise we set to the value found 4873dnl # stripping any trailing slash. If for some strage reason our program 4874dnl # does not find what it needs, we default to /var/spool/mail. 4875# Check for mail directory 4876AC_ARG_WITH([maildir], 4877 [ --with-maildir=/path/to/mail Specify your system mail directory], 4878 [ 4879 if test "X$withval" != X && test "x$withval" != xno && \ 4880 test "x${withval}" != xyes; then 4881 AC_DEFINE_UNQUOTED([MAIL_DIRECTORY], ["$withval"], 4882 [Set this to your mail directory if you do not have _PATH_MAILDIR]) 4883 fi 4884 ],[ 4885 if test "X$maildir" != "X"; then 4886 AC_DEFINE_UNQUOTED([MAIL_DIRECTORY], ["$maildir"]) 4887 else 4888 AC_MSG_CHECKING([Discovering system mail directory]) 4889 AC_RUN_IFELSE( 4890 [AC_LANG_PROGRAM([[ 4891#include <stdio.h> 4892#include <stdlib.h> 4893#include <string.h> 4894#ifdef HAVE_PATHS_H 4895#include <paths.h> 4896#endif 4897#ifdef HAVE_MAILLOCK_H 4898#include <maillock.h> 4899#endif 4900#define DATA "conftest.maildir" 4901 ]], [[ 4902 FILE *fd; 4903 int rc; 4904 4905 fd = fopen(DATA,"w"); 4906 if(fd == NULL) 4907 exit(1); 4908 4909#if defined (_PATH_MAILDIR) 4910 if ((rc = fprintf(fd ,"_PATH_MAILDIR:%s\n", _PATH_MAILDIR)) <0) 4911 exit(1); 4912#elif defined (MAILDIR) 4913 if ((rc = fprintf(fd ,"MAILDIR:%s\n", MAILDIR)) <0) 4914 exit(1); 4915#elif defined (_PATH_MAIL) 4916 if ((rc = fprintf(fd ,"_PATH_MAIL:%s\n", _PATH_MAIL)) <0) 4917 exit(1); 4918#else 4919 exit (2); 4920#endif 4921 4922 exit(0); 4923 ]])], 4924 [ 4925 maildir_what=`awk -F: '{print $1}' conftest.maildir` 4926 maildir=`awk -F: '{print $2}' conftest.maildir \ 4927 | sed 's|/$||'` 4928 AC_MSG_RESULT([Using: $maildir from $maildir_what]) 4929 if test "x$maildir_what" != "x_PATH_MAILDIR"; then 4930 AC_DEFINE_UNQUOTED([MAIL_DIRECTORY], ["$maildir"]) 4931 fi 4932 ], 4933 [ 4934 if test "X$ac_status" = "X2";then 4935# our test program didn't find it. Default to /var/spool/mail 4936 AC_MSG_RESULT([Using: default value of /var/spool/mail]) 4937 AC_DEFINE_UNQUOTED([MAIL_DIRECTORY], ["/var/spool/mail"]) 4938 else 4939 AC_MSG_RESULT([*** not found ***]) 4940 fi 4941 ], 4942 [ 4943 AC_MSG_WARN([cross compiling: use --with-maildir=/path/to/mail]) 4944 ] 4945 ) 4946 fi 4947 ] 4948) # maildir 4949 4950if test ! -z "$cross_compiling" && test "x$cross_compiling" = "xyes"; then 4951 AC_MSG_WARN([cross compiling: Disabling /dev/ptmx test]) 4952 disable_ptmx_check=yes 4953fi 4954if test -z "$no_dev_ptmx" ; then 4955 if test "x$disable_ptmx_check" != "xyes" ; then 4956 AC_CHECK_FILE(["/dev/ptmx"], 4957 [ 4958 AC_DEFINE_UNQUOTED([HAVE_DEV_PTMX], [1], 4959 [Define if you have /dev/ptmx]) 4960 have_dev_ptmx=1 4961 ] 4962 ) 4963 fi 4964fi 4965 4966if test ! -z "$cross_compiling" && test "x$cross_compiling" != "xyes"; then 4967 AC_CHECK_FILE(["/dev/ptc"], 4968 [ 4969 AC_DEFINE_UNQUOTED([HAVE_DEV_PTS_AND_PTC], [1], 4970 [Define if you have /dev/ptc]) 4971 have_dev_ptc=1 4972 ] 4973 ) 4974else 4975 AC_MSG_WARN([cross compiling: Disabling /dev/ptc test]) 4976fi 4977 4978# Options from here on. Some of these are preset by platform above 4979AC_ARG_WITH([mantype], 4980 [ --with-mantype=man|cat|doc Set man page type], 4981 [ 4982 case "$withval" in 4983 man|cat|doc) 4984 MANTYPE=$withval 4985 ;; 4986 *) 4987 AC_MSG_ERROR([invalid man type: $withval]) 4988 ;; 4989 esac 4990 ] 4991) 4992if test -z "$MANTYPE"; then 4993 if ${MANDOC} ${srcdir}/ssh.1 >/dev/null 2>&1; then 4994 MANTYPE=doc 4995 elif ${NROFF} -mdoc ${srcdir}/ssh.1 >/dev/null 2>&1; then 4996 MANTYPE=doc 4997 elif ${NROFF} -man ${srcdir}/ssh.1 >/dev/null 2>&1; then 4998 MANTYPE=man 4999 else 5000 MANTYPE=cat 5001 fi 5002fi 5003AC_SUBST([MANTYPE]) 5004if test "$MANTYPE" = "doc"; then 5005 mansubdir=man; 5006else 5007 mansubdir=$MANTYPE; 5008fi 5009AC_SUBST([mansubdir]) 5010 5011# Check whether to enable MD5 passwords 5012MD5_MSG="no" 5013AC_ARG_WITH([md5-passwords], 5014 [ --with-md5-passwords Enable use of MD5 passwords], 5015 [ 5016 if test "x$withval" != "xno" ; then 5017 AC_DEFINE([HAVE_MD5_PASSWORDS], [1], 5018 [Define if you want to allow MD5 passwords]) 5019 MD5_MSG="yes" 5020 fi 5021 ] 5022) 5023 5024# Whether to disable shadow password support 5025AC_ARG_WITH([shadow], 5026 [ --without-shadow Disable shadow password support], 5027 [ 5028 if test "x$withval" = "xno" ; then 5029 AC_DEFINE([DISABLE_SHADOW]) 5030 disable_shadow=yes 5031 fi 5032 ] 5033) 5034 5035if test -z "$disable_shadow" ; then 5036 AC_MSG_CHECKING([if the systems has expire shadow information]) 5037 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 5038#include <sys/types.h> 5039#include <shadow.h> 5040struct spwd sp; 5041 ]], [[ sp.sp_expire = sp.sp_lstchg = sp.sp_inact = 0; ]])], 5042 [ sp_expire_available=yes ], [ 5043 ]) 5044 5045 if test "x$sp_expire_available" = "xyes" ; then 5046 AC_MSG_RESULT([yes]) 5047 AC_DEFINE([HAS_SHADOW_EXPIRE], [1], 5048 [Define if you want to use shadow password expire field]) 5049 else 5050 AC_MSG_RESULT([no]) 5051 fi 5052fi 5053 5054# Use ip address instead of hostname in $DISPLAY 5055if test ! -z "$IPADDR_IN_DISPLAY" ; then 5056 DISPLAY_HACK_MSG="yes" 5057 AC_DEFINE([IPADDR_IN_DISPLAY], [1], 5058 [Define if you need to use IP address 5059 instead of hostname in $DISPLAY]) 5060else 5061 DISPLAY_HACK_MSG="no" 5062 AC_ARG_WITH([ipaddr-display], 5063 [ --with-ipaddr-display Use ip address instead of hostname in $DISPLAY], 5064 [ 5065 if test "x$withval" != "xno" ; then 5066 AC_DEFINE([IPADDR_IN_DISPLAY]) 5067 DISPLAY_HACK_MSG="yes" 5068 fi 5069 ] 5070 ) 5071fi 5072 5073# check for /etc/default/login and use it if present. 5074AC_ARG_ENABLE([etc-default-login], 5075 [ --disable-etc-default-login Disable using PATH from /etc/default/login [no]], 5076 [ if test "x$enableval" = "xno"; then 5077 AC_MSG_NOTICE([/etc/default/login handling disabled]) 5078 etc_default_login=no 5079 else 5080 etc_default_login=yes 5081 fi ], 5082 [ if test ! -z "$cross_compiling" && test "x$cross_compiling" = "xyes"; 5083 then 5084 AC_MSG_WARN([cross compiling: not checking /etc/default/login]) 5085 etc_default_login=no 5086 else 5087 etc_default_login=yes 5088 fi ] 5089) 5090 5091if test "x$etc_default_login" != "xno"; then 5092 AC_CHECK_FILE(["/etc/default/login"], 5093 [ external_path_file=/etc/default/login ]) 5094 if test "x$external_path_file" = "x/etc/default/login"; then 5095 AC_DEFINE([HAVE_ETC_DEFAULT_LOGIN], [1], 5096 [Define if your system has /etc/default/login]) 5097 fi 5098fi 5099 5100dnl BSD systems use /etc/login.conf so --with-default-path= has no effect 5101if test $ac_cv_func_login_getcapbool = "yes" && \ 5102 test $ac_cv_header_login_cap_h = "yes" ; then 5103 external_path_file=/etc/login.conf 5104fi 5105 5106# Whether to mess with the default path 5107SERVER_PATH_MSG="(default)" 5108AC_ARG_WITH([default-path], 5109 [ --with-default-path= Specify default $PATH environment for server], 5110 [ 5111 if test "x$external_path_file" = "x/etc/login.conf" ; then 5112 AC_MSG_WARN([ 5113--with-default-path=PATH has no effect on this system. 5114Edit /etc/login.conf instead.]) 5115 elif test "x$withval" != "xno" ; then 5116 if test ! -z "$external_path_file" ; then 5117 AC_MSG_WARN([ 5118--with-default-path=PATH will only be used if PATH is not defined in 5119$external_path_file .]) 5120 fi 5121 user_path="$withval" 5122 SERVER_PATH_MSG="$withval" 5123 fi 5124 ], 5125 [ if test "x$external_path_file" = "x/etc/login.conf" ; then 5126 AC_MSG_WARN([Make sure the path to scp is in /etc/login.conf]) 5127 else 5128 if test ! -z "$external_path_file" ; then 5129 AC_MSG_WARN([ 5130If PATH is defined in $external_path_file, ensure the path to scp is included, 5131otherwise scp will not work.]) 5132 fi 5133 AC_RUN_IFELSE( 5134 [AC_LANG_PROGRAM([[ 5135/* find out what STDPATH is */ 5136#include <stdio.h> 5137#include <stdlib.h> 5138#ifdef HAVE_PATHS_H 5139# include <paths.h> 5140#endif 5141#ifndef _PATH_STDPATH 5142# ifdef _PATH_USERPATH /* Irix */ 5143# define _PATH_STDPATH _PATH_USERPATH 5144# else 5145# define _PATH_STDPATH "/usr/bin:/bin:/usr/sbin:/sbin" 5146# endif 5147#endif 5148#include <sys/types.h> 5149#include <sys/stat.h> 5150#include <fcntl.h> 5151#define DATA "conftest.stdpath" 5152 ]], [[ 5153 FILE *fd; 5154 int rc; 5155 5156 fd = fopen(DATA,"w"); 5157 if(fd == NULL) 5158 exit(1); 5159 5160 if ((rc = fprintf(fd,"%s", _PATH_STDPATH)) < 0) 5161 exit(1); 5162 5163 exit(0); 5164 ]])], 5165 [ user_path=`cat conftest.stdpath` ], 5166 [ user_path="/usr/bin:/bin:/usr/sbin:/sbin" ], 5167 [ user_path="/usr/bin:/bin:/usr/sbin:/sbin" ] 5168 ) 5169# make sure $bindir is in USER_PATH so scp will work 5170 t_bindir="${bindir}" 5171 while echo "${t_bindir}" | egrep '\$\{|NONE/' >/dev/null 2>&1; do 5172 t_bindir=`eval echo ${t_bindir}` 5173 case $t_bindir in 5174 NONE/*) t_bindir=`echo $t_bindir | sed "s~NONE~$prefix~"` ;; 5175 esac 5176 case $t_bindir in 5177 NONE/*) t_bindir=`echo $t_bindir | sed "s~NONE~$ac_default_prefix~"` ;; 5178 esac 5179 done 5180 echo $user_path | grep ":$t_bindir" > /dev/null 2>&1 5181 if test $? -ne 0 ; then 5182 echo $user_path | grep "^$t_bindir" > /dev/null 2>&1 5183 if test $? -ne 0 ; then 5184 user_path=$user_path:$t_bindir 5185 AC_MSG_RESULT([Adding $t_bindir to USER_PATH so scp will work]) 5186 fi 5187 fi 5188 fi ] 5189) 5190if test "x$external_path_file" != "x/etc/login.conf" ; then 5191 AC_DEFINE_UNQUOTED([USER_PATH], ["$user_path"], [Specify default $PATH]) 5192 AC_SUBST([user_path]) 5193fi 5194 5195# Set superuser path separately to user path 5196AC_ARG_WITH([superuser-path], 5197 [ --with-superuser-path= Specify different path for super-user], 5198 [ 5199 if test -n "$withval" && test "x$withval" != "xno" && \ 5200 test "x${withval}" != "xyes"; then 5201 AC_DEFINE_UNQUOTED([SUPERUSER_PATH], ["$withval"], 5202 [Define if you want a different $PATH 5203 for the superuser]) 5204 superuser_path=$withval 5205 fi 5206 ] 5207) 5208 5209 5210AC_MSG_CHECKING([if we need to convert IPv4 in IPv6-mapped addresses]) 5211IPV4_IN6_HACK_MSG="no" 5212AC_ARG_WITH(4in6, 5213 [ --with-4in6 Check for and convert IPv4 in IPv6 mapped addresses], 5214 [ 5215 if test "x$withval" != "xno" ; then 5216 AC_MSG_RESULT([yes]) 5217 AC_DEFINE([IPV4_IN_IPV6], [1], 5218 [Detect IPv4 in IPv6 mapped addresses 5219 and treat as IPv4]) 5220 IPV4_IN6_HACK_MSG="yes" 5221 else 5222 AC_MSG_RESULT([no]) 5223 fi 5224 ], [ 5225 if test "x$inet6_default_4in6" = "xyes"; then 5226 AC_MSG_RESULT([yes (default)]) 5227 AC_DEFINE([IPV4_IN_IPV6]) 5228 IPV4_IN6_HACK_MSG="yes" 5229 else 5230 AC_MSG_RESULT([no (default)]) 5231 fi 5232 ] 5233) 5234 5235# Whether to enable BSD auth support 5236BSD_AUTH_MSG=no 5237AC_ARG_WITH([bsd-auth], 5238 [ --with-bsd-auth Enable BSD auth support], 5239 [ 5240 if test "x$withval" != "xno" ; then 5241 AC_DEFINE([BSD_AUTH], [1], 5242 [Define if you have BSD auth support]) 5243 BSD_AUTH_MSG=yes 5244 fi 5245 ] 5246) 5247 5248# Where to place sshd.pid 5249piddir=/var/run 5250# make sure the directory exists 5251if test ! -d $piddir ; then 5252 piddir=`eval echo ${sysconfdir}` 5253 case $piddir in 5254 NONE/*) piddir=`echo $piddir | sed "s~NONE~$ac_default_prefix~"` ;; 5255 esac 5256fi 5257 5258AC_ARG_WITH([pid-dir], 5259 [ --with-pid-dir=PATH Specify location of sshd.pid file], 5260 [ 5261 if test -n "$withval" && test "x$withval" != "xno" && \ 5262 test "x${withval}" != "xyes"; then 5263 piddir=$withval 5264 if test ! -d $piddir ; then 5265 AC_MSG_WARN([** no $piddir directory on this system **]) 5266 fi 5267 fi 5268 ] 5269) 5270 5271AC_DEFINE_UNQUOTED([_PATH_SSH_PIDDIR], ["$piddir"], 5272 [Specify location of ssh.pid]) 5273AC_SUBST([piddir]) 5274 5275dnl allow user to disable some login recording features 5276AC_ARG_ENABLE([lastlog], 5277 [ --disable-lastlog disable use of lastlog even if detected [no]], 5278 [ 5279 if test "x$enableval" = "xno" ; then 5280 AC_DEFINE([DISABLE_LASTLOG]) 5281 fi 5282 ] 5283) 5284AC_ARG_ENABLE([utmp], 5285 [ --disable-utmp disable use of utmp even if detected [no]], 5286 [ 5287 if test "x$enableval" = "xno" ; then 5288 AC_DEFINE([DISABLE_UTMP]) 5289 fi 5290 ] 5291) 5292AC_ARG_ENABLE([utmpx], 5293 [ --disable-utmpx disable use of utmpx even if detected [no]], 5294 [ 5295 if test "x$enableval" = "xno" ; then 5296 AC_DEFINE([DISABLE_UTMPX], [1], 5297 [Define if you don't want to use utmpx]) 5298 fi 5299 ] 5300) 5301AC_ARG_ENABLE([wtmp], 5302 [ --disable-wtmp disable use of wtmp even if detected [no]], 5303 [ 5304 if test "x$enableval" = "xno" ; then 5305 AC_DEFINE([DISABLE_WTMP]) 5306 fi 5307 ] 5308) 5309AC_ARG_ENABLE([wtmpx], 5310 [ --disable-wtmpx disable use of wtmpx even if detected [no]], 5311 [ 5312 if test "x$enableval" = "xno" ; then 5313 AC_DEFINE([DISABLE_WTMPX], [1], 5314 [Define if you don't want to use wtmpx]) 5315 fi 5316 ] 5317) 5318AC_ARG_ENABLE([libutil], 5319 [ --disable-libutil disable use of libutil (login() etc.) [no]], 5320 [ 5321 if test "x$enableval" = "xno" ; then 5322 AC_DEFINE([DISABLE_LOGIN]) 5323 fi 5324 ] 5325) 5326AC_ARG_ENABLE([pututline], 5327 [ --disable-pututline disable use of pututline() etc. ([uw]tmp) [no]], 5328 [ 5329 if test "x$enableval" = "xno" ; then 5330 AC_DEFINE([DISABLE_PUTUTLINE], [1], 5331 [Define if you don't want to use pututline() 5332 etc. to write [uw]tmp]) 5333 fi 5334 ] 5335) 5336AC_ARG_ENABLE([pututxline], 5337 [ --disable-pututxline disable use of pututxline() etc. ([uw]tmpx) [no]], 5338 [ 5339 if test "x$enableval" = "xno" ; then 5340 AC_DEFINE([DISABLE_PUTUTXLINE], [1], 5341 [Define if you don't want to use pututxline() 5342 etc. to write [uw]tmpx]) 5343 fi 5344 ] 5345) 5346AC_ARG_WITH([lastlog], 5347 [ --with-lastlog=FILE|DIR specify lastlog location [common locations]], 5348 [ 5349 if test "x$withval" = "xno" ; then 5350 AC_DEFINE([DISABLE_LASTLOG]) 5351 elif test -n "$withval" && test "x${withval}" != "xyes"; then 5352 conf_lastlog_location=$withval 5353 fi 5354 ] 5355) 5356 5357dnl lastlog, [uw]tmpx? detection 5358dnl NOTE: set the paths in the platform section to avoid the 5359dnl need for command-line parameters 5360dnl lastlog and [uw]tmp are subject to a file search if all else fails 5361 5362dnl lastlog detection 5363dnl NOTE: the code itself will detect if lastlog is a directory 5364AC_MSG_CHECKING([if your system defines LASTLOG_FILE]) 5365AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 5366#include <sys/types.h> 5367#include <utmp.h> 5368#ifdef HAVE_LASTLOG_H 5369# include <lastlog.h> 5370#endif 5371#ifdef HAVE_PATHS_H 5372# include <paths.h> 5373#endif 5374#ifdef HAVE_LOGIN_H 5375# include <login.h> 5376#endif 5377 ]], [[ char *lastlog = LASTLOG_FILE; ]])], 5378 [ AC_MSG_RESULT([yes]) ], 5379 [ 5380 AC_MSG_RESULT([no]) 5381 AC_MSG_CHECKING([if your system defines _PATH_LASTLOG]) 5382 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 5383#include <sys/types.h> 5384#include <utmp.h> 5385#ifdef HAVE_LASTLOG_H 5386# include <lastlog.h> 5387#endif 5388#ifdef HAVE_PATHS_H 5389# include <paths.h> 5390#endif 5391 ]], [[ char *lastlog = _PATH_LASTLOG; ]])], 5392 [ AC_MSG_RESULT([yes]) ], 5393 [ 5394 AC_MSG_RESULT([no]) 5395 system_lastlog_path=no 5396 ]) 5397]) 5398 5399if test -z "$conf_lastlog_location"; then 5400 if test x"$system_lastlog_path" = x"no" ; then 5401 for f in /var/log/lastlog /usr/adm/lastlog /var/adm/lastlog /etc/security/lastlog ; do 5402 if (test -d "$f" || test -f "$f") ; then 5403 conf_lastlog_location=$f 5404 fi 5405 done 5406 if test -z "$conf_lastlog_location"; then 5407 AC_MSG_WARN([** Cannot find lastlog **]) 5408 dnl Don't define DISABLE_LASTLOG - that means we don't try wtmp/wtmpx 5409 fi 5410 fi 5411fi 5412 5413if test -n "$conf_lastlog_location"; then 5414 AC_DEFINE_UNQUOTED([CONF_LASTLOG_FILE], ["$conf_lastlog_location"], 5415 [Define if you want to specify the path to your lastlog file]) 5416fi 5417 5418dnl utmp detection 5419AC_MSG_CHECKING([if your system defines UTMP_FILE]) 5420AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 5421#include <sys/types.h> 5422#include <utmp.h> 5423#ifdef HAVE_PATHS_H 5424# include <paths.h> 5425#endif 5426 ]], [[ char *utmp = UTMP_FILE; ]])], 5427 [ AC_MSG_RESULT([yes]) ], 5428 [ AC_MSG_RESULT([no]) 5429 system_utmp_path=no 5430]) 5431if test -z "$conf_utmp_location"; then 5432 if test x"$system_utmp_path" = x"no" ; then 5433 for f in /etc/utmp /usr/adm/utmp /var/run/utmp; do 5434 if test -f $f ; then 5435 conf_utmp_location=$f 5436 fi 5437 done 5438 if test -z "$conf_utmp_location"; then 5439 AC_DEFINE([DISABLE_UTMP]) 5440 fi 5441 fi 5442fi 5443if test -n "$conf_utmp_location"; then 5444 AC_DEFINE_UNQUOTED([CONF_UTMP_FILE], ["$conf_utmp_location"], 5445 [Define if you want to specify the path to your utmp file]) 5446fi 5447 5448dnl wtmp detection 5449AC_MSG_CHECKING([if your system defines WTMP_FILE]) 5450AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 5451#include <sys/types.h> 5452#include <utmp.h> 5453#ifdef HAVE_PATHS_H 5454# include <paths.h> 5455#endif 5456 ]], [[ char *wtmp = WTMP_FILE; ]])], 5457 [ AC_MSG_RESULT([yes]) ], 5458 [ AC_MSG_RESULT([no]) 5459 system_wtmp_path=no 5460]) 5461if test -z "$conf_wtmp_location"; then 5462 if test x"$system_wtmp_path" = x"no" ; then 5463 for f in /usr/adm/wtmp /var/log/wtmp; do 5464 if test -f $f ; then 5465 conf_wtmp_location=$f 5466 fi 5467 done 5468 if test -z "$conf_wtmp_location"; then 5469 AC_DEFINE([DISABLE_WTMP]) 5470 fi 5471 fi 5472fi 5473if test -n "$conf_wtmp_location"; then 5474 AC_DEFINE_UNQUOTED([CONF_WTMP_FILE], ["$conf_wtmp_location"], 5475 [Define if you want to specify the path to your wtmp file]) 5476fi 5477 5478dnl wtmpx detection 5479AC_MSG_CHECKING([if your system defines WTMPX_FILE]) 5480AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 5481#include <sys/types.h> 5482#include <utmp.h> 5483#ifdef HAVE_UTMPX_H 5484#include <utmpx.h> 5485#endif 5486#ifdef HAVE_PATHS_H 5487# include <paths.h> 5488#endif 5489 ]], [[ char *wtmpx = WTMPX_FILE; ]])], 5490 [ AC_MSG_RESULT([yes]) ], 5491 [ AC_MSG_RESULT([no]) 5492 system_wtmpx_path=no 5493]) 5494if test -z "$conf_wtmpx_location"; then 5495 if test x"$system_wtmpx_path" = x"no" ; then 5496 AC_DEFINE([DISABLE_WTMPX]) 5497 fi 5498else 5499 AC_DEFINE_UNQUOTED([CONF_WTMPX_FILE], ["$conf_wtmpx_location"], 5500 [Define if you want to specify the path to your wtmpx file]) 5501fi 5502 5503 5504if test ! -z "$blibpath" ; then 5505 LDFLAGS="$LDFLAGS $blibflags$blibpath" 5506 AC_MSG_WARN([Please check and edit blibpath in LDFLAGS in Makefile]) 5507fi 5508 5509AC_CHECK_MEMBER([struct lastlog.ll_line], [], [ 5510 if test x$SKIP_DISABLE_LASTLOG_DEFINE != "xyes" ; then 5511 AC_DEFINE([DISABLE_LASTLOG]) 5512 fi 5513 ], [ 5514#ifdef HAVE_SYS_TYPES_H 5515#include <sys/types.h> 5516#endif 5517#ifdef HAVE_UTMP_H 5518#include <utmp.h> 5519#endif 5520#ifdef HAVE_UTMPX_H 5521#include <utmpx.h> 5522#endif 5523#ifdef HAVE_LASTLOG_H 5524#include <lastlog.h> 5525#endif 5526 ]) 5527 5528AC_CHECK_MEMBER([struct utmp.ut_line], [], [ 5529 AC_DEFINE([DISABLE_UTMP]) 5530 AC_DEFINE([DISABLE_WTMP]) 5531 ], [ 5532#ifdef HAVE_SYS_TYPES_H 5533#include <sys/types.h> 5534#endif 5535#ifdef HAVE_UTMP_H 5536#include <utmp.h> 5537#endif 5538#ifdef HAVE_UTMPX_H 5539#include <utmpx.h> 5540#endif 5541#ifdef HAVE_LASTLOG_H 5542#include <lastlog.h> 5543#endif 5544 ]) 5545 5546dnl Adding -Werror to CFLAGS early prevents configure tests from running. 5547dnl Add now. 5548CFLAGS="$CFLAGS $werror_flags" 5549 5550if test "x$ac_cv_func_getaddrinfo" != "xyes" ; then 5551 TEST_SSH_IPV6=no 5552else 5553 TEST_SSH_IPV6=yes 5554fi 5555AC_CHECK_DECL([BROKEN_GETADDRINFO], [TEST_SSH_IPV6=no]) 5556AC_SUBST([TEST_SSH_IPV6], [$TEST_SSH_IPV6]) 5557AC_SUBST([TEST_SSH_UTF8], [$TEST_SSH_UTF8]) 5558AC_SUBST([TEST_MALLOC_OPTIONS], [$TEST_MALLOC_OPTIONS]) 5559AC_SUBST([UNSUPPORTED_ALGORITHMS], [$unsupported_algorithms]) 5560AC_SUBST([DEPEND], [$(cat $srcdir/.depend)]) 5561 5562CFLAGS="${CFLAGS} ${CFLAGS_AFTER}" 5563LDFLAGS="${LDFLAGS} ${LDFLAGS_AFTER}" 5564 5565# Make a copy of CFLAGS/LDFLAGS without PIE options. 5566LDFLAGS_NOPIE=`echo "$LDFLAGS" | sed 's/ -pie//'` 5567CFLAGS_NOPIE=`echo "$CFLAGS" | sed 's/ -fPIE//'` 5568AC_SUBST([LDFLAGS_NOPIE]) 5569AC_SUBST([CFLAGS_NOPIE]) 5570 5571AC_EXEEXT 5572AC_CONFIG_FILES([Makefile buildpkg.sh opensshd.init openssh.xml \ 5573 openbsd-compat/Makefile openbsd-compat/regress/Makefile \ 5574 survey.sh]) 5575AC_OUTPUT 5576 5577# Print summary of options 5578 5579# Someone please show me a better way :) 5580A=`eval echo ${prefix}` ; A=`eval echo ${A}` 5581B=`eval echo ${bindir}` ; B=`eval echo ${B}` 5582C=`eval echo ${sbindir}` ; C=`eval echo ${C}` 5583D=`eval echo ${sysconfdir}` ; D=`eval echo ${D}` 5584E=`eval echo ${libexecdir}/ssh-askpass` ; E=`eval echo ${E}` 5585F=`eval echo ${mandir}/${mansubdir}X` ; F=`eval echo ${F}` 5586G=`eval echo ${piddir}` ; G=`eval echo ${G}` 5587H=`eval echo ${PRIVSEP_PATH}` ; H=`eval echo ${H}` 5588I=`eval echo ${user_path}` ; I=`eval echo ${I}` 5589J=`eval echo ${superuser_path}` ; J=`eval echo ${J}` 5590 5591echo "" 5592echo "OpenSSH has been configured with the following options:" 5593echo " User binaries: $B" 5594echo " System binaries: $C" 5595echo " Configuration files: $D" 5596echo " Askpass program: $E" 5597echo " Manual pages: $F" 5598echo " PID file: $G" 5599echo " Privilege separation chroot path: $H" 5600if test "x$external_path_file" = "x/etc/login.conf" ; then 5601echo " At runtime, sshd will use the path defined in $external_path_file" 5602echo " Make sure the path to scp is present, otherwise scp will not work" 5603else 5604echo " sshd default user PATH: $I" 5605 if test ! -z "$external_path_file"; then 5606echo " (If PATH is set in $external_path_file it will be used instead. If" 5607echo " used, ensure the path to scp is present, otherwise scp will not work.)" 5608 fi 5609fi 5610if test ! -z "$superuser_path" ; then 5611echo " sshd superuser user PATH: $J" 5612fi 5613echo " Manpage format: $MANTYPE" 5614echo " PAM support: $PAM_MSG" 5615echo " OSF SIA support: $SIA_MSG" 5616echo " KerberosV support: $KRB5_MSG" 5617echo " SELinux support: $SELINUX_MSG" 5618echo " TCP Wrappers support: $TCPW_MSG" 5619echo " MD5 password support: $MD5_MSG" 5620echo " libedit support: $LIBEDIT_MSG" 5621echo " libldns support: $LDNS_MSG" 5622echo " Solaris process contract support: $SPC_MSG" 5623echo " Solaris project support: $SP_MSG" 5624echo " Solaris privilege support: $SPP_MSG" 5625echo " IP address in \$DISPLAY hack: $DISPLAY_HACK_MSG" 5626echo " Translate v4 in v6 hack: $IPV4_IN6_HACK_MSG" 5627echo " BSD Auth support: $BSD_AUTH_MSG" 5628echo " Random number source: $RAND_MSG" 5629echo " Privsep sandbox style: $SANDBOX_STYLE" 5630echo " PKCS#11 support: $enable_pkcs11" 5631echo " U2F/FIDO support: $enable_sk" 5632 5633echo "" 5634 5635echo " Host: ${host}" 5636echo " Compiler: ${CC}" 5637echo " Compiler flags: ${CFLAGS}" 5638echo "Preprocessor flags: ${CPPFLAGS}" 5639echo " Linker flags: ${LDFLAGS}" 5640echo " Libraries: ${LIBS}" 5641if test ! -z "${SSHDLIBS}"; then 5642echo " +for sshd: ${SSHDLIBS}" 5643fi 5644 5645echo "" 5646 5647if test "x$MAKE_PACKAGE_SUPPORTED" = "xyes" ; then 5648 echo "SVR4 style packages are supported with \"make package\"" 5649 echo "" 5650fi 5651 5652if test "x$PAM_MSG" = "xyes" ; then 5653 echo "PAM is enabled. You may need to install a PAM control file " 5654 echo "for sshd, otherwise password authentication may fail. " 5655 echo "Example PAM control files can be found in the contrib/ " 5656 echo "subdirectory" 5657 echo "" 5658fi 5659 5660if test ! -z "$NO_PEERCHECK" ; then 5661 echo "WARNING: the operating system that you are using does not" 5662 echo "appear to support getpeereid(), getpeerucred() or the" 5663 echo "SO_PEERCRED getsockopt() option. These facilities are used to" 5664 echo "enforce security checks to prevent unauthorised connections to" 5665 echo "ssh-agent. Their absence increases the risk that a malicious" 5666 echo "user can connect to your agent." 5667 echo "" 5668fi 5669 5670if test "$AUDIT_MODULE" = "bsm" ; then 5671 echo "WARNING: BSM audit support is currently considered EXPERIMENTAL." 5672 echo "See the Solaris section in README.platform for details." 5673fi 5674