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