1 # $Id: configure.ac,v 1.351 2006/08/18 22:38:23 djm Exp $
3 # Copyright (c) 1999-2004 Damien Miller
5 # Permission to use, copy, modify, and distribute this software for any
6 # purpose with or without fee is hereby granted, provided that the above
7 # copyright notice and this permission notice appear in all copies.
9 # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 AC_INIT(OpenSSH, Portable, openssh-unix-dev@mindrot.org)
18 AC_REVISION($Revision: 1.351 $)
19 AC_CONFIG_SRCDIR([ssh.c])
21 AC_CONFIG_HEADER(config.h)
26 # Checks for programs.
33 AC_PATH_PROG(CAT, cat)
34 AC_PATH_PROG(KILL, kill)
35 AC_PATH_PROGS(PERL, perl5 perl)
36 AC_PATH_PROG(SED, sed)
38 AC_PATH_PROG(ENT, ent)
40 AC_PATH_PROG(TEST_MINUS_S_SH, bash)
41 AC_PATH_PROG(TEST_MINUS_S_SH, ksh)
42 AC_PATH_PROG(TEST_MINUS_S_SH, sh)
44 AC_SUBST(TEST_SHELL,sh)
47 AC_PATH_PROG(PATH_GROUPADD_PROG, groupadd, groupadd,
48 [/usr/sbin${PATH_SEPARATOR}/etc])
49 AC_PATH_PROG(PATH_USERADD_PROG, useradd, useradd,
50 [/usr/sbin${PATH_SEPARATOR}/etc])
51 AC_CHECK_PROG(MAKE_PACKAGE_SUPPORTED, pkgmk, yes, no)
52 if test -x /sbin/sh; then
53 AC_SUBST(STARTUP_SCRIPT_SHELL,/sbin/sh)
55 AC_SUBST(STARTUP_SCRIPT_SHELL,/bin/sh)
61 if test -z "$AR" ; then
62 AC_MSG_ERROR([*** 'ar' missing, please install or fix your \$PATH ***])
65 # Use LOGIN_PROGRAM from environment if possible
66 if test ! -z "$LOGIN_PROGRAM" ; then
67 AC_DEFINE_UNQUOTED(LOGIN_PROGRAM_FALLBACK, "$LOGIN_PROGRAM",
68 [If your header files don't define LOGIN_PROGRAM,
69 then use this (detected) from environment and PATH])
72 AC_PATH_PROG(LOGIN_PROGRAM_FALLBACK, login)
73 if test ! -z "$LOGIN_PROGRAM_FALLBACK" ; then
74 AC_DEFINE_UNQUOTED(LOGIN_PROGRAM_FALLBACK, "$LOGIN_PROGRAM_FALLBACK")
78 AC_PATH_PROG(PATH_PASSWD_PROG, passwd)
79 if test ! -z "$PATH_PASSWD_PROG" ; then
80 AC_DEFINE_UNQUOTED(_PATH_PASSWD_PROG, "$PATH_PASSWD_PROG",
81 [Full path of your "passwd" program])
84 if test -z "$LD" ; then
91 AC_CHECK_DECL(LLONG_MAX, have_llong_max=1, , [#include <limits.h>])
93 if test "$GCC" = "yes" || test "$GCC" = "egcs"; then
94 CFLAGS="$CFLAGS -Wall -Wpointer-arith -Wuninitialized"
95 GCC_VER=`$CC -v 2>&1 | $AWK '/gcc version /{print $3}'`
98 2.8* | 2.9*) CFLAGS="$CFLAGS -Wsign-compare" ;;
100 3.*) CFLAGS="$CFLAGS -Wsign-compare" ;;
101 4.*) CFLAGS="$CFLAGS -Wsign-compare -Wno-pointer-sign" ;;
105 if test -z "$have_llong_max"; then
106 # retry LLONG_MAX with -std=gnu99, needed on some Linuxes
107 unset ac_cv_have_decl_LLONG_MAX
108 saved_CFLAGS="$CFLAGS"
109 CFLAGS="$CFLAGS -std=gnu99"
110 AC_CHECK_DECL(LLONG_MAX,
112 [CFLAGS="$saved_CFLAGS"],
113 [#include <limits.h>]
119 [ --without-rpath Disable auto-added -R linker paths],
121 if test "x$withval" = "xno" ; then
124 if test "x$withval" = "xyes" ; then
130 # Check for some target-specific stuff
133 AC_MSG_CHECKING([how to specify blibpath for linker ($LD)])
134 if (test -z "$blibpath"); then
135 blibpath="/usr/lib:/lib"
137 saved_LDFLAGS="$LDFLAGS"
138 if test "$GCC" = "yes"; then
139 flags="-Wl,-blibpath: -Wl,-rpath, -blibpath:"
141 flags="-blibpath: -Wl,-blibpath: -Wl,-rpath,"
143 for tryflags in $flags ;do
144 if (test -z "$blibflags"); then
145 LDFLAGS="$saved_LDFLAGS $tryflags$blibpath"
146 AC_TRY_LINK([], [], [blibflags=$tryflags])
149 if (test -z "$blibflags"); then
150 AC_MSG_RESULT(not found)
151 AC_MSG_ERROR([*** must be able to specify blibpath on AIX - check config.log])
153 AC_MSG_RESULT($blibflags)
155 LDFLAGS="$saved_LDFLAGS"
156 dnl Check for authenticate. Might be in libs.a on older AIXes
157 AC_CHECK_FUNC(authenticate, [AC_DEFINE(WITH_AIXAUTHENTICATE, 1,
158 [Define if you want to enable AIX4's authenticate function])],
159 [AC_CHECK_LIB(s,authenticate,
160 [ AC_DEFINE(WITH_AIXAUTHENTICATE)
164 dnl Check for various auth function declarations in headers.
165 AC_CHECK_DECLS([authenticate, loginrestrictions, loginsuccess,
166 passwdexpired, setauthdb], , , [#include <usersec.h>])
167 dnl Check if loginfailed is declared and takes 4 arguments (AIX >= 5.2)
168 AC_CHECK_DECLS(loginfailed,
169 [AC_MSG_CHECKING(if loginfailed takes 4 arguments)
171 [#include <usersec.h>],
172 [(void)loginfailed("user","host","tty",0);],
174 AC_DEFINE(AIX_LOGINFAILED_4ARG, 1,
175 [Define if your AIX loginfailed() function
176 takes 4 arguments (AIX >= 5.2)])],
180 [#include <usersec.h>]
182 AC_CHECK_FUNCS(setauthdb)
183 AC_CHECK_DECL(F_CLOSEM,
184 AC_DEFINE(HAVE_FCNTL_CLOSEM, 1, [Use F_CLOSEM fcntl for closefrom]),
186 [ #include <limits.h>
189 check_for_aix_broken_getaddrinfo=1
190 AC_DEFINE(BROKEN_REALPATH, 1, [Define if you have a broken realpath.])
191 AC_DEFINE(SETEUID_BREAKS_SETUID, 1,
192 [Define if your platform breaks doing a seteuid before a setuid])
193 AC_DEFINE(BROKEN_SETREUID, 1, [Define if your setreuid() is broken])
194 AC_DEFINE(BROKEN_SETREGID, 1, [Define if your setregid() is broken])
195 dnl AIX handles lastlog as part of its login message
196 AC_DEFINE(DISABLE_LASTLOG, 1, [Define if you don't want to use lastlog])
197 AC_DEFINE(LOGIN_NEEDS_UTMPX, 1,
198 [Some systems need a utmpx entry for /bin/login to work])
199 AC_DEFINE(SPT_TYPE,SPT_REUSEARGV,
200 [Define to a Set Process Title type if your system is
201 supported by bsd-setproctitle.c])
202 AC_DEFINE(SSHPAM_CHAUTHTOK_NEEDS_RUID, 1,
203 [AIX 5.2 and 5.3 (and presumably newer) require this])
204 AC_DEFINE(PTY_ZEROREAD, 1, [read(1) can return 0 for a non-closed fd])
207 check_for_libcrypt_later=1
208 LIBS="$LIBS /usr/lib/textmode.o"
209 AC_DEFINE(HAVE_CYGWIN, 1, [Define if you are on Cygwin])
210 AC_DEFINE(USE_PIPES, 1, [Use PIPES instead of a socketpair()])
211 AC_DEFINE(DISABLE_SHADOW, 1,
212 [Define if you want to disable shadow passwords])
213 AC_DEFINE(IP_TOS_IS_BROKEN, 1,
214 [Define if your system choked on IP TOS setting])
215 AC_DEFINE(NO_X11_UNIX_SOCKETS, 1,
216 [Define if X11 doesn't support AF_UNIX sockets on that system])
217 AC_DEFINE(NO_IPPORT_RESERVED_CONCEPT, 1,
218 [Define if the concept of ports only accessible to
219 superusers isn't known])
220 AC_DEFINE(DISABLE_FD_PASSING, 1,
221 [Define if your platform needs to skip post auth
222 file descriptor passing])
225 AC_DEFINE(IP_TOS_IS_BROKEN)
226 AC_DEFINE(SETEUID_BREAKS_SETUID)
227 AC_DEFINE(BROKEN_SETREUID)
228 AC_DEFINE(BROKEN_SETREGID)
231 AC_MSG_CHECKING(if we have working getaddrinfo)
232 AC_TRY_RUN([#include <mach-o/dyld.h>
233 main() { if (NSVersionOfRunTimeLibrary("System") >= (60 << 16))
237 }], [AC_MSG_RESULT(working)],
238 [AC_MSG_RESULT(buggy)
239 AC_DEFINE(BROKEN_GETADDRINFO, 1, [getaddrinfo is broken (if present)])],
240 [AC_MSG_RESULT(assume it is working)])
241 AC_DEFINE(SETEUID_BREAKS_SETUID)
242 AC_DEFINE(BROKEN_SETREUID)
243 AC_DEFINE(BROKEN_SETREGID)
244 AC_DEFINE_UNQUOTED(BIND_8_COMPAT, 1,
245 [Define if your resolver libs need this for getrrsetbyname])
246 AC_DEFINE(SSH_TUN_FREEBSD, 1, [Open tunnel devices the FreeBSD way])
247 AC_DEFINE(SSH_TUN_COMPAT_AF, 1,
248 [Use tunnel device compatibility to OpenBSD])
249 AC_DEFINE(SSH_TUN_PREPEND_AF, 1,
250 [Prepend the address family to IP tunnel traffic])
253 # first we define all of the options common to all HP-UX releases
254 CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1"
255 IPADDR_IN_DISPLAY=yes
257 AC_DEFINE(LOGIN_NO_ENDOPT, 1,
258 [Define if your login program cannot handle end of options ("--")])
259 AC_DEFINE(LOGIN_NEEDS_UTMPX)
260 AC_DEFINE(LOCKED_PASSWD_STRING, "*",
261 [String used in /etc/passwd to denote locked account])
262 AC_DEFINE(SPT_TYPE,SPT_PSTAT)
263 MAIL="/var/mail/username"
265 AC_CHECK_LIB(xnet, t_error, ,
266 AC_MSG_ERROR([*** -lxnet needed on HP-UX - check config.log ***]))
268 # next, we define all of the options specific to major releases
271 if test -z "$GCC"; then
276 AC_DEFINE(PAM_SUN_CODEBASE, 1,
277 [Define if you are using Solaris-derived PAM which
278 passes pam_messages to the conversation function
279 with an extra level of indirection])
280 AC_DEFINE(DISABLE_UTMP, 1,
281 [Define if you don't want to use utmp])
282 AC_DEFINE(USE_BTMP, 1, [Use btmp to log bad logins])
283 check_for_hpux_broken_getaddrinfo=1
284 check_for_conflicting_getspnam=1
288 # lastly, we define options specific to minor releases
291 AC_DEFINE(HAVE_SECUREWARE, 1,
292 [Define if you have SecureWare-based
293 protected password database])
294 disable_ptmx_check=yes
300 PATH="$PATH:/usr/etc"
301 AC_DEFINE(BROKEN_INET_NTOA, 1,
302 [Define if you system's inet_ntoa is busted
303 (e.g. Irix gcc issue)])
304 AC_DEFINE(SETEUID_BREAKS_SETUID)
305 AC_DEFINE(BROKEN_SETREUID)
306 AC_DEFINE(BROKEN_SETREGID)
307 AC_DEFINE(WITH_ABBREV_NO_TTY, 1,
308 [Define if you shouldn't strip 'tty' from your
310 AC_DEFINE(LOCKED_PASSWD_STRING, "*LK*")
313 PATH="$PATH:/usr/etc"
314 AC_DEFINE(WITH_IRIX_ARRAY, 1,
315 [Define if you have/want arrays
316 (cluster-wide session managment, not C arrays)])
317 AC_DEFINE(WITH_IRIX_PROJECT, 1,
318 [Define if you want IRIX project management])
319 AC_DEFINE(WITH_IRIX_AUDIT, 1,
320 [Define if you want IRIX audit trails])
321 AC_CHECK_FUNC(jlimit_startjob, [AC_DEFINE(WITH_IRIX_JOBS, 1,
322 [Define if you want IRIX kernel jobs])])
323 AC_DEFINE(BROKEN_INET_NTOA)
324 AC_DEFINE(SETEUID_BREAKS_SETUID)
325 AC_DEFINE(BROKEN_SETREUID)
326 AC_DEFINE(BROKEN_SETREGID)
327 AC_DEFINE(BROKEN_UPDWTMPX, 1, [updwtmpx is broken (if present)])
328 AC_DEFINE(WITH_ABBREV_NO_TTY)
329 AC_DEFINE(LOCKED_PASSWD_STRING, "*LK*")
333 check_for_libcrypt_later=1
334 check_for_openpty_ctty_bug=1
335 AC_DEFINE(DONT_TRY_OTHER_AF, 1, [Workaround more Linux IPv6 quirks])
336 AC_DEFINE(PAM_TTY_KLUDGE, 1,
337 [Work around problematic Linux PAM modules handling of PAM_TTY])
338 AC_DEFINE(LOCKED_PASSWD_PREFIX, "!",
339 [String used in /etc/passwd to denote locked account])
340 AC_DEFINE(SPT_TYPE,SPT_REUSEARGV)
341 AC_DEFINE(LINK_OPNOTSUPP_ERRNO, EPERM,
342 [Define to whatever link() returns for "not supported"
343 if it doesn't return EOPNOTSUPP.])
344 AC_DEFINE(_PATH_BTMP, "/var/log/btmp", [log for bad login attempts])
346 inet6_default_4in6=yes
349 AC_DEFINE(BROKEN_CMSG_TYPE, 1,
350 [Define if cmsg_type is not passed correctly])
353 # tun(4) forwarding compat code
354 AC_CHECK_HEADERS(linux/if_tun.h)
355 if test "x$ac_cv_header_linux_if_tun_h" = "xyes" ; then
356 AC_DEFINE(SSH_TUN_LINUX, 1,
357 [Open tunnel devices the Linux tun/tap way])
358 AC_DEFINE(SSH_TUN_COMPAT_AF, 1,
359 [Use tunnel device compatibility to OpenBSD])
360 AC_DEFINE(SSH_TUN_PREPEND_AF, 1,
361 [Prepend the address family to IP tunnel traffic])
364 mips-sony-bsd|mips-sony-newsos4)
365 AC_DEFINE(NEED_SETPGRP, 1, [Need setpgrp to acquire controlling tty])
369 check_for_libcrypt_before=1
370 if test "x$withval" != "xno" ; then
373 AC_DEFINE(SSH_TUN_FREEBSD, 1, [Open tunnel devices the FreeBSD way])
374 AC_CHECK_HEADER([net/if_tap.h], ,
375 AC_DEFINE(SSH_TUN_NO_L2, 1, [No layer 2 tunnel support]))
376 AC_DEFINE(SSH_TUN_PREPEND_AF, 1,
377 [Prepend the address family to IP tunnel traffic])
380 check_for_libcrypt_later=1
381 AC_DEFINE(LOCKED_PASSWD_PREFIX, "*LOCKED*", [Account locked with pw(1)])
382 AC_DEFINE(SSH_TUN_FREEBSD, 1, [Open tunnel devices the FreeBSD way])
383 AC_CHECK_HEADER([net/if_tap.h], ,
384 AC_DEFINE(SSH_TUN_NO_L2, 1, [No layer 2 tunnel support]))
387 AC_DEFINE(SETEUID_BREAKS_SETUID)
388 AC_DEFINE(BROKEN_SETREUID)
389 AC_DEFINE(BROKEN_SETREGID)
392 conf_lastlog_location="/usr/adm/lastlog"
393 conf_utmp_location=/etc/utmp
394 conf_wtmp_location=/usr/adm/wtmp
396 AC_DEFINE(HAVE_NEXT, 1, [Define if you are on NeXT])
397 AC_DEFINE(BROKEN_REALPATH)
399 AC_DEFINE(BROKEN_SAVED_UIDS, 1, [Needed for NeXT])
402 AC_DEFINE(HAVE_ATTRIBUTE__SENTINEL__, 1, [OpenBSD's gcc has sentinel])
403 AC_DEFINE(HAVE_ATTRIBUTE__BOUNDED__, 1, [OpenBSD's gcc has bounded])
404 AC_DEFINE(SSH_TUN_OPENBSD, 1, [Open tunnel devices the OpenBSD way])
405 AC_DEFINE(SYSLOG_R_SAFE_IN_SIGHAND, 1,
406 [syslog_r function is safe to use in in a signal handler])
409 if test "x$withval" != "xno" ; then
412 AC_DEFINE(PAM_SUN_CODEBASE)
413 AC_DEFINE(LOGIN_NEEDS_UTMPX)
414 AC_DEFINE(LOGIN_NEEDS_TERM, 1,
415 [Some versions of /bin/login need the TERM supplied
417 AC_DEFINE(PAM_TTY_KLUDGE)
418 AC_DEFINE(SSHPAM_CHAUTHTOK_NEEDS_RUID, 1,
419 [Define if pam_chauthtok wants real uid set
420 to the unpriv'ed user])
421 AC_DEFINE(LOCKED_PASSWD_STRING, "*LK*")
422 # Pushing STREAMS modules will cause sshd to acquire a controlling tty.
423 AC_DEFINE(SSHD_ACQUIRES_CTTY, 1,
424 [Define if sshd somehow reacquires a controlling TTY
426 AC_DEFINE(PASSWD_NEEDS_USERNAME, 1, [must supply username to passwd
427 in case the name is longer than 8 chars])
428 external_path_file=/etc/default/login
429 # hardwire lastlog location (can't detect it on some versions)
430 conf_lastlog_location="/var/adm/lastlog"
431 AC_MSG_CHECKING(for obsolete utmp and wtmp in solaris2.x)
432 sol2ver=`echo "$host"| sed -e 's/.*[[0-9]]\.//'`
433 if test "$sol2ver" -ge 8; then
435 AC_DEFINE(DISABLE_UTMP)
436 AC_DEFINE(DISABLE_WTMP, 1,
437 [Define if you don't want to use wtmp])
443 CPPFLAGS="$CPPFLAGS -DSUNOS4"
444 AC_CHECK_FUNCS(getpwanam)
445 AC_DEFINE(PAM_SUN_CODEBASE)
446 conf_utmp_location=/etc/utmp
447 conf_wtmp_location=/var/adm/wtmp
448 conf_lastlog_location=/var/adm/lastlog
454 AC_DEFINE(SSHD_ACQUIRES_CTTY)
455 AC_DEFINE(SETEUID_BREAKS_SETUID)
456 AC_DEFINE(BROKEN_SETREUID)
457 AC_DEFINE(BROKEN_SETREGID)
460 # /usr/ucblib MUST NOT be searched on ReliantUNIX
461 AC_CHECK_LIB(dl, dlsym, ,)
462 # -lresolv needs to be at the end of LIBS or DNS lookups break
463 AC_CHECK_LIB(resolv, res_query, [ LIBS="$LIBS -lresolv" ])
464 IPADDR_IN_DISPLAY=yes
466 AC_DEFINE(IP_TOS_IS_BROKEN)
467 AC_DEFINE(SETEUID_BREAKS_SETUID)
468 AC_DEFINE(BROKEN_SETREUID)
469 AC_DEFINE(BROKEN_SETREGID)
470 AC_DEFINE(SSHD_ACQUIRES_CTTY)
471 external_path_file=/etc/default/login
472 # /usr/ucblib/libucb.a no longer needed on ReliantUNIX
473 # Attention: always take care to bind libsocket and libnsl before libc,
474 # otherwise you will find lots of "SIOCGPGRP errno 22" on syslog
476 # UnixWare 1.x, UnixWare 2.x, and others based on code from Univel.
478 CFLAGS="$CFLAGS -Dva_list=_VA_LIST"
480 AC_DEFINE(SETEUID_BREAKS_SETUID)
481 AC_DEFINE(BROKEN_SETREUID)
482 AC_DEFINE(BROKEN_SETREGID)
483 AC_DEFINE(PASSWD_NEEDS_USERNAME, 1, [must supply username to passwd])
484 AC_DEFINE(LOCKED_PASSWD_STRING, "*LK*")
486 # UnixWare 7.x, OpenUNIX 8
488 check_for_libcrypt_later=1
489 AC_DEFINE(UNIXWARE_LONG_PASSWORDS, 1, [Support passwords > 8 chars])
491 AC_DEFINE(SETEUID_BREAKS_SETUID)
492 AC_DEFINE(BROKEN_SETREUID)
493 AC_DEFINE(BROKEN_SETREGID)
494 AC_DEFINE(PASSWD_NEEDS_USERNAME)
496 *-*-sysv5SCO_SV*) # SCO OpenServer 6.x
497 TEST_SHELL=/u95/bin/sh
498 AC_DEFINE(BROKEN_LIBIAF, 1,
499 [ia_uinfo routines not supported by OS yet])
501 *) AC_DEFINE(LOCKED_PASSWD_STRING, "*LK*")
507 # SCO UNIX and OEM versions of SCO UNIX
509 AC_MSG_ERROR("This Platform is no longer supported.")
513 if test -z "$GCC"; then
514 CFLAGS="$CFLAGS -belf"
516 LIBS="$LIBS -lprot -lx -ltinfo -lm"
519 AC_DEFINE(HAVE_SECUREWARE)
520 AC_DEFINE(DISABLE_SHADOW)
521 AC_DEFINE(DISABLE_FD_PASSING)
522 AC_DEFINE(SETEUID_BREAKS_SETUID)
523 AC_DEFINE(BROKEN_SETREUID)
524 AC_DEFINE(BROKEN_SETREGID)
525 AC_DEFINE(WITH_ABBREV_NO_TTY)
526 AC_DEFINE(BROKEN_UPDWTMPX)
527 AC_DEFINE(PASSWD_NEEDS_USERNAME)
528 AC_CHECK_FUNCS(getluid setluid)
533 AC_DEFINE(NO_SSH_LASTLOG, 1,
534 [Define if you don't want to use lastlog in session.c])
535 AC_DEFINE(SETEUID_BREAKS_SETUID)
536 AC_DEFINE(BROKEN_SETREUID)
537 AC_DEFINE(BROKEN_SETREGID)
539 AC_DEFINE(DISABLE_FD_PASSING)
541 LIBS="$LIBS -lgen -lrsc -lshare -luex -lacm"
545 AC_DEFINE(SETEUID_BREAKS_SETUID)
546 AC_DEFINE(BROKEN_SETREUID)
547 AC_DEFINE(BROKEN_SETREGID)
548 AC_DEFINE(WITH_ABBREV_NO_TTY)
550 AC_DEFINE(DISABLE_FD_PASSING)
552 LIBS="$LIBS -lgen -lacid -ldb"
556 AC_DEFINE(SETEUID_BREAKS_SETUID)
557 AC_DEFINE(BROKEN_SETREUID)
558 AC_DEFINE(BROKEN_SETREGID)
560 AC_DEFINE(DISABLE_FD_PASSING)
561 AC_DEFINE(NO_SSH_LASTLOG)
562 LDFLAGS="$LDFLAGS -Wl,-Dmsglevel=334:fatal"
563 LIBS="$LIBS -lgen -lrsc -lshare -luex -lacm"
567 AC_MSG_CHECKING(for Digital Unix SIA)
570 [ --with-osfsia Enable Digital Unix SIA],
572 if test "x$withval" = "xno" ; then
573 AC_MSG_RESULT(disabled)
578 if test -z "$no_osfsia" ; then
579 if test -f /etc/sia/matrix.conf; then
581 AC_DEFINE(HAVE_OSF_SIA, 1,
582 [Define if you have Digital Unix Security
583 Integration Architecture])
584 AC_DEFINE(DISABLE_LOGIN, 1,
585 [Define if you don't want to use your
586 system's login() call])
587 AC_DEFINE(DISABLE_FD_PASSING)
588 LIBS="$LIBS -lsecurity -ldb -lm -laud"
591 AC_DEFINE(LOCKED_PASSWD_SUBSTR, "Nologin",
592 [String used in /etc/passwd to denote locked account])
595 AC_DEFINE(BROKEN_GETADDRINFO)
596 AC_DEFINE(SETEUID_BREAKS_SETUID)
597 AC_DEFINE(BROKEN_SETREUID)
598 AC_DEFINE(BROKEN_SETREGID)
603 AC_DEFINE(NO_X11_UNIX_SOCKETS)
604 AC_DEFINE(MISSING_NFDBITS, 1, [Define on *nto-qnx systems])
605 AC_DEFINE(MISSING_HOWMANY, 1, [Define on *nto-qnx systems])
606 AC_DEFINE(MISSING_FD_MASK, 1, [Define on *nto-qnx systems])
607 AC_DEFINE(DISABLE_LASTLOG)
608 AC_DEFINE(SSHD_ACQUIRES_CTTY)
609 enable_etc_default_login=no # has incompatible /etc/default/login
613 AC_DEFINE(BROKEN_GETGROUPS, 1, [getgroups(0,NULL) will return -1])
614 AC_DEFINE(BROKEN_MMAP, 1, [Ultrix mmap can't map files])
615 AC_DEFINE(NEED_SETPGRP)
616 AC_DEFINE(HAVE_SYS_SYSLOG_H, 1, [Force use of sys/syslog.h on Ultrix])
620 CFLAGS="$CFLAGS -D__NO_INCLUDE_WARN__"
621 AC_DEFINE(MISSING_HOWMANY)
622 AC_DEFINE(BROKEN_SETVBUF, 1, [LynxOS has broken setvbuf() implementation])
626 # Allow user to specify flags
628 [ --with-cflags Specify additional flags to pass to compiler],
630 if test -n "$withval" && test "x$withval" != "xno" && \
631 test "x${withval}" != "xyes"; then
632 CFLAGS="$CFLAGS $withval"
636 AC_ARG_WITH(cppflags,
637 [ --with-cppflags Specify additional flags to pass to preprocessor] ,
639 if test -n "$withval" && test "x$withval" != "xno" && \
640 test "x${withval}" != "xyes"; then
641 CPPFLAGS="$CPPFLAGS $withval"
646 [ --with-ldflags Specify additional flags to pass to linker],
648 if test -n "$withval" && test "x$withval" != "xno" && \
649 test "x${withval}" != "xyes"; then
650 LDFLAGS="$LDFLAGS $withval"
655 [ --with-libs Specify additional libraries to link with],
657 if test -n "$withval" && test "x$withval" != "xno" && \
658 test "x${withval}" != "xyes"; then
659 LIBS="$LIBS $withval"
664 [ --with-Werror Build main code with -Werror],
666 if test -n "$withval" && test "x$withval" != "xno"; then
667 werror_flags="-Werror"
668 if test "x${withval}" != "xyes"; then
669 werror_flags="$withval"
675 AC_MSG_CHECKING(compiler and flags for sanity)
681 [ AC_MSG_RESULT(yes) ],
684 AC_MSG_ERROR([*** compiler cannot create working executables, check config.log ***])
686 [ AC_MSG_WARN([cross compiling: not checking compiler sanity]) ]
689 dnl Checks for header files.
715 security/pam_appl.h \
752 # lastlog.h requires sys/time.h to be included first on Solaris
753 AC_CHECK_HEADERS(lastlog.h, [], [], [
754 #ifdef HAVE_SYS_TIME_H
755 # include <sys/time.h>
759 # sys/ptms.h requires sys/stream.h to be included first on Solaris
760 AC_CHECK_HEADERS(sys/ptms.h, [], [], [
761 #ifdef HAVE_SYS_STREAM_H
762 # include <sys/stream.h>
766 # login_cap.h requires sys/types.h on NetBSD
767 AC_CHECK_HEADERS(login_cap.h, [], [], [
768 #include <sys/types.h>
771 # Checks for libraries.
772 AC_CHECK_FUNC(yp_match, , AC_CHECK_LIB(nsl, yp_match))
773 AC_CHECK_FUNC(setsockopt, , AC_CHECK_LIB(socket, setsockopt))
775 dnl IRIX and Solaris 2.5.1 have dirname() in libgen
776 AC_CHECK_FUNCS(dirname, [AC_CHECK_HEADERS(libgen.h)] ,[
777 AC_CHECK_LIB(gen, dirname,[
778 AC_CACHE_CHECK([for broken dirname],
779 ac_cv_have_broken_dirname, [
787 int main(int argc, char **argv) {
790 strncpy(buf,"/etc", 32);
792 if (!s || strncmp(s, "/", 32) != 0) {
799 [ ac_cv_have_broken_dirname="no" ],
800 [ ac_cv_have_broken_dirname="yes" ],
801 [ ac_cv_have_broken_dirname="no" ],
805 if test "x$ac_cv_have_broken_dirname" = "xno" ; then
807 AC_DEFINE(HAVE_DIRNAME)
808 AC_CHECK_HEADERS(libgen.h)
813 AC_CHECK_FUNC(getspnam, ,
814 AC_CHECK_LIB(gen, getspnam, LIBS="$LIBS -lgen"))
815 AC_SEARCH_LIBS(basename, gen, AC_DEFINE(HAVE_BASENAME, 1,
816 [Define if you have the basename function.]))
820 [ --with-zlib=PATH Use zlib in PATH],
821 [ if test "x$withval" = "xno" ; then
822 AC_MSG_ERROR([*** zlib is required ***])
823 elif test "x$withval" != "xyes"; then
824 if test -d "$withval/lib"; then
825 if test -n "${need_dash_r}"; then
826 LDFLAGS="-L${withval}/lib -R${withval}/lib ${LDFLAGS}"
828 LDFLAGS="-L${withval}/lib ${LDFLAGS}"
831 if test -n "${need_dash_r}"; then
832 LDFLAGS="-L${withval} -R${withval} ${LDFLAGS}"
834 LDFLAGS="-L${withval} ${LDFLAGS}"
837 if test -d "$withval/include"; then
838 CPPFLAGS="-I${withval}/include ${CPPFLAGS}"
840 CPPFLAGS="-I${withval} ${CPPFLAGS}"
845 AC_CHECK_LIB(z, deflate, ,
847 saved_CPPFLAGS="$CPPFLAGS"
848 saved_LDFLAGS="$LDFLAGS"
850 dnl Check default zlib install dir
851 if test -n "${need_dash_r}"; then
852 LDFLAGS="-L/usr/local/lib -R/usr/local/lib ${saved_LDFLAGS}"
854 LDFLAGS="-L/usr/local/lib ${saved_LDFLAGS}"
856 CPPFLAGS="-I/usr/local/include ${saved_CPPFLAGS}"
858 AC_TRY_LINK_FUNC(deflate, AC_DEFINE(HAVE_LIBZ),
860 AC_MSG_ERROR([*** zlib missing - please install first or check config.log ***])
865 AC_CHECK_HEADER([zlib.h], ,AC_MSG_ERROR([*** zlib.h missing - please install first or check config.log ***]))
867 AC_ARG_WITH(zlib-version-check,
868 [ --without-zlib-version-check Disable zlib version check],
869 [ if test "x$withval" = "xno" ; then
870 zlib_check_nonfatal=1
875 AC_MSG_CHECKING(for possibly buggy zlib)
876 AC_RUN_IFELSE([AC_LANG_SOURCE([[
881 int a=0, b=0, c=0, d=0, n, v;
882 n = sscanf(ZLIB_VERSION, "%d.%d.%d.%d", &a, &b, &c, &d);
883 if (n != 3 && n != 4)
885 v = a*1000000 + b*10000 + c*100 + d;
886 fprintf(stderr, "found zlib version %s (%d)\n", ZLIB_VERSION, v);
889 if (a == 1 && b == 1 && c >= 4)
892 /* 1.2.3 and up are OK */
901 if test -z "$zlib_check_nonfatal" ; then
902 AC_MSG_ERROR([*** zlib too old - check config.log ***
903 Your reported zlib version has known security problems. It's possible your
904 vendor has fixed these problems without changing the version number. If you
905 are sure this is the case, you can disable the check by running
906 "./configure --without-zlib-version-check".
907 If you are in doubt, upgrade zlib to version 1.2.3 or greater.
908 See http://www.gzip.org/zlib/ for details.])
910 AC_MSG_WARN([zlib version may have security problems])
913 [ AC_MSG_WARN([cross compiling: not checking zlib version]) ]
917 AC_CHECK_FUNC(strcasecmp,
918 [], [ AC_CHECK_LIB(resolv, strcasecmp, LIBS="$LIBS -lresolv") ]
920 AC_CHECK_FUNCS(utimes,
921 [], [ AC_CHECK_LIB(c89, utimes, [AC_DEFINE(HAVE_UTIMES)
922 LIBS="$LIBS -lc89"]) ]
925 dnl Checks for libutil functions
926 AC_CHECK_HEADERS(libutil.h)
927 AC_SEARCH_LIBS(login, util bsd, [AC_DEFINE(HAVE_LOGIN, 1,
928 [Define if your libraries define login()])])
929 AC_CHECK_FUNCS(logout updwtmp logwtmp)
933 # Check for ALTDIRFUNC glob() extension
934 AC_MSG_CHECKING(for GLOB_ALTDIRFUNC support)
935 AC_EGREP_CPP(FOUNDIT,
938 #ifdef GLOB_ALTDIRFUNC
943 AC_DEFINE(GLOB_HAS_ALTDIRFUNC, 1,
944 [Define if your system glob() function has
945 the GLOB_ALTDIRFUNC extension])
953 # Check for g.gl_matchc glob() extension
954 AC_MSG_CHECKING(for gl_matchc field in glob_t)
956 [ #include <glob.h> ],
957 [glob_t g; g.gl_matchc = 1;],
959 AC_DEFINE(GLOB_HAS_GL_MATCHC, 1,
960 [Define if your system glob() function has
961 gl_matchc options in glob_t])
969 AC_MSG_CHECKING([whether struct dirent allocates space for d_name])
972 #include <sys/types.h>
974 int main(void){struct dirent d;exit(sizeof(d.d_name)<=sizeof(char));}
976 [AC_MSG_RESULT(yes)],
979 AC_DEFINE(BROKEN_ONE_BYTE_DIRENT_D_NAME, 1,
980 [Define if your struct dirent expects you to
981 allocate extra space for d_name])
984 AC_MSG_WARN([cross compiling: assuming BROKEN_ONE_BYTE_DIRENT_D_NAME])
985 AC_DEFINE(BROKEN_ONE_BYTE_DIRENT_D_NAME)
989 AC_MSG_CHECKING([for /proc/pid/fd directory])
990 if test -d "/proc/$$/fd" ; then
991 AC_DEFINE(HAVE_PROC_PID, 1, [Define if you have /proc/$pid/fd])
997 # Check whether user wants S/Key support
1000 [ --with-skey[[=PATH]] Enable S/Key support (optionally in PATH)],
1002 if test "x$withval" != "xno" ; then
1004 if test "x$withval" != "xyes" ; then
1005 CPPFLAGS="$CPPFLAGS -I${withval}/include"
1006 LDFLAGS="$LDFLAGS -L${withval}/lib"
1009 AC_DEFINE(SKEY, 1, [Define if you want S/Key support])
1013 AC_MSG_CHECKING([for s/key support])
1018 int main() { char *ff = skey_keyinfo(""); ff=""; exit(0); }
1020 [AC_MSG_RESULT(yes)],
1023 AC_MSG_ERROR([** Incomplete or missing s/key libraries.])
1025 AC_MSG_CHECKING(if skeychallenge takes 4 arguments)
1029 [(void)skeychallenge(NULL,"name","",0);],
1031 AC_DEFINE(SKEYCHALLENGE_4ARG, 1,
1032 [Define if your skeychallenge()
1033 function takes 4 arguments (NetBSD)])],
1040 # Check whether user wants TCP wrappers support
1042 AC_ARG_WITH(tcp-wrappers,
1043 [ --with-tcp-wrappers[[=PATH]] Enable tcpwrappers support (optionally in PATH)],
1045 if test "x$withval" != "xno" ; then
1047 saved_LDFLAGS="$LDFLAGS"
1048 saved_CPPFLAGS="$CPPFLAGS"
1049 if test -n "${withval}" && \
1050 test "x${withval}" != "xyes"; then
1051 if test -d "${withval}/lib"; then
1052 if test -n "${need_dash_r}"; then
1053 LDFLAGS="-L${withval}/lib -R${withval}/lib ${LDFLAGS}"
1055 LDFLAGS="-L${withval}/lib ${LDFLAGS}"
1058 if test -n "${need_dash_r}"; then
1059 LDFLAGS="-L${withval} -R${withval} ${LDFLAGS}"
1061 LDFLAGS="-L${withval} ${LDFLAGS}"
1064 if test -d "${withval}/include"; then
1065 CPPFLAGS="-I${withval}/include ${CPPFLAGS}"
1067 CPPFLAGS="-I${withval} ${CPPFLAGS}"
1071 LIBS="$LIBWRAP $LIBS"
1072 AC_MSG_CHECKING(for libwrap)
1075 #include <sys/types.h>
1076 #include <sys/socket.h>
1077 #include <netinet/in.h>
1079 int deny_severity = 0, allow_severity = 0;
1084 AC_DEFINE(LIBWRAP, 1,
1086 TCP Wrappers support])
1091 AC_MSG_ERROR([*** libwrap missing])
1099 # Check whether user wants libedit support
1101 AC_ARG_WITH(libedit,
1102 [ --with-libedit[[=PATH]] Enable libedit support for sftp],
1103 [ if test "x$withval" != "xno" ; then
1104 if test "x$withval" != "xyes"; then
1105 CPPFLAGS="$CPPFLAGS -I${withval}/include"
1106 if test -n "${need_dash_r}"; then
1107 LDFLAGS="-L${withval}/lib -R${withval}/lib ${LDFLAGS}"
1109 LDFLAGS="-L${withval}/lib ${LDFLAGS}"
1112 AC_CHECK_LIB(edit, el_init,
1113 [ AC_DEFINE(USE_LIBEDIT, 1, [Use libedit for sftp])
1114 LIBEDIT="-ledit -lcurses"
1118 [ AC_MSG_ERROR(libedit not found) ],
1121 AC_MSG_CHECKING(if libedit version is compatible)
1124 #include <histedit.h>
1128 el_init("", NULL, NULL, NULL);
1132 [ AC_MSG_RESULT(yes) ],
1134 AC_MSG_ERROR(libedit version is not compatible) ]
1141 [ --with-audit=module Enable EXPERIMENTAL audit support (modules=debug,bsm)],
1143 AC_MSG_CHECKING(for supported audit module)
1148 dnl Checks for headers, libs and functions
1149 AC_CHECK_HEADERS(bsm/audit.h, [],
1150 [AC_MSG_ERROR(BSM enabled and bsm/audit.h not found)])
1151 AC_CHECK_LIB(bsm, getaudit, [],
1152 [AC_MSG_ERROR(BSM enabled and required library not found)])
1153 AC_CHECK_FUNCS(getaudit, [],
1154 [AC_MSG_ERROR(BSM enabled and required function not found)])
1155 # These are optional
1156 AC_CHECK_FUNCS(getaudit_addr)
1157 AC_DEFINE(USE_BSM_AUDIT, 1, [Use BSM audit module])
1161 AC_MSG_RESULT(debug)
1162 AC_DEFINE(SSH_AUDIT_EVENTS, 1, Use audit debugging module)
1168 AC_MSG_ERROR([Unknown audit module $withval])
1173 dnl Checks for library functions. Please keep in alphabetical order
1258 # IRIX has a const char return value for gai_strerror()
1259 AC_CHECK_FUNCS(gai_strerror,[
1260 AC_DEFINE(HAVE_GAI_STRERROR)
1262 #include <sys/types.h>
1263 #include <sys/socket.h>
1266 const char *gai_strerror(int);],[
1269 str = gai_strerror(0);],[
1270 AC_DEFINE(HAVE_CONST_GAI_STRERROR_PROTO, 1,
1271 [Define if gai_strerror() returns const char *])])])
1273 AC_SEARCH_LIBS(nanosleep, rt posix4, AC_DEFINE(HAVE_NANOSLEEP, 1,
1274 [Some systems put nanosleep outside of libc]))
1276 dnl Make sure prototypes are defined for these before using them.
1277 AC_CHECK_DECL(getrusage, [AC_CHECK_FUNCS(getrusage)])
1278 AC_CHECK_DECL(strsep,
1279 [AC_CHECK_FUNCS(strsep)],
1282 #ifdef HAVE_STRING_H
1283 # include <string.h>
1287 dnl tcsendbreak might be a macro
1288 AC_CHECK_DECL(tcsendbreak,
1289 [AC_DEFINE(HAVE_TCSENDBREAK)],
1290 [AC_CHECK_FUNCS(tcsendbreak)],
1291 [#include <termios.h>]
1294 AC_CHECK_DECLS(h_errno, , ,[#include <netdb.h>])
1296 AC_CHECK_DECLS(SHUT_RD, , ,
1298 #include <sys/types.h>
1299 #include <sys/socket.h>
1302 AC_CHECK_DECLS(O_NONBLOCK, , ,
1304 #include <sys/types.h>
1305 #ifdef HAVE_SYS_STAT_H
1306 # include <sys/stat.h>
1313 AC_CHECK_FUNCS(setresuid, [
1314 dnl Some platorms have setresuid that isn't implemented, test for this
1315 AC_MSG_CHECKING(if setresuid seems to work)
1320 int main(){errno=0; setresuid(0,0,0); if (errno==ENOSYS) exit(1); else exit(0);}
1322 [AC_MSG_RESULT(yes)],
1323 [AC_DEFINE(BROKEN_SETRESUID, 1,
1324 [Define if your setresuid() is broken])
1325 AC_MSG_RESULT(not implemented)],
1326 [AC_MSG_WARN([cross compiling: not checking setresuid])]
1330 AC_CHECK_FUNCS(setresgid, [
1331 dnl Some platorms have setresgid that isn't implemented, test for this
1332 AC_MSG_CHECKING(if setresgid seems to work)
1337 int main(){errno=0; setresgid(0,0,0); if (errno==ENOSYS) exit(1); else exit(0);}
1339 [AC_MSG_RESULT(yes)],
1340 [AC_DEFINE(BROKEN_SETRESGID, 1,
1341 [Define if your setresgid() is broken])
1342 AC_MSG_RESULT(not implemented)],
1343 [AC_MSG_WARN([cross compiling: not checking setresuid])]
1347 dnl Checks for time functions
1348 AC_CHECK_FUNCS(gettimeofday time)
1349 dnl Checks for utmp functions
1350 AC_CHECK_FUNCS(endutent getutent getutid getutline pututline setutent)
1351 AC_CHECK_FUNCS(utmpname)
1352 dnl Checks for utmpx functions
1353 AC_CHECK_FUNCS(endutxent getutxent getutxid getutxline pututxline )
1354 AC_CHECK_FUNCS(setutxent utmpxname)
1356 AC_CHECK_FUNC(daemon,
1357 [AC_DEFINE(HAVE_DAEMON, 1, [Define if your libraries define daemon()])],
1358 [AC_CHECK_LIB(bsd, daemon,
1359 [LIBS="$LIBS -lbsd"; AC_DEFINE(HAVE_DAEMON)])]
1362 AC_CHECK_FUNC(getpagesize,
1363 [AC_DEFINE(HAVE_GETPAGESIZE, 1,
1364 [Define if your libraries define getpagesize()])],
1365 [AC_CHECK_LIB(ucb, getpagesize,
1366 [LIBS="$LIBS -lucb"; AC_DEFINE(HAVE_GETPAGESIZE)])]
1369 # Check for broken snprintf
1370 if test "x$ac_cv_func_snprintf" = "xyes" ; then
1371 AC_MSG_CHECKING([whether snprintf correctly terminates long strings])
1375 int main(void){char b[5];snprintf(b,5,"123456789");exit(b[4]!='\0');}
1377 [AC_MSG_RESULT(yes)],
1380 AC_DEFINE(BROKEN_SNPRINTF, 1,
1381 [Define if your snprintf is busted])
1382 AC_MSG_WARN([****** Your snprintf() function is broken, complain to your vendor])
1384 [ AC_MSG_WARN([cross compiling: Assuming working snprintf()]) ]
1388 # If we don't have a working asprintf, then we strongly depend on vsnprintf
1389 # returning the right thing on overflow: the number of characters it tried to
1390 # create (as per SUSv3)
1391 if test "x$ac_cv_func_asprintf" != "xyes" && \
1392 test "x$ac_cv_func_vsnprintf" = "xyes" ; then
1393 AC_MSG_CHECKING([whether vsnprintf returns correct values on overflow])
1396 #include <sys/types.h>
1400 int x_snprintf(char *str,size_t count,const char *fmt,...)
1402 size_t ret; va_list ap;
1403 va_start(ap, fmt); ret = vsnprintf(str, count, fmt, ap); va_end(ap);
1409 exit(x_snprintf(x, 1, "%s %d", "hello", 12345) == 11 ? 0 : 1);
1411 [AC_MSG_RESULT(yes)],
1414 AC_DEFINE(BROKEN_SNPRINTF, 1,
1415 [Define if your snprintf is busted])
1416 AC_MSG_WARN([****** Your vsnprintf() function is broken, complain to your vendor])
1418 [ AC_MSG_WARN([cross compiling: Assuming working vsnprintf()]) ]
1422 # On systems where [v]snprintf is broken, but is declared in stdio,
1423 # check that the fmt argument is const char * or just char *.
1424 # This is only useful for when BROKEN_SNPRINTF
1425 AC_MSG_CHECKING([whether snprintf can declare const char *fmt])
1426 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <stdio.h>
1427 int snprintf(char *a, size_t b, const char *c, ...) { return 0; }
1428 int main(void) { snprintf(0, 0, 0); }
1431 AC_DEFINE(SNPRINTF_CONST, [const],
1432 [Define as const if snprintf() can declare const char *fmt])],
1434 AC_DEFINE(SNPRINTF_CONST, [/* not const */])])
1436 # Check for missing getpeereid (or equiv) support
1438 if test "x$ac_cv_func_getpeereid" != "xyes" ; then
1439 AC_MSG_CHECKING([whether system supports SO_PEERCRED getsockopt])
1441 [#include <sys/types.h>
1442 #include <sys/socket.h>],
1443 [int i = SO_PEERCRED;],
1444 [ AC_MSG_RESULT(yes)
1445 AC_DEFINE(HAVE_SO_PEERCRED, 1, [Have PEERCRED socket option])
1452 dnl see whether mkstemp() requires XXXXXX
1453 if test "x$ac_cv_func_mkdtemp" = "xyes" ; then
1454 AC_MSG_CHECKING([for (overly) strict mkstemp])
1458 main() { char template[]="conftest.mkstemp-test";
1459 if (mkstemp(template) == -1)
1461 unlink(template); exit(0);
1469 AC_DEFINE(HAVE_STRICT_MKSTEMP, 1, [Silly mkstemp()])
1473 AC_DEFINE(HAVE_STRICT_MKSTEMP)
1478 dnl make sure that openpty does not reacquire controlling terminal
1479 if test ! -z "$check_for_openpty_ctty_bug"; then
1480 AC_MSG_CHECKING(if openpty correctly handles controlling tty)
1484 #include <sys/fcntl.h>
1485 #include <sys/types.h>
1486 #include <sys/wait.h>
1492 int fd, ptyfd, ttyfd, status;
1495 if (pid < 0) { /* failed */
1497 } else if (pid > 0) { /* parent */
1498 waitpid(pid, &status, 0);
1499 if (WIFEXITED(status))
1500 exit(WEXITSTATUS(status));
1503 } else { /* child */
1504 close(0); close(1); close(2);
1506 openpty(&ptyfd, &ttyfd, NULL, NULL, NULL);
1507 fd = open("/dev/tty", O_RDWR | O_NOCTTY);
1509 exit(3); /* Acquired ctty: broken */
1511 exit(0); /* Did not acquire ctty: OK */
1520 AC_DEFINE(SSHD_ACQUIRES_CTTY)
1523 AC_MSG_RESULT(cross-compiling, assuming yes)
1528 if test "x$ac_cv_func_getaddrinfo" = "xyes" && \
1529 test "x$check_for_hpux_broken_getaddrinfo" = "x1"; then
1530 AC_MSG_CHECKING(if getaddrinfo seems to work)
1534 #include <sys/socket.h>
1537 #include <netinet/in.h>
1539 #define TEST_PORT "2222"
1545 struct addrinfo *gai_ai, *ai, hints;
1546 char ntop[NI_MAXHOST], strport[NI_MAXSERV], *name = NULL;
1548 memset(&hints, 0, sizeof(hints));
1549 hints.ai_family = PF_UNSPEC;
1550 hints.ai_socktype = SOCK_STREAM;
1551 hints.ai_flags = AI_PASSIVE;
1553 err = getaddrinfo(name, TEST_PORT, &hints, &gai_ai);
1555 fprintf(stderr, "getaddrinfo failed (%s)", gai_strerror(err));
1559 for (ai = gai_ai; ai != NULL; ai = ai->ai_next) {
1560 if (ai->ai_family != AF_INET6)
1563 err = getnameinfo(ai->ai_addr, ai->ai_addrlen, ntop,
1564 sizeof(ntop), strport, sizeof(strport),
1565 NI_NUMERICHOST|NI_NUMERICSERV);
1568 if (err == EAI_SYSTEM)
1569 perror("getnameinfo EAI_SYSTEM");
1571 fprintf(stderr, "getnameinfo failed: %s\n",
1576 sock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
1579 if (bind(sock, ai->ai_addr, ai->ai_addrlen) < 0) {
1592 AC_DEFINE(BROKEN_GETADDRINFO)
1595 AC_MSG_RESULT(cross-compiling, assuming yes)
1600 if test "x$ac_cv_func_getaddrinfo" = "xyes" && \
1601 test "x$check_for_aix_broken_getaddrinfo" = "x1"; then
1602 AC_MSG_CHECKING(if getaddrinfo seems to work)
1606 #include <sys/socket.h>
1609 #include <netinet/in.h>
1611 #define TEST_PORT "2222"
1617 struct addrinfo *gai_ai, *ai, hints;
1618 char ntop[NI_MAXHOST], strport[NI_MAXSERV], *name = NULL;
1620 memset(&hints, 0, sizeof(hints));
1621 hints.ai_family = PF_UNSPEC;
1622 hints.ai_socktype = SOCK_STREAM;
1623 hints.ai_flags = AI_PASSIVE;
1625 err = getaddrinfo(name, TEST_PORT, &hints, &gai_ai);
1627 fprintf(stderr, "getaddrinfo failed (%s)", gai_strerror(err));
1631 for (ai = gai_ai; ai != NULL; ai = ai->ai_next) {
1632 if (ai->ai_family != AF_INET && ai->ai_family != AF_INET6)
1635 err = getnameinfo(ai->ai_addr, ai->ai_addrlen, ntop,
1636 sizeof(ntop), strport, sizeof(strport),
1637 NI_NUMERICHOST|NI_NUMERICSERV);
1639 if (ai->ai_family == AF_INET && err != 0) {
1640 perror("getnameinfo");
1649 AC_DEFINE(AIX_GETNAMEINFO_HACK, 1,
1650 [Define if you have a getaddrinfo that fails
1651 for the all-zeros IPv6 address])
1655 AC_DEFINE(BROKEN_GETADDRINFO)
1658 AC_MSG_RESULT(cross-compiling, assuming no)
1663 if test "x$check_for_conflicting_getspnam" = "x1"; then
1664 AC_MSG_CHECKING(for conflicting getspnam in shadow.h)
1668 int main(void) {exit(0);}
1675 AC_DEFINE(GETSPNAM_CONFLICTING_DEFS, 1,
1676 [Conflicting defs for getspnam])
1683 # Check for PAM libs
1686 [ --with-pam Enable PAM support ],
1688 if test "x$withval" != "xno" ; then
1689 if test "x$ac_cv_header_security_pam_appl_h" != "xyes" && \
1690 test "x$ac_cv_header_pam_pam_appl_h" != "xyes" ; then
1691 AC_MSG_ERROR([PAM headers not found])
1694 AC_CHECK_LIB(dl, dlopen, , )
1695 AC_CHECK_LIB(pam, pam_set_item, , AC_MSG_ERROR([*** libpam missing]))
1696 AC_CHECK_FUNCS(pam_getenvlist)
1697 AC_CHECK_FUNCS(pam_putenv)
1701 AC_DEFINE(USE_PAM, 1,
1702 [Define if you want to enable PAM support])
1703 if test $ac_cv_lib_dl_dlopen = yes; then
1713 # Check for older PAM
1714 if test "x$PAM_MSG" = "xyes" ; then
1715 # Check PAM strerror arguments (old PAM)
1716 AC_MSG_CHECKING([whether pam_strerror takes only one argument])
1720 #if defined(HAVE_SECURITY_PAM_APPL_H)
1721 #include <security/pam_appl.h>
1722 #elif defined (HAVE_PAM_PAM_APPL_H)
1723 #include <pam/pam_appl.h>
1726 [(void)pam_strerror((pam_handle_t *)NULL, -1);],
1727 [AC_MSG_RESULT(no)],
1729 AC_DEFINE(HAVE_OLD_PAM, 1,
1730 [Define if you have an old version of PAM
1731 which takes only one argument to pam_strerror])
1733 PAM_MSG="yes (old library)"
1738 # Search for OpenSSL
1739 saved_CPPFLAGS="$CPPFLAGS"
1740 saved_LDFLAGS="$LDFLAGS"
1741 AC_ARG_WITH(ssl-dir,
1742 [ --with-ssl-dir=PATH Specify path to OpenSSL installation ],
1744 if test "x$withval" != "xno" ; then
1747 ./*|../*) withval="`pwd`/$withval"
1749 if test -d "$withval/lib"; then
1750 if test -n "${need_dash_r}"; then
1751 LDFLAGS="-L${withval}/lib -R${withval}/lib ${LDFLAGS}"
1753 LDFLAGS="-L${withval}/lib ${LDFLAGS}"
1756 if test -n "${need_dash_r}"; then
1757 LDFLAGS="-L${withval} -R${withval} ${LDFLAGS}"
1759 LDFLAGS="-L${withval} ${LDFLAGS}"
1762 if test -d "$withval/include"; then
1763 CPPFLAGS="-I${withval}/include ${CPPFLAGS}"
1765 CPPFLAGS="-I${withval} ${CPPFLAGS}"
1770 LIBS="-lcrypto $LIBS"
1771 AC_TRY_LINK_FUNC(RAND_add, AC_DEFINE(HAVE_OPENSSL, 1,
1772 [Define if your ssl headers are included
1773 with #include <openssl/header.h>]),
1775 dnl Check default openssl install dir
1776 if test -n "${need_dash_r}"; then
1777 LDFLAGS="-L/usr/local/ssl/lib -R/usr/local/ssl/lib ${saved_LDFLAGS}"
1779 LDFLAGS="-L/usr/local/ssl/lib ${saved_LDFLAGS}"
1781 CPPFLAGS="-I/usr/local/ssl/include ${saved_CPPFLAGS}"
1782 AC_TRY_LINK_FUNC(RAND_add, AC_DEFINE(HAVE_OPENSSL),
1784 AC_MSG_ERROR([*** Can't find recent OpenSSL libcrypto (see config.log for details) ***])
1790 # Determine OpenSSL header version
1791 AC_MSG_CHECKING([OpenSSL header version])
1796 #include <openssl/opensslv.h>
1797 #define DATA "conftest.sslincver"
1802 fd = fopen(DATA,"w");
1806 if ((rc = fprintf(fd ,"%x (%s)\n", OPENSSL_VERSION_NUMBER, OPENSSL_VERSION_TEXT)) <0)
1813 ssl_header_ver=`cat conftest.sslincver`
1814 AC_MSG_RESULT($ssl_header_ver)
1817 AC_MSG_RESULT(not found)
1818 AC_MSG_ERROR(OpenSSL version header not found.)
1821 AC_MSG_WARN([cross compiling: not checking])
1825 # Determine OpenSSL library version
1826 AC_MSG_CHECKING([OpenSSL library version])
1831 #include <openssl/opensslv.h>
1832 #include <openssl/crypto.h>
1833 #define DATA "conftest.ssllibver"
1838 fd = fopen(DATA,"w");
1842 if ((rc = fprintf(fd ,"%x (%s)\n", SSLeay(), SSLeay_version(SSLEAY_VERSION))) <0)
1849 ssl_library_ver=`cat conftest.ssllibver`
1850 AC_MSG_RESULT($ssl_library_ver)
1853 AC_MSG_RESULT(not found)
1854 AC_MSG_ERROR(OpenSSL library not found.)
1857 AC_MSG_WARN([cross compiling: not checking])
1861 # Sanity check OpenSSL headers
1862 AC_MSG_CHECKING([whether OpenSSL's headers match the library])
1866 #include <openssl/opensslv.h>
1867 int main(void) { exit(SSLeay() == OPENSSL_VERSION_NUMBER ? 0 : 1); }
1874 AC_MSG_ERROR([Your OpenSSL headers do not match your library.
1875 Check config.log for details.
1876 Also see contrib/findssl.sh for help identifying header/library mismatches.])
1879 AC_MSG_WARN([cross compiling: not checking])
1883 AC_ARG_WITH(ssl-engine,
1884 [ --with-ssl-engine Enable OpenSSL (hardware) ENGINE support ],
1885 [ if test "x$withval" != "xno" ; then
1886 AC_MSG_CHECKING(for OpenSSL ENGINE support)
1888 [ #include <openssl/engine.h>],
1890 int main(void){ENGINE_load_builtin_engines();ENGINE_register_all_complete();}
1892 [ AC_MSG_RESULT(yes)
1893 AC_DEFINE(USE_OPENSSL_ENGINE, 1,
1894 [Enable OpenSSL engine support])
1896 [ AC_MSG_ERROR(OpenSSL ENGINE support not found)]
1901 # Check for OpenSSL without EVP_aes_{192,256}_cbc
1902 AC_MSG_CHECKING([whether OpenSSL has crippled AES support])
1906 #include <openssl/evp.h>
1907 int main(void) { exit(EVP_aes_192_cbc() == NULL || EVP_aes_256_cbc() == NULL);}
1914 AC_DEFINE(OPENSSL_LOBOTOMISED_AES, 1,
1915 [libcrypto is missing AES 192 and 256 bit functions])
1919 # Some systems want crypt() from libcrypt, *not* the version in OpenSSL,
1920 # because the system crypt() is more featureful.
1921 if test "x$check_for_libcrypt_before" = "x1"; then
1922 AC_CHECK_LIB(crypt, crypt)
1925 # Some Linux systems (Slackware) need crypt() from libcrypt, *not* the
1926 # version in OpenSSL.
1927 if test "x$check_for_libcrypt_later" = "x1"; then
1928 AC_CHECK_LIB(crypt, crypt, LIBS="$LIBS -lcrypt")
1931 # Search for SHA256 support in libc and/or OpenSSL
1932 AC_CHECK_FUNCS(SHA256_Update EVP_sha256)
1934 AC_CHECK_LIB(iaf, ia_openinfo)
1936 ### Configure cryptographic random number support
1938 # Check wheter OpenSSL seeds itself
1939 AC_MSG_CHECKING([whether OpenSSL's PRNG is internally seeded])
1943 #include <openssl/rand.h>
1944 int main(void) { exit(RAND_status() == 1 ? 0 : 1); }
1947 OPENSSL_SEEDS_ITSELF=yes
1952 # Default to use of the rand helper if OpenSSL doesn't
1957 AC_MSG_WARN([cross compiling: assuming yes])
1958 # This is safe, since all recent OpenSSL versions will
1959 # complain at runtime if not seeded correctly.
1960 OPENSSL_SEEDS_ITSELF=yes
1965 # Do we want to force the use of the rand helper?
1966 AC_ARG_WITH(rand-helper,
1967 [ --with-rand-helper Use subprocess to gather strong randomness ],
1969 if test "x$withval" = "xno" ; then
1970 # Force use of OpenSSL's internal RNG, even if
1971 # the previous test showed it to be unseeded.
1972 if test -z "$OPENSSL_SEEDS_ITSELF" ; then
1973 AC_MSG_WARN([*** Forcing use of OpenSSL's non-self-seeding PRNG])
1974 OPENSSL_SEEDS_ITSELF=yes
1983 # Which randomness source do we use?
1984 if test ! -z "$OPENSSL_SEEDS_ITSELF" && test -z "$USE_RAND_HELPER" ; then
1986 AC_DEFINE(OPENSSL_PRNG_ONLY, 1,
1987 [Define if you want OpenSSL's internally seeded PRNG only])
1988 RAND_MSG="OpenSSL internal ONLY"
1989 INSTALL_SSH_RAND_HELPER=""
1990 elif test ! -z "$USE_RAND_HELPER" ; then
1991 # install rand helper
1992 RAND_MSG="ssh-rand-helper"
1993 INSTALL_SSH_RAND_HELPER="yes"
1995 AC_SUBST(INSTALL_SSH_RAND_HELPER)
1997 ### Configuration of ssh-rand-helper
2000 AC_ARG_WITH(prngd-port,
2001 [ --with-prngd-port=PORT read entropy from PRNGD/EGD TCP localhost:PORT],
2010 AC_MSG_ERROR(You must specify a numeric port number for --with-prngd-port)
2013 if test ! -z "$withval" ; then
2014 PRNGD_PORT="$withval"
2015 AC_DEFINE_UNQUOTED(PRNGD_PORT, $PRNGD_PORT,
2016 [Port number of PRNGD/EGD random number socket])
2021 # PRNGD Unix domain socket
2022 AC_ARG_WITH(prngd-socket,
2023 [ --with-prngd-socket=FILE read entropy from PRNGD/EGD socket FILE (default=/var/run/egd-pool)],
2027 withval="/var/run/egd-pool"
2035 AC_MSG_ERROR(You must specify an absolute path to the entropy socket)
2039 if test ! -z "$withval" ; then
2040 if test ! -z "$PRNGD_PORT" ; then
2041 AC_MSG_ERROR(You may not specify both a PRNGD/EGD port and socket)
2043 if test ! -r "$withval" ; then
2044 AC_MSG_WARN(Entropy socket is not readable)
2046 PRNGD_SOCKET="$withval"
2047 AC_DEFINE_UNQUOTED(PRNGD_SOCKET, "$PRNGD_SOCKET",
2048 [Location of PRNGD/EGD random number socket])
2052 # Check for existing socket only if we don't have a random device already
2053 if test "$USE_RAND_HELPER" = yes ; then
2054 AC_MSG_CHECKING(for PRNGD/EGD socket)
2055 # Insert other locations here
2056 for sock in /var/run/egd-pool /dev/egd-pool /etc/entropy; do
2057 if test -r $sock && $TEST_MINUS_S_SH -c "test -S $sock -o -p $sock" ; then
2058 PRNGD_SOCKET="$sock"
2059 AC_DEFINE_UNQUOTED(PRNGD_SOCKET, "$PRNGD_SOCKET")
2063 if test ! -z "$PRNGD_SOCKET" ; then
2064 AC_MSG_RESULT($PRNGD_SOCKET)
2066 AC_MSG_RESULT(not found)
2072 # Change default command timeout for hashing entropy source
2074 AC_ARG_WITH(entropy-timeout,
2075 [ --with-entropy-timeout Specify entropy gathering command timeout (msec)],
2077 if test -n "$withval" && test "x$withval" != "xno" && \
2078 test "x${withval}" != "xyes"; then
2079 entropy_timeout=$withval
2083 AC_DEFINE_UNQUOTED(ENTROPY_TIMEOUT_MSEC, $entropy_timeout,
2084 [Builtin PRNG command timeout])
2086 SSH_PRIVSEP_USER=sshd
2087 AC_ARG_WITH(privsep-user,
2088 [ --with-privsep-user=user Specify non-privileged user for privilege separation],
2090 if test -n "$withval" && test "x$withval" != "xno" && \
2091 test "x${withval}" != "xyes"; then
2092 SSH_PRIVSEP_USER=$withval
2096 AC_DEFINE_UNQUOTED(SSH_PRIVSEP_USER, "$SSH_PRIVSEP_USER",
2097 [non-privileged user for privilege separation])
2098 AC_SUBST(SSH_PRIVSEP_USER)
2100 # We do this little dance with the search path to insure
2101 # that programs that we select for use by installed programs
2102 # (which may be run by the super-user) come from trusted
2103 # locations before they come from the user's private area.
2104 # This should help avoid accidentally configuring some
2105 # random version of a program in someone's personal bin.
2109 test -h /bin 2> /dev/null && PATH=/usr/bin
2110 test -d /sbin && PATH=$PATH:/sbin
2111 test -d /usr/sbin && PATH=$PATH:/usr/sbin
2112 PATH=$PATH:/etc:$OPATH
2114 # These programs are used by the command hashing source to gather entropy
2115 OSSH_PATH_ENTROPY_PROG(PROG_LS, ls)
2116 OSSH_PATH_ENTROPY_PROG(PROG_NETSTAT, netstat)
2117 OSSH_PATH_ENTROPY_PROG(PROG_ARP, arp)
2118 OSSH_PATH_ENTROPY_PROG(PROG_IFCONFIG, ifconfig)
2119 OSSH_PATH_ENTROPY_PROG(PROG_JSTAT, jstat)
2120 OSSH_PATH_ENTROPY_PROG(PROG_PS, ps)
2121 OSSH_PATH_ENTROPY_PROG(PROG_SAR, sar)
2122 OSSH_PATH_ENTROPY_PROG(PROG_W, w)
2123 OSSH_PATH_ENTROPY_PROG(PROG_WHO, who)
2124 OSSH_PATH_ENTROPY_PROG(PROG_LAST, last)
2125 OSSH_PATH_ENTROPY_PROG(PROG_LASTLOG, lastlog)
2126 OSSH_PATH_ENTROPY_PROG(PROG_DF, df)
2127 OSSH_PATH_ENTROPY_PROG(PROG_VMSTAT, vmstat)
2128 OSSH_PATH_ENTROPY_PROG(PROG_UPTIME, uptime)
2129 OSSH_PATH_ENTROPY_PROG(PROG_IPCS, ipcs)
2130 OSSH_PATH_ENTROPY_PROG(PROG_TAIL, tail)
2134 # Where does ssh-rand-helper get its randomness from?
2135 INSTALL_SSH_PRNG_CMDS=""
2136 if test ! -z "$INSTALL_SSH_RAND_HELPER" ; then
2137 if test ! -z "$PRNGD_PORT" ; then
2138 RAND_HELPER_MSG="TCP localhost:$PRNGD_PORT"
2139 elif test ! -z "$PRNGD_SOCKET" ; then
2140 RAND_HELPER_MSG="Unix domain socket \"$PRNGD_SOCKET\""
2142 RAND_HELPER_MSG="Command hashing (timeout $entropy_timeout)"
2143 RAND_HELPER_CMDHASH=yes
2144 INSTALL_SSH_PRNG_CMDS="yes"
2147 AC_SUBST(INSTALL_SSH_PRNG_CMDS)
2150 # Cheap hack to ensure NEWS-OS libraries are arranged right.
2151 if test ! -z "$SONY" ; then
2152 LIBS="$LIBS -liberty";
2155 # Check for long long datatypes
2156 AC_CHECK_TYPES([long long, unsigned long long, long double])
2158 # Check datatype sizes
2159 AC_CHECK_SIZEOF(char, 1)
2160 AC_CHECK_SIZEOF(short int, 2)
2161 AC_CHECK_SIZEOF(int, 4)
2162 AC_CHECK_SIZEOF(long int, 4)
2163 AC_CHECK_SIZEOF(long long int, 8)
2165 # Sanity check long long for some platforms (AIX)
2166 if test "x$ac_cv_sizeof_long_long_int" = "x4" ; then
2167 ac_cv_sizeof_long_long_int=0
2170 # compute LLONG_MIN and LLONG_MAX if we don't know them.
2171 if test -z "$have_llong_max"; then
2172 AC_MSG_CHECKING([for max value of long long])
2176 /* Why is this so damn hard? */
2180 #define __USE_ISOC99
2182 #define DATA "conftest.llminmax"
2183 #define my_abs(a) ((a) < 0 ? ((a) * -1) : (a))
2186 * printf in libc on some platforms (eg old Tru64) does not understand %lld so
2187 * we do this the hard way.
2190 fprint_ll(FILE *f, long long n)
2193 int l[sizeof(long long) * 8];
2196 if (fprintf(f, "-") < 0)
2198 for (i = 0; n != 0; i++) {
2199 l[i] = my_abs(n % 10);
2203 if (fprintf(f, "%d", l[--i]) < 0)
2206 if (fprintf(f, " ") < 0)
2213 long long i, llmin, llmax = 0;
2215 if((f = fopen(DATA,"w")) == NULL)
2218 #if defined(LLONG_MIN) && defined(LLONG_MAX)
2219 fprintf(stderr, "Using system header for LLONG_MIN and LLONG_MAX\n");
2223 fprintf(stderr, "Calculating LLONG_MIN and LLONG_MAX\n");
2224 /* This will work on one's complement and two's complement */
2225 for (i = 1; i > llmax; i <<= 1, i++)
2227 llmin = llmax + 1LL; /* wrap */
2231 if (llmin + 1 < llmin || llmin - 1 < llmin || llmax + 1 > llmax
2232 || llmax - 1 > llmax || llmin == llmax || llmin == 0
2233 || llmax == 0 || llmax < LONG_MAX || llmin > LONG_MIN) {
2234 fprintf(f, "unknown unknown\n");
2238 if (fprint_ll(f, llmin) < 0)
2240 if (fprint_ll(f, llmax) < 0)
2248 llong_min=`$AWK '{print $1}' conftest.llminmax`
2249 llong_max=`$AWK '{print $2}' conftest.llminmax`
2251 AC_MSG_RESULT($llong_max)
2252 AC_DEFINE_UNQUOTED(LLONG_MAX, [${llong_max}LL],
2253 [max value of long long calculated by configure])
2254 AC_MSG_CHECKING([for min value of long long])
2255 AC_MSG_RESULT($llong_min)
2256 AC_DEFINE_UNQUOTED(LLONG_MIN, [${llong_min}LL],
2257 [min value of long long calculated by configure])
2260 AC_MSG_RESULT(not found)
2263 AC_MSG_WARN([cross compiling: not checking])
2269 # More checks for data types
2270 AC_CACHE_CHECK([for u_int type], ac_cv_have_u_int, [
2272 [ #include <sys/types.h> ],
2274 [ ac_cv_have_u_int="yes" ],
2275 [ ac_cv_have_u_int="no" ]
2278 if test "x$ac_cv_have_u_int" = "xyes" ; then
2279 AC_DEFINE(HAVE_U_INT, 1, [define if you have u_int data type])
2283 AC_CACHE_CHECK([for intXX_t types], ac_cv_have_intxx_t, [
2285 [ #include <sys/types.h> ],
2286 [ int8_t a; int16_t b; int32_t c; a = b = c = 1;],
2287 [ ac_cv_have_intxx_t="yes" ],
2288 [ ac_cv_have_intxx_t="no" ]
2291 if test "x$ac_cv_have_intxx_t" = "xyes" ; then
2292 AC_DEFINE(HAVE_INTXX_T, 1, [define if you have intxx_t data type])
2296 if (test -z "$have_intxx_t" && \
2297 test "x$ac_cv_header_stdint_h" = "xyes")
2299 AC_MSG_CHECKING([for intXX_t types in stdint.h])
2301 [ #include <stdint.h> ],
2302 [ int8_t a; int16_t b; int32_t c; a = b = c = 1;],
2304 AC_DEFINE(HAVE_INTXX_T)
2307 [ AC_MSG_RESULT(no) ]
2311 AC_CACHE_CHECK([for int64_t type], ac_cv_have_int64_t, [
2314 #include <sys/types.h>
2315 #ifdef HAVE_STDINT_H
2316 # include <stdint.h>
2318 #include <sys/socket.h>
2319 #ifdef HAVE_SYS_BITYPES_H
2320 # include <sys/bitypes.h>
2323 [ int64_t a; a = 1;],
2324 [ ac_cv_have_int64_t="yes" ],
2325 [ ac_cv_have_int64_t="no" ]
2328 if test "x$ac_cv_have_int64_t" = "xyes" ; then
2329 AC_DEFINE(HAVE_INT64_T, 1, [define if you have int64_t data type])
2332 AC_CACHE_CHECK([for u_intXX_t types], ac_cv_have_u_intxx_t, [
2334 [ #include <sys/types.h> ],
2335 [ u_int8_t a; u_int16_t b; u_int32_t c; a = b = c = 1;],
2336 [ ac_cv_have_u_intxx_t="yes" ],
2337 [ ac_cv_have_u_intxx_t="no" ]
2340 if test "x$ac_cv_have_u_intxx_t" = "xyes" ; then
2341 AC_DEFINE(HAVE_U_INTXX_T, 1, [define if you have u_intxx_t data type])
2345 if test -z "$have_u_intxx_t" ; then
2346 AC_MSG_CHECKING([for u_intXX_t types in sys/socket.h])
2348 [ #include <sys/socket.h> ],
2349 [ u_int8_t a; u_int16_t b; u_int32_t c; a = b = c = 1;],
2351 AC_DEFINE(HAVE_U_INTXX_T)
2354 [ AC_MSG_RESULT(no) ]
2358 AC_CACHE_CHECK([for u_int64_t types], ac_cv_have_u_int64_t, [
2360 [ #include <sys/types.h> ],
2361 [ u_int64_t a; a = 1;],
2362 [ ac_cv_have_u_int64_t="yes" ],
2363 [ ac_cv_have_u_int64_t="no" ]
2366 if test "x$ac_cv_have_u_int64_t" = "xyes" ; then
2367 AC_DEFINE(HAVE_U_INT64_T, 1, [define if you have u_int64_t data type])
2371 if test -z "$have_u_int64_t" ; then
2372 AC_MSG_CHECKING([for u_int64_t type in sys/bitypes.h])
2374 [ #include <sys/bitypes.h> ],
2375 [ u_int64_t a; a = 1],
2377 AC_DEFINE(HAVE_U_INT64_T)
2380 [ AC_MSG_RESULT(no) ]
2384 if test -z "$have_u_intxx_t" ; then
2385 AC_CACHE_CHECK([for uintXX_t types], ac_cv_have_uintxx_t, [
2388 #include <sys/types.h>
2390 [ uint8_t a; uint16_t b; uint32_t c; a = b = c = 1; ],
2391 [ ac_cv_have_uintxx_t="yes" ],
2392 [ ac_cv_have_uintxx_t="no" ]
2395 if test "x$ac_cv_have_uintxx_t" = "xyes" ; then
2396 AC_DEFINE(HAVE_UINTXX_T, 1,
2397 [define if you have uintxx_t data type])
2401 if test -z "$have_uintxx_t" ; then
2402 AC_MSG_CHECKING([for uintXX_t types in stdint.h])
2404 [ #include <stdint.h> ],
2405 [ uint8_t a; uint16_t b; uint32_t c; a = b = c = 1;],
2407 AC_DEFINE(HAVE_UINTXX_T)
2410 [ AC_MSG_RESULT(no) ]
2414 if (test -z "$have_u_intxx_t" || test -z "$have_intxx_t" && \
2415 test "x$ac_cv_header_sys_bitypes_h" = "xyes")
2417 AC_MSG_CHECKING([for intXX_t and u_intXX_t types in sys/bitypes.h])
2420 #include <sys/bitypes.h>
2423 int8_t a; int16_t b; int32_t c;
2424 u_int8_t e; u_int16_t f; u_int32_t g;
2425 a = b = c = e = f = g = 1;
2428 AC_DEFINE(HAVE_U_INTXX_T)
2429 AC_DEFINE(HAVE_INTXX_T)
2437 AC_CACHE_CHECK([for u_char], ac_cv_have_u_char, [
2440 #include <sys/types.h>
2442 [ u_char foo; foo = 125; ],
2443 [ ac_cv_have_u_char="yes" ],
2444 [ ac_cv_have_u_char="no" ]
2447 if test "x$ac_cv_have_u_char" = "xyes" ; then
2448 AC_DEFINE(HAVE_U_CHAR, 1, [define if you have u_char data type])
2453 AC_CHECK_TYPES(sig_atomic_t,,,[#include <signal.h>])
2455 AC_CHECK_TYPES(in_addr_t,,,
2456 [#include <sys/types.h>
2457 #include <netinet/in.h>])
2459 AC_CACHE_CHECK([for size_t], ac_cv_have_size_t, [
2462 #include <sys/types.h>
2464 [ size_t foo; foo = 1235; ],
2465 [ ac_cv_have_size_t="yes" ],
2466 [ ac_cv_have_size_t="no" ]
2469 if test "x$ac_cv_have_size_t" = "xyes" ; then
2470 AC_DEFINE(HAVE_SIZE_T, 1, [define if you have size_t data type])
2473 AC_CACHE_CHECK([for ssize_t], ac_cv_have_ssize_t, [
2476 #include <sys/types.h>
2478 [ ssize_t foo; foo = 1235; ],
2479 [ ac_cv_have_ssize_t="yes" ],
2480 [ ac_cv_have_ssize_t="no" ]
2483 if test "x$ac_cv_have_ssize_t" = "xyes" ; then
2484 AC_DEFINE(HAVE_SSIZE_T, 1, [define if you have ssize_t data type])
2487 AC_CACHE_CHECK([for clock_t], ac_cv_have_clock_t, [
2492 [ clock_t foo; foo = 1235; ],
2493 [ ac_cv_have_clock_t="yes" ],
2494 [ ac_cv_have_clock_t="no" ]
2497 if test "x$ac_cv_have_clock_t" = "xyes" ; then
2498 AC_DEFINE(HAVE_CLOCK_T, 1, [define if you have clock_t data type])
2501 AC_CACHE_CHECK([for sa_family_t], ac_cv_have_sa_family_t, [
2504 #include <sys/types.h>
2505 #include <sys/socket.h>
2507 [ sa_family_t foo; foo = 1235; ],
2508 [ ac_cv_have_sa_family_t="yes" ],
2511 #include <sys/types.h>
2512 #include <sys/socket.h>
2513 #include <netinet/in.h>
2515 [ sa_family_t foo; foo = 1235; ],
2516 [ ac_cv_have_sa_family_t="yes" ],
2518 [ ac_cv_have_sa_family_t="no" ]
2522 if test "x$ac_cv_have_sa_family_t" = "xyes" ; then
2523 AC_DEFINE(HAVE_SA_FAMILY_T, 1,
2524 [define if you have sa_family_t data type])
2527 AC_CACHE_CHECK([for pid_t], ac_cv_have_pid_t, [
2530 #include <sys/types.h>
2532 [ pid_t foo; foo = 1235; ],
2533 [ ac_cv_have_pid_t="yes" ],
2534 [ ac_cv_have_pid_t="no" ]
2537 if test "x$ac_cv_have_pid_t" = "xyes" ; then
2538 AC_DEFINE(HAVE_PID_T, 1, [define if you have pid_t data type])
2541 AC_CACHE_CHECK([for mode_t], ac_cv_have_mode_t, [
2544 #include <sys/types.h>
2546 [ mode_t foo; foo = 1235; ],
2547 [ ac_cv_have_mode_t="yes" ],
2548 [ ac_cv_have_mode_t="no" ]
2551 if test "x$ac_cv_have_mode_t" = "xyes" ; then
2552 AC_DEFINE(HAVE_MODE_T, 1, [define if you have mode_t data type])
2556 AC_CACHE_CHECK([for struct sockaddr_storage], ac_cv_have_struct_sockaddr_storage, [
2559 #include <sys/types.h>
2560 #include <sys/socket.h>
2562 [ struct sockaddr_storage s; ],
2563 [ ac_cv_have_struct_sockaddr_storage="yes" ],
2564 [ ac_cv_have_struct_sockaddr_storage="no" ]
2567 if test "x$ac_cv_have_struct_sockaddr_storage" = "xyes" ; then
2568 AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE, 1,
2569 [define if you have struct sockaddr_storage data type])
2572 AC_CACHE_CHECK([for struct sockaddr_in6], ac_cv_have_struct_sockaddr_in6, [
2575 #include <sys/types.h>
2576 #include <netinet/in.h>
2578 [ struct sockaddr_in6 s; s.sin6_family = 0; ],
2579 [ ac_cv_have_struct_sockaddr_in6="yes" ],
2580 [ ac_cv_have_struct_sockaddr_in6="no" ]
2583 if test "x$ac_cv_have_struct_sockaddr_in6" = "xyes" ; then
2584 AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6, 1,
2585 [define if you have struct sockaddr_in6 data type])
2588 AC_CACHE_CHECK([for struct in6_addr], ac_cv_have_struct_in6_addr, [
2591 #include <sys/types.h>
2592 #include <netinet/in.h>
2594 [ struct in6_addr s; s.s6_addr[0] = 0; ],
2595 [ ac_cv_have_struct_in6_addr="yes" ],
2596 [ ac_cv_have_struct_in6_addr="no" ]
2599 if test "x$ac_cv_have_struct_in6_addr" = "xyes" ; then
2600 AC_DEFINE(HAVE_STRUCT_IN6_ADDR, 1,
2601 [define if you have struct in6_addr data type])
2604 AC_CACHE_CHECK([for struct addrinfo], ac_cv_have_struct_addrinfo, [
2607 #include <sys/types.h>
2608 #include <sys/socket.h>
2611 [ struct addrinfo s; s.ai_flags = AI_PASSIVE; ],
2612 [ ac_cv_have_struct_addrinfo="yes" ],
2613 [ ac_cv_have_struct_addrinfo="no" ]
2616 if test "x$ac_cv_have_struct_addrinfo" = "xyes" ; then
2617 AC_DEFINE(HAVE_STRUCT_ADDRINFO, 1,
2618 [define if you have struct addrinfo data type])
2621 AC_CACHE_CHECK([for struct timeval], ac_cv_have_struct_timeval, [
2623 [ #include <sys/time.h> ],
2624 [ struct timeval tv; tv.tv_sec = 1;],
2625 [ ac_cv_have_struct_timeval="yes" ],
2626 [ ac_cv_have_struct_timeval="no" ]
2629 if test "x$ac_cv_have_struct_timeval" = "xyes" ; then
2630 AC_DEFINE(HAVE_STRUCT_TIMEVAL, 1, [define if you have struct timeval])
2631 have_struct_timeval=1
2634 AC_CHECK_TYPES(struct timespec)
2636 # We need int64_t or else certian parts of the compile will fail.
2637 if test "x$ac_cv_have_int64_t" = "xno" && \
2638 test "x$ac_cv_sizeof_long_int" != "x8" && \
2639 test "x$ac_cv_sizeof_long_long_int" = "x0" ; then
2640 echo "OpenSSH requires int64_t support. Contact your vendor or install"
2641 echo "an alternative compiler (I.E., GCC) before continuing."
2645 dnl test snprintf (broken on SCO w/gcc)
2650 #ifdef HAVE_SNPRINTF
2654 char expected_out[50];
2656 #if (SIZEOF_LONG_INT == 8)
2657 long int num = 0x7fffffffffffffff;
2659 long long num = 0x7fffffffffffffffll;
2661 strcpy(expected_out, "9223372036854775807");
2662 snprintf(buf, mazsize, "%lld", num);
2663 if(strcmp(buf, expected_out) != 0)
2670 ]])], [ true ], [ AC_DEFINE(BROKEN_SNPRINTF) ],
2671 AC_MSG_WARN([cross compiling: Assuming working snprintf()])
2675 dnl Checks for structure members
2676 OSSH_CHECK_HEADER_FOR_FIELD(ut_host, utmp.h, HAVE_HOST_IN_UTMP)
2677 OSSH_CHECK_HEADER_FOR_FIELD(ut_host, utmpx.h, HAVE_HOST_IN_UTMPX)
2678 OSSH_CHECK_HEADER_FOR_FIELD(syslen, utmpx.h, HAVE_SYSLEN_IN_UTMPX)
2679 OSSH_CHECK_HEADER_FOR_FIELD(ut_pid, utmp.h, HAVE_PID_IN_UTMP)
2680 OSSH_CHECK_HEADER_FOR_FIELD(ut_type, utmp.h, HAVE_TYPE_IN_UTMP)
2681 OSSH_CHECK_HEADER_FOR_FIELD(ut_type, utmpx.h, HAVE_TYPE_IN_UTMPX)
2682 OSSH_CHECK_HEADER_FOR_FIELD(ut_tv, utmp.h, HAVE_TV_IN_UTMP)
2683 OSSH_CHECK_HEADER_FOR_FIELD(ut_id, utmp.h, HAVE_ID_IN_UTMP)
2684 OSSH_CHECK_HEADER_FOR_FIELD(ut_id, utmpx.h, HAVE_ID_IN_UTMPX)
2685 OSSH_CHECK_HEADER_FOR_FIELD(ut_addr, utmp.h, HAVE_ADDR_IN_UTMP)
2686 OSSH_CHECK_HEADER_FOR_FIELD(ut_addr, utmpx.h, HAVE_ADDR_IN_UTMPX)
2687 OSSH_CHECK_HEADER_FOR_FIELD(ut_addr_v6, utmp.h, HAVE_ADDR_V6_IN_UTMP)
2688 OSSH_CHECK_HEADER_FOR_FIELD(ut_addr_v6, utmpx.h, HAVE_ADDR_V6_IN_UTMPX)
2689 OSSH_CHECK_HEADER_FOR_FIELD(ut_exit, utmp.h, HAVE_EXIT_IN_UTMP)
2690 OSSH_CHECK_HEADER_FOR_FIELD(ut_time, utmp.h, HAVE_TIME_IN_UTMP)
2691 OSSH_CHECK_HEADER_FOR_FIELD(ut_time, utmpx.h, HAVE_TIME_IN_UTMPX)
2692 OSSH_CHECK_HEADER_FOR_FIELD(ut_tv, utmpx.h, HAVE_TV_IN_UTMPX)
2694 AC_CHECK_MEMBERS([struct stat.st_blksize])
2695 AC_CHECK_MEMBER([struct __res_state.retrans], [], [AC_DEFINE(__res_state, state,
2696 [Define if we don't have struct __res_state in resolv.h])],
2699 #if HAVE_SYS_TYPES_H
2700 # include <sys/types.h>
2702 #include <netinet/in.h>
2703 #include <arpa/nameser.h>
2707 AC_CACHE_CHECK([for ss_family field in struct sockaddr_storage],
2708 ac_cv_have_ss_family_in_struct_ss, [
2711 #include <sys/types.h>
2712 #include <sys/socket.h>
2714 [ struct sockaddr_storage s; s.ss_family = 1; ],
2715 [ ac_cv_have_ss_family_in_struct_ss="yes" ],
2716 [ ac_cv_have_ss_family_in_struct_ss="no" ],
2719 if test "x$ac_cv_have_ss_family_in_struct_ss" = "xyes" ; then
2720 AC_DEFINE(HAVE_SS_FAMILY_IN_SS, 1, [Fields in struct sockaddr_storage])
2723 AC_CACHE_CHECK([for __ss_family field in struct sockaddr_storage],
2724 ac_cv_have___ss_family_in_struct_ss, [
2727 #include <sys/types.h>
2728 #include <sys/socket.h>
2730 [ struct sockaddr_storage s; s.__ss_family = 1; ],
2731 [ ac_cv_have___ss_family_in_struct_ss="yes" ],
2732 [ ac_cv_have___ss_family_in_struct_ss="no" ]
2735 if test "x$ac_cv_have___ss_family_in_struct_ss" = "xyes" ; then
2736 AC_DEFINE(HAVE___SS_FAMILY_IN_SS, 1,
2737 [Fields in struct sockaddr_storage])
2740 AC_CACHE_CHECK([for pw_class field in struct passwd],
2741 ac_cv_have_pw_class_in_struct_passwd, [
2746 [ struct passwd p; p.pw_class = 0; ],
2747 [ ac_cv_have_pw_class_in_struct_passwd="yes" ],
2748 [ ac_cv_have_pw_class_in_struct_passwd="no" ]
2751 if test "x$ac_cv_have_pw_class_in_struct_passwd" = "xyes" ; then
2752 AC_DEFINE(HAVE_PW_CLASS_IN_PASSWD, 1,
2753 [Define if your password has a pw_class field])
2756 AC_CACHE_CHECK([for pw_expire field in struct passwd],
2757 ac_cv_have_pw_expire_in_struct_passwd, [
2762 [ struct passwd p; p.pw_expire = 0; ],
2763 [ ac_cv_have_pw_expire_in_struct_passwd="yes" ],
2764 [ ac_cv_have_pw_expire_in_struct_passwd="no" ]
2767 if test "x$ac_cv_have_pw_expire_in_struct_passwd" = "xyes" ; then
2768 AC_DEFINE(HAVE_PW_EXPIRE_IN_PASSWD, 1,
2769 [Define if your password has a pw_expire field])
2772 AC_CACHE_CHECK([for pw_change field in struct passwd],
2773 ac_cv_have_pw_change_in_struct_passwd, [
2778 [ struct passwd p; p.pw_change = 0; ],
2779 [ ac_cv_have_pw_change_in_struct_passwd="yes" ],
2780 [ ac_cv_have_pw_change_in_struct_passwd="no" ]
2783 if test "x$ac_cv_have_pw_change_in_struct_passwd" = "xyes" ; then
2784 AC_DEFINE(HAVE_PW_CHANGE_IN_PASSWD, 1,
2785 [Define if your password has a pw_change field])
2788 dnl make sure we're using the real structure members and not defines
2789 AC_CACHE_CHECK([for msg_accrights field in struct msghdr],
2790 ac_cv_have_accrights_in_msghdr, [
2793 #include <sys/types.h>
2794 #include <sys/socket.h>
2795 #include <sys/uio.h>
2797 #ifdef msg_accrights
2798 #error "msg_accrights is a macro"
2802 m.msg_accrights = 0;
2806 [ ac_cv_have_accrights_in_msghdr="yes" ],
2807 [ ac_cv_have_accrights_in_msghdr="no" ]
2810 if test "x$ac_cv_have_accrights_in_msghdr" = "xyes" ; then
2811 AC_DEFINE(HAVE_ACCRIGHTS_IN_MSGHDR, 1,
2812 [Define if your system uses access rights style
2813 file descriptor passing])
2816 AC_CACHE_CHECK([for msg_control field in struct msghdr],
2817 ac_cv_have_control_in_msghdr, [
2820 #include <sys/types.h>
2821 #include <sys/socket.h>
2822 #include <sys/uio.h>
2825 #error "msg_control is a macro"
2833 [ ac_cv_have_control_in_msghdr="yes" ],
2834 [ ac_cv_have_control_in_msghdr="no" ]
2837 if test "x$ac_cv_have_control_in_msghdr" = "xyes" ; then
2838 AC_DEFINE(HAVE_CONTROL_IN_MSGHDR, 1,
2839 [Define if your system uses ancillary data style
2840 file descriptor passing])
2843 AC_CACHE_CHECK([if libc defines __progname], ac_cv_libc_defines___progname, [
2845 [ extern char *__progname; printf("%s", __progname); ],
2846 [ ac_cv_libc_defines___progname="yes" ],
2847 [ ac_cv_libc_defines___progname="no" ]
2850 if test "x$ac_cv_libc_defines___progname" = "xyes" ; then
2851 AC_DEFINE(HAVE___PROGNAME, 1, [Define if libc defines __progname])
2854 AC_CACHE_CHECK([whether $CC implements __FUNCTION__], ac_cv_cc_implements___FUNCTION__, [
2858 [ printf("%s", __FUNCTION__); ],
2859 [ ac_cv_cc_implements___FUNCTION__="yes" ],
2860 [ ac_cv_cc_implements___FUNCTION__="no" ]
2863 if test "x$ac_cv_cc_implements___FUNCTION__" = "xyes" ; then
2864 AC_DEFINE(HAVE___FUNCTION__, 1,
2865 [Define if compiler implements __FUNCTION__])
2868 AC_CACHE_CHECK([whether $CC implements __func__], ac_cv_cc_implements___func__, [
2872 [ printf("%s", __func__); ],
2873 [ ac_cv_cc_implements___func__="yes" ],
2874 [ ac_cv_cc_implements___func__="no" ]
2877 if test "x$ac_cv_cc_implements___func__" = "xyes" ; then
2878 AC_DEFINE(HAVE___func__, 1, [Define if compiler implements __func__])
2881 AC_CACHE_CHECK([whether va_copy exists], ac_cv_have_va_copy, [
2883 [#include <stdarg.h>
2886 [ ac_cv_have_va_copy="yes" ],
2887 [ ac_cv_have_va_copy="no" ]
2890 if test "x$ac_cv_have_va_copy" = "xyes" ; then
2891 AC_DEFINE(HAVE_VA_COPY, 1, [Define if va_copy exists])
2894 AC_CACHE_CHECK([whether __va_copy exists], ac_cv_have___va_copy, [
2896 [#include <stdarg.h>
2899 [ ac_cv_have___va_copy="yes" ],
2900 [ ac_cv_have___va_copy="no" ]
2903 if test "x$ac_cv_have___va_copy" = "xyes" ; then
2904 AC_DEFINE(HAVE___VA_COPY, 1, [Define if __va_copy exists])
2907 AC_CACHE_CHECK([whether getopt has optreset support],
2908 ac_cv_have_getopt_optreset, [
2913 [ extern int optreset; optreset = 0; ],
2914 [ ac_cv_have_getopt_optreset="yes" ],
2915 [ ac_cv_have_getopt_optreset="no" ]
2918 if test "x$ac_cv_have_getopt_optreset" = "xyes" ; then
2919 AC_DEFINE(HAVE_GETOPT_OPTRESET, 1,
2920 [Define if your getopt(3) defines and uses optreset])
2923 AC_CACHE_CHECK([if libc defines sys_errlist], ac_cv_libc_defines_sys_errlist, [
2925 [ extern const char *const sys_errlist[]; printf("%s", sys_errlist[0]);],
2926 [ ac_cv_libc_defines_sys_errlist="yes" ],
2927 [ ac_cv_libc_defines_sys_errlist="no" ]
2930 if test "x$ac_cv_libc_defines_sys_errlist" = "xyes" ; then
2931 AC_DEFINE(HAVE_SYS_ERRLIST, 1,
2932 [Define if your system defines sys_errlist[]])
2936 AC_CACHE_CHECK([if libc defines sys_nerr], ac_cv_libc_defines_sys_nerr, [
2938 [ extern int sys_nerr; printf("%i", sys_nerr);],
2939 [ ac_cv_libc_defines_sys_nerr="yes" ],
2940 [ ac_cv_libc_defines_sys_nerr="no" ]
2943 if test "x$ac_cv_libc_defines_sys_nerr" = "xyes" ; then
2944 AC_DEFINE(HAVE_SYS_NERR, 1, [Define if your system defines sys_nerr])
2948 # Check whether user wants sectok support
2950 [ --with-sectok Enable smartcard support using libsectok],
2952 if test "x$withval" != "xno" ; then
2953 if test "x$withval" != "xyes" ; then
2954 CPPFLAGS="$CPPFLAGS -I${withval}"
2955 LDFLAGS="$LDFLAGS -L${withval}"
2956 if test ! -z "$need_dash_r" ; then
2957 LDFLAGS="$LDFLAGS -R${withval}"
2959 if test ! -z "$blibpath" ; then
2960 blibpath="$blibpath:${withval}"
2963 AC_CHECK_HEADERS(sectok.h)
2964 if test "$ac_cv_header_sectok_h" != yes; then
2965 AC_MSG_ERROR(Can't find sectok.h)
2967 AC_CHECK_LIB(sectok, sectok_open)
2968 if test "$ac_cv_lib_sectok_sectok_open" != yes; then
2969 AC_MSG_ERROR(Can't find libsectok)
2971 AC_DEFINE(SMARTCARD, 1,
2972 [Define if you want smartcard support])
2973 AC_DEFINE(USE_SECTOK, 1,
2974 [Define if you want smartcard support
2976 SCARD_MSG="yes, using sectok"
2981 # Check whether user wants OpenSC support
2984 [ --with-opensc[[=PFX]] Enable smartcard support using OpenSC (optionally in PATH)],
2986 if test "x$withval" != "xno" ; then
2987 if test "x$withval" != "xyes" ; then
2988 OPENSC_CONFIG=$withval/bin/opensc-config
2990 AC_PATH_PROG(OPENSC_CONFIG, opensc-config, no)
2992 if test "$OPENSC_CONFIG" != "no"; then
2993 LIBOPENSC_CFLAGS=`$OPENSC_CONFIG --cflags`
2994 LIBOPENSC_LIBS=`$OPENSC_CONFIG --libs`
2995 CPPFLAGS="$CPPFLAGS $LIBOPENSC_CFLAGS"
2996 LDFLAGS="$LDFLAGS $LIBOPENSC_LIBS"
2997 AC_DEFINE(SMARTCARD)
2998 AC_DEFINE(USE_OPENSC, 1,
2999 [Define if you want smartcard support
3001 SCARD_MSG="yes, using OpenSC"
3007 # Check libraries needed by DNS fingerprint support
3008 AC_SEARCH_LIBS(getrrsetbyname, resolv,
3009 [AC_DEFINE(HAVE_GETRRSETBYNAME, 1,
3010 [Define if getrrsetbyname() exists])],
3012 # Needed by our getrrsetbyname()
3013 AC_SEARCH_LIBS(res_query, resolv)
3014 AC_SEARCH_LIBS(dn_expand, resolv)
3015 AC_MSG_CHECKING(if res_query will link)
3016 AC_TRY_LINK_FUNC(res_query, AC_MSG_RESULT(yes),
3019 LIBS="$LIBS -lresolv"
3020 AC_MSG_CHECKING(for res_query in -lresolv)
3025 res_query (0, 0, 0, 0, 0);
3029 [LIBS="$LIBS -lresolv"
3030 AC_MSG_RESULT(yes)],
3034 AC_CHECK_FUNCS(_getshort _getlong)
3035 AC_CHECK_DECLS([_getshort, _getlong], , ,
3036 [#include <sys/types.h>
3037 #include <arpa/nameser.h>])
3038 AC_CHECK_MEMBER(HEADER.ad,
3039 [AC_DEFINE(HAVE_HEADER_AD, 1,
3040 [Define if HEADER.ad exists in arpa/nameser.h])],,
3041 [#include <arpa/nameser.h>])
3044 # Check whether user wants SELinux support
3047 AC_ARG_WITH(selinux,
3048 [ --with-selinux Enable SELinux support],
3049 [ if test "x$withval" != "xno" ; then
3050 AC_DEFINE(WITH_SELINUX,1,[Define if you want SELinux support.])
3052 AC_CHECK_HEADER([selinux/selinux.h], ,
3053 AC_MSG_ERROR(SELinux support requires selinux.h header))
3054 AC_CHECK_LIB(selinux, setexeccon, [ LIBSELINUX="-lselinux" ],
3055 AC_MSG_ERROR(SELinux support requires libselinux library))
3056 AC_CHECK_FUNCS(getseuserbyname get_default_context_with_level)
3059 AC_SUBST(LIBSELINUX)
3061 # Check whether user wants Kerberos 5 support
3063 AC_ARG_WITH(kerberos5,
3064 [ --with-kerberos5=PATH Enable Kerberos 5 support],
3065 [ if test "x$withval" != "xno" ; then
3066 if test "x$withval" = "xyes" ; then
3067 KRB5ROOT="/usr/local"
3072 AC_DEFINE(KRB5, 1, [Define if you want Kerberos 5 support])
3075 AC_MSG_CHECKING(for krb5-config)
3076 if test -x $KRB5ROOT/bin/krb5-config ; then
3077 KRB5CONF=$KRB5ROOT/bin/krb5-config
3078 AC_MSG_RESULT($KRB5CONF)
3080 AC_MSG_CHECKING(for gssapi support)
3081 if $KRB5CONF | grep gssapi >/dev/null ; then
3083 AC_DEFINE(GSSAPI, 1,
3084 [Define this if you want GSSAPI
3085 support in the version 2 protocol])
3091 K5CFLAGS="`$KRB5CONF --cflags $k5confopts`"
3092 K5LIBS="`$KRB5CONF --libs $k5confopts`"
3093 CPPFLAGS="$CPPFLAGS $K5CFLAGS"
3094 AC_MSG_CHECKING(whether we are using Heimdal)
3095 AC_TRY_COMPILE([ #include <krb5.h> ],
3096 [ char *tmp = heimdal_version; ],
3097 [ AC_MSG_RESULT(yes)
3098 AC_DEFINE(HEIMDAL, 1,
3099 [Define this if you are using the
3100 Heimdal version of Kerberos V5]) ],
3105 CPPFLAGS="$CPPFLAGS -I${KRB5ROOT}/include"
3106 LDFLAGS="$LDFLAGS -L${KRB5ROOT}/lib"
3107 AC_MSG_CHECKING(whether we are using Heimdal)
3108 AC_TRY_COMPILE([ #include <krb5.h> ],
3109 [ char *tmp = heimdal_version; ],
3110 [ AC_MSG_RESULT(yes)
3112 K5LIBS="-lkrb5 -ldes"
3113 K5LIBS="$K5LIBS -lcom_err -lasn1"
3114 AC_CHECK_LIB(roken, net_write,
3115 [K5LIBS="$K5LIBS -lroken"])
3118 K5LIBS="-lkrb5 -lk5crypto -lcom_err"
3121 AC_SEARCH_LIBS(dn_expand, resolv)
3123 AC_CHECK_LIB(gssapi,gss_init_sec_context,
3125 K5LIBS="-lgssapi $K5LIBS" ],
3126 [ AC_CHECK_LIB(gssapi_krb5,gss_init_sec_context,
3128 K5LIBS="-lgssapi_krb5 $K5LIBS" ],
3129 AC_MSG_WARN([Cannot find any suitable gss-api library - build may fail]),
3134 AC_CHECK_HEADER(gssapi.h, ,
3135 [ unset ac_cv_header_gssapi_h
3136 CPPFLAGS="$CPPFLAGS -I${KRB5ROOT}/include/gssapi"
3137 AC_CHECK_HEADERS(gssapi.h, ,
3138 AC_MSG_WARN([Cannot find any suitable gss-api header - build may fail])
3144 CPPFLAGS="$CPPFLAGS -I${KRB5ROOT}/include/gssapi"
3145 AC_CHECK_HEADER(gssapi_krb5.h, ,
3146 [ CPPFLAGS="$oldCPP" ])
3149 if test ! -z "$need_dash_r" ; then
3150 LDFLAGS="$LDFLAGS -R${KRB5ROOT}/lib"
3152 if test ! -z "$blibpath" ; then
3153 blibpath="$blibpath:${KRB5ROOT}/lib"
3156 AC_CHECK_HEADERS(gssapi.h gssapi/gssapi.h)
3157 AC_CHECK_HEADERS(gssapi_krb5.h gssapi/gssapi_krb5.h)
3158 AC_CHECK_HEADERS(gssapi_generic.h gssapi/gssapi_generic.h)
3160 LIBS="$LIBS $K5LIBS"
3161 AC_SEARCH_LIBS(k_hasafs, kafs, AC_DEFINE(USE_AFS, 1,
3162 [Define this if you want to use libkafs' AFS support]))
3167 # Looking for programs, paths and files
3169 PRIVSEP_PATH=/var/empty
3170 AC_ARG_WITH(privsep-path,
3171 [ --with-privsep-path=xxx Path for privilege separation chroot (default=/var/empty)],
3173 if test -n "$withval" && test "x$withval" != "xno" && \
3174 test "x${withval}" != "xyes"; then
3175 PRIVSEP_PATH=$withval
3179 AC_SUBST(PRIVSEP_PATH)
3182 [ --with-xauth=PATH Specify path to xauth program ],
3184 if test -n "$withval" && test "x$withval" != "xno" && \
3185 test "x${withval}" != "xyes"; then
3191 TestPath="${TestPath}${PATH_SEPARATOR}/usr/X/bin"
3192 TestPath="${TestPath}${PATH_SEPARATOR}/usr/bin/X11"
3193 TestPath="${TestPath}${PATH_SEPARATOR}/usr/X11R6/bin"
3194 TestPath="${TestPath}${PATH_SEPARATOR}/usr/openwin/bin"
3195 AC_PATH_PROG(xauth_path, xauth, , $TestPath)
3196 if (test ! -z "$xauth_path" && test -x "/usr/openwin/bin/xauth") ; then
3197 xauth_path="/usr/openwin/bin/xauth"
3203 AC_ARG_ENABLE(strip,
3204 [ --disable-strip Disable calling strip(1) on install],
3206 if test "x$enableval" = "xno" ; then
3213 if test -z "$xauth_path" ; then
3214 XAUTH_PATH="undefined"
3215 AC_SUBST(XAUTH_PATH)
3217 AC_DEFINE_UNQUOTED(XAUTH_PATH, "$xauth_path",
3218 [Define if xauth is found in your path])
3219 XAUTH_PATH=$xauth_path
3220 AC_SUBST(XAUTH_PATH)
3223 # Check for mail directory (last resort if we cannot get it from headers)
3224 if test ! -z "$MAIL" ; then
3225 maildir=`dirname $MAIL`
3226 AC_DEFINE_UNQUOTED(MAIL_DIRECTORY, "$maildir",
3227 [Set this to your mail directory if you don't have maillock.h])
3230 if test ! -z "$cross_compiling" && test "x$cross_compiling" = "xyes"; then
3231 AC_MSG_WARN([cross compiling: Disabling /dev/ptmx test])
3232 disable_ptmx_check=yes
3234 if test -z "$no_dev_ptmx" ; then
3235 if test "x$disable_ptmx_check" != "xyes" ; then
3236 AC_CHECK_FILE("/dev/ptmx",
3238 AC_DEFINE_UNQUOTED(HAVE_DEV_PTMX, 1,
3239 [Define if you have /dev/ptmx])
3246 if test ! -z "$cross_compiling" && test "x$cross_compiling" != "xyes"; then
3247 AC_CHECK_FILE("/dev/ptc",
3249 AC_DEFINE_UNQUOTED(HAVE_DEV_PTS_AND_PTC, 1,
3250 [Define if you have /dev/ptc])
3255 AC_MSG_WARN([cross compiling: Disabling /dev/ptc test])
3258 # Options from here on. Some of these are preset by platform above
3259 AC_ARG_WITH(mantype,
3260 [ --with-mantype=man|cat|doc Set man page type],
3267 AC_MSG_ERROR(invalid man type: $withval)
3272 if test -z "$MANTYPE"; then
3273 TestPath="/usr/bin${PATH_SEPARATOR}/usr/ucb"
3274 AC_PATH_PROGS(NROFF, nroff awf, /bin/false, $TestPath)
3275 if ${NROFF} -mdoc ${srcdir}/ssh.1 >/dev/null 2>&1; then
3277 elif ${NROFF} -man ${srcdir}/ssh.1 >/dev/null 2>&1; then
3284 if test "$MANTYPE" = "doc"; then
3291 # Check whether to enable MD5 passwords
3293 AC_ARG_WITH(md5-passwords,
3294 [ --with-md5-passwords Enable use of MD5 passwords],
3296 if test "x$withval" != "xno" ; then
3297 AC_DEFINE(HAVE_MD5_PASSWORDS, 1,
3298 [Define if you want to allow MD5 passwords])
3304 # Whether to disable shadow password support
3306 [ --without-shadow Disable shadow password support],
3308 if test "x$withval" = "xno" ; then
3309 AC_DEFINE(DISABLE_SHADOW)
3315 if test -z "$disable_shadow" ; then
3316 AC_MSG_CHECKING([if the systems has expire shadow information])
3319 #include <sys/types.h>
3322 ],[ sp.sp_expire = sp.sp_lstchg = sp.sp_inact = 0; ],
3323 [ sp_expire_available=yes ], []
3326 if test "x$sp_expire_available" = "xyes" ; then
3328 AC_DEFINE(HAS_SHADOW_EXPIRE, 1,
3329 [Define if you want to use shadow password expire field])
3335 # Use ip address instead of hostname in $DISPLAY
3336 if test ! -z "$IPADDR_IN_DISPLAY" ; then
3337 DISPLAY_HACK_MSG="yes"
3338 AC_DEFINE(IPADDR_IN_DISPLAY, 1,
3339 [Define if you need to use IP address
3340 instead of hostname in $DISPLAY])
3342 DISPLAY_HACK_MSG="no"
3343 AC_ARG_WITH(ipaddr-display,
3344 [ --with-ipaddr-display Use ip address instead of hostname in \$DISPLAY],
3346 if test "x$withval" != "xno" ; then
3347 AC_DEFINE(IPADDR_IN_DISPLAY)
3348 DISPLAY_HACK_MSG="yes"
3354 # check for /etc/default/login and use it if present.
3355 AC_ARG_ENABLE(etc-default-login,
3356 [ --disable-etc-default-login Disable using PATH from /etc/default/login [no]],
3357 [ if test "x$enableval" = "xno"; then
3358 AC_MSG_NOTICE([/etc/default/login handling disabled])
3359 etc_default_login=no
3361 etc_default_login=yes
3363 [ if test ! -z "$cross_compiling" && test "x$cross_compiling" = "xyes";
3365 AC_MSG_WARN([cross compiling: not checking /etc/default/login])
3366 etc_default_login=no
3368 etc_default_login=yes
3372 if test "x$etc_default_login" != "xno"; then
3373 AC_CHECK_FILE("/etc/default/login",
3374 [ external_path_file=/etc/default/login ])
3375 if test "x$external_path_file" = "x/etc/default/login"; then
3376 AC_DEFINE(HAVE_ETC_DEFAULT_LOGIN, 1,
3377 [Define if your system has /etc/default/login])
3381 dnl BSD systems use /etc/login.conf so --with-default-path= has no effect
3382 if test $ac_cv_func_login_getcapbool = "yes" && \
3383 test $ac_cv_header_login_cap_h = "yes" ; then
3384 external_path_file=/etc/login.conf
3387 # Whether to mess with the default path
3388 SERVER_PATH_MSG="(default)"
3389 AC_ARG_WITH(default-path,
3390 [ --with-default-path= Specify default \$PATH environment for server],
3392 if test "x$external_path_file" = "x/etc/login.conf" ; then
3394 --with-default-path=PATH has no effect on this system.
3395 Edit /etc/login.conf instead.])
3396 elif test "x$withval" != "xno" ; then
3397 if test ! -z "$external_path_file" ; then
3399 --with-default-path=PATH will only be used if PATH is not defined in
3400 $external_path_file .])
3402 user_path="$withval"
3403 SERVER_PATH_MSG="$withval"
3406 [ if test "x$external_path_file" = "x/etc/login.conf" ; then
3407 AC_MSG_WARN([Make sure the path to scp is in /etc/login.conf])
3409 if test ! -z "$external_path_file" ; then
3411 If PATH is defined in $external_path_file, ensure the path to scp is included,
3412 otherwise scp will not work.])
3416 /* find out what STDPATH is */
3421 #ifndef _PATH_STDPATH
3422 # ifdef _PATH_USERPATH /* Irix */
3423 # define _PATH_STDPATH _PATH_USERPATH
3425 # define _PATH_STDPATH "/usr/bin:/bin:/usr/sbin:/sbin"
3428 #include <sys/types.h>
3429 #include <sys/stat.h>
3431 #define DATA "conftest.stdpath"
3438 fd = fopen(DATA,"w");
3442 if ((rc = fprintf(fd,"%s", _PATH_STDPATH)) < 0)
3448 [ user_path=`cat conftest.stdpath` ],
3449 [ user_path="/usr/bin:/bin:/usr/sbin:/sbin" ],
3450 [ user_path="/usr/bin:/bin:/usr/sbin:/sbin" ]
3452 # make sure $bindir is in USER_PATH so scp will work
3453 t_bindir=`eval echo ${bindir}`
3455 NONE/*) t_bindir=`echo $t_bindir | sed "s~NONE~$prefix~"` ;;
3458 NONE/*) t_bindir=`echo $t_bindir | sed "s~NONE~$ac_default_prefix~"` ;;
3460 echo $user_path | grep ":$t_bindir" > /dev/null 2>&1
3461 if test $? -ne 0 ; then
3462 echo $user_path | grep "^$t_bindir" > /dev/null 2>&1
3463 if test $? -ne 0 ; then
3464 user_path=$user_path:$t_bindir
3465 AC_MSG_RESULT(Adding $t_bindir to USER_PATH so scp will work)
3470 if test "x$external_path_file" != "x/etc/login.conf" ; then
3471 AC_DEFINE_UNQUOTED(USER_PATH, "$user_path", [Specify default $PATH])
3475 # Set superuser path separately to user path
3476 AC_ARG_WITH(superuser-path,
3477 [ --with-superuser-path= Specify different path for super-user],
3479 if test -n "$withval" && test "x$withval" != "xno" && \
3480 test "x${withval}" != "xyes"; then
3481 AC_DEFINE_UNQUOTED(SUPERUSER_PATH, "$withval",
3482 [Define if you want a different $PATH
3484 superuser_path=$withval
3490 AC_MSG_CHECKING([if we need to convert IPv4 in IPv6-mapped addresses])
3491 IPV4_IN6_HACK_MSG="no"
3493 [ --with-4in6 Check for and convert IPv4 in IPv6 mapped addresses],
3495 if test "x$withval" != "xno" ; then
3497 AC_DEFINE(IPV4_IN_IPV6, 1,
3498 [Detect IPv4 in IPv6 mapped addresses
3500 IPV4_IN6_HACK_MSG="yes"
3505 if test "x$inet6_default_4in6" = "xyes"; then
3506 AC_MSG_RESULT([yes (default)])
3507 AC_DEFINE(IPV4_IN_IPV6)
3508 IPV4_IN6_HACK_MSG="yes"
3510 AC_MSG_RESULT([no (default)])
3515 # Whether to enable BSD auth support
3517 AC_ARG_WITH(bsd-auth,
3518 [ --with-bsd-auth Enable BSD auth support],
3520 if test "x$withval" != "xno" ; then
3521 AC_DEFINE(BSD_AUTH, 1,
3522 [Define if you have BSD auth support])
3528 # Where to place sshd.pid
3530 # make sure the directory exists
3531 if test ! -d $piddir ; then
3532 piddir=`eval echo ${sysconfdir}`
3534 NONE/*) piddir=`echo $piddir | sed "s~NONE~$ac_default_prefix~"` ;;
3538 AC_ARG_WITH(pid-dir,
3539 [ --with-pid-dir=PATH Specify location of ssh.pid file],
3541 if test -n "$withval" && test "x$withval" != "xno" && \
3542 test "x${withval}" != "xyes"; then
3544 if test ! -d $piddir ; then
3545 AC_MSG_WARN([** no $piddir directory on this system **])
3551 AC_DEFINE_UNQUOTED(_PATH_SSH_PIDDIR, "$piddir", [Specify location of ssh.pid])
3554 dnl allow user to disable some login recording features
3555 AC_ARG_ENABLE(lastlog,
3556 [ --disable-lastlog disable use of lastlog even if detected [no]],
3558 if test "x$enableval" = "xno" ; then
3559 AC_DEFINE(DISABLE_LASTLOG)
3564 [ --disable-utmp disable use of utmp even if detected [no]],
3566 if test "x$enableval" = "xno" ; then
3567 AC_DEFINE(DISABLE_UTMP)
3571 AC_ARG_ENABLE(utmpx,
3572 [ --disable-utmpx disable use of utmpx even if detected [no]],
3574 if test "x$enableval" = "xno" ; then
3575 AC_DEFINE(DISABLE_UTMPX, 1,
3576 [Define if you don't want to use utmpx])
3581 [ --disable-wtmp disable use of wtmp even if detected [no]],
3583 if test "x$enableval" = "xno" ; then
3584 AC_DEFINE(DISABLE_WTMP)
3588 AC_ARG_ENABLE(wtmpx,
3589 [ --disable-wtmpx disable use of wtmpx even if detected [no]],
3591 if test "x$enableval" = "xno" ; then
3592 AC_DEFINE(DISABLE_WTMPX, 1,
3593 [Define if you don't want to use wtmpx])
3597 AC_ARG_ENABLE(libutil,
3598 [ --disable-libutil disable use of libutil (login() etc.) [no]],
3600 if test "x$enableval" = "xno" ; then
3601 AC_DEFINE(DISABLE_LOGIN)
3605 AC_ARG_ENABLE(pututline,
3606 [ --disable-pututline disable use of pututline() etc. ([uw]tmp) [no]],
3608 if test "x$enableval" = "xno" ; then
3609 AC_DEFINE(DISABLE_PUTUTLINE, 1,
3610 [Define if you don't want to use pututline()
3611 etc. to write [uw]tmp])
3615 AC_ARG_ENABLE(pututxline,
3616 [ --disable-pututxline disable use of pututxline() etc. ([uw]tmpx) [no]],
3618 if test "x$enableval" = "xno" ; then
3619 AC_DEFINE(DISABLE_PUTUTXLINE, 1,
3620 [Define if you don't want to use pututxline()
3621 etc. to write [uw]tmpx])
3625 AC_ARG_WITH(lastlog,
3626 [ --with-lastlog=FILE|DIR specify lastlog location [common locations]],
3628 if test "x$withval" = "xno" ; then
3629 AC_DEFINE(DISABLE_LASTLOG)
3630 elif test -n "$withval" && test "x${withval}" != "xyes"; then
3631 conf_lastlog_location=$withval
3636 dnl lastlog, [uw]tmpx? detection
3637 dnl NOTE: set the paths in the platform section to avoid the
3638 dnl need for command-line parameters
3639 dnl lastlog and [uw]tmp are subject to a file search if all else fails
3641 dnl lastlog detection
3642 dnl NOTE: the code itself will detect if lastlog is a directory
3643 AC_MSG_CHECKING([if your system defines LASTLOG_FILE])
3645 #include <sys/types.h>
3647 #ifdef HAVE_LASTLOG_H
3648 # include <lastlog.h>
3657 [ char *lastlog = LASTLOG_FILE; ],
3658 [ AC_MSG_RESULT(yes) ],
3661 AC_MSG_CHECKING([if your system defines _PATH_LASTLOG])
3663 #include <sys/types.h>
3665 #ifdef HAVE_LASTLOG_H
3666 # include <lastlog.h>
3672 [ char *lastlog = _PATH_LASTLOG; ],
3673 [ AC_MSG_RESULT(yes) ],
3676 system_lastlog_path=no
3681 if test -z "$conf_lastlog_location"; then
3682 if test x"$system_lastlog_path" = x"no" ; then
3683 for f in /var/log/lastlog /usr/adm/lastlog /var/adm/lastlog /etc/security/lastlog ; do
3684 if (test -d "$f" || test -f "$f") ; then
3685 conf_lastlog_location=$f
3688 if test -z "$conf_lastlog_location"; then
3689 AC_MSG_WARN([** Cannot find lastlog **])
3690 dnl Don't define DISABLE_LASTLOG - that means we don't try wtmp/wtmpx
3695 if test -n "$conf_lastlog_location"; then
3696 AC_DEFINE_UNQUOTED(CONF_LASTLOG_FILE, "$conf_lastlog_location",
3697 [Define if you want to specify the path to your lastlog file])
3701 AC_MSG_CHECKING([if your system defines UTMP_FILE])
3703 #include <sys/types.h>
3709 [ char *utmp = UTMP_FILE; ],
3710 [ AC_MSG_RESULT(yes) ],
3712 system_utmp_path=no ]
3714 if test -z "$conf_utmp_location"; then
3715 if test x"$system_utmp_path" = x"no" ; then
3716 for f in /etc/utmp /usr/adm/utmp /var/run/utmp; do
3717 if test -f $f ; then
3718 conf_utmp_location=$f
3721 if test -z "$conf_utmp_location"; then
3722 AC_DEFINE(DISABLE_UTMP)
3726 if test -n "$conf_utmp_location"; then
3727 AC_DEFINE_UNQUOTED(CONF_UTMP_FILE, "$conf_utmp_location",
3728 [Define if you want to specify the path to your utmp file])
3732 AC_MSG_CHECKING([if your system defines WTMP_FILE])
3734 #include <sys/types.h>
3740 [ char *wtmp = WTMP_FILE; ],
3741 [ AC_MSG_RESULT(yes) ],
3743 system_wtmp_path=no ]
3745 if test -z "$conf_wtmp_location"; then
3746 if test x"$system_wtmp_path" = x"no" ; then
3747 for f in /usr/adm/wtmp /var/log/wtmp; do
3748 if test -f $f ; then
3749 conf_wtmp_location=$f
3752 if test -z "$conf_wtmp_location"; then
3753 AC_DEFINE(DISABLE_WTMP)
3757 if test -n "$conf_wtmp_location"; then
3758 AC_DEFINE_UNQUOTED(CONF_WTMP_FILE, "$conf_wtmp_location",
3759 [Define if you want to specify the path to your wtmp file])
3763 dnl utmpx detection - I don't know any system so perverse as to require
3764 dnl utmpx, but not define UTMPX_FILE (ditto wtmpx.) No doubt it's out
3766 AC_MSG_CHECKING([if your system defines UTMPX_FILE])
3768 #include <sys/types.h>
3777 [ char *utmpx = UTMPX_FILE; ],
3778 [ AC_MSG_RESULT(yes) ],
3780 system_utmpx_path=no ]
3782 if test -z "$conf_utmpx_location"; then
3783 if test x"$system_utmpx_path" = x"no" ; then
3784 AC_DEFINE(DISABLE_UTMPX)
3787 AC_DEFINE_UNQUOTED(CONF_UTMPX_FILE, "$conf_utmpx_location",
3788 [Define if you want to specify the path to your utmpx file])
3792 AC_MSG_CHECKING([if your system defines WTMPX_FILE])
3794 #include <sys/types.h>
3803 [ char *wtmpx = WTMPX_FILE; ],
3804 [ AC_MSG_RESULT(yes) ],
3806 system_wtmpx_path=no ]
3808 if test -z "$conf_wtmpx_location"; then
3809 if test x"$system_wtmpx_path" = x"no" ; then
3810 AC_DEFINE(DISABLE_WTMPX)
3813 AC_DEFINE_UNQUOTED(CONF_WTMPX_FILE, "$conf_wtmpx_location",
3814 [Define if you want to specify the path to your wtmpx file])
3818 if test ! -z "$blibpath" ; then
3819 LDFLAGS="$LDFLAGS $blibflags$blibpath"
3820 AC_MSG_WARN([Please check and edit blibpath in LDFLAGS in Makefile])
3823 dnl remove pam and dl because they are in $LIBPAM
3824 if test "$PAM_MSG" = yes ; then
3825 LIBS=`echo $LIBS | sed 's/-lpam //'`
3827 if test "$ac_cv_lib_pam_pam_set_item" = yes ; then
3828 LIBS=`echo $LIBS | sed 's/-ldl //'`
3831 dnl Adding -Werror to CFLAGS early prevents configure tests from running.
3833 CFLAGS="$CFLAGS $werror_flags"
3836 AC_CONFIG_FILES([Makefile buildpkg.sh opensshd.init openbsd-compat/Makefile \
3837 openbsd-compat/regress/Makefile scard/Makefile ssh_prng_cmds survey.sh])
3840 # Print summary of options
3842 # Someone please show me a better way :)
3843 A=`eval echo ${prefix}` ; A=`eval echo ${A}`
3844 B=`eval echo ${bindir}` ; B=`eval echo ${B}`
3845 C=`eval echo ${sbindir}` ; C=`eval echo ${C}`
3846 D=`eval echo ${sysconfdir}` ; D=`eval echo ${D}`
3847 E=`eval echo ${libexecdir}/ssh-askpass` ; E=`eval echo ${E}`
3848 F=`eval echo ${mandir}/${mansubdir}X` ; F=`eval echo ${F}`
3849 G=`eval echo ${piddir}` ; G=`eval echo ${G}`
3850 H=`eval echo ${PRIVSEP_PATH}` ; H=`eval echo ${H}`
3851 I=`eval echo ${user_path}` ; I=`eval echo ${I}`
3852 J=`eval echo ${superuser_path}` ; J=`eval echo ${J}`
3855 echo "OpenSSH has been configured with the following options:"
3856 echo " User binaries: $B"
3857 echo " System binaries: $C"
3858 echo " Configuration files: $D"
3859 echo " Askpass program: $E"
3860 echo " Manual pages: $F"
3861 echo " PID file: $G"
3862 echo " Privilege separation chroot path: $H"
3863 if test "x$external_path_file" = "x/etc/login.conf" ; then
3864 echo " At runtime, sshd will use the path defined in $external_path_file"
3865 echo " Make sure the path to scp is present, otherwise scp will not work"
3867 echo " sshd default user PATH: $I"
3868 if test ! -z "$external_path_file"; then
3869 echo " (If PATH is set in $external_path_file it will be used instead. If"
3870 echo " used, ensure the path to scp is present, otherwise scp will not work.)"
3873 if test ! -z "$superuser_path" ; then
3874 echo " sshd superuser user PATH: $J"
3876 echo " Manpage format: $MANTYPE"
3877 echo " PAM support: $PAM_MSG"
3878 echo " KerberosV support: $KRB5_MSG"
3879 echo " SELinux support: $SELINUX_MSG"
3880 echo " Smartcard support: $SCARD_MSG"
3881 echo " S/KEY support: $SKEY_MSG"
3882 echo " TCP Wrappers support: $TCPW_MSG"
3883 echo " MD5 password support: $MD5_MSG"
3884 echo " libedit support: $LIBEDIT_MSG"
3885 echo " IP address in \$DISPLAY hack: $DISPLAY_HACK_MSG"
3886 echo " Translate v4 in v6 hack: $IPV4_IN6_HACK_MSG"
3887 echo " BSD Auth support: $BSD_AUTH_MSG"
3888 echo " Random number source: $RAND_MSG"
3889 if test ! -z "$USE_RAND_HELPER" ; then
3890 echo " ssh-rand-helper collects from: $RAND_HELPER_MSG"
3895 echo " Host: ${host}"
3896 echo " Compiler: ${CC}"
3897 echo " Compiler flags: ${CFLAGS}"
3898 echo "Preprocessor flags: ${CPPFLAGS}"
3899 echo " Linker flags: ${LDFLAGS}"
3900 echo " Libraries: ${LIBWRAP} ${LIBPAM} ${LIBS}"
3904 if test "x$MAKE_PACKAGE_SUPPORTED" = "xyes" ; then
3905 echo "SVR4 style packages are supported with \"make package\""
3909 if test "x$PAM_MSG" = "xyes" ; then
3910 echo "PAM is enabled. You may need to install a PAM control file "
3911 echo "for sshd, otherwise password authentication may fail. "
3912 echo "Example PAM control files can be found in the contrib/ "
3917 if test ! -z "$RAND_HELPER_CMDHASH" ; then
3918 echo "WARNING: you are using the builtin random number collection "
3919 echo "service. Please read WARNING.RNG and request that your OS "
3920 echo "vendor includes kernel-based random number collection in "
3921 echo "future versions of your OS."
3925 if test ! -z "$NO_PEERCHECK" ; then
3926 echo "WARNING: the operating system that you are using does not "
3927 echo "appear to support either the getpeereid() API nor the "
3928 echo "SO_PEERCRED getsockopt() option. These facilities are used to "
3929 echo "enforce security checks to prevent unauthorised connections to "
3930 echo "ssh-agent. Their absence increases the risk that a malicious "
3931 echo "user can connect to your agent. "
3935 if test "$AUDIT_MODULE" = "bsm" ; then
3936 echo "WARNING: BSM audit support is currently considered EXPERIMENTAL."
3937 echo "See the Solaris section in README.platform for details."