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