1# $FreeBSD$ 2# $Id: configure.ac,v 1.202 2004/02/24 05:47:04 tim Exp $ 3# 4# Copyright (c) 1999-2004 Damien Miller 5# 6# Permission to use, copy, modify, and distribute this software for any 7# purpose with or without fee is hereby granted, provided that the above 8# copyright notice and this permission notice appear in all copies. 9# 10# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17 18AC_INIT 19AC_CONFIG_SRCDIR([ssh.c]) 20 21AC_CONFIG_HEADER(config.h) 22AC_PROG_CC 23AC_CANONICAL_HOST 24AC_C_BIGENDIAN 25 26# Checks for programs. 27AC_PROG_AWK 28AC_PROG_CPP 29AC_PROG_RANLIB 30AC_PROG_INSTALL 31AC_PATH_PROG(AR, ar) 32AC_PATH_PROGS(PERL, perl5 perl) 33AC_PATH_PROG(SED, sed) 34AC_SUBST(PERL) 35AC_PATH_PROG(ENT, ent) 36AC_SUBST(ENT) 37AC_PATH_PROG(TEST_MINUS_S_SH, bash) 38AC_PATH_PROG(TEST_MINUS_S_SH, ksh) 39AC_PATH_PROG(TEST_MINUS_S_SH, sh) 40AC_PATH_PROG(SH, sh) 41 42# System features 43AC_SYS_LARGEFILE 44 45if test -z "$AR" ; then 46 AC_MSG_ERROR([*** 'ar' missing, please install or fix your \$PATH ***]) 47fi 48 49# Use LOGIN_PROGRAM from environment if possible 50if test ! -z "$LOGIN_PROGRAM" ; then 51 AC_DEFINE_UNQUOTED(LOGIN_PROGRAM_FALLBACK, "$LOGIN_PROGRAM") 52else 53 # Search for login 54 AC_PATH_PROG(LOGIN_PROGRAM_FALLBACK, login) 55 if test ! -z "$LOGIN_PROGRAM_FALLBACK" ; then 56 AC_DEFINE_UNQUOTED(LOGIN_PROGRAM_FALLBACK, "$LOGIN_PROGRAM_FALLBACK") 57 fi 58fi 59 60AC_PATH_PROG(PATH_PASSWD_PROG, passwd) 61if test ! -z "$PATH_PASSWD_PROG" ; then 62 AC_DEFINE_UNQUOTED(_PATH_PASSWD_PROG, "$PATH_PASSWD_PROG") 63fi 64 65if test -z "$LD" ; then 66 LD=$CC 67fi 68AC_SUBST(LD) 69 70AC_C_INLINE 71if test "$GCC" = "yes" || test "$GCC" = "egcs"; then 72 CFLAGS="$CFLAGS -Wall -Wpointer-arith -Wno-uninitialized" 73fi 74 75AC_ARG_WITH(rpath, 76 [ --without-rpath Disable auto-added -R linker paths], 77 [ 78 if test "x$withval" = "xno" ; then 79 need_dash_r="" 80 fi 81 if test "x$withval" = "xyes" ; then 82 need_dash_r=1 83 fi 84 ] 85) 86 87# Check for some target-specific stuff 88case "$host" in 89*-*-aix*) 90 AC_MSG_CHECKING([how to specify blibpath for linker ($LD)]) 91 if (test -z "$blibpath"); then 92 blibpath="/usr/lib:/lib" 93 fi 94 saved_LDFLAGS="$LDFLAGS" 95 for tryflags in -blibpath: -Wl,-blibpath: -Wl,-rpath, ;do 96 if (test -z "$blibflags"); then 97 LDFLAGS="$saved_LDFLAGS $tryflags$blibpath" 98 AC_TRY_LINK([], [], [blibflags=$tryflags]) 99 fi 100 done 101 if (test -z "$blibflags"); then 102 AC_MSG_RESULT(not found) 103 AC_MSG_ERROR([*** must be able to specify blibpath on AIX - check config.log]) 104 else 105 AC_MSG_RESULT($blibflags) 106 fi 107 LDFLAGS="$saved_LDFLAGS" 108 dnl Check for authenticate. Might be in libs.a on older AIXes 109 AC_CHECK_FUNC(authenticate, [AC_DEFINE(WITH_AIXAUTHENTICATE)], 110 [AC_CHECK_LIB(s,authenticate, 111 [ AC_DEFINE(WITH_AIXAUTHENTICATE) 112 LIBS="$LIBS -ls" 113 ]) 114 ]) 115 dnl Check if loginfailed is declared and takes 4 arguments (AIX >= 5.2) 116 AC_CHECK_DECL(loginfailed, 117 [AC_MSG_CHECKING(if loginfailed takes 4 arguments) 118 AC_TRY_COMPILE( 119 [#include <usersec.h>], 120 [(void)loginfailed("user","host","tty",0);], 121 [AC_MSG_RESULT(yes) 122 AC_DEFINE(AIX_LOGINFAILED_4ARG)], 123 [AC_MSG_RESULT(no)] 124 )], 125 [], 126 [#include <usersec.h>] 127 ) 128 AC_CHECK_FUNCS(setauthdb) 129 AC_DEFINE(BROKEN_GETADDRINFO) 130 AC_DEFINE(BROKEN_REALPATH) 131 AC_DEFINE(SETEUID_BREAKS_SETUID) 132 AC_DEFINE(BROKEN_SETREUID) 133 AC_DEFINE(BROKEN_SETREGID) 134 dnl AIX handles lastlog as part of its login message 135 AC_DEFINE(DISABLE_LASTLOG) 136 AC_DEFINE(LOGIN_NEEDS_UTMPX) 137 AC_DEFINE(SPT_TYPE,SPT_REUSEARGV) 138 ;; 139*-*-cygwin*) 140 check_for_libcrypt_later=1 141 LIBS="$LIBS /usr/lib/textmode.o" 142 AC_DEFINE(HAVE_CYGWIN) 143 AC_DEFINE(USE_PIPES) 144 AC_DEFINE(DISABLE_SHADOW) 145 AC_DEFINE(IP_TOS_IS_BROKEN) 146 AC_DEFINE(NO_X11_UNIX_SOCKETS) 147 AC_DEFINE(NO_IPPORT_RESERVED_CONCEPT) 148 AC_DEFINE(DISABLE_FD_PASSING) 149 AC_DEFINE(SETGROUPS_NOOP) 150 ;; 151*-*-dgux*) 152 AC_DEFINE(IP_TOS_IS_BROKEN) 153 AC_DEFINE(SETEUID_BREAKS_SETUID) 154 AC_DEFINE(BROKEN_SETREUID) 155 AC_DEFINE(BROKEN_SETREGID) 156 ;; 157*-*-darwin*) 158 AC_MSG_CHECKING(if we have working getaddrinfo) 159 AC_TRY_RUN([#include <mach-o/dyld.h> 160main() { if (NSVersionOfRunTimeLibrary("System") >= (60 << 16)) 161 exit(0); 162 else 163 exit(1); 164}], [AC_MSG_RESULT(working)], 165 [AC_MSG_RESULT(buggy) 166 AC_DEFINE(BROKEN_GETADDRINFO)], 167 [AC_MSG_RESULT(assume it is working)]) 168 AC_DEFINE(SETEUID_BREAKS_SETUID) 169 AC_DEFINE(BROKEN_SETREUID) 170 AC_DEFINE(BROKEN_SETREGID) 171 AC_DEFINE_UNQUOTED(BIND_8_COMPAT, 1) 172 ;; 173*-*-hpux10.26) 174 if test -z "$GCC"; then 175 CFLAGS="$CFLAGS -Ae" 176 fi 177 CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1" 178 IPADDR_IN_DISPLAY=yes 179 AC_DEFINE(HAVE_SECUREWARE) 180 AC_DEFINE(USE_PIPES) 181 AC_DEFINE(LOGIN_NO_ENDOPT) 182 AC_DEFINE(LOGIN_NEEDS_UTMPX) 183 AC_DEFINE(LOCKED_PASSWD_STRING, "*") 184 AC_DEFINE(SPT_TYPE,SPT_PSTAT) 185 LIBS="$LIBS -lsec -lsecpw" 186 AC_CHECK_LIB(xnet, t_error, ,AC_MSG_ERROR([*** -lxnet needed on HP-UX - check config.log ***])) 187 disable_ptmx_check=yes 188 ;; 189*-*-hpux10*) 190 if test -z "$GCC"; then 191 CFLAGS="$CFLAGS -Ae" 192 fi 193 CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1" 194 IPADDR_IN_DISPLAY=yes 195 AC_DEFINE(USE_PIPES) 196 AC_DEFINE(LOGIN_NO_ENDOPT) 197 AC_DEFINE(LOGIN_NEEDS_UTMPX) 198 AC_DEFINE(LOCKED_PASSWD_STRING, "*") 199 AC_DEFINE(SPT_TYPE,SPT_PSTAT) 200 LIBS="$LIBS -lsec" 201 AC_CHECK_LIB(xnet, t_error, ,AC_MSG_ERROR([*** -lxnet needed on HP-UX - check config.log ***])) 202 ;; 203*-*-hpux11*) 204 CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1" 205 IPADDR_IN_DISPLAY=yes 206 AC_DEFINE(PAM_SUN_CODEBASE) 207 AC_DEFINE(USE_PIPES) 208 AC_DEFINE(LOGIN_NO_ENDOPT) 209 AC_DEFINE(LOGIN_NEEDS_UTMPX) 210 AC_DEFINE(DISABLE_UTMP) 211 AC_DEFINE(LOCKED_PASSWD_STRING, "*") 212 AC_DEFINE(SPT_TYPE,SPT_PSTAT) 213 check_for_hpux_broken_getaddrinfo=1 214 LIBS="$LIBS -lsec" 215 AC_CHECK_LIB(xnet, t_error, ,AC_MSG_ERROR([*** -lxnet needed on HP-UX - check config.log ***])) 216 ;; 217*-*-irix5*) 218 PATH="$PATH:/usr/etc" 219 AC_DEFINE(BROKEN_INET_NTOA) 220 AC_DEFINE(SETEUID_BREAKS_SETUID) 221 AC_DEFINE(BROKEN_SETREUID) 222 AC_DEFINE(BROKEN_SETREGID) 223 AC_DEFINE(WITH_ABBREV_NO_TTY) 224 AC_DEFINE(LOCKED_PASSWD_STRING, "*LK*") 225 ;; 226*-*-irix6*) 227 PATH="$PATH:/usr/etc" 228 AC_DEFINE(WITH_IRIX_ARRAY) 229 AC_DEFINE(WITH_IRIX_PROJECT) 230 AC_DEFINE(WITH_IRIX_AUDIT) 231 AC_CHECK_FUNC(jlimit_startjob, [AC_DEFINE(WITH_IRIX_JOBS)]) 232 AC_DEFINE(BROKEN_INET_NTOA) 233 AC_DEFINE(SETEUID_BREAKS_SETUID) 234 AC_DEFINE(BROKEN_SETREUID) 235 AC_DEFINE(BROKEN_SETREGID) 236 AC_DEFINE(BROKEN_UPDWTMPX) 237 AC_DEFINE(WITH_ABBREV_NO_TTY) 238 AC_DEFINE(LOCKED_PASSWD_STRING, "*LK*") 239 ;; 240*-*-linux*) 241 no_dev_ptmx=1 242 check_for_libcrypt_later=1 243 check_for_openpty_ctty_bug=1 244 AC_DEFINE(DONT_TRY_OTHER_AF) 245 AC_DEFINE(PAM_TTY_KLUDGE) 246 AC_DEFINE(LOCKED_PASSWD_PREFIX, "!") 247 AC_DEFINE(SPT_TYPE,SPT_REUSEARGV) 248 inet6_default_4in6=yes 249 case `uname -r` in 250 1.*|2.0.*) 251 AC_DEFINE(BROKEN_CMSG_TYPE) 252 ;; 253 esac 254 ;; 255mips-sony-bsd|mips-sony-newsos4) 256 AC_DEFINE(HAVE_NEWS4) 257 SONY=1 258 ;; 259*-*-netbsd*) 260 check_for_libcrypt_before=1 261 if test "x$withval" != "xno" ; then 262 need_dash_r=1 263 fi 264 ;; 265*-*-freebsd*) 266 check_for_libcrypt_later=1 267 ;; 268*-*-bsdi*) 269 AC_DEFINE(SETEUID_BREAKS_SETUID) 270 AC_DEFINE(BROKEN_SETREUID) 271 AC_DEFINE(BROKEN_SETREGID) 272 ;; 273*-next-*) 274 conf_lastlog_location="/usr/adm/lastlog" 275 conf_utmp_location=/etc/utmp 276 conf_wtmp_location=/usr/adm/wtmp 277 MAIL=/usr/spool/mail 278 AC_DEFINE(HAVE_NEXT) 279 AC_DEFINE(BROKEN_REALPATH) 280 AC_DEFINE(USE_PIPES) 281 AC_DEFINE(BROKEN_SAVED_UIDS) 282 ;; 283*-*-solaris*) 284 if test "x$withval" != "xno" ; then 285 need_dash_r=1 286 fi 287 AC_DEFINE(PAM_SUN_CODEBASE) 288 AC_DEFINE(LOGIN_NEEDS_UTMPX) 289 AC_DEFINE(LOGIN_NEEDS_TERM) 290 AC_DEFINE(PAM_TTY_KLUDGE) 291 AC_DEFINE(LOCKED_PASSWD_STRING, "*LK*") 292 # Pushing STREAMS modules will cause sshd to acquire a controlling tty. 293 AC_DEFINE(SSHD_ACQUIRES_CTTY) 294 external_path_file=/etc/default/login 295 # hardwire lastlog location (can't detect it on some versions) 296 conf_lastlog_location="/var/adm/lastlog" 297 AC_MSG_CHECKING(for obsolete utmp and wtmp in solaris2.x) 298 sol2ver=`echo "$host"| sed -e 's/.*[[0-9]]\.//'` 299 if test "$sol2ver" -ge 8; then 300 AC_MSG_RESULT(yes) 301 AC_DEFINE(DISABLE_UTMP) 302 AC_DEFINE(DISABLE_WTMP) 303 else 304 AC_MSG_RESULT(no) 305 fi 306 ;; 307*-*-sunos4*) 308 CPPFLAGS="$CPPFLAGS -DSUNOS4" 309 AC_CHECK_FUNCS(getpwanam) 310 AC_DEFINE(PAM_SUN_CODEBASE) 311 conf_utmp_location=/etc/utmp 312 conf_wtmp_location=/var/adm/wtmp 313 conf_lastlog_location=/var/adm/lastlog 314 AC_DEFINE(USE_PIPES) 315 ;; 316*-ncr-sysv*) 317 LIBS="$LIBS -lc89" 318 AC_DEFINE(USE_PIPES) 319 AC_DEFINE(SSHD_ACQUIRES_CTTY) 320 AC_DEFINE(SETEUID_BREAKS_SETUID) 321 AC_DEFINE(BROKEN_SETREUID) 322 AC_DEFINE(BROKEN_SETREGID) 323 ;; 324*-sni-sysv*) 325 # /usr/ucblib MUST NOT be searched on ReliantUNIX 326 AC_CHECK_LIB(dl, dlsym, ,) 327 IPADDR_IN_DISPLAY=yes 328 AC_DEFINE(USE_PIPES) 329 AC_DEFINE(IP_TOS_IS_BROKEN) 330 AC_DEFINE(SETEUID_BREAKS_SETUID) 331 AC_DEFINE(BROKEN_SETREUID) 332 AC_DEFINE(BROKEN_SETREGID) 333 AC_DEFINE(SSHD_ACQUIRES_CTTY) 334 external_path_file=/etc/default/login 335 # /usr/ucblib/libucb.a no longer needed on ReliantUNIX 336 # Attention: always take care to bind libsocket and libnsl before libc, 337 # otherwise you will find lots of "SIOCGPGRP errno 22" on syslog 338 ;; 339*-*-sysv4.2*) 340 AC_DEFINE(USE_PIPES) 341 AC_DEFINE(SETEUID_BREAKS_SETUID) 342 AC_DEFINE(BROKEN_SETREUID) 343 AC_DEFINE(BROKEN_SETREGID) 344 ;; 345*-*-sysv5*) 346 AC_DEFINE(USE_PIPES) 347 AC_DEFINE(SETEUID_BREAKS_SETUID) 348 AC_DEFINE(BROKEN_SETREUID) 349 AC_DEFINE(BROKEN_SETREGID) 350 ;; 351*-*-sysv*) 352 ;; 353*-*-sco3.2v4*) 354 CPPFLAGS="$CPPFLAGS -Dftruncate=chsize" 355 LIBS="$LIBS -los -lprot -lcrypt_i -lx -ltinfo -lm" 356 RANLIB=true 357 no_dev_ptmx=1 358 AC_DEFINE(BROKEN_SYS_TERMIO_H) 359 AC_DEFINE(USE_PIPES) 360 AC_DEFINE(HAVE_SECUREWARE) 361 AC_DEFINE(DISABLE_SHADOW) 362 AC_DEFINE(BROKEN_SAVED_UIDS) 363 AC_DEFINE(SETEUID_BREAKS_SETUID) 364 AC_DEFINE(BROKEN_SETREUID) 365 AC_DEFINE(BROKEN_SETREGID) 366 AC_DEFINE(WITH_ABBREV_NO_TTY) 367 AC_CHECK_FUNCS(getluid setluid) 368 MANTYPE=man 369 do_sco3_extra_lib_check=yes 370 ;; 371*-*-sco3.2v5*) 372 if test -z "$GCC"; then 373 CFLAGS="$CFLAGS -belf" 374 fi 375 LIBS="$LIBS -lprot -lx -ltinfo -lm" 376 no_dev_ptmx=1 377 AC_DEFINE(USE_PIPES) 378 AC_DEFINE(HAVE_SECUREWARE) 379 AC_DEFINE(DISABLE_SHADOW) 380 AC_DEFINE(DISABLE_FD_PASSING) 381 AC_DEFINE(SETEUID_BREAKS_SETUID) 382 AC_DEFINE(BROKEN_SETREUID) 383 AC_DEFINE(BROKEN_SETREGID) 384 AC_DEFINE(WITH_ABBREV_NO_TTY) 385 AC_CHECK_FUNCS(getluid setluid) 386 MANTYPE=man 387 ;; 388*-*-unicosmk*) 389 AC_DEFINE(NO_SSH_LASTLOG) 390 AC_DEFINE(SETEUID_BREAKS_SETUID) 391 AC_DEFINE(BROKEN_SETREUID) 392 AC_DEFINE(BROKEN_SETREGID) 393 AC_DEFINE(USE_PIPES) 394 AC_DEFINE(DISABLE_FD_PASSING) 395 LDFLAGS="$LDFLAGS" 396 LIBS="$LIBS -lgen -lrsc -lshare -luex -lacm" 397 MANTYPE=cat 398 ;; 399*-*-unicosmp*) 400 AC_DEFINE(SETEUID_BREAKS_SETUID) 401 AC_DEFINE(BROKEN_SETREUID) 402 AC_DEFINE(BROKEN_SETREGID) 403 AC_DEFINE(WITH_ABBREV_NO_TTY) 404 AC_DEFINE(USE_PIPES) 405 AC_DEFINE(DISABLE_FD_PASSING) 406 LDFLAGS="$LDFLAGS" 407 LIBS="$LIBS -lgen -lacid -ldb" 408 MANTYPE=cat 409 ;; 410*-*-unicos*) 411 AC_DEFINE(SETEUID_BREAKS_SETUID) 412 AC_DEFINE(BROKEN_SETREUID) 413 AC_DEFINE(BROKEN_SETREGID) 414 AC_DEFINE(USE_PIPES) 415 AC_DEFINE(DISABLE_FD_PASSING) 416 AC_DEFINE(NO_SSH_LASTLOG) 417 LDFLAGS="$LDFLAGS -Wl,-Dmsglevel=334:fatal" 418 LIBS="$LIBS -lgen -lrsc -lshare -luex -lacm" 419 MANTYPE=cat 420 ;; 421*-dec-osf*) 422 AC_MSG_CHECKING(for Digital Unix SIA) 423 no_osfsia="" 424 AC_ARG_WITH(osfsia, 425 [ --with-osfsia Enable Digital Unix SIA], 426 [ 427 if test "x$withval" = "xno" ; then 428 AC_MSG_RESULT(disabled) 429 no_osfsia=1 430 fi 431 ], 432 ) 433 if test -z "$no_osfsia" ; then 434 if test -f /etc/sia/matrix.conf; then 435 AC_MSG_RESULT(yes) 436 AC_DEFINE(HAVE_OSF_SIA) 437 AC_DEFINE(DISABLE_LOGIN) 438 AC_DEFINE(DISABLE_FD_PASSING) 439 LIBS="$LIBS -lsecurity -ldb -lm -laud" 440 else 441 AC_MSG_RESULT(no) 442 AC_DEFINE(LOCKED_PASSWD_SUBSTR, "Nologin") 443 fi 444 fi 445 AC_DEFINE(BROKEN_GETADDRINFO) 446 AC_DEFINE(SETEUID_BREAKS_SETUID) 447 AC_DEFINE(BROKEN_SETREUID) 448 AC_DEFINE(BROKEN_SETREGID) 449 ;; 450 451*-*-nto-qnx) 452 AC_DEFINE(USE_PIPES) 453 AC_DEFINE(NO_X11_UNIX_SOCKETS) 454 AC_DEFINE(MISSING_NFDBITS) 455 AC_DEFINE(MISSING_HOWMANY) 456 AC_DEFINE(MISSING_FD_MASK) 457 ;; 458esac 459 460# Allow user to specify flags 461AC_ARG_WITH(cflags, 462 [ --with-cflags Specify additional flags to pass to compiler], 463 [ 464 if test "x$withval" != "xno" ; then 465 CFLAGS="$CFLAGS $withval" 466 fi 467 ] 468) 469AC_ARG_WITH(cppflags, 470 [ --with-cppflags Specify additional flags to pass to preprocessor] , 471 [ 472 if test "x$withval" != "xno"; then 473 CPPFLAGS="$CPPFLAGS $withval" 474 fi 475 ] 476) 477AC_ARG_WITH(ldflags, 478 [ --with-ldflags Specify additional flags to pass to linker], 479 [ 480 if test "x$withval" != "xno" ; then 481 LDFLAGS="$LDFLAGS $withval" 482 fi 483 ] 484) 485AC_ARG_WITH(libs, 486 [ --with-libs Specify additional libraries to link with], 487 [ 488 if test "x$withval" != "xno" ; then 489 LIBS="$LIBS $withval" 490 fi 491 ] 492) 493 494AC_MSG_CHECKING(compiler and flags for sanity) 495AC_TRY_RUN([ 496#include <stdio.h> 497int main(){exit(0);} 498 ], 499 [ AC_MSG_RESULT(yes) ], 500 [ 501 AC_MSG_RESULT(no) 502 AC_MSG_ERROR([*** compiler cannot create working executables, check config.log ***]) 503 ] 504) 505 506# Checks for header files. 507AC_CHECK_HEADERS(bstring.h crypt.h endian.h features.h floatingpoint.h \ 508 getopt.h glob.h ia.h lastlog.h limits.h login.h \ 509 login_cap.h maillock.h netdb.h netgroup.h \ 510 netinet/in_systm.h pam/pam_appl.h paths.h pty.h readpassphrase.h \ 511 rpc/types.h security/pam_appl.h shadow.h stddef.h stdint.h \ 512 strings.h sys/strtio.h sys/audit.h sys/bitypes.h sys/bsdtty.h \ 513 sys/cdefs.h sys/mman.h sys/prctl.h sys/pstat.h sys/ptms.h \ 514 sys/select.h sys/stat.h sys/stream.h sys/stropts.h \ 515 sys/sysmacros.h sys/time.h sys/timers.h sys/un.h time.h tmpdir.h \ 516 ttyent.h usersec.h util.h utime.h utmp.h utmpx.h vis.h) 517 518# Checks for libraries. 519AC_CHECK_FUNC(yp_match, , AC_CHECK_LIB(nsl, yp_match)) 520AC_CHECK_FUNC(setsockopt, , AC_CHECK_LIB(socket, setsockopt)) 521 522dnl SCO OS3 needs this for libwrap 523if test "x$with_tcp_wrappers" != "xno" ; then 524 if test "x$do_sco3_extra_lib_check" = "xyes" ; then 525 AC_CHECK_LIB(rpc, innetgr, LIBS="-lrpc -lyp -lrpc $LIBS" , , -lyp -lrpc) 526 fi 527fi 528 529dnl IRIX and Solaris 2.5.1 have dirname() in libgen 530AC_CHECK_FUNCS(dirname, [AC_CHECK_HEADERS(libgen.h)] ,[ 531 AC_CHECK_LIB(gen, dirname,[ 532 AC_CACHE_CHECK([for broken dirname], 533 ac_cv_have_broken_dirname, [ 534 save_LIBS="$LIBS" 535 LIBS="$LIBS -lgen" 536 AC_TRY_RUN( 537 [ 538#include <libgen.h> 539#include <string.h> 540 541int main(int argc, char **argv) { 542 char *s, buf[32]; 543 544 strncpy(buf,"/etc", 32); 545 s = dirname(buf); 546 if (!s || strncmp(s, "/", 32) != 0) { 547 exit(1); 548 } else { 549 exit(0); 550 } 551} 552 ], 553 [ ac_cv_have_broken_dirname="no" ], 554 [ ac_cv_have_broken_dirname="yes" ] 555 ) 556 LIBS="$save_LIBS" 557 ]) 558 if test "x$ac_cv_have_broken_dirname" = "xno" ; then 559 LIBS="$LIBS -lgen" 560 AC_DEFINE(HAVE_DIRNAME) 561 AC_CHECK_HEADERS(libgen.h) 562 fi 563 ]) 564]) 565 566AC_CHECK_FUNC(getspnam, , 567 AC_CHECK_LIB(gen, getspnam, LIBS="$LIBS -lgen")) 568AC_SEARCH_LIBS(basename, gen, AC_DEFINE(HAVE_BASENAME)) 569 570dnl zlib is required 571AC_ARG_WITH(zlib, 572 [ --with-zlib=PATH Use zlib in PATH], 573 [ 574 if test "x$withval" = "xno" ; then 575 AC_MSG_ERROR([*** zlib is required ***]) 576 fi 577 if test -d "$withval/lib"; then 578 if test -n "${need_dash_r}"; then 579 LDFLAGS="-L${withval}/lib -R${withval}/lib ${LDFLAGS}" 580 else 581 LDFLAGS="-L${withval}/lib ${LDFLAGS}" 582 fi 583 else 584 if test -n "${need_dash_r}"; then 585 LDFLAGS="-L${withval} -R${withval} ${LDFLAGS}" 586 else 587 LDFLAGS="-L${withval} ${LDFLAGS}" 588 fi 589 fi 590 if test -d "$withval/include"; then 591 CPPFLAGS="-I${withval}/include ${CPPFLAGS}" 592 else 593 CPPFLAGS="-I${withval} ${CPPFLAGS}" 594 fi 595 ] 596) 597 598AC_CHECK_LIB(z, deflate, , 599 [ 600 saved_CPPFLAGS="$CPPFLAGS" 601 saved_LDFLAGS="$LDFLAGS" 602 save_LIBS="$LIBS" 603 dnl Check default zlib install dir 604 if test -n "${need_dash_r}"; then 605 LDFLAGS="-L/usr/local/lib -R/usr/local/lib ${saved_LDFLAGS}" 606 else 607 LDFLAGS="-L/usr/local/lib ${saved_LDFLAGS}" 608 fi 609 CPPFLAGS="-I/usr/local/include ${saved_CPPFLAGS}" 610 LIBS="$LIBS -lz" 611 AC_TRY_LINK_FUNC(deflate, AC_DEFINE(HAVE_LIBZ), 612 [ 613 AC_MSG_ERROR([*** zlib missing - please install first or check config.log ***]) 614 ] 615 ) 616 ] 617) 618AC_CHECK_HEADER([zlib.h], ,AC_MSG_ERROR([*** zlib.h missing - please install first or check config.log ***])) 619 620AC_ARG_WITH(zlib-version-check, 621 [ --without-zlib-version-check Disable zlib version check], 622 [ if test "x$withval" = "xno" ; then 623 zlib_check_nonfatal=1 624 fi 625 ] 626) 627 628AC_MSG_CHECKING(for zlib 1.1.4 or greater) 629AC_TRY_RUN([ 630#include <zlib.h> 631int main() 632{ 633 int a, b, c, v; 634 if (sscanf(ZLIB_VERSION, "%d.%d.%d", &a, &b, &c) != 3) 635 exit(1); 636 v = a*1000000 + b*1000 + c; 637 if (v >= 1001004) 638 exit(0); 639 exit(2); 640} 641 ], 642 AC_MSG_RESULT(yes), 643 [ AC_MSG_RESULT(no) 644 if test -z "$zlib_check_nonfatal" ; then 645 AC_MSG_ERROR([*** zlib too old - check config.log *** 646Your reported zlib version has known security problems. It's possible your 647vendor has fixed these problems without changing the version number. If you 648are sure this is the case, you can disable the check by running 649"./configure --without-zlib-version-check". 650If you are in doubt, upgrade zlib to version 1.1.4 or greater.]) 651 else 652 AC_MSG_WARN([zlib version may have security problems]) 653 fi 654 ] 655) 656 657dnl UnixWare 2.x 658AC_CHECK_FUNC(strcasecmp, 659 [], [ AC_CHECK_LIB(resolv, strcasecmp, LIBS="$LIBS -lresolv") ] 660) 661AC_CHECK_FUNC(utimes, 662 [], [ AC_CHECK_LIB(c89, utimes, [AC_DEFINE(HAVE_UTIMES) 663 LIBS="$LIBS -lc89"]) ] 664) 665 666dnl Checks for libutil functions 667AC_CHECK_HEADERS(libutil.h) 668AC_SEARCH_LIBS(login, util bsd, [AC_DEFINE(HAVE_LOGIN)]) 669AC_CHECK_FUNCS(logout updwtmp logwtmp) 670 671AC_FUNC_STRFTIME 672 673# Check for ALTDIRFUNC glob() extension 674AC_MSG_CHECKING(for GLOB_ALTDIRFUNC support) 675AC_EGREP_CPP(FOUNDIT, 676 [ 677 #include <glob.h> 678 #ifdef GLOB_ALTDIRFUNC 679 FOUNDIT 680 #endif 681 ], 682 [ 683 AC_DEFINE(GLOB_HAS_ALTDIRFUNC) 684 AC_MSG_RESULT(yes) 685 ], 686 [ 687 AC_MSG_RESULT(no) 688 ] 689) 690 691# Check for g.gl_matchc glob() extension 692AC_MSG_CHECKING(for gl_matchc field in glob_t) 693AC_EGREP_CPP(FOUNDIT, 694 [ 695 #include <glob.h> 696 int main(void){glob_t g; g.gl_matchc = 1;} 697 ], 698 [ 699 AC_DEFINE(GLOB_HAS_GL_MATCHC) 700 AC_MSG_RESULT(yes) 701 ], 702 [ 703 AC_MSG_RESULT(no) 704 ] 705) 706 707AC_MSG_CHECKING([whether struct dirent allocates space for d_name]) 708AC_TRY_RUN( 709 [ 710#include <sys/types.h> 711#include <dirent.h> 712int main(void){struct dirent d;exit(sizeof(d.d_name)<=sizeof(char));} 713 ], 714 [AC_MSG_RESULT(yes)], 715 [ 716 AC_MSG_RESULT(no) 717 AC_DEFINE(BROKEN_ONE_BYTE_DIRENT_D_NAME) 718 ] 719) 720 721# Check whether user wants S/Key support 722SKEY_MSG="no" 723AC_ARG_WITH(skey, 724 [ --with-skey[[=PATH]] Enable S/Key support 725 (optionally in PATH)], 726 [ 727 if test "x$withval" != "xno" ; then 728 729 if test "x$withval" != "xyes" ; then 730 CPPFLAGS="$CPPFLAGS -I${withval}/include" 731 LDFLAGS="$LDFLAGS -L${withval}/lib" 732 fi 733 734 AC_DEFINE(SKEY) 735 LIBS="-lskey $LIBS" 736 SKEY_MSG="yes" 737 738 AC_MSG_CHECKING([for s/key support]) 739 AC_TRY_RUN( 740 [ 741#include <stdio.h> 742#include <skey.h> 743int main() { char *ff = skey_keyinfo(""); ff=""; exit(0); } 744 ], 745 [AC_MSG_RESULT(yes)], 746 [ 747 AC_MSG_RESULT(no) 748 AC_MSG_ERROR([** Incomplete or missing s/key libraries.]) 749 ]) 750 AC_MSG_CHECKING(if skeychallenge takes 4 arguments) 751 AC_TRY_COMPILE( 752 [#include <stdio.h> 753 #include <skey.h>], 754 [(void)skeychallenge(NULL,"name","",0);], 755 [AC_MSG_RESULT(yes) 756 AC_DEFINE(SKEYCHALLENGE_4ARG)], 757 [AC_MSG_RESULT(no)] 758 ) 759 fi 760 ] 761) 762 763# Check whether user wants OPIE support 764OPIE_MSG="no" 765AC_ARG_WITH(opie, 766 [ --with-opie[[=PATH]] Enable OPIE support 767 (optionally in PATH)], 768 [ 769 if test "x$withval" != "xno" ; then 770 771 if test "x$withval" != "xyes" ; then 772 CPPFLAGS="$CPPFLAGS -I${withval}/include" 773 LDFLAGS="$LDFLAGS -L${withval}/lib" 774 fi 775 776 AC_DEFINE(SKEY) 777 AC_DEFINE(OPIE) 778 LIBS="-lopie $LIBS" 779 OPIE_MSG="yes" 780 781 AC_MSG_CHECKING([for opie support]) 782 AC_TRY_RUN( 783 [ 784#include <sys/types.h> 785#include <stdio.h> 786#include <opie.h> 787int main() { char *ff = opie_keyinfo(""); ff=""; return 0; } 788 ], 789 [AC_MSG_RESULT(yes)], 790 [ 791 AC_MSG_RESULT(no) 792 AC_MSG_ERROR([** Incomplete or missing opie libraries.]) 793 ]) 794 fi 795 ] 796) 797 798# Check whether user wants TCP wrappers support 799TCPW_MSG="no" 800AC_ARG_WITH(tcp-wrappers, 801 [ --with-tcp-wrappers[[=PATH]] Enable tcpwrappers support 802 (optionally in PATH)], 803 [ 804 if test "x$withval" != "xno" ; then 805 saved_LIBS="$LIBS" 806 saved_LDFLAGS="$LDFLAGS" 807 saved_CPPFLAGS="$CPPFLAGS" 808 if test -n "${withval}" -a "${withval}" != "yes"; then 809 if test -d "${withval}/lib"; then 810 if test -n "${need_dash_r}"; then 811 LDFLAGS="-L${withval}/lib -R${withval}/lib ${LDFLAGS}" 812 else 813 LDFLAGS="-L${withval}/lib ${LDFLAGS}" 814 fi 815 else 816 if test -n "${need_dash_r}"; then 817 LDFLAGS="-L${withval} -R${withval} ${LDFLAGS}" 818 else 819 LDFLAGS="-L${withval} ${LDFLAGS}" 820 fi 821 fi 822 if test -d "${withval}/include"; then 823 CPPFLAGS="-I${withval}/include ${CPPFLAGS}" 824 else 825 CPPFLAGS="-I${withval} ${CPPFLAGS}" 826 fi 827 fi 828 LIBWRAP="-lwrap" 829 LIBS="$LIBWRAP $LIBS" 830 AC_MSG_CHECKING(for libwrap) 831 AC_TRY_LINK( 832 [ 833#include <sys/types.h> 834#include <sys/socket.h> 835#include <netinet/in.h> 836#include <tcpd.h> 837 int deny_severity = 0, allow_severity = 0; 838 ], 839 [hosts_access(0);], 840 [ 841 AC_MSG_RESULT(yes) 842 AC_DEFINE(LIBWRAP) 843 AC_SUBST(LIBWRAP) 844 TCPW_MSG="yes" 845 ], 846 [ 847 AC_MSG_ERROR([*** libwrap missing]) 848 ] 849 ) 850 LIBS="$saved_LIBS" 851 fi 852 ] 853) 854 855dnl Checks for library functions. Please keep in alphabetical order 856AC_CHECK_FUNCS(\ 857 arc4random __b64_ntop b64_ntop __b64_pton b64_pton \ 858 bcopy bindresvport_sa clock fchmod fchown freeaddrinfo futimes \ 859 getaddrinfo getcwd getgrouplist getnameinfo getopt \ 860 getpeereid _getpty getrlimit getttyent glob inet_aton \ 861 inet_ntoa inet_ntop innetgr login_getcapbool md5_crypt memmove \ 862 mkdtemp mmap ngetaddrinfo nsleep ogetaddrinfo openlog_r openpty \ 863 pstat prctl readpassphrase realpath recvmsg rresvport_af sendmsg \ 864 setdtablesize setegid setenv seteuid setgroups setlogin setpcred \ 865 setproctitle setregid setreuid setrlimit \ 866 setsid setvbuf sigaction sigvec snprintf socketpair strerror \ 867 strlcat strlcpy strmode strnvis strtoul sysconf tcgetpgrp \ 868 truncate unsetenv updwtmpx utimes vhangup vsnprintf waitpid \ 869) 870 871# IRIX has a const char return value for gai_strerror() 872AC_CHECK_FUNCS(gai_strerror,[ 873 AC_DEFINE(HAVE_GAI_STRERROR) 874 AC_TRY_COMPILE([ 875#include <sys/types.h> 876#include <sys/socket.h> 877#include <netdb.h> 878 879const char *gai_strerror(int);],[ 880char *str; 881 882str = gai_strerror(0);],[ 883 AC_DEFINE(HAVE_CONST_GAI_STRERROR_PROTO, 1, 884 [Define if gai_strerror() returns const char *])])]) 885 886AC_SEARCH_LIBS(nanosleep, rt posix4, AC_DEFINE(HAVE_NANOSLEEP)) 887 888dnl Make sure prototypes are defined for these before using them. 889AC_CHECK_DECL(strsep, [AC_CHECK_FUNCS(strsep)]) 890AC_CHECK_DECL(getrusage, [AC_CHECK_FUNCS(getrusage)]) 891 892dnl tcsendbreak might be a macro 893AC_CHECK_DECL(tcsendbreak, 894 [AC_DEFINE(HAVE_TCSENDBREAK)], 895 [AC_CHECK_FUNCS(tcsendbreak)], 896 [#include <termios.h>] 897) 898 899AC_CHECK_FUNCS(setresuid, [ 900 dnl Some platorms have setresuid that isn't implemented, test for this 901 AC_MSG_CHECKING(if setresuid seems to work) 902 AC_TRY_RUN([ 903#include <stdlib.h> 904#include <errno.h> 905int main(){errno=0; setresuid(0,0,0); if (errno==ENOSYS) exit(1); else exit(0);} 906 ], 907 [AC_MSG_RESULT(yes)], 908 [AC_DEFINE(BROKEN_SETRESUID) 909 AC_MSG_RESULT(not implemented)] 910 ) 911]) 912 913AC_CHECK_FUNCS(setresgid, [ 914 dnl Some platorms have setresgid that isn't implemented, test for this 915 AC_MSG_CHECKING(if setresgid seems to work) 916 AC_TRY_RUN([ 917#include <stdlib.h> 918#include <errno.h> 919int main(){errno=0; setresgid(0,0,0); if (errno==ENOSYS) exit(1); else exit(0);} 920 ], 921 [AC_MSG_RESULT(yes)], 922 [AC_DEFINE(BROKEN_SETRESGID) 923 AC_MSG_RESULT(not implemented)] 924 ) 925]) 926 927dnl Checks for time functions 928AC_CHECK_FUNCS(gettimeofday time) 929dnl Checks for utmp functions 930AC_CHECK_FUNCS(endutent getutent getutid getutline pututline setutent) 931AC_CHECK_FUNCS(utmpname) 932dnl Checks for utmpx functions 933AC_CHECK_FUNCS(endutxent getutxent getutxid getutxline pututxline ) 934AC_CHECK_FUNCS(setutxent utmpxname) 935 936AC_CHECK_FUNC(daemon, 937 [AC_DEFINE(HAVE_DAEMON)], 938 [AC_CHECK_LIB(bsd, daemon, [LIBS="$LIBS -lbsd"; AC_DEFINE(HAVE_DAEMON)])] 939) 940 941AC_CHECK_FUNC(getpagesize, 942 [AC_DEFINE(HAVE_GETPAGESIZE)], 943 [AC_CHECK_LIB(ucb, getpagesize, [LIBS="$LIBS -lucb"; AC_DEFINE(HAVE_GETPAGESIZE)])] 944) 945 946# Check for broken snprintf 947if test "x$ac_cv_func_snprintf" = "xyes" ; then 948 AC_MSG_CHECKING([whether snprintf correctly terminates long strings]) 949 AC_TRY_RUN( 950 [ 951#include <stdio.h> 952int main(void){char b[5];snprintf(b,5,"123456789");exit(b[4]!='\0');} 953 ], 954 [AC_MSG_RESULT(yes)], 955 [ 956 AC_MSG_RESULT(no) 957 AC_DEFINE(BROKEN_SNPRINTF) 958 AC_MSG_WARN([****** Your snprintf() function is broken, complain to your vendor]) 959 ] 960 ) 961fi 962 963dnl see whether mkstemp() requires XXXXXX 964if test "x$ac_cv_func_mkdtemp" = "xyes" ; then 965AC_MSG_CHECKING([for (overly) strict mkstemp]) 966AC_TRY_RUN( 967 [ 968#include <stdlib.h> 969main() { char template[]="conftest.mkstemp-test"; 970if (mkstemp(template) == -1) 971 exit(1); 972unlink(template); exit(0); 973} 974 ], 975 [ 976 AC_MSG_RESULT(no) 977 ], 978 [ 979 AC_MSG_RESULT(yes) 980 AC_DEFINE(HAVE_STRICT_MKSTEMP) 981 ], 982 [ 983 AC_MSG_RESULT(yes) 984 AC_DEFINE(HAVE_STRICT_MKSTEMP) 985 ] 986) 987fi 988 989dnl make sure that openpty does not reacquire controlling terminal 990if test ! -z "$check_for_openpty_ctty_bug"; then 991 AC_MSG_CHECKING(if openpty correctly handles controlling tty) 992 AC_TRY_RUN( 993 [ 994#include <stdio.h> 995#include <sys/fcntl.h> 996#include <sys/types.h> 997#include <sys/wait.h> 998 999int 1000main() 1001{ 1002 pid_t pid; 1003 int fd, ptyfd, ttyfd, status; 1004 1005 pid = fork(); 1006 if (pid < 0) { /* failed */ 1007 exit(1); 1008 } else if (pid > 0) { /* parent */ 1009 waitpid(pid, &status, 0); 1010 if (WIFEXITED(status)) 1011 exit(WEXITSTATUS(status)); 1012 else 1013 exit(2); 1014 } else { /* child */ 1015 close(0); close(1); close(2); 1016 setsid(); 1017 openpty(&ptyfd, &ttyfd, NULL, NULL, NULL); 1018 fd = open("/dev/tty", O_RDWR | O_NOCTTY); 1019 if (fd >= 0) 1020 exit(3); /* Acquired ctty: broken */ 1021 else 1022 exit(0); /* Did not acquire ctty: OK */ 1023 } 1024} 1025 ], 1026 [ 1027 AC_MSG_RESULT(yes) 1028 ], 1029 [ 1030 AC_MSG_RESULT(no) 1031 AC_DEFINE(SSHD_ACQUIRES_CTTY) 1032 ] 1033 ) 1034fi 1035 1036if test "x$ac_cv_func_getaddrinfo" = "xyes" -a "x$check_for_hpux_broken_getaddrinfo" = "x1"; then 1037 AC_MSG_CHECKING(if getaddrinfo seems to work) 1038 AC_TRY_RUN( 1039 [ 1040#include <stdio.h> 1041#include <sys/socket.h> 1042#include <netdb.h> 1043#include <errno.h> 1044#include <netinet/in.h> 1045 1046#define TEST_PORT "2222" 1047 1048int 1049main(void) 1050{ 1051 int err, sock; 1052 struct addrinfo *gai_ai, *ai, hints; 1053 char ntop[NI_MAXHOST], strport[NI_MAXSERV], *name = NULL; 1054 1055 memset(&hints, 0, sizeof(hints)); 1056 hints.ai_family = PF_UNSPEC; 1057 hints.ai_socktype = SOCK_STREAM; 1058 hints.ai_flags = AI_PASSIVE; 1059 1060 err = getaddrinfo(name, TEST_PORT, &hints, &gai_ai); 1061 if (err != 0) { 1062 fprintf(stderr, "getaddrinfo failed (%s)", gai_strerror(err)); 1063 exit(1); 1064 } 1065 1066 for (ai = gai_ai; ai != NULL; ai = ai->ai_next) { 1067 if (ai->ai_family != AF_INET6) 1068 continue; 1069 1070 err = getnameinfo(ai->ai_addr, ai->ai_addrlen, ntop, 1071 sizeof(ntop), strport, sizeof(strport), 1072 NI_NUMERICHOST|NI_NUMERICSERV); 1073 1074 if (err != 0) { 1075 if (err == EAI_SYSTEM) 1076 perror("getnameinfo EAI_SYSTEM"); 1077 else 1078 fprintf(stderr, "getnameinfo failed: %s\n", 1079 gai_strerror(err)); 1080 exit(2); 1081 } 1082 1083 sock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); 1084 if (sock < 0) 1085 perror("socket"); 1086 if (bind(sock, ai->ai_addr, ai->ai_addrlen) < 0) { 1087 if (errno == EBADF) 1088 exit(3); 1089 } 1090 } 1091 exit(0); 1092} 1093 ], 1094 [ 1095 AC_MSG_RESULT(yes) 1096 ], 1097 [ 1098 AC_MSG_RESULT(no) 1099 AC_DEFINE(BROKEN_GETADDRINFO) 1100 ] 1101 ) 1102fi 1103 1104AC_FUNC_GETPGRP 1105 1106# Check for PAM libs 1107PAM_MSG="no" 1108AC_ARG_WITH(pam, 1109 [ --with-pam Enable PAM support ], 1110 [ 1111 if test "x$withval" != "xno" ; then 1112 if test "x$ac_cv_header_security_pam_appl_h" != "xyes" && \ 1113 test "x$ac_cv_header_pam_pam_appl_h" != "xyes" ; then 1114 AC_MSG_ERROR([PAM headers not found]) 1115 fi 1116 1117 AC_CHECK_LIB(dl, dlopen, , ) 1118 AC_CHECK_LIB(pam, pam_set_item, , AC_MSG_ERROR([*** libpam missing])) 1119 AC_CHECK_FUNCS(pam_getenvlist) 1120 AC_CHECK_FUNCS(pam_putenv) 1121 1122 PAM_MSG="yes" 1123 1124 AC_DEFINE(USE_PAM) 1125 if test $ac_cv_lib_dl_dlopen = yes; then 1126 LIBPAM="-lpam -ldl" 1127 else 1128 LIBPAM="-lpam" 1129 fi 1130 AC_SUBST(LIBPAM) 1131 fi 1132 ] 1133) 1134 1135# Check for older PAM 1136if test "x$PAM_MSG" = "xyes" ; then 1137 # Check PAM strerror arguments (old PAM) 1138 AC_MSG_CHECKING([whether pam_strerror takes only one argument]) 1139 AC_TRY_COMPILE( 1140 [ 1141#include <stdlib.h> 1142#if defined(HAVE_SECURITY_PAM_APPL_H) 1143#include <security/pam_appl.h> 1144#elif defined (HAVE_PAM_PAM_APPL_H) 1145#include <pam/pam_appl.h> 1146#endif 1147 ], 1148 [(void)pam_strerror((pam_handle_t *)NULL, -1);], 1149 [AC_MSG_RESULT(no)], 1150 [ 1151 AC_DEFINE(HAVE_OLD_PAM) 1152 AC_MSG_RESULT(yes) 1153 PAM_MSG="yes (old library)" 1154 ] 1155 ) 1156fi 1157 1158# Search for OpenSSL 1159saved_CPPFLAGS="$CPPFLAGS" 1160saved_LDFLAGS="$LDFLAGS" 1161AC_ARG_WITH(ssl-dir, 1162 [ --with-ssl-dir=PATH Specify path to OpenSSL installation ], 1163 [ 1164 if test "x$withval" != "xno" ; then 1165 if test -d "$withval/lib"; then 1166 if test -n "${need_dash_r}"; then 1167 LDFLAGS="-L${withval}/lib -R${withval}/lib ${LDFLAGS}" 1168 else 1169 LDFLAGS="-L${withval}/lib ${LDFLAGS}" 1170 fi 1171 else 1172 if test -n "${need_dash_r}"; then 1173 LDFLAGS="-L${withval} -R${withval} ${LDFLAGS}" 1174 else 1175 LDFLAGS="-L${withval} ${LDFLAGS}" 1176 fi 1177 fi 1178 if test -d "$withval/include"; then 1179 CPPFLAGS="-I${withval}/include ${CPPFLAGS}" 1180 else 1181 CPPFLAGS="-I${withval} ${CPPFLAGS}" 1182 fi 1183 fi 1184 ] 1185) 1186LIBS="-lcrypto $LIBS" 1187AC_TRY_LINK_FUNC(RAND_add, AC_DEFINE(HAVE_OPENSSL), 1188 [ 1189 dnl Check default openssl install dir 1190 if test -n "${need_dash_r}"; then 1191 LDFLAGS="-L/usr/local/ssl/lib -R/usr/local/ssl/lib ${saved_LDFLAGS}" 1192 else 1193 LDFLAGS="-L/usr/local/ssl/lib ${saved_LDFLAGS}" 1194 fi 1195 CPPFLAGS="-I/usr/local/ssl/include ${saved_CPPFLAGS}" 1196 AC_TRY_LINK_FUNC(RAND_add, AC_DEFINE(HAVE_OPENSSL), 1197 [ 1198 AC_MSG_ERROR([*** Can't find recent OpenSSL libcrypto (see config.log for details) ***]) 1199 ] 1200 ) 1201 ] 1202) 1203 1204# Determine OpenSSL header version 1205AC_MSG_CHECKING([OpenSSL header version]) 1206AC_TRY_RUN( 1207 [ 1208#include <stdio.h> 1209#include <string.h> 1210#include <openssl/opensslv.h> 1211#define DATA "conftest.sslincver" 1212int main(void) { 1213 FILE *fd; 1214 int rc; 1215 1216 fd = fopen(DATA,"w"); 1217 if(fd == NULL) 1218 exit(1); 1219 1220 if ((rc = fprintf(fd ,"%x (%s)\n", OPENSSL_VERSION_NUMBER, OPENSSL_VERSION_TEXT)) <0) 1221 exit(1); 1222 1223 exit(0); 1224} 1225 ], 1226 [ 1227 ssl_header_ver=`cat conftest.sslincver` 1228 AC_MSG_RESULT($ssl_header_ver) 1229 ], 1230 [ 1231 AC_MSG_RESULT(not found) 1232 AC_MSG_ERROR(OpenSSL version header not found.) 1233 ] 1234) 1235 1236# Determine OpenSSL library version 1237AC_MSG_CHECKING([OpenSSL library version]) 1238AC_TRY_RUN( 1239 [ 1240#include <stdio.h> 1241#include <string.h> 1242#include <openssl/opensslv.h> 1243#include <openssl/crypto.h> 1244#define DATA "conftest.ssllibver" 1245int main(void) { 1246 FILE *fd; 1247 int rc; 1248 1249 fd = fopen(DATA,"w"); 1250 if(fd == NULL) 1251 exit(1); 1252 1253 if ((rc = fprintf(fd ,"%x (%s)\n", SSLeay(), SSLeay_version(SSLEAY_VERSION))) <0) 1254 exit(1); 1255 1256 exit(0); 1257} 1258 ], 1259 [ 1260 ssl_library_ver=`cat conftest.ssllibver` 1261 AC_MSG_RESULT($ssl_library_ver) 1262 ], 1263 [ 1264 AC_MSG_RESULT(not found) 1265 AC_MSG_ERROR(OpenSSL library not found.) 1266 ] 1267) 1268 1269# Sanity check OpenSSL headers 1270AC_MSG_CHECKING([whether OpenSSL's headers match the library]) 1271AC_TRY_RUN( 1272 [ 1273#include <string.h> 1274#include <openssl/opensslv.h> 1275int main(void) { exit(SSLeay() == OPENSSL_VERSION_NUMBER ? 0 : 1); } 1276 ], 1277 [ 1278 AC_MSG_RESULT(yes) 1279 ], 1280 [ 1281 AC_MSG_RESULT(no) 1282 AC_MSG_ERROR([Your OpenSSL headers do not match your library. 1283Check config.log for details. 1284Also see contrib/findssl.sh for help identifying header/library mismatches.]) 1285 ] 1286) 1287 1288# Some systems want crypt() from libcrypt, *not* the version in OpenSSL, 1289# because the system crypt() is more featureful. 1290if test "x$check_for_libcrypt_before" = "x1"; then 1291 AC_CHECK_LIB(crypt, crypt) 1292fi 1293 1294# Some Linux systems (Slackware) need crypt() from libcrypt, *not* the 1295# version in OpenSSL. 1296if test "x$check_for_libcrypt_later" = "x1"; then 1297 AC_CHECK_LIB(crypt, crypt, LIBS="$LIBS -lcrypt") 1298fi 1299 1300 1301### Configure cryptographic random number support 1302 1303# Check wheter OpenSSL seeds itself 1304AC_MSG_CHECKING([whether OpenSSL's PRNG is internally seeded]) 1305AC_TRY_RUN( 1306 [ 1307#include <string.h> 1308#include <openssl/rand.h> 1309int main(void) { exit(RAND_status() == 1 ? 0 : 1); } 1310 ], 1311 [ 1312 OPENSSL_SEEDS_ITSELF=yes 1313 AC_MSG_RESULT(yes) 1314 ], 1315 [ 1316 AC_MSG_RESULT(no) 1317 # Default to use of the rand helper if OpenSSL doesn't 1318 # seed itself 1319 USE_RAND_HELPER=yes 1320 ] 1321) 1322 1323 1324# Do we want to force the use of the rand helper? 1325AC_ARG_WITH(rand-helper, 1326 [ --with-rand-helper Use subprocess to gather strong randomness ], 1327 [ 1328 if test "x$withval" = "xno" ; then 1329 # Force use of OpenSSL's internal RNG, even if 1330 # the previous test showed it to be unseeded. 1331 if test -z "$OPENSSL_SEEDS_ITSELF" ; then 1332 AC_MSG_WARN([*** Forcing use of OpenSSL's non-self-seeding PRNG]) 1333 OPENSSL_SEEDS_ITSELF=yes 1334 USE_RAND_HELPER="" 1335 fi 1336 else 1337 USE_RAND_HELPER=yes 1338 fi 1339 ], 1340) 1341 1342# Which randomness source do we use? 1343if test ! -z "$OPENSSL_SEEDS_ITSELF" -a -z "$USE_RAND_HELPER" ; then 1344 # OpenSSL only 1345 AC_DEFINE(OPENSSL_PRNG_ONLY) 1346 RAND_MSG="OpenSSL internal ONLY" 1347 INSTALL_SSH_RAND_HELPER="" 1348elif test ! -z "$USE_RAND_HELPER" ; then 1349 # install rand helper 1350 RAND_MSG="ssh-rand-helper" 1351 INSTALL_SSH_RAND_HELPER="yes" 1352fi 1353AC_SUBST(INSTALL_SSH_RAND_HELPER) 1354 1355### Configuration of ssh-rand-helper 1356 1357# PRNGD TCP socket 1358AC_ARG_WITH(prngd-port, 1359 [ --with-prngd-port=PORT read entropy from PRNGD/EGD TCP localhost:PORT], 1360 [ 1361 case "$withval" in 1362 no) 1363 withval="" 1364 ;; 1365 [[0-9]]*) 1366 ;; 1367 *) 1368 AC_MSG_ERROR(You must specify a numeric port number for --with-prngd-port) 1369 ;; 1370 esac 1371 if test ! -z "$withval" ; then 1372 PRNGD_PORT="$withval" 1373 AC_DEFINE_UNQUOTED(PRNGD_PORT, $PRNGD_PORT) 1374 fi 1375 ] 1376) 1377 1378# PRNGD Unix domain socket 1379AC_ARG_WITH(prngd-socket, 1380 [ --with-prngd-socket=FILE read entropy from PRNGD/EGD socket FILE (default=/var/run/egd-pool)], 1381 [ 1382 case "$withval" in 1383 yes) 1384 withval="/var/run/egd-pool" 1385 ;; 1386 no) 1387 withval="" 1388 ;; 1389 /*) 1390 ;; 1391 *) 1392 AC_MSG_ERROR(You must specify an absolute path to the entropy socket) 1393 ;; 1394 esac 1395 1396 if test ! -z "$withval" ; then 1397 if test ! -z "$PRNGD_PORT" ; then 1398 AC_MSG_ERROR(You may not specify both a PRNGD/EGD port and socket) 1399 fi 1400 if test ! -r "$withval" ; then 1401 AC_MSG_WARN(Entropy socket is not readable) 1402 fi 1403 PRNGD_SOCKET="$withval" 1404 AC_DEFINE_UNQUOTED(PRNGD_SOCKET, "$PRNGD_SOCKET") 1405 fi 1406 ], 1407 [ 1408 # Check for existing socket only if we don't have a random device already 1409 if test "$USE_RAND_HELPER" = yes ; then 1410 AC_MSG_CHECKING(for PRNGD/EGD socket) 1411 # Insert other locations here 1412 for sock in /var/run/egd-pool /dev/egd-pool /etc/entropy; do 1413 if test -r $sock && $TEST_MINUS_S_SH -c "test -S $sock -o -p $sock" ; then 1414 PRNGD_SOCKET="$sock" 1415 AC_DEFINE_UNQUOTED(PRNGD_SOCKET, "$PRNGD_SOCKET") 1416 break; 1417 fi 1418 done 1419 if test ! -z "$PRNGD_SOCKET" ; then 1420 AC_MSG_RESULT($PRNGD_SOCKET) 1421 else 1422 AC_MSG_RESULT(not found) 1423 fi 1424 fi 1425 ] 1426) 1427 1428# Change default command timeout for hashing entropy source 1429entropy_timeout=200 1430AC_ARG_WITH(entropy-timeout, 1431 [ --with-entropy-timeout Specify entropy gathering command timeout (msec)], 1432 [ 1433 if test "x$withval" != "xno" ; then 1434 entropy_timeout=$withval 1435 fi 1436 ] 1437) 1438AC_DEFINE_UNQUOTED(ENTROPY_TIMEOUT_MSEC, $entropy_timeout) 1439 1440SSH_PRIVSEP_USER=sshd 1441AC_ARG_WITH(privsep-user, 1442 [ --with-privsep-user=user Specify non-privileged user for privilege separation], 1443 [ 1444 if test -n "$withval"; then 1445 SSH_PRIVSEP_USER=$withval 1446 fi 1447 ] 1448) 1449AC_DEFINE_UNQUOTED(SSH_PRIVSEP_USER, "$SSH_PRIVSEP_USER") 1450AC_SUBST(SSH_PRIVSEP_USER) 1451 1452# We do this little dance with the search path to insure 1453# that programs that we select for use by installed programs 1454# (which may be run by the super-user) come from trusted 1455# locations before they come from the user's private area. 1456# This should help avoid accidentally configuring some 1457# random version of a program in someone's personal bin. 1458 1459OPATH=$PATH 1460PATH=/bin:/usr/bin 1461test -h /bin 2> /dev/null && PATH=/usr/bin 1462test -d /sbin && PATH=$PATH:/sbin 1463test -d /usr/sbin && PATH=$PATH:/usr/sbin 1464PATH=$PATH:/etc:$OPATH 1465 1466# These programs are used by the command hashing source to gather entropy 1467OSSH_PATH_ENTROPY_PROG(PROG_LS, ls) 1468OSSH_PATH_ENTROPY_PROG(PROG_NETSTAT, netstat) 1469OSSH_PATH_ENTROPY_PROG(PROG_ARP, arp) 1470OSSH_PATH_ENTROPY_PROG(PROG_IFCONFIG, ifconfig) 1471OSSH_PATH_ENTROPY_PROG(PROG_JSTAT, jstat) 1472OSSH_PATH_ENTROPY_PROG(PROG_PS, ps) 1473OSSH_PATH_ENTROPY_PROG(PROG_SAR, sar) 1474OSSH_PATH_ENTROPY_PROG(PROG_W, w) 1475OSSH_PATH_ENTROPY_PROG(PROG_WHO, who) 1476OSSH_PATH_ENTROPY_PROG(PROG_LAST, last) 1477OSSH_PATH_ENTROPY_PROG(PROG_LASTLOG, lastlog) 1478OSSH_PATH_ENTROPY_PROG(PROG_DF, df) 1479OSSH_PATH_ENTROPY_PROG(PROG_VMSTAT, vmstat) 1480OSSH_PATH_ENTROPY_PROG(PROG_UPTIME, uptime) 1481OSSH_PATH_ENTROPY_PROG(PROG_IPCS, ipcs) 1482OSSH_PATH_ENTROPY_PROG(PROG_TAIL, tail) 1483# restore PATH 1484PATH=$OPATH 1485 1486# Where does ssh-rand-helper get its randomness from? 1487INSTALL_SSH_PRNG_CMDS="" 1488if test ! -z "$INSTALL_SSH_RAND_HELPER" ; then 1489 if test ! -z "$PRNGD_PORT" ; then 1490 RAND_HELPER_MSG="TCP localhost:$PRNGD_PORT" 1491 elif test ! -z "$PRNGD_SOCKET" ; then 1492 RAND_HELPER_MSG="Unix domain socket \"$PRNGD_SOCKET\"" 1493 else 1494 RAND_HELPER_MSG="Command hashing (timeout $entropy_timeout)" 1495 RAND_HELPER_CMDHASH=yes 1496 INSTALL_SSH_PRNG_CMDS="yes" 1497 fi 1498fi 1499AC_SUBST(INSTALL_SSH_PRNG_CMDS) 1500 1501 1502# Cheap hack to ensure NEWS-OS libraries are arranged right. 1503if test ! -z "$SONY" ; then 1504 LIBS="$LIBS -liberty"; 1505fi 1506 1507# Checks for data types 1508AC_CHECK_SIZEOF(char, 1) 1509AC_CHECK_SIZEOF(short int, 2) 1510AC_CHECK_SIZEOF(int, 4) 1511AC_CHECK_SIZEOF(long int, 4) 1512AC_CHECK_SIZEOF(long long int, 8) 1513 1514# Sanity check long long for some platforms (AIX) 1515if test "x$ac_cv_sizeof_long_long_int" = "x4" ; then 1516 ac_cv_sizeof_long_long_int=0 1517fi 1518 1519# More checks for data types 1520AC_CACHE_CHECK([for u_int type], ac_cv_have_u_int, [ 1521 AC_TRY_COMPILE( 1522 [ #include <sys/types.h> ], 1523 [ u_int a; a = 1;], 1524 [ ac_cv_have_u_int="yes" ], 1525 [ ac_cv_have_u_int="no" ] 1526 ) 1527]) 1528if test "x$ac_cv_have_u_int" = "xyes" ; then 1529 AC_DEFINE(HAVE_U_INT) 1530 have_u_int=1 1531fi 1532 1533AC_CACHE_CHECK([for intXX_t types], ac_cv_have_intxx_t, [ 1534 AC_TRY_COMPILE( 1535 [ #include <sys/types.h> ], 1536 [ int8_t a; int16_t b; int32_t c; a = b = c = 1;], 1537 [ ac_cv_have_intxx_t="yes" ], 1538 [ ac_cv_have_intxx_t="no" ] 1539 ) 1540]) 1541if test "x$ac_cv_have_intxx_t" = "xyes" ; then 1542 AC_DEFINE(HAVE_INTXX_T) 1543 have_intxx_t=1 1544fi 1545 1546if (test -z "$have_intxx_t" && \ 1547 test "x$ac_cv_header_stdint_h" = "xyes") 1548then 1549 AC_MSG_CHECKING([for intXX_t types in stdint.h]) 1550 AC_TRY_COMPILE( 1551 [ #include <stdint.h> ], 1552 [ int8_t a; int16_t b; int32_t c; a = b = c = 1;], 1553 [ 1554 AC_DEFINE(HAVE_INTXX_T) 1555 AC_MSG_RESULT(yes) 1556 ], 1557 [ AC_MSG_RESULT(no) ] 1558 ) 1559fi 1560 1561AC_CACHE_CHECK([for int64_t type], ac_cv_have_int64_t, [ 1562 AC_TRY_COMPILE( 1563 [ 1564#include <sys/types.h> 1565#ifdef HAVE_STDINT_H 1566# include <stdint.h> 1567#endif 1568#include <sys/socket.h> 1569#ifdef HAVE_SYS_BITYPES_H 1570# include <sys/bitypes.h> 1571#endif 1572 ], 1573 [ int64_t a; a = 1;], 1574 [ ac_cv_have_int64_t="yes" ], 1575 [ ac_cv_have_int64_t="no" ] 1576 ) 1577]) 1578if test "x$ac_cv_have_int64_t" = "xyes" ; then 1579 AC_DEFINE(HAVE_INT64_T) 1580fi 1581 1582AC_CACHE_CHECK([for u_intXX_t types], ac_cv_have_u_intxx_t, [ 1583 AC_TRY_COMPILE( 1584 [ #include <sys/types.h> ], 1585 [ u_int8_t a; u_int16_t b; u_int32_t c; a = b = c = 1;], 1586 [ ac_cv_have_u_intxx_t="yes" ], 1587 [ ac_cv_have_u_intxx_t="no" ] 1588 ) 1589]) 1590if test "x$ac_cv_have_u_intxx_t" = "xyes" ; then 1591 AC_DEFINE(HAVE_U_INTXX_T) 1592 have_u_intxx_t=1 1593fi 1594 1595if test -z "$have_u_intxx_t" ; then 1596 AC_MSG_CHECKING([for u_intXX_t types in sys/socket.h]) 1597 AC_TRY_COMPILE( 1598 [ #include <sys/socket.h> ], 1599 [ u_int8_t a; u_int16_t b; u_int32_t c; a = b = c = 1;], 1600 [ 1601 AC_DEFINE(HAVE_U_INTXX_T) 1602 AC_MSG_RESULT(yes) 1603 ], 1604 [ AC_MSG_RESULT(no) ] 1605 ) 1606fi 1607 1608AC_CACHE_CHECK([for u_int64_t types], ac_cv_have_u_int64_t, [ 1609 AC_TRY_COMPILE( 1610 [ #include <sys/types.h> ], 1611 [ u_int64_t a; a = 1;], 1612 [ ac_cv_have_u_int64_t="yes" ], 1613 [ ac_cv_have_u_int64_t="no" ] 1614 ) 1615]) 1616if test "x$ac_cv_have_u_int64_t" = "xyes" ; then 1617 AC_DEFINE(HAVE_U_INT64_T) 1618 have_u_int64_t=1 1619fi 1620 1621if test -z "$have_u_int64_t" ; then 1622 AC_MSG_CHECKING([for u_int64_t type in sys/bitypes.h]) 1623 AC_TRY_COMPILE( 1624 [ #include <sys/bitypes.h> ], 1625 [ u_int64_t a; a = 1], 1626 [ 1627 AC_DEFINE(HAVE_U_INT64_T) 1628 AC_MSG_RESULT(yes) 1629 ], 1630 [ AC_MSG_RESULT(no) ] 1631 ) 1632fi 1633 1634if test -z "$have_u_intxx_t" ; then 1635 AC_CACHE_CHECK([for uintXX_t types], ac_cv_have_uintxx_t, [ 1636 AC_TRY_COMPILE( 1637 [ 1638#include <sys/types.h> 1639 ], 1640 [ uint8_t a; uint16_t b; uint32_t c; a = b = c = 1; ], 1641 [ ac_cv_have_uintxx_t="yes" ], 1642 [ ac_cv_have_uintxx_t="no" ] 1643 ) 1644 ]) 1645 if test "x$ac_cv_have_uintxx_t" = "xyes" ; then 1646 AC_DEFINE(HAVE_UINTXX_T) 1647 fi 1648fi 1649 1650if test -z "$have_uintxx_t" ; then 1651 AC_MSG_CHECKING([for uintXX_t types in stdint.h]) 1652 AC_TRY_COMPILE( 1653 [ #include <stdint.h> ], 1654 [ uint8_t a; uint16_t b; uint32_t c; a = b = c = 1;], 1655 [ 1656 AC_DEFINE(HAVE_UINTXX_T) 1657 AC_MSG_RESULT(yes) 1658 ], 1659 [ AC_MSG_RESULT(no) ] 1660 ) 1661fi 1662 1663if (test -z "$have_u_intxx_t" || test -z "$have_intxx_t" && \ 1664 test "x$ac_cv_header_sys_bitypes_h" = "xyes") 1665then 1666 AC_MSG_CHECKING([for intXX_t and u_intXX_t types in sys/bitypes.h]) 1667 AC_TRY_COMPILE( 1668 [ 1669#include <sys/bitypes.h> 1670 ], 1671 [ 1672 int8_t a; int16_t b; int32_t c; 1673 u_int8_t e; u_int16_t f; u_int32_t g; 1674 a = b = c = e = f = g = 1; 1675 ], 1676 [ 1677 AC_DEFINE(HAVE_U_INTXX_T) 1678 AC_DEFINE(HAVE_INTXX_T) 1679 AC_MSG_RESULT(yes) 1680 ], 1681 [AC_MSG_RESULT(no)] 1682 ) 1683fi 1684 1685 1686AC_CACHE_CHECK([for u_char], ac_cv_have_u_char, [ 1687 AC_TRY_COMPILE( 1688 [ 1689#include <sys/types.h> 1690 ], 1691 [ u_char foo; foo = 125; ], 1692 [ ac_cv_have_u_char="yes" ], 1693 [ ac_cv_have_u_char="no" ] 1694 ) 1695]) 1696if test "x$ac_cv_have_u_char" = "xyes" ; then 1697 AC_DEFINE(HAVE_U_CHAR) 1698fi 1699 1700TYPE_SOCKLEN_T 1701 1702AC_CHECK_TYPES(sig_atomic_t,,,[#include <signal.h>]) 1703 1704AC_CACHE_CHECK([for size_t], ac_cv_have_size_t, [ 1705 AC_TRY_COMPILE( 1706 [ 1707#include <sys/types.h> 1708 ], 1709 [ size_t foo; foo = 1235; ], 1710 [ ac_cv_have_size_t="yes" ], 1711 [ ac_cv_have_size_t="no" ] 1712 ) 1713]) 1714if test "x$ac_cv_have_size_t" = "xyes" ; then 1715 AC_DEFINE(HAVE_SIZE_T) 1716fi 1717 1718AC_CACHE_CHECK([for ssize_t], ac_cv_have_ssize_t, [ 1719 AC_TRY_COMPILE( 1720 [ 1721#include <sys/types.h> 1722 ], 1723 [ ssize_t foo; foo = 1235; ], 1724 [ ac_cv_have_ssize_t="yes" ], 1725 [ ac_cv_have_ssize_t="no" ] 1726 ) 1727]) 1728if test "x$ac_cv_have_ssize_t" = "xyes" ; then 1729 AC_DEFINE(HAVE_SSIZE_T) 1730fi 1731 1732AC_CACHE_CHECK([for clock_t], ac_cv_have_clock_t, [ 1733 AC_TRY_COMPILE( 1734 [ 1735#include <time.h> 1736 ], 1737 [ clock_t foo; foo = 1235; ], 1738 [ ac_cv_have_clock_t="yes" ], 1739 [ ac_cv_have_clock_t="no" ] 1740 ) 1741]) 1742if test "x$ac_cv_have_clock_t" = "xyes" ; then 1743 AC_DEFINE(HAVE_CLOCK_T) 1744fi 1745 1746AC_CACHE_CHECK([for sa_family_t], ac_cv_have_sa_family_t, [ 1747 AC_TRY_COMPILE( 1748 [ 1749#include <sys/types.h> 1750#include <sys/socket.h> 1751 ], 1752 [ sa_family_t foo; foo = 1235; ], 1753 [ ac_cv_have_sa_family_t="yes" ], 1754 [ AC_TRY_COMPILE( 1755 [ 1756#include <sys/types.h> 1757#include <sys/socket.h> 1758#include <netinet/in.h> 1759 ], 1760 [ sa_family_t foo; foo = 1235; ], 1761 [ ac_cv_have_sa_family_t="yes" ], 1762 1763 [ ac_cv_have_sa_family_t="no" ] 1764 )] 1765 ) 1766]) 1767if test "x$ac_cv_have_sa_family_t" = "xyes" ; then 1768 AC_DEFINE(HAVE_SA_FAMILY_T) 1769fi 1770 1771AC_CACHE_CHECK([for pid_t], ac_cv_have_pid_t, [ 1772 AC_TRY_COMPILE( 1773 [ 1774#include <sys/types.h> 1775 ], 1776 [ pid_t foo; foo = 1235; ], 1777 [ ac_cv_have_pid_t="yes" ], 1778 [ ac_cv_have_pid_t="no" ] 1779 ) 1780]) 1781if test "x$ac_cv_have_pid_t" = "xyes" ; then 1782 AC_DEFINE(HAVE_PID_T) 1783fi 1784 1785AC_CACHE_CHECK([for mode_t], ac_cv_have_mode_t, [ 1786 AC_TRY_COMPILE( 1787 [ 1788#include <sys/types.h> 1789 ], 1790 [ mode_t foo; foo = 1235; ], 1791 [ ac_cv_have_mode_t="yes" ], 1792 [ ac_cv_have_mode_t="no" ] 1793 ) 1794]) 1795if test "x$ac_cv_have_mode_t" = "xyes" ; then 1796 AC_DEFINE(HAVE_MODE_T) 1797fi 1798 1799 1800AC_CACHE_CHECK([for struct sockaddr_storage], ac_cv_have_struct_sockaddr_storage, [ 1801 AC_TRY_COMPILE( 1802 [ 1803#include <sys/types.h> 1804#include <sys/socket.h> 1805 ], 1806 [ struct sockaddr_storage s; ], 1807 [ ac_cv_have_struct_sockaddr_storage="yes" ], 1808 [ ac_cv_have_struct_sockaddr_storage="no" ] 1809 ) 1810]) 1811if test "x$ac_cv_have_struct_sockaddr_storage" = "xyes" ; then 1812 AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE) 1813fi 1814 1815AC_CACHE_CHECK([for struct sockaddr_in6], ac_cv_have_struct_sockaddr_in6, [ 1816 AC_TRY_COMPILE( 1817 [ 1818#include <sys/types.h> 1819#include <netinet/in.h> 1820 ], 1821 [ struct sockaddr_in6 s; s.sin6_family = 0; ], 1822 [ ac_cv_have_struct_sockaddr_in6="yes" ], 1823 [ ac_cv_have_struct_sockaddr_in6="no" ] 1824 ) 1825]) 1826if test "x$ac_cv_have_struct_sockaddr_in6" = "xyes" ; then 1827 AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6) 1828fi 1829 1830AC_CACHE_CHECK([for struct in6_addr], ac_cv_have_struct_in6_addr, [ 1831 AC_TRY_COMPILE( 1832 [ 1833#include <sys/types.h> 1834#include <netinet/in.h> 1835 ], 1836 [ struct in6_addr s; s.s6_addr[0] = 0; ], 1837 [ ac_cv_have_struct_in6_addr="yes" ], 1838 [ ac_cv_have_struct_in6_addr="no" ] 1839 ) 1840]) 1841if test "x$ac_cv_have_struct_in6_addr" = "xyes" ; then 1842 AC_DEFINE(HAVE_STRUCT_IN6_ADDR) 1843fi 1844 1845AC_CACHE_CHECK([for struct addrinfo], ac_cv_have_struct_addrinfo, [ 1846 AC_TRY_COMPILE( 1847 [ 1848#include <sys/types.h> 1849#include <sys/socket.h> 1850#include <netdb.h> 1851 ], 1852 [ struct addrinfo s; s.ai_flags = AI_PASSIVE; ], 1853 [ ac_cv_have_struct_addrinfo="yes" ], 1854 [ ac_cv_have_struct_addrinfo="no" ] 1855 ) 1856]) 1857if test "x$ac_cv_have_struct_addrinfo" = "xyes" ; then 1858 AC_DEFINE(HAVE_STRUCT_ADDRINFO) 1859fi 1860 1861AC_CACHE_CHECK([for struct timeval], ac_cv_have_struct_timeval, [ 1862 AC_TRY_COMPILE( 1863 [ #include <sys/time.h> ], 1864 [ struct timeval tv; tv.tv_sec = 1;], 1865 [ ac_cv_have_struct_timeval="yes" ], 1866 [ ac_cv_have_struct_timeval="no" ] 1867 ) 1868]) 1869if test "x$ac_cv_have_struct_timeval" = "xyes" ; then 1870 AC_DEFINE(HAVE_STRUCT_TIMEVAL) 1871 have_struct_timeval=1 1872fi 1873 1874AC_CHECK_TYPES(struct timespec) 1875 1876# We need int64_t or else certian parts of the compile will fail. 1877if test "x$ac_cv_have_int64_t" = "xno" -a \ 1878 "x$ac_cv_sizeof_long_int" != "x8" -a \ 1879 "x$ac_cv_sizeof_long_long_int" = "x0" ; then 1880 echo "OpenSSH requires int64_t support. Contact your vendor or install" 1881 echo "an alternative compiler (I.E., GCC) before continuing." 1882 echo "" 1883 exit 1; 1884else 1885dnl test snprintf (broken on SCO w/gcc) 1886 AC_TRY_RUN( 1887 [ 1888#include <stdio.h> 1889#include <string.h> 1890#ifdef HAVE_SNPRINTF 1891main() 1892{ 1893 char buf[50]; 1894 char expected_out[50]; 1895 int mazsize = 50 ; 1896#if (SIZEOF_LONG_INT == 8) 1897 long int num = 0x7fffffffffffffff; 1898#else 1899 long long num = 0x7fffffffffffffffll; 1900#endif 1901 strcpy(expected_out, "9223372036854775807"); 1902 snprintf(buf, mazsize, "%lld", num); 1903 if(strcmp(buf, expected_out) != 0) 1904 exit(1); 1905 exit(0); 1906} 1907#else 1908main() { exit(0); } 1909#endif 1910 ], [ true ], [ AC_DEFINE(BROKEN_SNPRINTF) ] 1911 ) 1912fi 1913 1914dnl Checks for structure members 1915OSSH_CHECK_HEADER_FOR_FIELD(ut_host, utmp.h, HAVE_HOST_IN_UTMP) 1916OSSH_CHECK_HEADER_FOR_FIELD(ut_host, utmpx.h, HAVE_HOST_IN_UTMPX) 1917OSSH_CHECK_HEADER_FOR_FIELD(syslen, utmpx.h, HAVE_SYSLEN_IN_UTMPX) 1918OSSH_CHECK_HEADER_FOR_FIELD(ut_pid, utmp.h, HAVE_PID_IN_UTMP) 1919OSSH_CHECK_HEADER_FOR_FIELD(ut_type, utmp.h, HAVE_TYPE_IN_UTMP) 1920OSSH_CHECK_HEADER_FOR_FIELD(ut_type, utmpx.h, HAVE_TYPE_IN_UTMPX) 1921OSSH_CHECK_HEADER_FOR_FIELD(ut_tv, utmp.h, HAVE_TV_IN_UTMP) 1922OSSH_CHECK_HEADER_FOR_FIELD(ut_id, utmp.h, HAVE_ID_IN_UTMP) 1923OSSH_CHECK_HEADER_FOR_FIELD(ut_id, utmpx.h, HAVE_ID_IN_UTMPX) 1924OSSH_CHECK_HEADER_FOR_FIELD(ut_addr, utmp.h, HAVE_ADDR_IN_UTMP) 1925OSSH_CHECK_HEADER_FOR_FIELD(ut_addr, utmpx.h, HAVE_ADDR_IN_UTMPX) 1926OSSH_CHECK_HEADER_FOR_FIELD(ut_addr_v6, utmp.h, HAVE_ADDR_V6_IN_UTMP) 1927OSSH_CHECK_HEADER_FOR_FIELD(ut_addr_v6, utmpx.h, HAVE_ADDR_V6_IN_UTMPX) 1928OSSH_CHECK_HEADER_FOR_FIELD(ut_exit, utmp.h, HAVE_EXIT_IN_UTMP) 1929OSSH_CHECK_HEADER_FOR_FIELD(ut_time, utmp.h, HAVE_TIME_IN_UTMP) 1930OSSH_CHECK_HEADER_FOR_FIELD(ut_time, utmpx.h, HAVE_TIME_IN_UTMPX) 1931OSSH_CHECK_HEADER_FOR_FIELD(ut_tv, utmpx.h, HAVE_TV_IN_UTMPX) 1932 1933AC_CHECK_MEMBERS([struct stat.st_blksize]) 1934 1935AC_CACHE_CHECK([for ss_family field in struct sockaddr_storage], 1936 ac_cv_have_ss_family_in_struct_ss, [ 1937 AC_TRY_COMPILE( 1938 [ 1939#include <sys/types.h> 1940#include <sys/socket.h> 1941 ], 1942 [ struct sockaddr_storage s; s.ss_family = 1; ], 1943 [ ac_cv_have_ss_family_in_struct_ss="yes" ], 1944 [ ac_cv_have_ss_family_in_struct_ss="no" ], 1945 ) 1946]) 1947if test "x$ac_cv_have_ss_family_in_struct_ss" = "xyes" ; then 1948 AC_DEFINE(HAVE_SS_FAMILY_IN_SS) 1949fi 1950 1951AC_CACHE_CHECK([for __ss_family field in struct sockaddr_storage], 1952 ac_cv_have___ss_family_in_struct_ss, [ 1953 AC_TRY_COMPILE( 1954 [ 1955#include <sys/types.h> 1956#include <sys/socket.h> 1957 ], 1958 [ struct sockaddr_storage s; s.__ss_family = 1; ], 1959 [ ac_cv_have___ss_family_in_struct_ss="yes" ], 1960 [ ac_cv_have___ss_family_in_struct_ss="no" ] 1961 ) 1962]) 1963if test "x$ac_cv_have___ss_family_in_struct_ss" = "xyes" ; then 1964 AC_DEFINE(HAVE___SS_FAMILY_IN_SS) 1965fi 1966 1967AC_CACHE_CHECK([for pw_class field in struct passwd], 1968 ac_cv_have_pw_class_in_struct_passwd, [ 1969 AC_TRY_COMPILE( 1970 [ 1971#include <pwd.h> 1972 ], 1973 [ struct passwd p; p.pw_class = 0; ], 1974 [ ac_cv_have_pw_class_in_struct_passwd="yes" ], 1975 [ ac_cv_have_pw_class_in_struct_passwd="no" ] 1976 ) 1977]) 1978if test "x$ac_cv_have_pw_class_in_struct_passwd" = "xyes" ; then 1979 AC_DEFINE(HAVE_PW_CLASS_IN_PASSWD) 1980fi 1981 1982AC_CACHE_CHECK([for pw_expire field in struct passwd], 1983 ac_cv_have_pw_expire_in_struct_passwd, [ 1984 AC_TRY_COMPILE( 1985 [ 1986#include <pwd.h> 1987 ], 1988 [ struct passwd p; p.pw_expire = 0; ], 1989 [ ac_cv_have_pw_expire_in_struct_passwd="yes" ], 1990 [ ac_cv_have_pw_expire_in_struct_passwd="no" ] 1991 ) 1992]) 1993if test "x$ac_cv_have_pw_expire_in_struct_passwd" = "xyes" ; then 1994 AC_DEFINE(HAVE_PW_EXPIRE_IN_PASSWD) 1995fi 1996 1997AC_CACHE_CHECK([for pw_change field in struct passwd], 1998 ac_cv_have_pw_change_in_struct_passwd, [ 1999 AC_TRY_COMPILE( 2000 [ 2001#include <pwd.h> 2002 ], 2003 [ struct passwd p; p.pw_change = 0; ], 2004 [ ac_cv_have_pw_change_in_struct_passwd="yes" ], 2005 [ ac_cv_have_pw_change_in_struct_passwd="no" ] 2006 ) 2007]) 2008if test "x$ac_cv_have_pw_change_in_struct_passwd" = "xyes" ; then 2009 AC_DEFINE(HAVE_PW_CHANGE_IN_PASSWD) 2010fi 2011 2012dnl make sure we're using the real structure members and not defines 2013AC_CACHE_CHECK([for msg_accrights field in struct msghdr], 2014 ac_cv_have_accrights_in_msghdr, [ 2015 AC_TRY_RUN( 2016 [ 2017#include <sys/types.h> 2018#include <sys/socket.h> 2019#include <sys/uio.h> 2020int main() { 2021#ifdef msg_accrights 2022exit(1); 2023#endif 2024struct msghdr m; 2025m.msg_accrights = 0; 2026exit(0); 2027} 2028 ], 2029 [ ac_cv_have_accrights_in_msghdr="yes" ], 2030 [ ac_cv_have_accrights_in_msghdr="no" ] 2031 ) 2032]) 2033if test "x$ac_cv_have_accrights_in_msghdr" = "xyes" ; then 2034 AC_DEFINE(HAVE_ACCRIGHTS_IN_MSGHDR) 2035fi 2036 2037AC_CACHE_CHECK([for msg_control field in struct msghdr], 2038 ac_cv_have_control_in_msghdr, [ 2039 AC_TRY_RUN( 2040 [ 2041#include <sys/types.h> 2042#include <sys/socket.h> 2043#include <sys/uio.h> 2044int main() { 2045#ifdef msg_control 2046exit(1); 2047#endif 2048struct msghdr m; 2049m.msg_control = 0; 2050exit(0); 2051} 2052 ], 2053 [ ac_cv_have_control_in_msghdr="yes" ], 2054 [ ac_cv_have_control_in_msghdr="no" ] 2055 ) 2056]) 2057if test "x$ac_cv_have_control_in_msghdr" = "xyes" ; then 2058 AC_DEFINE(HAVE_CONTROL_IN_MSGHDR) 2059fi 2060 2061AC_CACHE_CHECK([if libc defines __progname], ac_cv_libc_defines___progname, [ 2062 AC_TRY_LINK([], 2063 [ extern char *__progname; printf("%s", __progname); ], 2064 [ ac_cv_libc_defines___progname="yes" ], 2065 [ ac_cv_libc_defines___progname="no" ] 2066 ) 2067]) 2068if test "x$ac_cv_libc_defines___progname" = "xyes" ; then 2069 AC_DEFINE(HAVE___PROGNAME) 2070fi 2071 2072AC_CACHE_CHECK([whether $CC implements __FUNCTION__], ac_cv_cc_implements___FUNCTION__, [ 2073 AC_TRY_LINK([ 2074#include <stdio.h> 2075], 2076 [ printf("%s", __FUNCTION__); ], 2077 [ ac_cv_cc_implements___FUNCTION__="yes" ], 2078 [ ac_cv_cc_implements___FUNCTION__="no" ] 2079 ) 2080]) 2081if test "x$ac_cv_cc_implements___FUNCTION__" = "xyes" ; then 2082 AC_DEFINE(HAVE___FUNCTION__) 2083fi 2084 2085AC_CACHE_CHECK([whether $CC implements __func__], ac_cv_cc_implements___func__, [ 2086 AC_TRY_LINK([ 2087#include <stdio.h> 2088], 2089 [ printf("%s", __func__); ], 2090 [ ac_cv_cc_implements___func__="yes" ], 2091 [ ac_cv_cc_implements___func__="no" ] 2092 ) 2093]) 2094if test "x$ac_cv_cc_implements___func__" = "xyes" ; then 2095 AC_DEFINE(HAVE___func__) 2096fi 2097 2098AC_CACHE_CHECK([whether getopt has optreset support], 2099 ac_cv_have_getopt_optreset, [ 2100 AC_TRY_LINK( 2101 [ 2102#if HAVE_GETOPT_H 2103#include <getopt.h> 2104#elif HAVE_UNISTD_H 2105#include <unistd.h> 2106#endif 2107 ], 2108 [ extern int optreset; optreset = 0; ], 2109 [ ac_cv_have_getopt_optreset="yes" ], 2110 [ ac_cv_have_getopt_optreset="no" ] 2111 ) 2112]) 2113if test "x$ac_cv_have_getopt_optreset" = "xyes" ; then 2114 AC_DEFINE(HAVE_GETOPT_OPTRESET) 2115fi 2116 2117AC_CACHE_CHECK([if libc defines sys_errlist], ac_cv_libc_defines_sys_errlist, [ 2118 AC_TRY_LINK([], 2119 [ extern const char *const sys_errlist[]; printf("%s", sys_errlist[0]);], 2120 [ ac_cv_libc_defines_sys_errlist="yes" ], 2121 [ ac_cv_libc_defines_sys_errlist="no" ] 2122 ) 2123]) 2124if test "x$ac_cv_libc_defines_sys_errlist" = "xyes" ; then 2125 AC_DEFINE(HAVE_SYS_ERRLIST) 2126fi 2127 2128 2129AC_CACHE_CHECK([if libc defines sys_nerr], ac_cv_libc_defines_sys_nerr, [ 2130 AC_TRY_LINK([], 2131 [ extern int sys_nerr; printf("%i", sys_nerr);], 2132 [ ac_cv_libc_defines_sys_nerr="yes" ], 2133 [ ac_cv_libc_defines_sys_nerr="no" ] 2134 ) 2135]) 2136if test "x$ac_cv_libc_defines_sys_nerr" = "xyes" ; then 2137 AC_DEFINE(HAVE_SYS_NERR) 2138fi 2139 2140SCARD_MSG="no" 2141# Check whether user wants sectok support 2142AC_ARG_WITH(sectok, 2143 [ --with-sectok Enable smartcard support using libsectok], 2144 [ 2145 if test "x$withval" != "xno" ; then 2146 if test "x$withval" != "xyes" ; then 2147 CPPFLAGS="$CPPFLAGS -I${withval}" 2148 LDFLAGS="$LDFLAGS -L${withval}" 2149 if test ! -z "$need_dash_r" ; then 2150 LDFLAGS="$LDFLAGS -R${withval}" 2151 fi 2152 if test ! -z "$blibpath" ; then 2153 blibpath="$blibpath:${withval}" 2154 fi 2155 fi 2156 AC_CHECK_HEADERS(sectok.h) 2157 if test "$ac_cv_header_sectok_h" != yes; then 2158 AC_MSG_ERROR(Can't find sectok.h) 2159 fi 2160 AC_CHECK_LIB(sectok, sectok_open) 2161 if test "$ac_cv_lib_sectok_sectok_open" != yes; then 2162 AC_MSG_ERROR(Can't find libsectok) 2163 fi 2164 AC_DEFINE(SMARTCARD) 2165 AC_DEFINE(USE_SECTOK) 2166 SCARD_MSG="yes, using sectok" 2167 fi 2168 ] 2169) 2170 2171# Check whether user wants OpenSC support 2172AC_ARG_WITH(opensc, 2173 AC_HELP_STRING([--with-opensc=PFX], 2174 [Enable smartcard support using OpenSC]), 2175 opensc_config_prefix="$withval", opensc_config_prefix="") 2176if test x$opensc_config_prefix != x ; then 2177 OPENSC_CONFIG=$opensc_config_prefix/bin/opensc-config 2178 AC_PATH_PROG(OPENSC_CONFIG, opensc-config, no) 2179 if test "$OPENSC_CONFIG" != "no"; then 2180 LIBOPENSC_CFLAGS=`$OPENSC_CONFIG --cflags` 2181 LIBOPENSC_LIBS=`$OPENSC_CONFIG --libs` 2182 CPPFLAGS="$CPPFLAGS $LIBOPENSC_CFLAGS" 2183 LDFLAGS="$LDFLAGS $LIBOPENSC_LIBS" 2184 AC_DEFINE(SMARTCARD) 2185 AC_DEFINE(USE_OPENSC) 2186 SCARD_MSG="yes, using OpenSC" 2187 fi 2188fi 2189 2190# Check libraries needed by DNS fingerprint support 2191AC_SEARCH_LIBS(getrrsetbyname, resolv, 2192 [AC_DEFINE(HAVE_GETRRSETBYNAME)], 2193 [ 2194 # Needed by our getrrsetbyname() 2195 AC_SEARCH_LIBS(res_query, resolv) 2196 AC_SEARCH_LIBS(dn_expand, resolv) 2197 AC_CHECK_FUNCS(_getshort _getlong) 2198 AC_CHECK_MEMBER(HEADER.ad, 2199 [AC_DEFINE(HAVE_HEADER_AD)],, 2200 [#include <arpa/nameser.h>]) 2201 ]) 2202 2203# Check whether user wants Kerberos 5 support 2204KRB5_MSG="no" 2205AC_ARG_WITH(kerberos5, 2206 [ --with-kerberos5=PATH Enable Kerberos 5 support], 2207 [ if test "x$withval" != "xno" ; then 2208 if test "x$withval" = "xyes" ; then 2209 KRB5ROOT="/usr/local" 2210 else 2211 KRB5ROOT=${withval} 2212 fi 2213 2214 AC_DEFINE(KRB5) 2215 KRB5_MSG="yes" 2216 2217 AC_MSG_CHECKING(for krb5-config) 2218 if test -x $KRB5ROOT/bin/krb5-config ; then 2219 KRB5CONF=$KRB5ROOT/bin/krb5-config 2220 AC_MSG_RESULT($KRB5CONF) 2221 2222 AC_MSG_CHECKING(for gssapi support) 2223 if $KRB5CONF | grep gssapi >/dev/null ; then 2224 AC_MSG_RESULT(yes) 2225 AC_DEFINE(GSSAPI) 2226 k5confopts=gssapi 2227 else 2228 AC_MSG_RESULT(no) 2229 k5confopts="" 2230 fi 2231 K5CFLAGS="`$KRB5CONF --cflags $k5confopts`" 2232 K5LIBS="`$KRB5CONF --libs $k5confopts`" 2233 CPPFLAGS="$CPPFLAGS $K5CFLAGS" 2234 AC_MSG_CHECKING(whether we are using Heimdal) 2235 AC_TRY_COMPILE([ #include <krb5.h> ], 2236 [ char *tmp = heimdal_version; ], 2237 [ AC_MSG_RESULT(yes) 2238 AC_DEFINE(HEIMDAL) ], 2239 AC_MSG_RESULT(no) 2240 ) 2241 else 2242 AC_MSG_RESULT(no) 2243 CPPFLAGS="$CPPFLAGS -I${KRB5ROOT}/include" 2244 LDFLAGS="$LDFLAGS -L${KRB5ROOT}/lib" 2245 AC_MSG_CHECKING(whether we are using Heimdal) 2246 AC_TRY_COMPILE([ #include <krb5.h> ], 2247 [ char *tmp = heimdal_version; ], 2248 [ AC_MSG_RESULT(yes) 2249 AC_DEFINE(HEIMDAL) 2250 K5LIBS="-lkrb5 -ldes -lcom_err -lasn1 -lroken" 2251 ], 2252 [ AC_MSG_RESULT(no) 2253 K5LIBS="-lkrb5 -lk5crypto -lcom_err" 2254 ] 2255 ) 2256 AC_SEARCH_LIBS(dn_expand, resolv) 2257 2258 AC_CHECK_LIB(gssapi,gss_init_sec_context, 2259 [ AC_DEFINE(GSSAPI) 2260 K5LIBS="-lgssapi $K5LIBS" ], 2261 [ AC_CHECK_LIB(gssapi_krb5,gss_init_sec_context, 2262 [ AC_DEFINE(GSSAPI) 2263 K5LIBS="-lgssapi_krb5 $K5LIBS" ], 2264 AC_MSG_WARN([Cannot find any suitable gss-api library - build may fail]), 2265 $K5LIBS) 2266 ], 2267 $K5LIBS) 2268 2269 AC_CHECK_HEADER(gssapi.h, , 2270 [ unset ac_cv_header_gssapi_h 2271 CPPFLAGS="$CPPFLAGS -I${KRB5ROOT}/include/gssapi" 2272 AC_CHECK_HEADERS(gssapi.h, , 2273 AC_MSG_WARN([Cannot find any suitable gss-api header - build may fail]) 2274 ) 2275 ] 2276 ) 2277 2278 oldCPP="$CPPFLAGS" 2279 CPPFLAGS="$CPPFLAGS -I${KRB5ROOT}/include/gssapi" 2280 AC_CHECK_HEADER(gssapi_krb5.h, , 2281 [ CPPFLAGS="$oldCPP" ]) 2282 2283 fi 2284 if test ! -z "$need_dash_r" ; then 2285 LDFLAGS="$LDFLAGS -R${KRB5ROOT}/lib" 2286 fi 2287 if test ! -z "$blibpath" ; then 2288 blibpath="$blibpath:${KRB5ROOT}/lib" 2289 fi 2290 fi 2291 2292 AC_CHECK_HEADERS(gssapi.h gssapi/gssapi.h) 2293 AC_CHECK_HEADERS(gssapi_krb5.h gssapi/gssapi_krb5.h) 2294 AC_CHECK_HEADERS(gssapi_generic.h gssapi/gssapi_generic.h) 2295 2296 LIBS="$LIBS $K5LIBS" 2297 AC_SEARCH_LIBS(k_hasafs, kafs, AC_DEFINE(USE_AFS)) 2298 AC_SEARCH_LIBS(krb5_init_ets, $K5LIBS, AC_DEFINE(KRB5_INIT_ETS)) 2299 ] 2300) 2301 2302# Looking for programs, paths and files 2303 2304PRIVSEP_PATH=/var/empty 2305AC_ARG_WITH(privsep-path, 2306 [ --with-privsep-path=xxx Path for privilege separation chroot (default=/var/empty)], 2307 [ 2308 if test "x$withval" != "$no" ; then 2309 PRIVSEP_PATH=$withval 2310 fi 2311 ] 2312) 2313AC_SUBST(PRIVSEP_PATH) 2314 2315AC_ARG_WITH(xauth, 2316 [ --with-xauth=PATH Specify path to xauth program ], 2317 [ 2318 if test "x$withval" != "xno" ; then 2319 xauth_path=$withval 2320 fi 2321 ], 2322 [ 2323 TestPath="$PATH" 2324 TestPath="${TestPath}${PATH_SEPARATOR}/usr/X/bin" 2325 TestPath="${TestPath}${PATH_SEPARATOR}/usr/bin/X11" 2326 TestPath="${TestPath}${PATH_SEPARATOR}/usr/X11R6/bin" 2327 TestPath="${TestPath}${PATH_SEPARATOR}/usr/openwin/bin" 2328 AC_PATH_PROG(xauth_path, xauth, , $TestPath) 2329 if (test ! -z "$xauth_path" && test -x "/usr/openwin/bin/xauth") ; then 2330 xauth_path="/usr/openwin/bin/xauth" 2331 fi 2332 ] 2333) 2334 2335STRIP_OPT=-s 2336AC_ARG_ENABLE(strip, 2337 [ --disable-strip Disable calling strip(1) on install], 2338 [ 2339 if test "x$enableval" = "xno" ; then 2340 STRIP_OPT= 2341 fi 2342 ] 2343) 2344AC_SUBST(STRIP_OPT) 2345 2346if test -z "$xauth_path" ; then 2347 XAUTH_PATH="undefined" 2348 AC_SUBST(XAUTH_PATH) 2349else 2350 AC_DEFINE_UNQUOTED(XAUTH_PATH, "$xauth_path") 2351 XAUTH_PATH=$xauth_path 2352 AC_SUBST(XAUTH_PATH) 2353fi 2354 2355# Check for mail directory (last resort if we cannot get it from headers) 2356if test ! -z "$MAIL" ; then 2357 maildir=`dirname $MAIL` 2358 AC_DEFINE_UNQUOTED(MAIL_DIRECTORY, "$maildir") 2359fi 2360 2361if test -z "$no_dev_ptmx" ; then 2362 if test "x$disable_ptmx_check" != "xyes" ; then 2363 AC_CHECK_FILE("/dev/ptmx", 2364 [ 2365 AC_DEFINE_UNQUOTED(HAVE_DEV_PTMX) 2366 have_dev_ptmx=1 2367 ] 2368 ) 2369 fi 2370fi 2371AC_CHECK_FILE("/dev/ptc", 2372 [ 2373 AC_DEFINE_UNQUOTED(HAVE_DEV_PTS_AND_PTC) 2374 have_dev_ptc=1 2375 ] 2376) 2377 2378# Options from here on. Some of these are preset by platform above 2379AC_ARG_WITH(mantype, 2380 [ --with-mantype=man|cat|doc Set man page type], 2381 [ 2382 case "$withval" in 2383 man|cat|doc) 2384 MANTYPE=$withval 2385 ;; 2386 *) 2387 AC_MSG_ERROR(invalid man type: $withval) 2388 ;; 2389 esac 2390 ] 2391) 2392if test -z "$MANTYPE"; then 2393 TestPath="/usr/bin${PATH_SEPARATOR}/usr/ucb" 2394 AC_PATH_PROGS(NROFF, nroff awf, /bin/false, $TestPath) 2395 if ${NROFF} -mdoc ${srcdir}/ssh.1 >/dev/null 2>&1; then 2396 MANTYPE=doc 2397 elif ${NROFF} -man ${srcdir}/ssh.1 >/dev/null 2>&1; then 2398 MANTYPE=man 2399 else 2400 MANTYPE=cat 2401 fi 2402fi 2403AC_SUBST(MANTYPE) 2404if test "$MANTYPE" = "doc"; then 2405 mansubdir=man; 2406else 2407 mansubdir=$MANTYPE; 2408fi 2409AC_SUBST(mansubdir) 2410 2411# Check whether to enable MD5 passwords 2412MD5_MSG="no" 2413AC_ARG_WITH(md5-passwords, 2414 [ --with-md5-passwords Enable use of MD5 passwords], 2415 [ 2416 if test "x$withval" != "xno" ; then 2417 AC_DEFINE(HAVE_MD5_PASSWORDS) 2418 MD5_MSG="yes" 2419 fi 2420 ] 2421) 2422 2423# Whether to disable shadow password support 2424AC_ARG_WITH(shadow, 2425 [ --without-shadow Disable shadow password support], 2426 [ 2427 if test "x$withval" = "xno" ; then 2428 AC_DEFINE(DISABLE_SHADOW) 2429 disable_shadow=yes 2430 fi 2431 ] 2432) 2433 2434if test -z "$disable_shadow" ; then 2435 AC_MSG_CHECKING([if the systems has expire shadow information]) 2436 AC_TRY_COMPILE( 2437 [ 2438#include <sys/types.h> 2439#include <shadow.h> 2440 struct spwd sp; 2441 ],[ sp.sp_expire = sp.sp_lstchg = sp.sp_inact = 0; ], 2442 [ sp_expire_available=yes ], [] 2443 ) 2444 2445 if test "x$sp_expire_available" = "xyes" ; then 2446 AC_MSG_RESULT(yes) 2447 AC_DEFINE(HAS_SHADOW_EXPIRE) 2448 else 2449 AC_MSG_RESULT(no) 2450 fi 2451fi 2452 2453# Use ip address instead of hostname in $DISPLAY 2454if test ! -z "$IPADDR_IN_DISPLAY" ; then 2455 DISPLAY_HACK_MSG="yes" 2456 AC_DEFINE(IPADDR_IN_DISPLAY) 2457else 2458 DISPLAY_HACK_MSG="no" 2459 AC_ARG_WITH(ipaddr-display, 2460 [ --with-ipaddr-display Use ip address instead of hostname in \$DISPLAY], 2461 [ 2462 if test "x$withval" != "xno" ; then 2463 AC_DEFINE(IPADDR_IN_DISPLAY) 2464 DISPLAY_HACK_MSG="yes" 2465 fi 2466 ] 2467 ) 2468fi 2469 2470# check for /etc/default/login and use it if present. 2471AC_ARG_ENABLE(etc-default-login, 2472 [ --disable-etc-default-login Disable using PATH from /etc/default/login [no]],, 2473[ 2474AC_CHECK_FILE("/etc/default/login", [ external_path_file=/etc/default/login ]) 2475 2476if test "x$external_path_file" = "x/etc/default/login"; then 2477 AC_DEFINE(HAVE_ETC_DEFAULT_LOGIN) 2478fi 2479]) 2480 2481dnl BSD systems use /etc/login.conf so --with-default-path= has no effect 2482if test $ac_cv_func_login_getcapbool = "yes" -a \ 2483 $ac_cv_header_login_cap_h = "yes" ; then 2484 external_path_file=/etc/login.conf 2485fi 2486 2487# Whether to mess with the default path 2488SERVER_PATH_MSG="(default)" 2489AC_ARG_WITH(default-path, 2490 [ --with-default-path= Specify default \$PATH environment for server], 2491 [ 2492 if test "x$external_path_file" = "x/etc/login.conf" ; then 2493 AC_MSG_WARN([ 2494--with-default-path=PATH has no effect on this system. 2495Edit /etc/login.conf instead.]) 2496 elif test "x$withval" != "xno" ; then 2497 if test ! -z "$external_path_file" ; then 2498 AC_MSG_WARN([ 2499--with-default-path=PATH will only be used if PATH is not defined in 2500$external_path_file .]) 2501 fi 2502 user_path="$withval" 2503 SERVER_PATH_MSG="$withval" 2504 fi 2505 ], 2506 [ if test "x$external_path_file" = "x/etc/login.conf" ; then 2507 AC_MSG_WARN([Make sure the path to scp is in /etc/login.conf]) 2508 else 2509 if test ! -z "$external_path_file" ; then 2510 AC_MSG_WARN([ 2511If PATH is defined in $external_path_file, ensure the path to scp is included, 2512otherwise scp will not work.]) 2513 fi 2514 AC_TRY_RUN( 2515 [ 2516/* find out what STDPATH is */ 2517#include <stdio.h> 2518#ifdef HAVE_PATHS_H 2519# include <paths.h> 2520#endif 2521#ifndef _PATH_STDPATH 2522# ifdef _PATH_USERPATH /* Irix */ 2523# define _PATH_STDPATH _PATH_USERPATH 2524# else 2525# define _PATH_STDPATH "/usr/bin:/bin:/usr/sbin:/sbin" 2526# endif 2527#endif 2528#include <sys/types.h> 2529#include <sys/stat.h> 2530#include <fcntl.h> 2531#define DATA "conftest.stdpath" 2532 2533main() 2534{ 2535 FILE *fd; 2536 int rc; 2537 2538 fd = fopen(DATA,"w"); 2539 if(fd == NULL) 2540 exit(1); 2541 2542 if ((rc = fprintf(fd,"%s", _PATH_STDPATH)) < 0) 2543 exit(1); 2544 2545 exit(0); 2546} 2547 ], [ user_path=`cat conftest.stdpath` ], 2548 [ user_path="/usr/bin:/bin:/usr/sbin:/sbin" ], 2549 [ user_path="/usr/bin:/bin:/usr/sbin:/sbin" ] 2550 ) 2551# make sure $bindir is in USER_PATH so scp will work 2552 t_bindir=`eval echo ${bindir}` 2553 case $t_bindir in 2554 NONE/*) t_bindir=`echo $t_bindir | sed "s~NONE~$prefix~"` ;; 2555 esac 2556 case $t_bindir in 2557 NONE/*) t_bindir=`echo $t_bindir | sed "s~NONE~$ac_default_prefix~"` ;; 2558 esac 2559 echo $user_path | grep ":$t_bindir" > /dev/null 2>&1 2560 if test $? -ne 0 ; then 2561 echo $user_path | grep "^$t_bindir" > /dev/null 2>&1 2562 if test $? -ne 0 ; then 2563 user_path=$user_path:$t_bindir 2564 AC_MSG_RESULT(Adding $t_bindir to USER_PATH so scp will work) 2565 fi 2566 fi 2567 fi ] 2568) 2569if test "x$external_path_file" != "x/etc/login.conf" ; then 2570 AC_DEFINE_UNQUOTED(USER_PATH, "$user_path") 2571 AC_SUBST(user_path) 2572fi 2573 2574# Set superuser path separately to user path 2575AC_ARG_WITH(superuser-path, 2576 [ --with-superuser-path= Specify different path for super-user], 2577 [ 2578 if test "x$withval" != "xno" ; then 2579 AC_DEFINE_UNQUOTED(SUPERUSER_PATH, "$withval") 2580 superuser_path=$withval 2581 fi 2582 ] 2583) 2584 2585 2586AC_MSG_CHECKING([if we need to convert IPv4 in IPv6-mapped addresses]) 2587IPV4_IN6_HACK_MSG="no" 2588AC_ARG_WITH(4in6, 2589 [ --with-4in6 Check for and convert IPv4 in IPv6 mapped addresses], 2590 [ 2591 if test "x$withval" != "xno" ; then 2592 AC_MSG_RESULT(yes) 2593 AC_DEFINE(IPV4_IN_IPV6) 2594 IPV4_IN6_HACK_MSG="yes" 2595 else 2596 AC_MSG_RESULT(no) 2597 fi 2598 ],[ 2599 if test "x$inet6_default_4in6" = "xyes"; then 2600 AC_MSG_RESULT([yes (default)]) 2601 AC_DEFINE(IPV4_IN_IPV6) 2602 IPV4_IN6_HACK_MSG="yes" 2603 else 2604 AC_MSG_RESULT([no (default)]) 2605 fi 2606 ] 2607) 2608 2609# Whether to enable BSD auth support 2610BSD_AUTH_MSG=no 2611AC_ARG_WITH(bsd-auth, 2612 [ --with-bsd-auth Enable BSD auth support], 2613 [ 2614 if test "x$withval" != "xno" ; then 2615 AC_DEFINE(BSD_AUTH) 2616 BSD_AUTH_MSG=yes 2617 fi 2618 ] 2619) 2620 2621# Where to place sshd.pid 2622piddir=/var/run 2623# make sure the directory exists 2624if test ! -d $piddir ; then 2625 piddir=`eval echo ${sysconfdir}` 2626 case $piddir in 2627 NONE/*) piddir=`echo $piddir | sed "s~NONE~$ac_default_prefix~"` ;; 2628 esac 2629fi 2630 2631AC_ARG_WITH(pid-dir, 2632 [ --with-pid-dir=PATH Specify location of ssh.pid file], 2633 [ 2634 if test "x$withval" != "xno" ; then 2635 piddir=$withval 2636 if test ! -d $piddir ; then 2637 AC_MSG_WARN([** no $piddir directory on this system **]) 2638 fi 2639 fi 2640 ] 2641) 2642 2643AC_DEFINE_UNQUOTED(_PATH_SSH_PIDDIR, "$piddir") 2644AC_SUBST(piddir) 2645 2646dnl allow user to disable some login recording features 2647AC_ARG_ENABLE(lastlog, 2648 [ --disable-lastlog disable use of lastlog even if detected [no]], 2649 [ 2650 if test "x$enableval" = "xno" ; then 2651 AC_DEFINE(DISABLE_LASTLOG) 2652 fi 2653 ] 2654) 2655AC_ARG_ENABLE(utmp, 2656 [ --disable-utmp disable use of utmp even if detected [no]], 2657 [ 2658 if test "x$enableval" = "xno" ; then 2659 AC_DEFINE(DISABLE_UTMP) 2660 fi 2661 ] 2662) 2663AC_ARG_ENABLE(utmpx, 2664 [ --disable-utmpx disable use of utmpx even if detected [no]], 2665 [ 2666 if test "x$enableval" = "xno" ; then 2667 AC_DEFINE(DISABLE_UTMPX) 2668 fi 2669 ] 2670) 2671AC_ARG_ENABLE(wtmp, 2672 [ --disable-wtmp disable use of wtmp even if detected [no]], 2673 [ 2674 if test "x$enableval" = "xno" ; then 2675 AC_DEFINE(DISABLE_WTMP) 2676 fi 2677 ] 2678) 2679AC_ARG_ENABLE(wtmpx, 2680 [ --disable-wtmpx disable use of wtmpx even if detected [no]], 2681 [ 2682 if test "x$enableval" = "xno" ; then 2683 AC_DEFINE(DISABLE_WTMPX) 2684 fi 2685 ] 2686) 2687AC_ARG_ENABLE(libutil, 2688 [ --disable-libutil disable use of libutil (login() etc.) [no]], 2689 [ 2690 if test "x$enableval" = "xno" ; then 2691 AC_DEFINE(DISABLE_LOGIN) 2692 fi 2693 ] 2694) 2695AC_ARG_ENABLE(pututline, 2696 [ --disable-pututline disable use of pututline() etc. ([uw]tmp) [no]], 2697 [ 2698 if test "x$enableval" = "xno" ; then 2699 AC_DEFINE(DISABLE_PUTUTLINE) 2700 fi 2701 ] 2702) 2703AC_ARG_ENABLE(pututxline, 2704 [ --disable-pututxline disable use of pututxline() etc. ([uw]tmpx) [no]], 2705 [ 2706 if test "x$enableval" = "xno" ; then 2707 AC_DEFINE(DISABLE_PUTUTXLINE) 2708 fi 2709 ] 2710) 2711AC_ARG_WITH(lastlog, 2712 [ --with-lastlog=FILE|DIR specify lastlog location [common locations]], 2713 [ 2714 if test "x$withval" = "xno" ; then 2715 AC_DEFINE(DISABLE_LASTLOG) 2716 else 2717 conf_lastlog_location=$withval 2718 fi 2719 ] 2720) 2721 2722dnl lastlog, [uw]tmpx? detection 2723dnl NOTE: set the paths in the platform section to avoid the 2724dnl need for command-line parameters 2725dnl lastlog and [uw]tmp are subject to a file search if all else fails 2726 2727dnl lastlog detection 2728dnl NOTE: the code itself will detect if lastlog is a directory 2729AC_MSG_CHECKING([if your system defines LASTLOG_FILE]) 2730AC_TRY_COMPILE([ 2731#include <sys/types.h> 2732#include <utmp.h> 2733#ifdef HAVE_LASTLOG_H 2734# include <lastlog.h> 2735#endif 2736#ifdef HAVE_PATHS_H 2737# include <paths.h> 2738#endif 2739#ifdef HAVE_LOGIN_H 2740# include <login.h> 2741#endif 2742 ], 2743 [ char *lastlog = LASTLOG_FILE; ], 2744 [ AC_MSG_RESULT(yes) ], 2745 [ 2746 AC_MSG_RESULT(no) 2747 AC_MSG_CHECKING([if your system defines _PATH_LASTLOG]) 2748 AC_TRY_COMPILE([ 2749#include <sys/types.h> 2750#include <utmp.h> 2751#ifdef HAVE_LASTLOG_H 2752# include <lastlog.h> 2753#endif 2754#ifdef HAVE_PATHS_H 2755# include <paths.h> 2756#endif 2757 ], 2758 [ char *lastlog = _PATH_LASTLOG; ], 2759 [ AC_MSG_RESULT(yes) ], 2760 [ 2761 AC_MSG_RESULT(no) 2762 system_lastlog_path=no 2763 ]) 2764 ] 2765) 2766 2767if test -z "$conf_lastlog_location"; then 2768 if test x"$system_lastlog_path" = x"no" ; then 2769 for f in /var/log/lastlog /usr/adm/lastlog /var/adm/lastlog /etc/security/lastlog ; do 2770 if (test -d "$f" || test -f "$f") ; then 2771 conf_lastlog_location=$f 2772 fi 2773 done 2774 if test -z "$conf_lastlog_location"; then 2775 AC_MSG_WARN([** Cannot find lastlog **]) 2776 dnl Don't define DISABLE_LASTLOG - that means we don't try wtmp/wtmpx 2777 fi 2778 fi 2779fi 2780 2781if test -n "$conf_lastlog_location"; then 2782 AC_DEFINE_UNQUOTED(CONF_LASTLOG_FILE, "$conf_lastlog_location") 2783fi 2784 2785dnl utmp detection 2786AC_MSG_CHECKING([if your system defines UTMP_FILE]) 2787AC_TRY_COMPILE([ 2788#include <sys/types.h> 2789#include <utmp.h> 2790#ifdef HAVE_PATHS_H 2791# include <paths.h> 2792#endif 2793 ], 2794 [ char *utmp = UTMP_FILE; ], 2795 [ AC_MSG_RESULT(yes) ], 2796 [ AC_MSG_RESULT(no) 2797 system_utmp_path=no ] 2798) 2799if test -z "$conf_utmp_location"; then 2800 if test x"$system_utmp_path" = x"no" ; then 2801 for f in /etc/utmp /usr/adm/utmp /var/run/utmp; do 2802 if test -f $f ; then 2803 conf_utmp_location=$f 2804 fi 2805 done 2806 if test -z "$conf_utmp_location"; then 2807 AC_DEFINE(DISABLE_UTMP) 2808 fi 2809 fi 2810fi 2811if test -n "$conf_utmp_location"; then 2812 AC_DEFINE_UNQUOTED(CONF_UTMP_FILE, "$conf_utmp_location") 2813fi 2814 2815dnl wtmp detection 2816AC_MSG_CHECKING([if your system defines WTMP_FILE]) 2817AC_TRY_COMPILE([ 2818#include <sys/types.h> 2819#include <utmp.h> 2820#ifdef HAVE_PATHS_H 2821# include <paths.h> 2822#endif 2823 ], 2824 [ char *wtmp = WTMP_FILE; ], 2825 [ AC_MSG_RESULT(yes) ], 2826 [ AC_MSG_RESULT(no) 2827 system_wtmp_path=no ] 2828) 2829if test -z "$conf_wtmp_location"; then 2830 if test x"$system_wtmp_path" = x"no" ; then 2831 for f in /usr/adm/wtmp /var/log/wtmp; do 2832 if test -f $f ; then 2833 conf_wtmp_location=$f 2834 fi 2835 done 2836 if test -z "$conf_wtmp_location"; then 2837 AC_DEFINE(DISABLE_WTMP) 2838 fi 2839 fi 2840fi 2841if test -n "$conf_wtmp_location"; then 2842 AC_DEFINE_UNQUOTED(CONF_WTMP_FILE, "$conf_wtmp_location") 2843fi 2844 2845 2846dnl utmpx detection - I don't know any system so perverse as to require 2847dnl utmpx, but not define UTMPX_FILE (ditto wtmpx.) No doubt it's out 2848dnl there, though. 2849AC_MSG_CHECKING([if your system defines UTMPX_FILE]) 2850AC_TRY_COMPILE([ 2851#include <sys/types.h> 2852#include <utmp.h> 2853#ifdef HAVE_UTMPX_H 2854#include <utmpx.h> 2855#endif 2856#ifdef HAVE_PATHS_H 2857# include <paths.h> 2858#endif 2859 ], 2860 [ char *utmpx = UTMPX_FILE; ], 2861 [ AC_MSG_RESULT(yes) ], 2862 [ AC_MSG_RESULT(no) 2863 system_utmpx_path=no ] 2864) 2865if test -z "$conf_utmpx_location"; then 2866 if test x"$system_utmpx_path" = x"no" ; then 2867 AC_DEFINE(DISABLE_UTMPX) 2868 fi 2869else 2870 AC_DEFINE_UNQUOTED(CONF_UTMPX_FILE, "$conf_utmpx_location") 2871fi 2872 2873dnl wtmpx detection 2874AC_MSG_CHECKING([if your system defines WTMPX_FILE]) 2875AC_TRY_COMPILE([ 2876#include <sys/types.h> 2877#include <utmp.h> 2878#ifdef HAVE_UTMPX_H 2879#include <utmpx.h> 2880#endif 2881#ifdef HAVE_PATHS_H 2882# include <paths.h> 2883#endif 2884 ], 2885 [ char *wtmpx = WTMPX_FILE; ], 2886 [ AC_MSG_RESULT(yes) ], 2887 [ AC_MSG_RESULT(no) 2888 system_wtmpx_path=no ] 2889) 2890if test -z "$conf_wtmpx_location"; then 2891 if test x"$system_wtmpx_path" = x"no" ; then 2892 AC_DEFINE(DISABLE_WTMPX) 2893 fi 2894else 2895 AC_DEFINE_UNQUOTED(CONF_WTMPX_FILE, "$conf_wtmpx_location") 2896fi 2897 2898 2899if test ! -z "$blibpath" ; then 2900 LDFLAGS="$LDFLAGS $blibflags$blibpath" 2901 AC_MSG_WARN([Please check and edit blibpath in LDFLAGS in Makefile]) 2902fi 2903 2904dnl remove pam and dl because they are in $LIBPAM 2905if test "$PAM_MSG" = yes ; then 2906 LIBS=`echo $LIBS | sed 's/-lpam //'` 2907fi 2908if test "$ac_cv_lib_pam_pam_set_item" = yes ; then 2909 LIBS=`echo $LIBS | sed 's/-ldl //'` 2910fi 2911 2912AC_EXEEXT 2913AC_CONFIG_FILES([Makefile openbsd-compat/Makefile scard/Makefile ssh_prng_cmds]) 2914AC_OUTPUT 2915 2916# Print summary of options 2917 2918# Someone please show me a better way :) 2919A=`eval echo ${prefix}` ; A=`eval echo ${A}` 2920B=`eval echo ${bindir}` ; B=`eval echo ${B}` 2921C=`eval echo ${sbindir}` ; C=`eval echo ${C}` 2922D=`eval echo ${sysconfdir}` ; D=`eval echo ${D}` 2923E=`eval echo ${libexecdir}/ssh-askpass` ; E=`eval echo ${E}` 2924F=`eval echo ${mandir}/${mansubdir}X` ; F=`eval echo ${F}` 2925G=`eval echo ${piddir}` ; G=`eval echo ${G}` 2926H=`eval echo ${PRIVSEP_PATH}` ; H=`eval echo ${H}` 2927I=`eval echo ${user_path}` ; I=`eval echo ${I}` 2928J=`eval echo ${superuser_path}` ; J=`eval echo ${J}` 2929 2930echo "" 2931echo "OpenSSH has been configured with the following options:" 2932echo " User binaries: $B" 2933echo " System binaries: $C" 2934echo " Configuration files: $D" 2935echo " Askpass program: $E" 2936echo " Manual pages: $F" 2937echo " PID file: $G" 2938echo " Privilege separation chroot path: $H" 2939if test "x$external_path_file" = "x/etc/login.conf" ; then 2940echo " At runtime, sshd will use the path defined in $external_path_file" 2941echo " Make sure the path to scp is present, otherwise scp will not work" 2942else 2943echo " sshd default user PATH: $I" 2944 if test ! -z "$external_path_file"; then 2945echo " (If PATH is set in $external_path_file it will be used instead. If" 2946echo " used, ensure the path to scp is present, otherwise scp will not work.)" 2947 fi 2948fi 2949if test ! -z "$superuser_path" ; then 2950echo " sshd superuser user PATH: $J" 2951fi 2952echo " Manpage format: $MANTYPE" 2953echo " PAM support: $PAM_MSG" 2954echo " KerberosV support: $KRB5_MSG" 2955echo " Smartcard support: $SCARD_MSG" 2956echo " S/KEY support: $SKEY_MSG" 2957echo " OPIE support: $OPIE_MSG" 2958echo " TCP Wrappers support: $TCPW_MSG" 2959echo " MD5 password support: $MD5_MSG" 2960echo " IP address in \$DISPLAY hack: $DISPLAY_HACK_MSG" 2961echo " Translate v4 in v6 hack: $IPV4_IN6_HACK_MSG" 2962echo " BSD Auth support: $BSD_AUTH_MSG" 2963echo " Random number source: $RAND_MSG" 2964if test ! -z "$USE_RAND_HELPER" ; then 2965echo " ssh-rand-helper collects from: $RAND_HELPER_MSG" 2966fi 2967 2968echo "" 2969 2970echo " Host: ${host}" 2971echo " Compiler: ${CC}" 2972echo " Compiler flags: ${CFLAGS}" 2973echo "Preprocessor flags: ${CPPFLAGS}" 2974echo " Linker flags: ${LDFLAGS}" 2975echo " Libraries: ${LIBWRAP} ${LIBPAM} ${LIBS}" 2976 2977echo "" 2978 2979if test "x$PAM_MSG" = "xyes" ; then 2980 echo "PAM is enabled. You may need to install a PAM control file " 2981 echo "for sshd, otherwise password authentication may fail. " 2982 echo "Example PAM control files can be found in the contrib/ " 2983 echo "subdirectory" 2984 echo "" 2985fi 2986 2987if test ! -z "$RAND_HELPER_CMDHASH" ; then 2988 echo "WARNING: you are using the builtin random number collection " 2989 echo "service. Please read WARNING.RNG and request that your OS " 2990 echo "vendor includes kernel-based random number collection in " 2991 echo "future versions of your OS." 2992 echo "" 2993fi 2994 2995