]> andersk Git - openssh.git/blob - configure.ac
- (dtucker) [configure.ac] Define BROKEN_UPDWTMP on SCO OSR6 as the native
[openssh.git] / configure.ac
1 # $Id$
2 #
3 # Copyright (c) 1999-2004 Damien Miller
4 #
5 # Permission to use, copy, modify, and distribute this software for any
6 # purpose with or without fee is hereby granted, provided that the above
7 # copyright notice and this permission notice appear in all copies.
8 #
9 # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16
17 AC_INIT(OpenSSH, Portable, openssh-unix-dev@mindrot.org)
18 AC_REVISION($Revision$)
19 AC_CONFIG_SRCDIR([ssh.c])
20
21 AC_CONFIG_HEADER(config.h)
22 AC_PROG_CC
23 AC_CANONICAL_HOST
24 AC_C_BIGENDIAN
25
26 # Checks for programs.
27 AC_PROG_AWK
28 AC_PROG_CPP
29 AC_PROG_RANLIB
30 AC_PROG_INSTALL
31 AC_PROG_EGREP
32 AC_PATH_PROG(AR, ar)
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)
37 AC_SUBST(PERL)
38 AC_PATH_PROG(ENT, ent)
39 AC_SUBST(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)
43 AC_PATH_PROG(SH, sh)
44 AC_SUBST(TEST_SHELL,sh)
45
46 dnl for buildpkg.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)
54 else
55         AC_SUBST(STARTUP_SCRIPT_SHELL,/bin/sh)
56 fi
57
58 # System features
59 AC_SYS_LARGEFILE
60
61 if test -z "$AR" ; then
62         AC_MSG_ERROR([*** 'ar' missing, please install or fix your \$PATH ***])
63 fi
64
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])
70 else
71         # Search for login
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")
75         fi
76 fi
77
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])
82 fi
83
84 if test -z "$LD" ; then
85         LD=$CC
86 fi
87 AC_SUBST(LD)
88
89 AC_C_INLINE
90
91 AC_CHECK_DECL(LLONG_MAX, have_llong_max=1, , [#include <limits.h>])
92
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}'`
96         case $GCC_VER in
97                 1.*) ;;
98                 2.8* | 2.9*) CFLAGS="$CFLAGS -Wsign-compare" ;;
99                 2.*) ;;
100                 3.*) CFLAGS="$CFLAGS -Wsign-compare" ;;
101                 4.*) CFLAGS="$CFLAGS -Wsign-compare -Wno-pointer-sign" ;;
102                 *) ;;
103         esac
104
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,
111                     [have_llong_max=1],
112                     [CFLAGS="$saved_CFLAGS"],
113                     [#include <limits.h>]
114                 )
115         fi
116 fi
117
118 AC_ARG_WITH(rpath,
119         [  --without-rpath         Disable auto-added -R linker paths],
120         [
121                 if test "x$withval" = "xno" ; then
122                         need_dash_r=""
123                 fi
124                 if test "x$withval" = "xyes" ; then
125                         need_dash_r=1
126                 fi
127         ]
128 )
129
130 # Messages for features tested for in target-specific section
131 SIA_MSG="no"
132 SPC_MSG="no"
133
134 # Check for some target-specific stuff
135 case "$host" in
136 *-*-aix*)
137         AC_MSG_CHECKING([how to specify blibpath for linker ($LD)])
138         if (test -z "$blibpath"); then
139                 blibpath="/usr/lib:/lib"
140         fi
141         saved_LDFLAGS="$LDFLAGS"
142         if test "$GCC" = "yes"; then
143                 flags="-Wl,-blibpath: -Wl,-rpath, -blibpath:"
144         else
145                 flags="-blibpath: -Wl,-blibpath: -Wl,-rpath,"
146         fi
147         for tryflags in $flags ;do
148                 if (test -z "$blibflags"); then
149                         LDFLAGS="$saved_LDFLAGS $tryflags$blibpath"
150                         AC_TRY_LINK([], [], [blibflags=$tryflags])
151                 fi
152         done
153         if (test -z "$blibflags"); then
154                 AC_MSG_RESULT(not found)
155                 AC_MSG_ERROR([*** must be able to specify blibpath on AIX - check config.log])
156         else
157                 AC_MSG_RESULT($blibflags)
158         fi
159         LDFLAGS="$saved_LDFLAGS"
160         dnl Check for authenticate.  Might be in libs.a on older AIXes
161         AC_CHECK_FUNC(authenticate, [AC_DEFINE(WITH_AIXAUTHENTICATE, 1,
162                 [Define if you want to enable AIX4's authenticate function])],
163                 [AC_CHECK_LIB(s,authenticate,
164                         [ AC_DEFINE(WITH_AIXAUTHENTICATE)
165                                 LIBS="$LIBS -ls"
166                         ])
167                 ])
168         dnl Check for various auth function declarations in headers.
169         AC_CHECK_DECLS([authenticate, loginrestrictions, loginsuccess,
170             passwdexpired, setauthdb], , , [#include <usersec.h>])
171         dnl Check if loginfailed is declared and takes 4 arguments (AIX >= 5.2)
172         AC_CHECK_DECLS(loginfailed,
173                  [AC_MSG_CHECKING(if loginfailed takes 4 arguments)
174                   AC_TRY_COMPILE(
175                         [#include <usersec.h>],
176                         [(void)loginfailed("user","host","tty",0);],
177                         [AC_MSG_RESULT(yes)
178                          AC_DEFINE(AIX_LOGINFAILED_4ARG, 1,
179                                 [Define if your AIX loginfailed() function
180                                 takes 4 arguments (AIX >= 5.2)])],
181                         [AC_MSG_RESULT(no)]
182                 )],
183                 [],
184                 [#include <usersec.h>]
185         )
186         AC_CHECK_FUNCS(setauthdb)
187         AC_CHECK_DECL(F_CLOSEM,
188             AC_DEFINE(HAVE_FCNTL_CLOSEM, 1, [Use F_CLOSEM fcntl for closefrom]),
189             [],
190             [ #include <limits.h>
191               #include <fcntl.h> ]
192         )
193         check_for_aix_broken_getaddrinfo=1
194         AC_DEFINE(BROKEN_REALPATH, 1, [Define if you have a broken realpath.])
195         AC_DEFINE(SETEUID_BREAKS_SETUID, 1,
196             [Define if your platform breaks doing a seteuid before a setuid])
197         AC_DEFINE(BROKEN_SETREUID, 1, [Define if your setreuid() is broken])
198         AC_DEFINE(BROKEN_SETREGID, 1, [Define if your setregid() is broken])
199         dnl AIX handles lastlog as part of its login message
200         AC_DEFINE(DISABLE_LASTLOG, 1, [Define if you don't want to use lastlog])
201         AC_DEFINE(LOGIN_NEEDS_UTMPX, 1,
202                 [Some systems need a utmpx entry for /bin/login to work])
203         AC_DEFINE(SPT_TYPE,SPT_REUSEARGV,
204                 [Define to a Set Process Title type if your system is
205                 supported by bsd-setproctitle.c])
206         AC_DEFINE(SSHPAM_CHAUTHTOK_NEEDS_RUID, 1,
207             [AIX 5.2 and 5.3 (and presumably newer) require this])
208         AC_DEFINE(PTY_ZEROREAD, 1, [read(1) can return 0 for a non-closed fd])
209         ;;
210 *-*-cygwin*)
211         check_for_libcrypt_later=1
212         LIBS="$LIBS /usr/lib/textmode.o"
213         AC_DEFINE(HAVE_CYGWIN, 1, [Define if you are on Cygwin])
214         AC_DEFINE(USE_PIPES, 1, [Use PIPES instead of a socketpair()])
215         AC_DEFINE(DISABLE_SHADOW, 1,
216                 [Define if you want to disable shadow passwords])
217         AC_DEFINE(IP_TOS_IS_BROKEN, 1,
218                 [Define if your system choked on IP TOS setting])
219         AC_DEFINE(NO_X11_UNIX_SOCKETS, 1,
220                 [Define if X11 doesn't support AF_UNIX sockets on that system])
221         AC_DEFINE(NO_IPPORT_RESERVED_CONCEPT, 1,
222                 [Define if the concept of ports only accessible to
223                 superusers isn't known])
224         AC_DEFINE(DISABLE_FD_PASSING, 1,
225                 [Define if your platform needs to skip post auth
226                 file descriptor passing])
227         ;;
228 *-*-dgux*)
229         AC_DEFINE(IP_TOS_IS_BROKEN)
230         AC_DEFINE(SETEUID_BREAKS_SETUID)
231         AC_DEFINE(BROKEN_SETREUID)
232         AC_DEFINE(BROKEN_SETREGID)
233         ;;
234 *-*-darwin*)
235         AC_MSG_CHECKING(if we have working getaddrinfo)
236         AC_TRY_RUN([#include <mach-o/dyld.h>
237 main() { if (NSVersionOfRunTimeLibrary("System") >= (60 << 16))
238                 exit(0);
239         else
240                 exit(1);
241 }], [AC_MSG_RESULT(working)],
242         [AC_MSG_RESULT(buggy)
243         AC_DEFINE(BROKEN_GETADDRINFO, 1, [getaddrinfo is broken (if present)])],
244         [AC_MSG_RESULT(assume it is working)])
245         AC_DEFINE(SETEUID_BREAKS_SETUID)
246         AC_DEFINE(BROKEN_SETREUID)
247         AC_DEFINE(BROKEN_SETREGID)
248         AC_DEFINE_UNQUOTED(BIND_8_COMPAT, 1,
249                 [Define if your resolver libs need this for getrrsetbyname])
250         AC_DEFINE(SSH_TUN_FREEBSD, 1, [Open tunnel devices the FreeBSD way])
251         AC_DEFINE(SSH_TUN_COMPAT_AF, 1,
252             [Use tunnel device compatibility to OpenBSD])
253         AC_DEFINE(SSH_TUN_PREPEND_AF, 1,
254             [Prepend the address family to IP tunnel traffic])
255         ;;
256 *-*-hpux*)
257         # first we define all of the options common to all HP-UX releases
258         CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1"
259         IPADDR_IN_DISPLAY=yes
260         AC_DEFINE(USE_PIPES)
261         AC_DEFINE(LOGIN_NO_ENDOPT, 1,
262             [Define if your login program cannot handle end of options ("--")])
263         AC_DEFINE(LOGIN_NEEDS_UTMPX)
264         AC_DEFINE(LOCKED_PASSWD_STRING, "*",
265                 [String used in /etc/passwd to denote locked account])
266         AC_DEFINE(SPT_TYPE,SPT_PSTAT)
267         MAIL="/var/mail/username"
268         LIBS="$LIBS -lsec"
269         AC_CHECK_LIB(xnet, t_error, ,
270             AC_MSG_ERROR([*** -lxnet needed on HP-UX - check config.log ***]))
271
272         # next, we define all of the options specific to major releases
273         case "$host" in
274         *-*-hpux10*)
275                 if test -z "$GCC"; then
276                         CFLAGS="$CFLAGS -Ae"
277                 fi
278                 ;;
279         *-*-hpux11*)
280                 AC_DEFINE(PAM_SUN_CODEBASE, 1,
281                         [Define if you are using Solaris-derived PAM which
282                         passes pam_messages to the conversation function
283                         with an extra level of indirection])
284                 AC_DEFINE(DISABLE_UTMP, 1,
285                         [Define if you don't want to use utmp])
286                 AC_DEFINE(USE_BTMP, 1, [Use btmp to log bad logins])
287                 check_for_hpux_broken_getaddrinfo=1
288                 check_for_conflicting_getspnam=1
289                 ;;
290         esac
291
292         # lastly, we define options specific to minor releases
293         case "$host" in
294         *-*-hpux10.26)
295                 AC_DEFINE(HAVE_SECUREWARE, 1,
296                         [Define if you have SecureWare-based
297                         protected password database])
298                 disable_ptmx_check=yes
299                 LIBS="$LIBS -lsecpw"
300                 ;;
301         esac
302         ;;
303 *-*-irix5*)
304         PATH="$PATH:/usr/etc"
305         AC_DEFINE(BROKEN_INET_NTOA, 1,
306                 [Define if you system's inet_ntoa is busted
307                 (e.g. Irix gcc issue)])
308         AC_DEFINE(SETEUID_BREAKS_SETUID)
309         AC_DEFINE(BROKEN_SETREUID)
310         AC_DEFINE(BROKEN_SETREGID)
311         AC_DEFINE(WITH_ABBREV_NO_TTY, 1,
312                 [Define if you shouldn't strip 'tty' from your
313                 ttyname in [uw]tmp])
314         AC_DEFINE(LOCKED_PASSWD_STRING, "*LK*")
315         ;;
316 *-*-irix6*)
317         PATH="$PATH:/usr/etc"
318         AC_DEFINE(WITH_IRIX_ARRAY, 1,
319                 [Define if you have/want arrays
320                 (cluster-wide session managment, not C arrays)])
321         AC_DEFINE(WITH_IRIX_PROJECT, 1,
322                 [Define if you want IRIX project management])
323         AC_DEFINE(WITH_IRIX_AUDIT, 1,
324                 [Define if you want IRIX audit trails])
325         AC_CHECK_FUNC(jlimit_startjob, [AC_DEFINE(WITH_IRIX_JOBS, 1,
326                 [Define if you want IRIX kernel jobs])])
327         AC_DEFINE(BROKEN_INET_NTOA)
328         AC_DEFINE(SETEUID_BREAKS_SETUID)
329         AC_DEFINE(BROKEN_SETREUID)
330         AC_DEFINE(BROKEN_SETREGID)
331         AC_DEFINE(BROKEN_UPDWTMPX, 1, [updwtmpx is broken (if present)])
332         AC_DEFINE(WITH_ABBREV_NO_TTY)
333         AC_DEFINE(LOCKED_PASSWD_STRING, "*LK*")
334         ;;
335 *-*-linux*)
336         no_dev_ptmx=1
337         check_for_libcrypt_later=1
338         check_for_openpty_ctty_bug=1
339         AC_DEFINE(DONT_TRY_OTHER_AF, 1, [Workaround more Linux IPv6 quirks])
340         AC_DEFINE(PAM_TTY_KLUDGE, 1,
341                 [Work around problematic Linux PAM modules handling of PAM_TTY])
342         AC_DEFINE(LOCKED_PASSWD_PREFIX, "!",
343                 [String used in /etc/passwd to denote locked account])
344         AC_DEFINE(SPT_TYPE,SPT_REUSEARGV)
345         AC_DEFINE(LINK_OPNOTSUPP_ERRNO, EPERM,
346                 [Define to whatever link() returns for "not supported"
347                 if it doesn't return EOPNOTSUPP.])
348         AC_DEFINE(_PATH_BTMP, "/var/log/btmp", [log for bad login attempts])
349         AC_DEFINE(USE_BTMP)
350         inet6_default_4in6=yes
351         case `uname -r` in
352         1.*|2.0.*)
353                 AC_DEFINE(BROKEN_CMSG_TYPE, 1,
354                         [Define if cmsg_type is not passed correctly])
355                 ;;
356         esac
357         # tun(4) forwarding compat code
358         AC_CHECK_HEADERS(linux/if_tun.h)
359         if test "x$ac_cv_header_linux_if_tun_h" = "xyes" ; then
360                 AC_DEFINE(SSH_TUN_LINUX, 1,
361                     [Open tunnel devices the Linux tun/tap way])
362                 AC_DEFINE(SSH_TUN_COMPAT_AF, 1,
363                     [Use tunnel device compatibility to OpenBSD])
364                 AC_DEFINE(SSH_TUN_PREPEND_AF, 1,
365                     [Prepend the address family to IP tunnel traffic])
366         fi
367         ;;
368 mips-sony-bsd|mips-sony-newsos4)
369         AC_DEFINE(NEED_SETPGRP, 1, [Need setpgrp to acquire controlling tty])
370         SONY=1
371         ;;
372 *-*-netbsd*)
373         check_for_libcrypt_before=1
374         if test "x$withval" != "xno" ; then
375                 need_dash_r=1
376         fi
377         AC_DEFINE(SSH_TUN_FREEBSD, 1, [Open tunnel devices the FreeBSD way])
378         AC_CHECK_HEADER([net/if_tap.h], ,
379             AC_DEFINE(SSH_TUN_NO_L2, 1, [No layer 2 tunnel support]))
380         AC_DEFINE(SSH_TUN_PREPEND_AF, 1,
381             [Prepend the address family to IP tunnel traffic])
382         ;;
383 *-*-freebsd*)
384         check_for_libcrypt_later=1
385         AC_DEFINE(LOCKED_PASSWD_PREFIX, "*LOCKED*", [Account locked with pw(1)])
386         AC_DEFINE(SSH_TUN_FREEBSD, 1, [Open tunnel devices the FreeBSD way])
387         AC_CHECK_HEADER([net/if_tap.h], ,
388             AC_DEFINE(SSH_TUN_NO_L2, 1, [No layer 2 tunnel support]))
389         ;;
390 *-*-bsdi*)
391         AC_DEFINE(SETEUID_BREAKS_SETUID)
392         AC_DEFINE(BROKEN_SETREUID)
393         AC_DEFINE(BROKEN_SETREGID)
394         ;;
395 *-next-*)
396         conf_lastlog_location="/usr/adm/lastlog"
397         conf_utmp_location=/etc/utmp
398         conf_wtmp_location=/usr/adm/wtmp
399         MAIL=/usr/spool/mail
400         AC_DEFINE(HAVE_NEXT, 1, [Define if you are on NeXT])
401         AC_DEFINE(BROKEN_REALPATH)
402         AC_DEFINE(USE_PIPES)
403         AC_DEFINE(BROKEN_SAVED_UIDS, 1, [Needed for NeXT])
404         ;;
405 *-*-openbsd*)
406         AC_DEFINE(HAVE_ATTRIBUTE__SENTINEL__, 1, [OpenBSD's gcc has sentinel])
407         AC_DEFINE(HAVE_ATTRIBUTE__BOUNDED__, 1, [OpenBSD's gcc has bounded])
408         AC_DEFINE(SSH_TUN_OPENBSD, 1, [Open tunnel devices the OpenBSD way])
409         AC_DEFINE(SYSLOG_R_SAFE_IN_SIGHAND, 1,
410             [syslog_r function is safe to use in in a signal handler])
411         ;;
412 *-*-solaris*)
413         if test "x$withval" != "xno" ; then
414                 need_dash_r=1
415         fi
416         AC_DEFINE(PAM_SUN_CODEBASE)
417         AC_DEFINE(LOGIN_NEEDS_UTMPX)
418         AC_DEFINE(LOGIN_NEEDS_TERM, 1,
419                 [Some versions of /bin/login need the TERM supplied
420                 on the commandline])
421         AC_DEFINE(PAM_TTY_KLUDGE)
422         AC_DEFINE(SSHPAM_CHAUTHTOK_NEEDS_RUID, 1,
423                 [Define if pam_chauthtok wants real uid set
424                 to the unpriv'ed user])
425         AC_DEFINE(LOCKED_PASSWD_STRING, "*LK*")
426         # Pushing STREAMS modules will cause sshd to acquire a controlling tty.
427         AC_DEFINE(SSHD_ACQUIRES_CTTY, 1,
428                 [Define if sshd somehow reacquires a controlling TTY
429                 after setsid()])
430         AC_DEFINE(PASSWD_NEEDS_USERNAME, 1, [must supply username to passwd
431                 in case the name is longer than 8 chars])
432         external_path_file=/etc/default/login
433         # hardwire lastlog location (can't detect it on some versions)
434         conf_lastlog_location="/var/adm/lastlog"
435         AC_MSG_CHECKING(for obsolete utmp and wtmp in solaris2.x)
436         sol2ver=`echo "$host"| sed -e 's/.*[[0-9]]\.//'`
437         if test "$sol2ver" -ge 8; then
438                 AC_MSG_RESULT(yes)
439                 AC_DEFINE(DISABLE_UTMP)
440                 AC_DEFINE(DISABLE_WTMP, 1,
441                         [Define if you don't want to use wtmp])
442         else
443                 AC_MSG_RESULT(no)
444         fi
445         AC_ARG_WITH(solaris-contracts,
446                 [  --with-solaris-contracts Enable Solaris process contracts (experimental)],
447                 [
448                 AC_CHECK_LIB(contract, ct_tmpl_activate,
449                         [ AC_DEFINE(USE_SOLARIS_PROCESS_CONTRACTS, 1,
450                                 [Define if you have Solaris process contracts])
451                           SSHDLIBS="$SSHDLIBS -lcontract"
452                           AC_SUBST(SSHDLIBS)
453                           SPC_MSG="yes" ], )
454                 ],
455         )
456         ;;
457 *-*-sunos4*)
458         CPPFLAGS="$CPPFLAGS -DSUNOS4"
459         AC_CHECK_FUNCS(getpwanam)
460         AC_DEFINE(PAM_SUN_CODEBASE)
461         conf_utmp_location=/etc/utmp
462         conf_wtmp_location=/var/adm/wtmp
463         conf_lastlog_location=/var/adm/lastlog
464         AC_DEFINE(USE_PIPES)
465         ;;
466 *-ncr-sysv*)
467         LIBS="$LIBS -lc89"
468         AC_DEFINE(USE_PIPES)
469         AC_DEFINE(SSHD_ACQUIRES_CTTY)
470         AC_DEFINE(SETEUID_BREAKS_SETUID)
471         AC_DEFINE(BROKEN_SETREUID)
472         AC_DEFINE(BROKEN_SETREGID)
473         ;;
474 *-sni-sysv*)
475         # /usr/ucblib MUST NOT be searched on ReliantUNIX
476         AC_CHECK_LIB(dl, dlsym, ,)
477         # -lresolv needs to be at the end of LIBS or DNS lookups break
478         AC_CHECK_LIB(resolv, res_query, [ LIBS="$LIBS -lresolv" ])
479         IPADDR_IN_DISPLAY=yes
480         AC_DEFINE(USE_PIPES)
481         AC_DEFINE(IP_TOS_IS_BROKEN)
482         AC_DEFINE(SETEUID_BREAKS_SETUID)
483         AC_DEFINE(BROKEN_SETREUID)
484         AC_DEFINE(BROKEN_SETREGID)
485         AC_DEFINE(SSHD_ACQUIRES_CTTY)
486         external_path_file=/etc/default/login
487         # /usr/ucblib/libucb.a no longer needed on ReliantUNIX
488         # Attention: always take care to bind libsocket and libnsl before libc,
489         # otherwise you will find lots of "SIOCGPGRP errno 22" on syslog
490         ;;
491 # UnixWare 1.x, UnixWare 2.x, and others based on code from Univel.
492 *-*-sysv4.2*)
493         CFLAGS="$CFLAGS -Dva_list=_VA_LIST"
494         AC_DEFINE(USE_PIPES)
495         AC_DEFINE(SETEUID_BREAKS_SETUID)
496         AC_DEFINE(BROKEN_SETREUID)
497         AC_DEFINE(BROKEN_SETREGID)
498         AC_DEFINE(PASSWD_NEEDS_USERNAME, 1, [must supply username to passwd])
499         AC_DEFINE(LOCKED_PASSWD_STRING, "*LK*")
500         ;;
501 # UnixWare 7.x, OpenUNIX 8
502 *-*-sysv5*)
503         check_for_libcrypt_later=1
504         AC_DEFINE(UNIXWARE_LONG_PASSWORDS, 1, [Support passwords > 8 chars])
505         AC_DEFINE(USE_PIPES)
506         AC_DEFINE(SETEUID_BREAKS_SETUID)
507         AC_DEFINE(BROKEN_SETREUID)
508         AC_DEFINE(BROKEN_SETREGID)
509         AC_DEFINE(PASSWD_NEEDS_USERNAME)
510         case "$host" in
511         *-*-sysv5SCO_SV*)       # SCO OpenServer 6.x
512                 TEST_SHELL=/u95/bin/sh
513                 AC_DEFINE(BROKEN_LIBIAF, 1,
514                         [ia_uinfo routines not supported by OS yet])
515                 AC_DEFINES(BROKEN_UPDWTMP, 1,
516                         [using updwtmp will corrupt wtmp entries])
517                 ;;
518         *)      AC_DEFINE(LOCKED_PASSWD_STRING, "*LK*")
519                 ;;
520         esac
521         ;;
522 *-*-sysv*)
523         ;;
524 # SCO UNIX and OEM versions of SCO UNIX
525 *-*-sco3.2v4*)
526         AC_MSG_ERROR("This Platform is no longer supported.")
527         ;;
528 # SCO OpenServer 5.x
529 *-*-sco3.2v5*)
530         if test -z "$GCC"; then
531                 CFLAGS="$CFLAGS -belf"
532         fi
533         LIBS="$LIBS -lprot -lx -ltinfo -lm"
534         no_dev_ptmx=1
535         AC_DEFINE(USE_PIPES)
536         AC_DEFINE(HAVE_SECUREWARE)
537         AC_DEFINE(DISABLE_SHADOW)
538         AC_DEFINE(DISABLE_FD_PASSING)
539         AC_DEFINE(SETEUID_BREAKS_SETUID)
540         AC_DEFINE(BROKEN_SETREUID)
541         AC_DEFINE(BROKEN_SETREGID)
542         AC_DEFINE(WITH_ABBREV_NO_TTY)
543         AC_DEFINE(BROKEN_UPDWTMPX)
544         AC_DEFINE(PASSWD_NEEDS_USERNAME)
545         AC_CHECK_FUNCS(getluid setluid)
546         MANTYPE=man
547         TEST_SHELL=ksh
548         ;;
549 *-*-unicosmk*)
550         AC_DEFINE(NO_SSH_LASTLOG, 1,
551                 [Define if you don't want to use lastlog in session.c])
552         AC_DEFINE(SETEUID_BREAKS_SETUID)
553         AC_DEFINE(BROKEN_SETREUID)
554         AC_DEFINE(BROKEN_SETREGID)
555         AC_DEFINE(USE_PIPES)
556         AC_DEFINE(DISABLE_FD_PASSING)
557         LDFLAGS="$LDFLAGS"
558         LIBS="$LIBS -lgen -lrsc -lshare -luex -lacm"
559         MANTYPE=cat
560         ;;
561 *-*-unicosmp*)
562         AC_DEFINE(SETEUID_BREAKS_SETUID)
563         AC_DEFINE(BROKEN_SETREUID)
564         AC_DEFINE(BROKEN_SETREGID)
565         AC_DEFINE(WITH_ABBREV_NO_TTY)
566         AC_DEFINE(USE_PIPES)
567         AC_DEFINE(DISABLE_FD_PASSING)
568         LDFLAGS="$LDFLAGS"
569         LIBS="$LIBS -lgen -lacid -ldb"
570         MANTYPE=cat
571         ;;
572 *-*-unicos*)
573         AC_DEFINE(SETEUID_BREAKS_SETUID)
574         AC_DEFINE(BROKEN_SETREUID)
575         AC_DEFINE(BROKEN_SETREGID)
576         AC_DEFINE(USE_PIPES)
577         AC_DEFINE(DISABLE_FD_PASSING)
578         AC_DEFINE(NO_SSH_LASTLOG)
579         LDFLAGS="$LDFLAGS -Wl,-Dmsglevel=334:fatal"
580         LIBS="$LIBS -lgen -lrsc -lshare -luex -lacm"
581         MANTYPE=cat
582         ;;
583 *-dec-osf*)
584         AC_MSG_CHECKING(for Digital Unix SIA)
585         no_osfsia=""
586         AC_ARG_WITH(osfsia,
587                 [  --with-osfsia           Enable Digital Unix SIA],
588                 [
589                         if test "x$withval" = "xno" ; then
590                                 AC_MSG_RESULT(disabled)
591                                 no_osfsia=1
592                         fi
593                 ],
594         )
595         if test -z "$no_osfsia" ; then
596                 if test -f /etc/sia/matrix.conf; then
597                         AC_MSG_RESULT(yes)
598                         AC_DEFINE(HAVE_OSF_SIA, 1,
599                                 [Define if you have Digital Unix Security
600                                 Integration Architecture])
601                         AC_DEFINE(DISABLE_LOGIN, 1,
602                                 [Define if you don't want to use your
603                                 system's login() call])
604                         AC_DEFINE(DISABLE_FD_PASSING)
605                         LIBS="$LIBS -lsecurity -ldb -lm -laud"
606                         SIA_MSG="yes"
607                 else
608                         AC_MSG_RESULT(no)
609                         AC_DEFINE(LOCKED_PASSWD_SUBSTR, "Nologin",
610                           [String used in /etc/passwd to denote locked account])
611                 fi
612         fi
613         AC_DEFINE(BROKEN_GETADDRINFO)
614         AC_DEFINE(SETEUID_BREAKS_SETUID)
615         AC_DEFINE(BROKEN_SETREUID)
616         AC_DEFINE(BROKEN_SETREGID)
617         ;;
618
619 *-*-nto-qnx*)
620         AC_DEFINE(USE_PIPES)
621         AC_DEFINE(NO_X11_UNIX_SOCKETS)
622         AC_DEFINE(MISSING_NFDBITS, 1, [Define on *nto-qnx systems])
623         AC_DEFINE(MISSING_HOWMANY, 1, [Define on *nto-qnx systems])
624         AC_DEFINE(MISSING_FD_MASK, 1, [Define on *nto-qnx systems])
625         AC_DEFINE(DISABLE_LASTLOG)
626         AC_DEFINE(SSHD_ACQUIRES_CTTY)
627         enable_etc_default_login=no     # has incompatible /etc/default/login
628         ;;
629
630 *-*-ultrix*)
631         AC_DEFINE(BROKEN_GETGROUPS, 1, [getgroups(0,NULL) will return -1])
632         AC_DEFINE(BROKEN_MMAP, 1, [Ultrix mmap can't map files])
633         AC_DEFINE(NEED_SETPGRP)
634         AC_DEFINE(HAVE_SYS_SYSLOG_H, 1, [Force use of sys/syslog.h on Ultrix])
635         ;;
636
637 *-*-lynxos)
638         CFLAGS="$CFLAGS -D__NO_INCLUDE_WARN__"
639         AC_DEFINE(MISSING_HOWMANY)
640         AC_DEFINE(BROKEN_SETVBUF, 1, [LynxOS has broken setvbuf() implementation])
641         ;;
642 esac
643
644 # Allow user to specify flags
645 AC_ARG_WITH(cflags,
646         [  --with-cflags           Specify additional flags to pass to compiler],
647         [
648                 if test -n "$withval"  &&  test "x$withval" != "xno"  &&  \
649                     test "x${withval}" != "xyes"; then
650                         CFLAGS="$CFLAGS $withval"
651                 fi
652         ]
653 )
654 AC_ARG_WITH(cppflags,
655         [  --with-cppflags         Specify additional flags to pass to preprocessor] ,
656         [
657                 if test -n "$withval"  &&  test "x$withval" != "xno"  &&  \
658                     test "x${withval}" != "xyes"; then
659                         CPPFLAGS="$CPPFLAGS $withval"
660                 fi
661         ]
662 )
663 AC_ARG_WITH(ldflags,
664         [  --with-ldflags          Specify additional flags to pass to linker],
665         [
666                 if test -n "$withval"  &&  test "x$withval" != "xno"  &&  \
667                     test "x${withval}" != "xyes"; then
668                         LDFLAGS="$LDFLAGS $withval"
669                 fi
670         ]
671 )
672 AC_ARG_WITH(libs,
673         [  --with-libs             Specify additional libraries to link with],
674         [
675                 if test -n "$withval"  &&  test "x$withval" != "xno"  &&  \
676                     test "x${withval}" != "xyes"; then
677                         LIBS="$LIBS $withval"
678                 fi
679         ]
680 )
681 AC_ARG_WITH(Werror,
682         [  --with-Werror           Build main code with -Werror],
683         [
684                 if test -n "$withval"  &&  test "x$withval" != "xno"; then
685                         werror_flags="-Werror"
686                         if test "x${withval}" != "xyes"; then
687                                 werror_flags="$withval"
688                         fi
689                 fi
690         ]
691 )
692
693 AC_MSG_CHECKING(compiler and flags for sanity)
694 AC_RUN_IFELSE(
695         [AC_LANG_SOURCE([
696 #include <stdio.h>
697 int main(){exit(0);}
698         ])],
699         [       AC_MSG_RESULT(yes) ],
700         [
701                 AC_MSG_RESULT(no)
702                 AC_MSG_ERROR([*** compiler cannot create working executables, check config.log ***])
703         ],
704         [       AC_MSG_WARN([cross compiling: not checking compiler sanity]) ]
705 )
706
707 dnl Checks for header files.
708 AC_CHECK_HEADERS( \
709         bstring.h \
710         crypt.h \
711         crypto/sha2.h \
712         dirent.h \
713         endian.h \
714         features.h \
715         fcntl.h \
716         floatingpoint.h \
717         getopt.h \
718         glob.h \
719         ia.h \
720         iaf.h \
721         limits.h \
722         login.h \
723         maillock.h \
724         ndir.h \
725         net/if_tun.h \
726         netdb.h \
727         netgroup.h \
728         pam/pam_appl.h \
729         paths.h \
730         pty.h \
731         readpassphrase.h \
732         rpc/types.h \
733         security/pam_appl.h \
734         sha2.h \
735         shadow.h \
736         stddef.h \
737         stdint.h \
738         string.h \
739         strings.h \
740         sys/audit.h \
741         sys/bitypes.h \
742         sys/bsdtty.h \
743         sys/cdefs.h \
744         sys/dir.h \
745         sys/mman.h \
746         sys/ndir.h \
747         sys/prctl.h \
748         sys/pstat.h \
749         sys/select.h \
750         sys/stat.h \
751         sys/stream.h \
752         sys/stropts.h \
753         sys/strtio.h \
754         sys/sysmacros.h \
755         sys/time.h \
756         sys/timers.h \
757         sys/un.h \
758         time.h \
759         tmpdir.h \
760         ttyent.h \
761         unistd.h \
762         usersec.h \
763         util.h \
764         utime.h \
765         utmp.h \
766         utmpx.h \
767         vis.h \
768 )
769
770 # lastlog.h requires sys/time.h to be included first on Solaris
771 AC_CHECK_HEADERS(lastlog.h, [], [], [
772 #ifdef HAVE_SYS_TIME_H
773 # include <sys/time.h>
774 #endif
775 ])
776
777 # sys/ptms.h requires sys/stream.h to be included first on Solaris
778 AC_CHECK_HEADERS(sys/ptms.h, [], [], [
779 #ifdef HAVE_SYS_STREAM_H
780 # include <sys/stream.h>
781 #endif
782 ])
783
784 # login_cap.h requires sys/types.h on NetBSD
785 AC_CHECK_HEADERS(login_cap.h, [], [], [
786 #include <sys/types.h>
787 ])
788
789 # Checks for libraries.
790 AC_CHECK_FUNC(yp_match, , AC_CHECK_LIB(nsl, yp_match))
791 AC_CHECK_FUNC(setsockopt, , AC_CHECK_LIB(socket, setsockopt))
792
793 dnl IRIX and Solaris 2.5.1 have dirname() in libgen
794 AC_CHECK_FUNCS(dirname, [AC_CHECK_HEADERS(libgen.h)] ,[
795         AC_CHECK_LIB(gen, dirname,[
796                 AC_CACHE_CHECK([for broken dirname],
797                         ac_cv_have_broken_dirname, [
798                         save_LIBS="$LIBS"
799                         LIBS="$LIBS -lgen"
800                         AC_RUN_IFELSE(
801                                 [AC_LANG_SOURCE([[
802 #include <libgen.h>
803 #include <string.h>
804
805 int main(int argc, char **argv) {
806     char *s, buf[32];
807
808     strncpy(buf,"/etc", 32);
809     s = dirname(buf);
810     if (!s || strncmp(s, "/", 32) != 0) {
811         exit(1);
812     } else {
813         exit(0);
814     }
815 }
816                                 ]])],
817                                 [ ac_cv_have_broken_dirname="no" ],
818                                 [ ac_cv_have_broken_dirname="yes" ],
819                                 [ ac_cv_have_broken_dirname="no" ],
820                         )
821                         LIBS="$save_LIBS"
822                 ])
823                 if test "x$ac_cv_have_broken_dirname" = "xno" ; then
824                         LIBS="$LIBS -lgen"
825                         AC_DEFINE(HAVE_DIRNAME)
826                         AC_CHECK_HEADERS(libgen.h)
827                 fi
828         ])
829 ])
830
831 AC_CHECK_FUNC(getspnam, ,
832         AC_CHECK_LIB(gen, getspnam, LIBS="$LIBS -lgen"))
833 AC_SEARCH_LIBS(basename, gen, AC_DEFINE(HAVE_BASENAME, 1,
834         [Define if you have the basename function.]))
835
836 dnl zlib is required
837 AC_ARG_WITH(zlib,
838         [  --with-zlib=PATH        Use zlib in PATH],
839         [ if test "x$withval" = "xno" ; then
840                 AC_MSG_ERROR([*** zlib is required ***])
841           elif test "x$withval" != "xyes"; then
842                 if test -d "$withval/lib"; then
843                         if test -n "${need_dash_r}"; then
844                                 LDFLAGS="-L${withval}/lib -R${withval}/lib ${LDFLAGS}"
845                         else
846                                 LDFLAGS="-L${withval}/lib ${LDFLAGS}"
847                         fi
848                 else
849                         if test -n "${need_dash_r}"; then
850                                 LDFLAGS="-L${withval} -R${withval} ${LDFLAGS}"
851                         else
852                                 LDFLAGS="-L${withval} ${LDFLAGS}"
853                         fi
854                 fi
855                 if test -d "$withval/include"; then
856                         CPPFLAGS="-I${withval}/include ${CPPFLAGS}"
857                 else
858                         CPPFLAGS="-I${withval} ${CPPFLAGS}"
859                 fi
860         fi ]
861 )
862
863 AC_CHECK_LIB(z, deflate, ,
864         [
865                 saved_CPPFLAGS="$CPPFLAGS"
866                 saved_LDFLAGS="$LDFLAGS"
867                 save_LIBS="$LIBS"
868                 dnl Check default zlib install dir
869                 if test -n "${need_dash_r}"; then
870                         LDFLAGS="-L/usr/local/lib -R/usr/local/lib ${saved_LDFLAGS}"
871                 else
872                         LDFLAGS="-L/usr/local/lib ${saved_LDFLAGS}"
873                 fi
874                 CPPFLAGS="-I/usr/local/include ${saved_CPPFLAGS}"
875                 LIBS="$LIBS -lz"
876                 AC_TRY_LINK_FUNC(deflate, AC_DEFINE(HAVE_LIBZ),
877                         [
878                                 AC_MSG_ERROR([*** zlib missing - please install first or check config.log ***])
879                         ]
880                 )
881         ]
882 )
883 AC_CHECK_HEADER([zlib.h], ,AC_MSG_ERROR([*** zlib.h missing - please install first or check config.log ***]))
884
885 AC_ARG_WITH(zlib-version-check,
886         [  --without-zlib-version-check Disable zlib version check],
887         [  if test "x$withval" = "xno" ; then
888                 zlib_check_nonfatal=1
889            fi
890         ]
891 )
892
893 AC_MSG_CHECKING(for possibly buggy zlib)
894 AC_RUN_IFELSE([AC_LANG_SOURCE([[
895 #include <stdio.h>
896 #include <zlib.h>
897 int main()
898 {
899         int a=0, b=0, c=0, d=0, n, v;
900         n = sscanf(ZLIB_VERSION, "%d.%d.%d.%d", &a, &b, &c, &d);
901         if (n != 3 && n != 4)
902                 exit(1);
903         v = a*1000000 + b*10000 + c*100 + d;
904         fprintf(stderr, "found zlib version %s (%d)\n", ZLIB_VERSION, v);
905
906         /* 1.1.4 is OK */
907         if (a == 1 && b == 1 && c >= 4)
908                 exit(0);
909
910         /* 1.2.3 and up are OK */
911         if (v >= 1020300)
912                 exit(0);
913
914         exit(2);
915 }
916         ]])],
917         AC_MSG_RESULT(no),
918         [ AC_MSG_RESULT(yes)
919           if test -z "$zlib_check_nonfatal" ; then
920                 AC_MSG_ERROR([*** zlib too old - check config.log ***
921 Your reported zlib version has known security problems.  It's possible your
922 vendor has fixed these problems without changing the version number.  If you
923 are sure this is the case, you can disable the check by running
924 "./configure --without-zlib-version-check".
925 If you are in doubt, upgrade zlib to version 1.2.3 or greater.
926 See http://www.gzip.org/zlib/ for details.])
927           else
928                 AC_MSG_WARN([zlib version may have security problems])
929           fi
930         ],
931         [       AC_MSG_WARN([cross compiling: not checking zlib version]) ]
932 )
933
934 dnl UnixWare 2.x
935 AC_CHECK_FUNC(strcasecmp,
936         [], [ AC_CHECK_LIB(resolv, strcasecmp, LIBS="$LIBS -lresolv") ]
937 )
938 AC_CHECK_FUNCS(utimes,
939         [], [ AC_CHECK_LIB(c89, utimes, [AC_DEFINE(HAVE_UTIMES)
940                                         LIBS="$LIBS -lc89"]) ]
941 )
942
943 dnl    Checks for libutil functions
944 AC_CHECK_HEADERS(libutil.h)
945 AC_SEARCH_LIBS(login, util bsd, [AC_DEFINE(HAVE_LOGIN, 1,
946         [Define if your libraries define login()])])
947 AC_CHECK_FUNCS(logout updwtmp logwtmp)
948
949 AC_FUNC_STRFTIME
950
951 # Check for ALTDIRFUNC glob() extension
952 AC_MSG_CHECKING(for GLOB_ALTDIRFUNC support)
953 AC_EGREP_CPP(FOUNDIT,
954         [
955                 #include <glob.h>
956                 #ifdef GLOB_ALTDIRFUNC
957                 FOUNDIT
958                 #endif
959         ],
960         [
961                 AC_DEFINE(GLOB_HAS_ALTDIRFUNC, 1,
962                         [Define if your system glob() function has
963                         the GLOB_ALTDIRFUNC extension])
964                 AC_MSG_RESULT(yes)
965         ],
966         [
967                 AC_MSG_RESULT(no)
968         ]
969 )
970
971 # Check for g.gl_matchc glob() extension
972 AC_MSG_CHECKING(for gl_matchc field in glob_t)
973 AC_TRY_COMPILE(
974         [ #include <glob.h> ],
975         [glob_t g; g.gl_matchc = 1;],
976         [
977                 AC_DEFINE(GLOB_HAS_GL_MATCHC, 1,
978                         [Define if your system glob() function has
979                         gl_matchc options in glob_t])
980                 AC_MSG_RESULT(yes)
981         ],
982         [
983                 AC_MSG_RESULT(no)
984         ]
985 )
986
987 AC_CHECK_DECLS(GLOB_NOMATCH, , , [#include <glob.h>])
988
989 AC_MSG_CHECKING([whether struct dirent allocates space for d_name])
990 AC_RUN_IFELSE(
991         [AC_LANG_SOURCE([[
992 #include <sys/types.h>
993 #include <dirent.h>
994 int main(void){struct dirent d;exit(sizeof(d.d_name)<=sizeof(char));}
995         ]])],
996         [AC_MSG_RESULT(yes)],
997         [
998                 AC_MSG_RESULT(no)
999                 AC_DEFINE(BROKEN_ONE_BYTE_DIRENT_D_NAME, 1,
1000                         [Define if your struct dirent expects you to
1001                         allocate extra space for d_name])
1002         ],
1003         [
1004                 AC_MSG_WARN([cross compiling: assuming BROKEN_ONE_BYTE_DIRENT_D_NAME])
1005                 AC_DEFINE(BROKEN_ONE_BYTE_DIRENT_D_NAME)
1006         ]
1007 )
1008
1009 AC_MSG_CHECKING([for /proc/pid/fd directory])
1010 if test -d "/proc/$$/fd" ; then
1011         AC_DEFINE(HAVE_PROC_PID, 1, [Define if you have /proc/$pid/fd])
1012         AC_MSG_RESULT(yes)
1013 else
1014         AC_MSG_RESULT(no)
1015 fi
1016
1017 # Check whether user wants S/Key support
1018 SKEY_MSG="no"
1019 AC_ARG_WITH(skey,
1020         [  --with-skey[[=PATH]]      Enable S/Key support (optionally in PATH)],
1021         [
1022                 if test "x$withval" != "xno" ; then
1023
1024                         if test "x$withval" != "xyes" ; then
1025                                 CPPFLAGS="$CPPFLAGS -I${withval}/include"
1026                                 LDFLAGS="$LDFLAGS -L${withval}/lib"
1027                         fi
1028
1029                         AC_DEFINE(SKEY, 1, [Define if you want S/Key support])
1030                         LIBS="-lskey $LIBS"
1031                         SKEY_MSG="yes"
1032
1033                         AC_MSG_CHECKING([for s/key support])
1034                         AC_LINK_IFELSE(
1035                                 [AC_LANG_SOURCE([[
1036 #include <stdio.h>
1037 #include <skey.h>
1038 int main() { char *ff = skey_keyinfo(""); ff=""; exit(0); }
1039                                 ]])],
1040                                 [AC_MSG_RESULT(yes)],
1041                                 [
1042                                         AC_MSG_RESULT(no)
1043                                         AC_MSG_ERROR([** Incomplete or missing s/key libraries.])
1044                                 ])
1045                         AC_MSG_CHECKING(if skeychallenge takes 4 arguments)
1046                         AC_TRY_COMPILE(
1047                                 [#include <stdio.h>
1048                                  #include <skey.h>],
1049                                 [(void)skeychallenge(NULL,"name","",0);],
1050                                 [AC_MSG_RESULT(yes)
1051                                  AC_DEFINE(SKEYCHALLENGE_4ARG, 1,
1052                                         [Define if your skeychallenge()
1053                                         function takes 4 arguments (NetBSD)])],
1054                                 [AC_MSG_RESULT(no)]
1055                         )
1056                 fi
1057         ]
1058 )
1059
1060 # Check whether user wants TCP wrappers support
1061 TCPW_MSG="no"
1062 AC_ARG_WITH(tcp-wrappers,
1063         [  --with-tcp-wrappers[[=PATH]] Enable tcpwrappers support (optionally in PATH)],
1064         [
1065                 if test "x$withval" != "xno" ; then
1066                         saved_LIBS="$LIBS"
1067                         saved_LDFLAGS="$LDFLAGS"
1068                         saved_CPPFLAGS="$CPPFLAGS"
1069                         if test -n "${withval}" && \
1070                             test "x${withval}" != "xyes"; then
1071                                 if test -d "${withval}/lib"; then
1072                                         if test -n "${need_dash_r}"; then
1073                                                 LDFLAGS="-L${withval}/lib -R${withval}/lib ${LDFLAGS}"
1074                                         else
1075                                                 LDFLAGS="-L${withval}/lib ${LDFLAGS}"
1076                                         fi
1077                                 else
1078                                         if test -n "${need_dash_r}"; then
1079                                                 LDFLAGS="-L${withval} -R${withval} ${LDFLAGS}"
1080                                         else
1081                                                 LDFLAGS="-L${withval} ${LDFLAGS}"
1082                                         fi
1083                                 fi
1084                                 if test -d "${withval}/include"; then
1085                                         CPPFLAGS="-I${withval}/include ${CPPFLAGS}"
1086                                 else
1087                                         CPPFLAGS="-I${withval} ${CPPFLAGS}"
1088                                 fi
1089                         fi
1090                         LIBWRAP="-lwrap"
1091                         LIBS="$LIBWRAP $LIBS"
1092                         AC_MSG_CHECKING(for libwrap)
1093                         AC_TRY_LINK(
1094                                 [
1095 #include <sys/types.h>
1096 #include <sys/socket.h>
1097 #include <netinet/in.h>
1098 #include <tcpd.h>
1099                                         int deny_severity = 0, allow_severity = 0;
1100                                 ],
1101                                 [hosts_access(0);],
1102                                 [
1103                                         AC_MSG_RESULT(yes)
1104                                         AC_DEFINE(LIBWRAP, 1,
1105                                                 [Define if you want
1106                                                 TCP Wrappers support])
1107                                         AC_SUBST(LIBWRAP)
1108                                         TCPW_MSG="yes"
1109                                 ],
1110                                 [
1111                                         AC_MSG_ERROR([*** libwrap missing])
1112                                 ]
1113                         )
1114                         LIBS="$saved_LIBS"
1115                 fi
1116         ]
1117 )
1118
1119 # Check whether user wants libedit support
1120 LIBEDIT_MSG="no"
1121 AC_ARG_WITH(libedit,
1122         [  --with-libedit[[=PATH]]   Enable libedit support for sftp],
1123         [ if test "x$withval" != "xno" ; then
1124                 if test "x$withval" != "xyes"; then
1125                         CPPFLAGS="$CPPFLAGS -I${withval}/include"
1126                         if test -n "${need_dash_r}"; then
1127                                 LDFLAGS="-L${withval}/lib -R${withval}/lib ${LDFLAGS}"
1128                         else
1129                                 LDFLAGS="-L${withval}/lib ${LDFLAGS}"
1130                         fi
1131                 fi
1132                 AC_CHECK_LIB(edit, el_init,
1133                         [ AC_DEFINE(USE_LIBEDIT, 1, [Use libedit for sftp])
1134                           LIBEDIT="-ledit -lcurses"
1135                           LIBEDIT_MSG="yes"
1136                           AC_SUBST(LIBEDIT)
1137                         ],
1138                         [ AC_MSG_ERROR(libedit not found) ],
1139                         [ -lcurses ]
1140                 )
1141                 AC_MSG_CHECKING(if libedit version is compatible)
1142                 AC_COMPILE_IFELSE(
1143                     [AC_LANG_SOURCE([[
1144 #include <histedit.h>
1145 int main(void)
1146 {
1147         int i = H_SETSIZE;
1148         el_init("", NULL, NULL, NULL);
1149         exit(0);
1150 }
1151                     ]])],
1152                     [ AC_MSG_RESULT(yes) ],
1153                     [ AC_MSG_RESULT(no)
1154                       AC_MSG_ERROR(libedit version is not compatible) ]
1155                 )
1156         fi ]
1157 )
1158
1159 AUDIT_MODULE=none
1160 AC_ARG_WITH(audit,
1161         [  --with-audit=module     Enable EXPERIMENTAL audit support (modules=debug,bsm)],
1162         [
1163           AC_MSG_CHECKING(for supported audit module)
1164           case "$withval" in
1165           bsm)
1166                 AC_MSG_RESULT(bsm)
1167                 AUDIT_MODULE=bsm
1168                 dnl    Checks for headers, libs and functions
1169                 AC_CHECK_HEADERS(bsm/audit.h, [],
1170                     [AC_MSG_ERROR(BSM enabled and bsm/audit.h not found)])
1171                 AC_CHECK_LIB(bsm, getaudit, [],
1172                     [AC_MSG_ERROR(BSM enabled and required library not found)])
1173                 AC_CHECK_FUNCS(getaudit, [],
1174                     [AC_MSG_ERROR(BSM enabled and required function not found)])
1175                 # These are optional
1176                 AC_CHECK_FUNCS(getaudit_addr)
1177                 AC_DEFINE(USE_BSM_AUDIT, 1, [Use BSM audit module])
1178                 ;;
1179           debug)
1180                 AUDIT_MODULE=debug
1181                 AC_MSG_RESULT(debug)
1182                 AC_DEFINE(SSH_AUDIT_EVENTS, 1, Use audit debugging module)
1183                 ;;
1184           no)
1185                 AC_MSG_RESULT(no)
1186                 ;;
1187           *)
1188                 AC_MSG_ERROR([Unknown audit module $withval])
1189                 ;;
1190         esac ]
1191 )
1192
1193 dnl    Checks for library functions. Please keep in alphabetical order
1194 AC_CHECK_FUNCS( \
1195         arc4random \
1196         asprintf \
1197         b64_ntop \
1198         __b64_ntop \
1199         b64_pton \
1200         __b64_pton \
1201         bcopy \
1202         bindresvport_sa \
1203         clock \
1204         closefrom \
1205         dirfd \
1206         fchmod \
1207         fchown \
1208         freeaddrinfo \
1209         futimes \
1210         getaddrinfo \
1211         getcwd \
1212         getgrouplist \
1213         getnameinfo \
1214         getopt \
1215         getpeereid \
1216         _getpty \
1217         getrlimit \
1218         getttyent \
1219         glob \
1220         inet_aton \
1221         inet_ntoa \
1222         inet_ntop \
1223         innetgr \
1224         login_getcapbool \
1225         md5_crypt \
1226         memmove \
1227         mkdtemp \
1228         mmap \
1229         ngetaddrinfo \
1230         nsleep \
1231         ogetaddrinfo \
1232         openlog_r \
1233         openpty \
1234         prctl \
1235         pstat \
1236         readpassphrase \
1237         realpath \
1238         recvmsg \
1239         rresvport_af \
1240         sendmsg \
1241         setdtablesize \
1242         setegid \
1243         setenv \
1244         seteuid \
1245         setgroups \
1246         setlogin \
1247         setpcred \
1248         setproctitle \
1249         setregid \
1250         setreuid \
1251         setrlimit \
1252         setsid \
1253         setvbuf \
1254         sigaction \
1255         sigvec \
1256         snprintf \
1257         socketpair \
1258         strdup \
1259         strerror \
1260         strlcat \
1261         strlcpy \
1262         strmode \
1263         strnvis \
1264         strtonum \
1265         strtoll \
1266         strtoul \
1267         sysconf \
1268         tcgetpgrp \
1269         truncate \
1270         unsetenv \
1271         updwtmpx \
1272         vasprintf \
1273         vhangup \
1274         vsnprintf \
1275         waitpid \
1276 )
1277
1278 # IRIX has a const char return value for gai_strerror()
1279 AC_CHECK_FUNCS(gai_strerror,[
1280         AC_DEFINE(HAVE_GAI_STRERROR)
1281         AC_TRY_COMPILE([
1282 #include <sys/types.h>
1283 #include <sys/socket.h>
1284 #include <netdb.h>
1285
1286 const char *gai_strerror(int);],[
1287 char *str;
1288
1289 str = gai_strerror(0);],[
1290                 AC_DEFINE(HAVE_CONST_GAI_STRERROR_PROTO, 1,
1291                 [Define if gai_strerror() returns const char *])])])
1292
1293 AC_SEARCH_LIBS(nanosleep, rt posix4, AC_DEFINE(HAVE_NANOSLEEP, 1,
1294         [Some systems put nanosleep outside of libc]))
1295
1296 dnl Make sure prototypes are defined for these before using them.
1297 AC_CHECK_DECL(getrusage, [AC_CHECK_FUNCS(getrusage)])
1298 AC_CHECK_DECL(strsep,
1299         [AC_CHECK_FUNCS(strsep)],
1300         [],
1301         [
1302 #ifdef HAVE_STRING_H
1303 # include <string.h>
1304 #endif
1305         ])
1306
1307 dnl tcsendbreak might be a macro
1308 AC_CHECK_DECL(tcsendbreak,
1309         [AC_DEFINE(HAVE_TCSENDBREAK)],
1310         [AC_CHECK_FUNCS(tcsendbreak)],
1311         [#include <termios.h>]
1312 )
1313
1314 AC_CHECK_DECLS(h_errno, , ,[#include <netdb.h>])
1315
1316 AC_CHECK_DECLS(SHUT_RD, , ,
1317         [
1318 #include <sys/types.h>
1319 #include <sys/socket.h>
1320         ])
1321
1322 AC_CHECK_DECLS(O_NONBLOCK, , ,
1323         [
1324 #include <sys/types.h>
1325 #ifdef HAVE_SYS_STAT_H
1326 # include <sys/stat.h>
1327 #endif
1328 #ifdef HAVE_FCNTL_H
1329 # include <fcntl.h>
1330 #endif
1331         ])
1332
1333 AC_CHECK_DECLS(writev, , , [
1334 #include <sys/types.h>
1335 #include <sys/uio.h>
1336 #include <unistd.h>
1337         ])
1338
1339 AC_CHECK_FUNCS(setresuid, [
1340         dnl Some platorms have setresuid that isn't implemented, test for this
1341         AC_MSG_CHECKING(if setresuid seems to work)
1342         AC_RUN_IFELSE(
1343                 [AC_LANG_SOURCE([[
1344 #include <stdlib.h>
1345 #include <errno.h>
1346 int main(){errno=0; setresuid(0,0,0); if (errno==ENOSYS) exit(1); else exit(0);}
1347                 ]])],
1348                 [AC_MSG_RESULT(yes)],
1349                 [AC_DEFINE(BROKEN_SETRESUID, 1,
1350                         [Define if your setresuid() is broken])
1351                  AC_MSG_RESULT(not implemented)],
1352                 [AC_MSG_WARN([cross compiling: not checking setresuid])]
1353         )
1354 ])
1355
1356 AC_CHECK_FUNCS(setresgid, [
1357         dnl Some platorms have setresgid that isn't implemented, test for this
1358         AC_MSG_CHECKING(if setresgid seems to work)
1359         AC_RUN_IFELSE(
1360                 [AC_LANG_SOURCE([[
1361 #include <stdlib.h>
1362 #include <errno.h>
1363 int main(){errno=0; setresgid(0,0,0); if (errno==ENOSYS) exit(1); else exit(0);}
1364                 ]])],
1365                 [AC_MSG_RESULT(yes)],
1366                 [AC_DEFINE(BROKEN_SETRESGID, 1,
1367                         [Define if your setresgid() is broken])
1368                  AC_MSG_RESULT(not implemented)],
1369                 [AC_MSG_WARN([cross compiling: not checking setresuid])]
1370         )
1371 ])
1372
1373 dnl    Checks for time functions
1374 AC_CHECK_FUNCS(gettimeofday time)
1375 dnl    Checks for utmp functions
1376 AC_CHECK_FUNCS(endutent getutent getutid getutline pututline setutent)
1377 AC_CHECK_FUNCS(utmpname)
1378 dnl    Checks for utmpx functions
1379 AC_CHECK_FUNCS(endutxent getutxent getutxid getutxline pututxline )
1380 AC_CHECK_FUNCS(setutxent utmpxname)
1381
1382 AC_CHECK_FUNC(daemon,
1383         [AC_DEFINE(HAVE_DAEMON, 1, [Define if your libraries define daemon()])],
1384         [AC_CHECK_LIB(bsd, daemon,
1385                 [LIBS="$LIBS -lbsd"; AC_DEFINE(HAVE_DAEMON)])]
1386 )
1387
1388 AC_CHECK_FUNC(getpagesize,
1389         [AC_DEFINE(HAVE_GETPAGESIZE, 1,
1390                 [Define if your libraries define getpagesize()])],
1391         [AC_CHECK_LIB(ucb, getpagesize,
1392                 [LIBS="$LIBS -lucb"; AC_DEFINE(HAVE_GETPAGESIZE)])]
1393 )
1394
1395 # Check for broken snprintf
1396 if test "x$ac_cv_func_snprintf" = "xyes" ; then
1397         AC_MSG_CHECKING([whether snprintf correctly terminates long strings])
1398         AC_RUN_IFELSE(
1399                 [AC_LANG_SOURCE([[
1400 #include <stdio.h>
1401 int main(void){char b[5];snprintf(b,5,"123456789");exit(b[4]!='\0');}
1402                 ]])],
1403                 [AC_MSG_RESULT(yes)],
1404                 [
1405                         AC_MSG_RESULT(no)
1406                         AC_DEFINE(BROKEN_SNPRINTF, 1,
1407                                 [Define if your snprintf is busted])
1408                         AC_MSG_WARN([****** Your snprintf() function is broken, complain to your vendor])
1409                 ],
1410                 [ AC_MSG_WARN([cross compiling: Assuming working snprintf()]) ]
1411         )
1412 fi
1413
1414 # If we don't have a working asprintf, then we strongly depend on vsnprintf
1415 # returning the right thing on overflow: the number of characters it tried to
1416 # create (as per SUSv3)
1417 if test "x$ac_cv_func_asprintf" != "xyes" && \
1418    test "x$ac_cv_func_vsnprintf" = "xyes" ; then
1419         AC_MSG_CHECKING([whether vsnprintf returns correct values on overflow])
1420         AC_RUN_IFELSE(
1421                 [AC_LANG_SOURCE([[
1422 #include <sys/types.h>
1423 #include <stdio.h>
1424 #include <stdarg.h>
1425
1426 int x_snprintf(char *str,size_t count,const char *fmt,...)
1427 {
1428         size_t ret; va_list ap;
1429         va_start(ap, fmt); ret = vsnprintf(str, count, fmt, ap); va_end(ap);
1430         return ret;
1431 }
1432 int main(void)
1433 {
1434         char x[1];
1435         exit(x_snprintf(x, 1, "%s %d", "hello", 12345) == 11 ? 0 : 1);
1436 } ]])],
1437                 [AC_MSG_RESULT(yes)],
1438                 [
1439                         AC_MSG_RESULT(no)
1440                         AC_DEFINE(BROKEN_SNPRINTF, 1,
1441                                 [Define if your snprintf is busted])
1442                         AC_MSG_WARN([****** Your vsnprintf() function is broken, complain to your vendor])
1443                 ],
1444                 [ AC_MSG_WARN([cross compiling: Assuming working vsnprintf()]) ]
1445         )
1446 fi
1447
1448 # On systems where [v]snprintf is broken, but is declared in stdio,
1449 # check that the fmt argument is const char * or just char *.
1450 # This is only useful for when BROKEN_SNPRINTF
1451 AC_MSG_CHECKING([whether snprintf can declare const char *fmt])
1452 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <stdio.h>
1453            int snprintf(char *a, size_t b, const char *c, ...) { return 0; }
1454            int main(void) { snprintf(0, 0, 0); } 
1455     ]])],
1456    [AC_MSG_RESULT(yes)
1457     AC_DEFINE(SNPRINTF_CONST, [const],
1458               [Define as const if snprintf() can declare const char *fmt])],
1459    [AC_MSG_RESULT(no)
1460     AC_DEFINE(SNPRINTF_CONST, [/* not const */])])
1461
1462 # Check for missing getpeereid (or equiv) support
1463 NO_PEERCHECK=""
1464 if test "x$ac_cv_func_getpeereid" != "xyes" ; then
1465         AC_MSG_CHECKING([whether system supports SO_PEERCRED getsockopt])
1466         AC_TRY_COMPILE(
1467                 [#include <sys/types.h>
1468                  #include <sys/socket.h>],
1469                 [int i = SO_PEERCRED;],
1470                 [ AC_MSG_RESULT(yes)
1471                   AC_DEFINE(HAVE_SO_PEERCRED, 1, [Have PEERCRED socket option])
1472                 ],
1473                 [AC_MSG_RESULT(no)
1474                 NO_PEERCHECK=1]
1475         )
1476 fi
1477
1478 dnl see whether mkstemp() requires XXXXXX
1479 if test "x$ac_cv_func_mkdtemp" = "xyes" ; then
1480 AC_MSG_CHECKING([for (overly) strict mkstemp])
1481 AC_RUN_IFELSE(
1482         [AC_LANG_SOURCE([[
1483 #include <stdlib.h>
1484 main() { char template[]="conftest.mkstemp-test";
1485 if (mkstemp(template) == -1)
1486         exit(1);
1487 unlink(template); exit(0);
1488 }
1489         ]])],
1490         [
1491                 AC_MSG_RESULT(no)
1492         ],
1493         [
1494                 AC_MSG_RESULT(yes)
1495                 AC_DEFINE(HAVE_STRICT_MKSTEMP, 1, [Silly mkstemp()])
1496         ],
1497         [
1498                 AC_MSG_RESULT(yes)
1499                 AC_DEFINE(HAVE_STRICT_MKSTEMP)
1500         ]
1501 )
1502 fi
1503
1504 dnl make sure that openpty does not reacquire controlling terminal
1505 if test ! -z "$check_for_openpty_ctty_bug"; then
1506         AC_MSG_CHECKING(if openpty correctly handles controlling tty)
1507         AC_RUN_IFELSE(
1508                 [AC_LANG_SOURCE([[
1509 #include <stdio.h>
1510 #include <sys/fcntl.h>
1511 #include <sys/types.h>
1512 #include <sys/wait.h>
1513
1514 int
1515 main()
1516 {
1517         pid_t pid;
1518         int fd, ptyfd, ttyfd, status;
1519
1520         pid = fork();
1521         if (pid < 0) {          /* failed */
1522                 exit(1);
1523         } else if (pid > 0) {   /* parent */
1524                 waitpid(pid, &status, 0);
1525                 if (WIFEXITED(status))
1526                         exit(WEXITSTATUS(status));
1527                 else
1528                         exit(2);
1529         } else {                /* child */
1530                 close(0); close(1); close(2);
1531                 setsid();
1532                 openpty(&ptyfd, &ttyfd, NULL, NULL, NULL);
1533                 fd = open("/dev/tty", O_RDWR | O_NOCTTY);
1534                 if (fd >= 0)
1535                         exit(3);        /* Acquired ctty: broken */
1536                 else
1537                         exit(0);        /* Did not acquire ctty: OK */
1538         }
1539 }
1540                 ]])],
1541                 [
1542                         AC_MSG_RESULT(yes)
1543                 ],
1544                 [
1545                         AC_MSG_RESULT(no)
1546                         AC_DEFINE(SSHD_ACQUIRES_CTTY)
1547                 ],
1548                 [
1549                         AC_MSG_RESULT(cross-compiling, assuming yes)
1550                 ]
1551         )
1552 fi
1553
1554 if test "x$ac_cv_func_getaddrinfo" = "xyes" && \
1555     test "x$check_for_hpux_broken_getaddrinfo" = "x1"; then
1556         AC_MSG_CHECKING(if getaddrinfo seems to work)
1557         AC_RUN_IFELSE(
1558                 [AC_LANG_SOURCE([[
1559 #include <stdio.h>
1560 #include <sys/socket.h>
1561 #include <netdb.h>
1562 #include <errno.h>
1563 #include <netinet/in.h>
1564
1565 #define TEST_PORT "2222"
1566
1567 int
1568 main(void)
1569 {
1570         int err, sock;
1571         struct addrinfo *gai_ai, *ai, hints;
1572         char ntop[NI_MAXHOST], strport[NI_MAXSERV], *name = NULL;
1573
1574         memset(&hints, 0, sizeof(hints));
1575         hints.ai_family = PF_UNSPEC;
1576         hints.ai_socktype = SOCK_STREAM;
1577         hints.ai_flags = AI_PASSIVE;
1578
1579         err = getaddrinfo(name, TEST_PORT, &hints, &gai_ai);
1580         if (err != 0) {
1581                 fprintf(stderr, "getaddrinfo failed (%s)", gai_strerror(err));
1582                 exit(1);
1583         }
1584
1585         for (ai = gai_ai; ai != NULL; ai = ai->ai_next) {
1586                 if (ai->ai_family != AF_INET6)
1587                         continue;
1588
1589                 err = getnameinfo(ai->ai_addr, ai->ai_addrlen, ntop,
1590                     sizeof(ntop), strport, sizeof(strport),
1591                     NI_NUMERICHOST|NI_NUMERICSERV);
1592
1593                 if (err != 0) {
1594                         if (err == EAI_SYSTEM)
1595                                 perror("getnameinfo EAI_SYSTEM");
1596                         else
1597                                 fprintf(stderr, "getnameinfo failed: %s\n",
1598                                     gai_strerror(err));
1599                         exit(2);
1600                 }
1601
1602                 sock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
1603                 if (sock < 0)
1604                         perror("socket");
1605                 if (bind(sock, ai->ai_addr, ai->ai_addrlen) < 0) {
1606                         if (errno == EBADF)
1607                                 exit(3);
1608                 }
1609         }
1610         exit(0);
1611 }
1612                 ]])],
1613                 [
1614                         AC_MSG_RESULT(yes)
1615                 ],
1616                 [
1617                         AC_MSG_RESULT(no)
1618                         AC_DEFINE(BROKEN_GETADDRINFO)
1619                 ],
1620                 [
1621                         AC_MSG_RESULT(cross-compiling, assuming yes)
1622                 ]
1623         )
1624 fi
1625
1626 if test "x$ac_cv_func_getaddrinfo" = "xyes" && \
1627     test "x$check_for_aix_broken_getaddrinfo" = "x1"; then
1628         AC_MSG_CHECKING(if getaddrinfo seems to work)
1629         AC_RUN_IFELSE(
1630                 [AC_LANG_SOURCE([[
1631 #include <stdio.h>
1632 #include <sys/socket.h>
1633 #include <netdb.h>
1634 #include <errno.h>
1635 #include <netinet/in.h>
1636
1637 #define TEST_PORT "2222"
1638
1639 int
1640 main(void)
1641 {
1642         int err, sock;
1643         struct addrinfo *gai_ai, *ai, hints;
1644         char ntop[NI_MAXHOST], strport[NI_MAXSERV], *name = NULL;
1645
1646         memset(&hints, 0, sizeof(hints));
1647         hints.ai_family = PF_UNSPEC;
1648         hints.ai_socktype = SOCK_STREAM;
1649         hints.ai_flags = AI_PASSIVE;
1650
1651         err = getaddrinfo(name, TEST_PORT, &hints, &gai_ai);
1652         if (err != 0) {
1653                 fprintf(stderr, "getaddrinfo failed (%s)", gai_strerror(err));
1654                 exit(1);
1655         }
1656
1657         for (ai = gai_ai; ai != NULL; ai = ai->ai_next) {
1658                 if (ai->ai_family != AF_INET && ai->ai_family != AF_INET6)
1659                         continue;
1660
1661                 err = getnameinfo(ai->ai_addr, ai->ai_addrlen, ntop,
1662                     sizeof(ntop), strport, sizeof(strport),
1663                     NI_NUMERICHOST|NI_NUMERICSERV);
1664
1665                 if (ai->ai_family == AF_INET && err != 0) {
1666                         perror("getnameinfo");
1667                         exit(2);
1668                 }
1669         }
1670         exit(0);
1671 }
1672                 ]])],
1673                 [
1674                         AC_MSG_RESULT(yes)
1675                         AC_DEFINE(AIX_GETNAMEINFO_HACK, 1,
1676                                 [Define if you have a getaddrinfo that fails
1677                                 for the all-zeros IPv6 address])
1678                 ],
1679                 [
1680                         AC_MSG_RESULT(no)
1681                         AC_DEFINE(BROKEN_GETADDRINFO)
1682                 ],
1683                 [
1684                         AC_MSG_RESULT(cross-compiling, assuming no)
1685                 ]
1686         )
1687 fi
1688
1689 if test "x$check_for_conflicting_getspnam" = "x1"; then
1690         AC_MSG_CHECKING(for conflicting getspnam in shadow.h)
1691         AC_COMPILE_IFELSE(
1692                 [
1693 #include <shadow.h>
1694 int main(void) {exit(0);}
1695                 ],
1696                 [
1697                         AC_MSG_RESULT(no)
1698                 ],
1699                 [
1700                         AC_MSG_RESULT(yes)
1701                         AC_DEFINE(GETSPNAM_CONFLICTING_DEFS, 1,
1702                             [Conflicting defs for getspnam])
1703                 ]
1704         )
1705 fi
1706
1707 AC_FUNC_GETPGRP
1708
1709 # Search for OpenSSL
1710 saved_CPPFLAGS="$CPPFLAGS"
1711 saved_LDFLAGS="$LDFLAGS"
1712 AC_ARG_WITH(ssl-dir,
1713         [  --with-ssl-dir=PATH     Specify path to OpenSSL installation ],
1714         [
1715                 if test "x$withval" != "xno" ; then
1716                         case "$withval" in
1717                                 # Relative paths
1718                                 ./*|../*)       withval="`pwd`/$withval"
1719                         esac
1720                         if test -d "$withval/lib"; then
1721                                 if test -n "${need_dash_r}"; then
1722                                         LDFLAGS="-L${withval}/lib -R${withval}/lib ${LDFLAGS}"
1723                                 else
1724                                         LDFLAGS="-L${withval}/lib ${LDFLAGS}"
1725                                 fi
1726                         else
1727                                 if test -n "${need_dash_r}"; then
1728                                         LDFLAGS="-L${withval} -R${withval} ${LDFLAGS}"
1729                                 else
1730                                         LDFLAGS="-L${withval} ${LDFLAGS}"
1731                                 fi
1732                         fi
1733                         if test -d "$withval/include"; then
1734                                 CPPFLAGS="-I${withval}/include ${CPPFLAGS}"
1735                         else
1736                                 CPPFLAGS="-I${withval} ${CPPFLAGS}"
1737                         fi
1738                 fi
1739         ]
1740 )
1741 LIBS="-lcrypto $LIBS"
1742 AC_TRY_LINK_FUNC(RAND_add, AC_DEFINE(HAVE_OPENSSL, 1,
1743         [Define if your ssl headers are included
1744         with #include <openssl/header.h>]),
1745         [
1746                 dnl Check default openssl install dir
1747                 if test -n "${need_dash_r}"; then
1748                         LDFLAGS="-L/usr/local/ssl/lib -R/usr/local/ssl/lib ${saved_LDFLAGS}"
1749                 else
1750                         LDFLAGS="-L/usr/local/ssl/lib ${saved_LDFLAGS}"
1751                 fi
1752                 CPPFLAGS="-I/usr/local/ssl/include ${saved_CPPFLAGS}"
1753                 AC_TRY_LINK_FUNC(RAND_add, AC_DEFINE(HAVE_OPENSSL),
1754                         [
1755                                 AC_MSG_ERROR([*** Can't find recent OpenSSL libcrypto (see config.log for details) ***])
1756                         ]
1757                 )
1758         ]
1759 )
1760
1761 # Determine OpenSSL header version
1762 AC_MSG_CHECKING([OpenSSL header version])
1763 AC_RUN_IFELSE(
1764         [AC_LANG_SOURCE([[
1765 #include <stdio.h>
1766 #include <string.h>
1767 #include <openssl/opensslv.h>
1768 #define DATA "conftest.sslincver"
1769 int main(void) {
1770         FILE *fd;
1771         int rc;
1772
1773         fd = fopen(DATA,"w");
1774         if(fd == NULL)
1775                 exit(1);
1776
1777         if ((rc = fprintf(fd ,"%x (%s)\n", OPENSSL_VERSION_NUMBER, OPENSSL_VERSION_TEXT)) <0)
1778                 exit(1);
1779
1780         exit(0);
1781 }
1782         ]])],
1783         [
1784                 ssl_header_ver=`cat conftest.sslincver`
1785                 AC_MSG_RESULT($ssl_header_ver)
1786         ],
1787         [
1788                 AC_MSG_RESULT(not found)
1789                 AC_MSG_ERROR(OpenSSL version header not found.)
1790         ],
1791         [
1792                 AC_MSG_WARN([cross compiling: not checking])
1793         ]
1794 )
1795
1796 # Determine OpenSSL library version
1797 AC_MSG_CHECKING([OpenSSL library version])
1798 AC_RUN_IFELSE(
1799         [AC_LANG_SOURCE([[
1800 #include <stdio.h>
1801 #include <string.h>
1802 #include <openssl/opensslv.h>
1803 #include <openssl/crypto.h>
1804 #define DATA "conftest.ssllibver"
1805 int main(void) {
1806         FILE *fd;
1807         int rc;
1808
1809         fd = fopen(DATA,"w");
1810         if(fd == NULL)
1811                 exit(1);
1812
1813         if ((rc = fprintf(fd ,"%x (%s)\n", SSLeay(), SSLeay_version(SSLEAY_VERSION))) <0)
1814                 exit(1);
1815
1816         exit(0);
1817 }
1818         ]])],
1819         [
1820                 ssl_library_ver=`cat conftest.ssllibver`
1821                 AC_MSG_RESULT($ssl_library_ver)
1822         ],
1823         [
1824                 AC_MSG_RESULT(not found)
1825                 AC_MSG_ERROR(OpenSSL library not found.)
1826         ],
1827         [
1828                 AC_MSG_WARN([cross compiling: not checking])
1829         ]
1830 )
1831
1832 # Sanity check OpenSSL headers
1833 AC_MSG_CHECKING([whether OpenSSL's headers match the library])
1834 AC_RUN_IFELSE(
1835         [AC_LANG_SOURCE([[
1836 #include <string.h>
1837 #include <openssl/opensslv.h>
1838 int main(void) { exit(SSLeay() == OPENSSL_VERSION_NUMBER ? 0 : 1); }
1839         ]])],
1840         [
1841                 AC_MSG_RESULT(yes)
1842         ],
1843         [
1844                 AC_MSG_RESULT(no)
1845                 AC_MSG_ERROR([Your OpenSSL headers do not match your library.
1846 Check config.log for details.
1847 Also see contrib/findssl.sh for help identifying header/library mismatches.])
1848         ],
1849         [
1850                 AC_MSG_WARN([cross compiling: not checking])
1851         ]
1852 )
1853
1854 AC_MSG_CHECKING([if programs using OpenSSL functions will link])
1855 AC_LINK_IFELSE(
1856         [AC_LANG_SOURCE([[
1857 #include <openssl/evp.h>
1858 int main(void) { SSLeay_add_all_algorithms(); }
1859         ]])],
1860         [
1861                 AC_MSG_RESULT(yes)
1862         ],
1863         [
1864                 AC_MSG_RESULT(no)
1865                 saved_LIBS="$LIBS"
1866                 LIBS="$LIBS -ldl"
1867                 AC_MSG_CHECKING([if programs using OpenSSL need -ldl])
1868                 AC_LINK_IFELSE(
1869                         [AC_LANG_SOURCE([[
1870 #include <openssl/evp.h>
1871 int main(void) { SSLeay_add_all_algorithms(); }
1872                         ]])],
1873                         [
1874                                 AC_MSG_RESULT(yes)
1875                         ],
1876                         [
1877                                 AC_MSG_RESULT(no)
1878                                 LIBS="$saved_LIBS"
1879                         ]
1880                 )
1881         ]
1882 )
1883
1884 AC_ARG_WITH(ssl-engine,
1885         [  --with-ssl-engine       Enable OpenSSL (hardware) ENGINE support ],
1886         [ if test "x$withval" != "xno" ; then
1887                 AC_MSG_CHECKING(for OpenSSL ENGINE support)
1888                 AC_TRY_COMPILE(
1889                         [ #include <openssl/engine.h>],
1890                         [
1891 int main(void){ENGINE_load_builtin_engines();ENGINE_register_all_complete();}
1892                         ],
1893                         [ AC_MSG_RESULT(yes)
1894                           AC_DEFINE(USE_OPENSSL_ENGINE, 1,
1895                              [Enable OpenSSL engine support])
1896                         ],
1897                         [ AC_MSG_ERROR(OpenSSL ENGINE support not found)]
1898                 )
1899           fi ]
1900 )
1901
1902 # Check for OpenSSL without EVP_aes_{192,256}_cbc
1903 AC_MSG_CHECKING([whether OpenSSL has crippled AES support])
1904 AC_LINK_IFELSE(
1905         [AC_LANG_SOURCE([[
1906 #include <string.h>
1907 #include <openssl/evp.h>
1908 int main(void) { exit(EVP_aes_192_cbc() == NULL || EVP_aes_256_cbc() == NULL);}
1909         ]])],
1910         [
1911                 AC_MSG_RESULT(no)
1912         ],
1913         [
1914                 AC_MSG_RESULT(yes)
1915                 AC_DEFINE(OPENSSL_LOBOTOMISED_AES, 1,
1916                     [libcrypto is missing AES 192 and 256 bit functions])
1917         ]
1918 )
1919
1920 # Some systems want crypt() from libcrypt, *not* the version in OpenSSL,
1921 # because the system crypt() is more featureful.
1922 if test "x$check_for_libcrypt_before" = "x1"; then
1923         AC_CHECK_LIB(crypt, crypt)
1924 fi
1925
1926 # Some Linux systems (Slackware) need crypt() from libcrypt, *not* the
1927 # version in OpenSSL.
1928 if test "x$check_for_libcrypt_later" = "x1"; then
1929         AC_CHECK_LIB(crypt, crypt, LIBS="$LIBS -lcrypt")
1930 fi
1931
1932 # Search for SHA256 support in libc and/or OpenSSL
1933 AC_CHECK_FUNCS(SHA256_Update EVP_sha256)
1934
1935 AC_CHECK_LIB(iaf, ia_openinfo)
1936
1937 ### Configure cryptographic random number support
1938
1939 # Check wheter OpenSSL seeds itself
1940 AC_MSG_CHECKING([whether OpenSSL's PRNG is internally seeded])
1941 AC_RUN_IFELSE(
1942         [AC_LANG_SOURCE([[
1943 #include <string.h>
1944 #include <openssl/rand.h>
1945 int main(void) { exit(RAND_status() == 1 ? 0 : 1); }
1946         ]])],
1947         [
1948                 OPENSSL_SEEDS_ITSELF=yes
1949                 AC_MSG_RESULT(yes)
1950         ],
1951         [
1952                 AC_MSG_RESULT(no)
1953                 # Default to use of the rand helper if OpenSSL doesn't
1954                 # seed itself
1955                 USE_RAND_HELPER=yes
1956         ],
1957         [
1958                 AC_MSG_WARN([cross compiling: assuming yes])
1959                 # This is safe, since all recent OpenSSL versions will
1960                 # complain at runtime if not seeded correctly.
1961                 OPENSSL_SEEDS_ITSELF=yes
1962         ]
1963 )
1964
1965 # Check for PAM libs
1966 PAM_MSG="no"
1967 AC_ARG_WITH(pam,
1968         [  --with-pam              Enable PAM support ],
1969         [
1970                 if test "x$withval" != "xno" ; then
1971                         if test "x$ac_cv_header_security_pam_appl_h" != "xyes" && \
1972                            test "x$ac_cv_header_pam_pam_appl_h" != "xyes" ; then
1973                                 AC_MSG_ERROR([PAM headers not found])
1974                         fi
1975
1976                         saved_LIBS="$LIBS"
1977                         AC_CHECK_LIB(dl, dlopen, , )
1978                         AC_CHECK_LIB(pam, pam_set_item, , AC_MSG_ERROR([*** libpam missing]))
1979                         AC_CHECK_FUNCS(pam_getenvlist)
1980                         AC_CHECK_FUNCS(pam_putenv)
1981                         LIBS="$saved_LIBS"
1982
1983                         PAM_MSG="yes"
1984
1985                         LIBPAM="-lpam"
1986                         AC_DEFINE(USE_PAM, 1,
1987                                 [Define if you want to enable PAM support])
1988
1989                         if test $ac_cv_lib_dl_dlopen = yes; then
1990                                 case "$LIBS" in
1991                                 *-ldl*)
1992                                         # libdl already in LIBS
1993                                         ;;
1994                                 *)
1995                                         LIBPAM="$LIBPAM -ldl"
1996                                         ;;
1997                                 esac
1998                         fi
1999                         AC_SUBST(LIBPAM)
2000                 fi
2001         ]
2002 )
2003
2004 # Check for older PAM
2005 if test "x$PAM_MSG" = "xyes" ; then
2006         # Check PAM strerror arguments (old PAM)
2007         AC_MSG_CHECKING([whether pam_strerror takes only one argument])
2008         AC_TRY_COMPILE(
2009                 [
2010 #include <stdlib.h>
2011 #if defined(HAVE_SECURITY_PAM_APPL_H)
2012 #include <security/pam_appl.h>
2013 #elif defined (HAVE_PAM_PAM_APPL_H)
2014 #include <pam/pam_appl.h>
2015 #endif
2016                 ],
2017                 [(void)pam_strerror((pam_handle_t *)NULL, -1);],
2018                 [AC_MSG_RESULT(no)],
2019                 [
2020                         AC_DEFINE(HAVE_OLD_PAM, 1,
2021                                 [Define if you have an old version of PAM
2022                                 which takes only one argument to pam_strerror])
2023                         AC_MSG_RESULT(yes)
2024                         PAM_MSG="yes (old library)"
2025                 ]
2026         )
2027 fi
2028
2029 # Do we want to force the use of the rand helper?
2030 AC_ARG_WITH(rand-helper,
2031         [  --with-rand-helper      Use subprocess to gather strong randomness ],
2032         [
2033                 if test "x$withval" = "xno" ; then
2034                         # Force use of OpenSSL's internal RNG, even if
2035                         # the previous test showed it to be unseeded.
2036                         if test -z "$OPENSSL_SEEDS_ITSELF" ; then
2037                                 AC_MSG_WARN([*** Forcing use of OpenSSL's non-self-seeding PRNG])
2038                                 OPENSSL_SEEDS_ITSELF=yes
2039                                 USE_RAND_HELPER=""
2040                         fi
2041                 else
2042                         USE_RAND_HELPER=yes
2043                 fi
2044         ],
2045 )
2046
2047 # Which randomness source do we use?
2048 if test ! -z "$OPENSSL_SEEDS_ITSELF" && test -z "$USE_RAND_HELPER" ; then
2049         # OpenSSL only
2050         AC_DEFINE(OPENSSL_PRNG_ONLY, 1,
2051                 [Define if you want OpenSSL's internally seeded PRNG only])
2052         RAND_MSG="OpenSSL internal ONLY"
2053         INSTALL_SSH_RAND_HELPER=""
2054 elif test ! -z "$USE_RAND_HELPER" ; then
2055         # install rand helper
2056         RAND_MSG="ssh-rand-helper"
2057         INSTALL_SSH_RAND_HELPER="yes"
2058 fi
2059 AC_SUBST(INSTALL_SSH_RAND_HELPER)
2060
2061 ### Configuration of ssh-rand-helper
2062
2063 # PRNGD TCP socket
2064 AC_ARG_WITH(prngd-port,
2065         [  --with-prngd-port=PORT  read entropy from PRNGD/EGD TCP localhost:PORT],
2066         [
2067                 case "$withval" in
2068                 no)
2069                         withval=""
2070                         ;;
2071                 [[0-9]]*)
2072                         ;;
2073                 *)
2074                         AC_MSG_ERROR(You must specify a numeric port number for --with-prngd-port)
2075                         ;;
2076                 esac
2077                 if test ! -z "$withval" ; then
2078                         PRNGD_PORT="$withval"
2079                         AC_DEFINE_UNQUOTED(PRNGD_PORT, $PRNGD_PORT,
2080                                 [Port number of PRNGD/EGD random number socket])
2081                 fi
2082         ]
2083 )
2084
2085 # PRNGD Unix domain socket
2086 AC_ARG_WITH(prngd-socket,
2087         [  --with-prngd-socket=FILE read entropy from PRNGD/EGD socket FILE (default=/var/run/egd-pool)],
2088         [
2089                 case "$withval" in
2090                 yes)
2091                         withval="/var/run/egd-pool"
2092                         ;;
2093                 no)
2094                         withval=""
2095                         ;;
2096                 /*)
2097                         ;;
2098                 *)
2099                         AC_MSG_ERROR(You must specify an absolute path to the entropy socket)
2100                         ;;
2101                 esac
2102
2103                 if test ! -z "$withval" ; then
2104                         if test ! -z "$PRNGD_PORT" ; then
2105                                 AC_MSG_ERROR(You may not specify both a PRNGD/EGD port and socket)
2106                         fi
2107                         if test ! -r "$withval" ; then
2108                                 AC_MSG_WARN(Entropy socket is not readable)
2109                         fi
2110                         PRNGD_SOCKET="$withval"
2111                         AC_DEFINE_UNQUOTED(PRNGD_SOCKET, "$PRNGD_SOCKET",
2112                                 [Location of PRNGD/EGD random number socket])
2113                 fi
2114         ],
2115         [
2116                 # Check for existing socket only if we don't have a random device already
2117                 if test "$USE_RAND_HELPER" = yes ; then
2118                         AC_MSG_CHECKING(for PRNGD/EGD socket)
2119                         # Insert other locations here
2120                         for sock in /var/run/egd-pool /dev/egd-pool /etc/entropy; do
2121                                 if test -r $sock && $TEST_MINUS_S_SH -c "test -S $sock -o -p $sock" ; then
2122                                         PRNGD_SOCKET="$sock"
2123                                         AC_DEFINE_UNQUOTED(PRNGD_SOCKET, "$PRNGD_SOCKET")
2124                                         break;
2125                                 fi
2126                         done
2127                         if test ! -z "$PRNGD_SOCKET" ; then
2128                                 AC_MSG_RESULT($PRNGD_SOCKET)
2129                         else
2130                                 AC_MSG_RESULT(not found)
2131                         fi
2132                 fi
2133         ]
2134 )
2135
2136 # Change default command timeout for hashing entropy source
2137 entropy_timeout=200
2138 AC_ARG_WITH(entropy-timeout,
2139         [  --with-entropy-timeout  Specify entropy gathering command timeout (msec)],
2140         [
2141                 if test -n "$withval"  &&  test "x$withval" != "xno"  &&  \
2142                     test "x${withval}" != "xyes"; then
2143                         entropy_timeout=$withval
2144                 fi
2145         ]
2146 )
2147 AC_DEFINE_UNQUOTED(ENTROPY_TIMEOUT_MSEC, $entropy_timeout,
2148         [Builtin PRNG command timeout])
2149
2150 SSH_PRIVSEP_USER=sshd
2151 AC_ARG_WITH(privsep-user,
2152         [  --with-privsep-user=user Specify non-privileged user for privilege separation],
2153         [
2154                 if test -n "$withval"  &&  test "x$withval" != "xno"  &&  \
2155                     test "x${withval}" != "xyes"; then
2156                         SSH_PRIVSEP_USER=$withval
2157                 fi
2158         ]
2159 )
2160 AC_DEFINE_UNQUOTED(SSH_PRIVSEP_USER, "$SSH_PRIVSEP_USER",
2161         [non-privileged user for privilege separation])
2162 AC_SUBST(SSH_PRIVSEP_USER)
2163
2164 # We do this little dance with the search path to insure
2165 # that programs that we select for use by installed programs
2166 # (which may be run by the super-user) come from trusted
2167 # locations before they come from the user's private area.
2168 # This should help avoid accidentally configuring some
2169 # random version of a program in someone's personal bin.
2170
2171 OPATH=$PATH
2172 PATH=/bin:/usr/bin
2173 test -h /bin 2> /dev/null && PATH=/usr/bin
2174 test -d /sbin && PATH=$PATH:/sbin
2175 test -d /usr/sbin && PATH=$PATH:/usr/sbin
2176 PATH=$PATH:/etc:$OPATH
2177
2178 # These programs are used by the command hashing source to gather entropy
2179 OSSH_PATH_ENTROPY_PROG(PROG_LS, ls)
2180 OSSH_PATH_ENTROPY_PROG(PROG_NETSTAT, netstat)
2181 OSSH_PATH_ENTROPY_PROG(PROG_ARP, arp)
2182 OSSH_PATH_ENTROPY_PROG(PROG_IFCONFIG, ifconfig)
2183 OSSH_PATH_ENTROPY_PROG(PROG_JSTAT, jstat)
2184 OSSH_PATH_ENTROPY_PROG(PROG_PS, ps)
2185 OSSH_PATH_ENTROPY_PROG(PROG_SAR, sar)
2186 OSSH_PATH_ENTROPY_PROG(PROG_W, w)
2187 OSSH_PATH_ENTROPY_PROG(PROG_WHO, who)
2188 OSSH_PATH_ENTROPY_PROG(PROG_LAST, last)
2189 OSSH_PATH_ENTROPY_PROG(PROG_LASTLOG, lastlog)
2190 OSSH_PATH_ENTROPY_PROG(PROG_DF, df)
2191 OSSH_PATH_ENTROPY_PROG(PROG_VMSTAT, vmstat)
2192 OSSH_PATH_ENTROPY_PROG(PROG_UPTIME, uptime)
2193 OSSH_PATH_ENTROPY_PROG(PROG_IPCS, ipcs)
2194 OSSH_PATH_ENTROPY_PROG(PROG_TAIL, tail)
2195 # restore PATH
2196 PATH=$OPATH
2197
2198 # Where does ssh-rand-helper get its randomness from?
2199 INSTALL_SSH_PRNG_CMDS=""
2200 if test ! -z "$INSTALL_SSH_RAND_HELPER" ; then
2201         if test ! -z "$PRNGD_PORT" ; then
2202                 RAND_HELPER_MSG="TCP localhost:$PRNGD_PORT"
2203         elif test ! -z "$PRNGD_SOCKET" ; then
2204                 RAND_HELPER_MSG="Unix domain socket \"$PRNGD_SOCKET\""
2205         else
2206                 RAND_HELPER_MSG="Command hashing (timeout $entropy_timeout)"
2207                 RAND_HELPER_CMDHASH=yes
2208                 INSTALL_SSH_PRNG_CMDS="yes"
2209         fi
2210 fi
2211 AC_SUBST(INSTALL_SSH_PRNG_CMDS)
2212
2213
2214 # Cheap hack to ensure NEWS-OS libraries are arranged right.
2215 if test ! -z "$SONY" ; then
2216   LIBS="$LIBS -liberty";
2217 fi
2218
2219 # Check for  long long datatypes
2220 AC_CHECK_TYPES([long long, unsigned long long, long double])
2221
2222 # Check datatype sizes
2223 AC_CHECK_SIZEOF(char, 1)
2224 AC_CHECK_SIZEOF(short int, 2)
2225 AC_CHECK_SIZEOF(int, 4)
2226 AC_CHECK_SIZEOF(long int, 4)
2227 AC_CHECK_SIZEOF(long long int, 8)
2228
2229 # Sanity check long long for some platforms (AIX)
2230 if test "x$ac_cv_sizeof_long_long_int" = "x4" ; then
2231         ac_cv_sizeof_long_long_int=0
2232 fi
2233
2234 # compute LLONG_MIN and LLONG_MAX if we don't know them.
2235 if test -z "$have_llong_max"; then
2236         AC_MSG_CHECKING([for max value of long long])
2237         AC_RUN_IFELSE(
2238                 [AC_LANG_SOURCE([[
2239 #include <stdio.h>
2240 /* Why is this so damn hard? */
2241 #ifdef __GNUC__
2242 # undef __GNUC__
2243 #endif
2244 #define __USE_ISOC99
2245 #include <limits.h>
2246 #define DATA "conftest.llminmax"
2247 #define my_abs(a) ((a) < 0 ? ((a) * -1) : (a))
2248
2249 /*
2250  * printf in libc on some platforms (eg old Tru64) does not understand %lld so
2251  * we do this the hard way.
2252  */
2253 static int
2254 fprint_ll(FILE *f, long long n)
2255 {
2256         unsigned int i;
2257         int l[sizeof(long long) * 8];
2258
2259         if (n < 0)
2260                 if (fprintf(f, "-") < 0)
2261                         return -1;
2262         for (i = 0; n != 0; i++) {
2263                 l[i] = my_abs(n % 10);
2264                 n /= 10;
2265         }
2266         do {
2267                 if (fprintf(f, "%d", l[--i]) < 0)
2268                         return -1;
2269         } while (i != 0);
2270         if (fprintf(f, " ") < 0)
2271                 return -1;
2272         return 0;
2273 }
2274
2275 int main(void) {
2276         FILE *f;
2277         long long i, llmin, llmax = 0;
2278
2279         if((f = fopen(DATA,"w")) == NULL)
2280                 exit(1);
2281
2282 #if defined(LLONG_MIN) && defined(LLONG_MAX)
2283         fprintf(stderr, "Using system header for LLONG_MIN and LLONG_MAX\n");
2284         llmin = LLONG_MIN;
2285         llmax = LLONG_MAX;
2286 #else
2287         fprintf(stderr, "Calculating  LLONG_MIN and LLONG_MAX\n");
2288         /* This will work on one's complement and two's complement */
2289         for (i = 1; i > llmax; i <<= 1, i++)
2290                 llmax = i;
2291         llmin = llmax + 1LL;    /* wrap */
2292 #endif
2293
2294         /* Sanity check */
2295         if (llmin + 1 < llmin || llmin - 1 < llmin || llmax + 1 > llmax
2296             || llmax - 1 > llmax || llmin == llmax || llmin == 0
2297             || llmax == 0 || llmax < LONG_MAX || llmin > LONG_MIN) {
2298                 fprintf(f, "unknown unknown\n");
2299                 exit(2);
2300         }
2301
2302         if (fprint_ll(f, llmin) < 0)
2303                 exit(3);
2304         if (fprint_ll(f, llmax) < 0)
2305                 exit(4);
2306         if (fclose(f) < 0)
2307                 exit(5);
2308         exit(0);
2309 }
2310                 ]])],
2311                 [
2312                         llong_min=`$AWK '{print $1}' conftest.llminmax`
2313                         llong_max=`$AWK '{print $2}' conftest.llminmax`
2314
2315                         AC_MSG_RESULT($llong_max)
2316                         AC_DEFINE_UNQUOTED(LLONG_MAX, [${llong_max}LL],
2317                             [max value of long long calculated by configure])
2318                         AC_MSG_CHECKING([for min value of long long])
2319                         AC_MSG_RESULT($llong_min)
2320                         AC_DEFINE_UNQUOTED(LLONG_MIN, [${llong_min}LL],
2321                             [min value of long long calculated by configure])
2322                 ],
2323                 [
2324                         AC_MSG_RESULT(not found)
2325                 ],
2326                 [
2327                         AC_MSG_WARN([cross compiling: not checking])
2328                 ]
2329         )
2330 fi
2331
2332
2333 # More checks for data types
2334 AC_CACHE_CHECK([for u_int type], ac_cv_have_u_int, [
2335         AC_TRY_COMPILE(
2336                 [ #include <sys/types.h> ],
2337                 [ u_int a; a = 1;],
2338                 [ ac_cv_have_u_int="yes" ],
2339                 [ ac_cv_have_u_int="no" ]
2340         )
2341 ])
2342 if test "x$ac_cv_have_u_int" = "xyes" ; then
2343         AC_DEFINE(HAVE_U_INT, 1, [define if you have u_int data type])
2344         have_u_int=1
2345 fi
2346
2347 AC_CACHE_CHECK([for intXX_t types], ac_cv_have_intxx_t, [
2348         AC_TRY_COMPILE(
2349                 [ #include <sys/types.h> ],
2350                 [ int8_t a; int16_t b; int32_t c; a = b = c = 1;],
2351                 [ ac_cv_have_intxx_t="yes" ],
2352                 [ ac_cv_have_intxx_t="no" ]
2353         )
2354 ])
2355 if test "x$ac_cv_have_intxx_t" = "xyes" ; then
2356         AC_DEFINE(HAVE_INTXX_T, 1, [define if you have intxx_t data type])
2357         have_intxx_t=1
2358 fi
2359
2360 if (test -z "$have_intxx_t" && \
2361            test "x$ac_cv_header_stdint_h" = "xyes")
2362 then
2363     AC_MSG_CHECKING([for intXX_t types in stdint.h])
2364         AC_TRY_COMPILE(
2365                 [ #include <stdint.h> ],
2366                 [ int8_t a; int16_t b; int32_t c; a = b = c = 1;],
2367                 [
2368                         AC_DEFINE(HAVE_INTXX_T)
2369                         AC_MSG_RESULT(yes)
2370                 ],
2371                 [ AC_MSG_RESULT(no) ]
2372         )
2373 fi
2374
2375 AC_CACHE_CHECK([for int64_t type], ac_cv_have_int64_t, [
2376         AC_TRY_COMPILE(
2377                 [
2378 #include <sys/types.h>
2379 #ifdef HAVE_STDINT_H
2380 # include <stdint.h>
2381 #endif
2382 #include <sys/socket.h>
2383 #ifdef HAVE_SYS_BITYPES_H
2384 # include <sys/bitypes.h>
2385 #endif
2386                 ],
2387                 [ int64_t a; a = 1;],
2388                 [ ac_cv_have_int64_t="yes" ],
2389                 [ ac_cv_have_int64_t="no" ]
2390         )
2391 ])
2392 if test "x$ac_cv_have_int64_t" = "xyes" ; then
2393         AC_DEFINE(HAVE_INT64_T, 1, [define if you have int64_t data type])
2394 fi
2395
2396 AC_CACHE_CHECK([for u_intXX_t types], ac_cv_have_u_intxx_t, [
2397         AC_TRY_COMPILE(
2398                 [ #include <sys/types.h> ],
2399                 [ u_int8_t a; u_int16_t b; u_int32_t c; a = b = c = 1;],
2400                 [ ac_cv_have_u_intxx_t="yes" ],
2401                 [ ac_cv_have_u_intxx_t="no" ]
2402         )
2403 ])
2404 if test "x$ac_cv_have_u_intxx_t" = "xyes" ; then
2405         AC_DEFINE(HAVE_U_INTXX_T, 1, [define if you have u_intxx_t data type])
2406         have_u_intxx_t=1
2407 fi
2408
2409 if test -z "$have_u_intxx_t" ; then
2410     AC_MSG_CHECKING([for u_intXX_t types in sys/socket.h])
2411         AC_TRY_COMPILE(
2412                 [ #include <sys/socket.h> ],
2413                 [ u_int8_t a; u_int16_t b; u_int32_t c; a = b = c = 1;],
2414                 [
2415                         AC_DEFINE(HAVE_U_INTXX_T)
2416                         AC_MSG_RESULT(yes)
2417                 ],
2418                 [ AC_MSG_RESULT(no) ]
2419         )
2420 fi
2421
2422 AC_CACHE_CHECK([for u_int64_t types], ac_cv_have_u_int64_t, [
2423         AC_TRY_COMPILE(
2424                 [ #include <sys/types.h> ],
2425                 [ u_int64_t a; a = 1;],
2426                 [ ac_cv_have_u_int64_t="yes" ],
2427                 [ ac_cv_have_u_int64_t="no" ]
2428         )
2429 ])
2430 if test "x$ac_cv_have_u_int64_t" = "xyes" ; then
2431         AC_DEFINE(HAVE_U_INT64_T, 1, [define if you have u_int64_t data type])
2432         have_u_int64_t=1
2433 fi
2434
2435 if test -z "$have_u_int64_t" ; then
2436     AC_MSG_CHECKING([for u_int64_t type in sys/bitypes.h])
2437         AC_TRY_COMPILE(
2438                 [ #include <sys/bitypes.h> ],
2439                 [ u_int64_t a; a = 1],
2440                 [
2441                         AC_DEFINE(HAVE_U_INT64_T)
2442                         AC_MSG_RESULT(yes)
2443                 ],
2444                 [ AC_MSG_RESULT(no) ]
2445         )
2446 fi
2447
2448 if test -z "$have_u_intxx_t" ; then
2449         AC_CACHE_CHECK([for uintXX_t types], ac_cv_have_uintxx_t, [
2450                 AC_TRY_COMPILE(
2451                         [
2452 #include <sys/types.h>
2453                         ],
2454                         [ uint8_t a; uint16_t b; uint32_t c; a = b = c = 1; ],
2455                         [ ac_cv_have_uintxx_t="yes" ],
2456                         [ ac_cv_have_uintxx_t="no" ]
2457                 )
2458         ])
2459         if test "x$ac_cv_have_uintxx_t" = "xyes" ; then
2460                 AC_DEFINE(HAVE_UINTXX_T, 1,
2461                         [define if you have uintxx_t data type])
2462         fi
2463 fi
2464
2465 if test -z "$have_uintxx_t" ; then
2466     AC_MSG_CHECKING([for uintXX_t types in stdint.h])
2467         AC_TRY_COMPILE(
2468                 [ #include <stdint.h> ],
2469                 [ uint8_t a; uint16_t b; uint32_t c; a = b = c = 1;],
2470                 [
2471                         AC_DEFINE(HAVE_UINTXX_T)
2472                         AC_MSG_RESULT(yes)
2473                 ],
2474                 [ AC_MSG_RESULT(no) ]
2475         )
2476 fi
2477
2478 if (test -z "$have_u_intxx_t" || test -z "$have_intxx_t" && \
2479            test "x$ac_cv_header_sys_bitypes_h" = "xyes")
2480 then
2481         AC_MSG_CHECKING([for intXX_t and u_intXX_t types in sys/bitypes.h])
2482         AC_TRY_COMPILE(
2483                 [
2484 #include <sys/bitypes.h>
2485                 ],
2486                 [
2487                         int8_t a; int16_t b; int32_t c;
2488                         u_int8_t e; u_int16_t f; u_int32_t g;
2489                         a = b = c = e = f = g = 1;
2490                 ],
2491                 [
2492                         AC_DEFINE(HAVE_U_INTXX_T)
2493                         AC_DEFINE(HAVE_INTXX_T)
2494                         AC_MSG_RESULT(yes)
2495                 ],
2496                 [AC_MSG_RESULT(no)]
2497         )
2498 fi
2499
2500
2501 AC_CACHE_CHECK([for u_char], ac_cv_have_u_char, [
2502         AC_TRY_COMPILE(
2503                 [
2504 #include <sys/types.h>
2505                 ],
2506                 [ u_char foo; foo = 125; ],
2507                 [ ac_cv_have_u_char="yes" ],
2508                 [ ac_cv_have_u_char="no" ]
2509         )
2510 ])
2511 if test "x$ac_cv_have_u_char" = "xyes" ; then
2512         AC_DEFINE(HAVE_U_CHAR, 1, [define if you have u_char data type])
2513 fi
2514
2515 TYPE_SOCKLEN_T
2516
2517 AC_CHECK_TYPES(sig_atomic_t,,,[#include <signal.h>])
2518
2519 AC_CHECK_TYPES(in_addr_t,,,
2520 [#include <sys/types.h>
2521 #include <netinet/in.h>])
2522
2523 AC_CACHE_CHECK([for size_t], ac_cv_have_size_t, [
2524         AC_TRY_COMPILE(
2525                 [
2526 #include <sys/types.h>
2527                 ],
2528                 [ size_t foo; foo = 1235; ],
2529                 [ ac_cv_have_size_t="yes" ],
2530                 [ ac_cv_have_size_t="no" ]
2531         )
2532 ])
2533 if test "x$ac_cv_have_size_t" = "xyes" ; then
2534         AC_DEFINE(HAVE_SIZE_T, 1, [define if you have size_t data type])
2535 fi
2536
2537 AC_CACHE_CHECK([for ssize_t], ac_cv_have_ssize_t, [
2538         AC_TRY_COMPILE(
2539                 [
2540 #include <sys/types.h>
2541                 ],
2542                 [ ssize_t foo; foo = 1235; ],
2543                 [ ac_cv_have_ssize_t="yes" ],
2544                 [ ac_cv_have_ssize_t="no" ]
2545         )
2546 ])
2547 if test "x$ac_cv_have_ssize_t" = "xyes" ; then
2548         AC_DEFINE(HAVE_SSIZE_T, 1, [define if you have ssize_t data type])
2549 fi
2550
2551 AC_CACHE_CHECK([for clock_t], ac_cv_have_clock_t, [
2552         AC_TRY_COMPILE(
2553                 [
2554 #include <time.h>
2555                 ],
2556                 [ clock_t foo; foo = 1235; ],
2557                 [ ac_cv_have_clock_t="yes" ],
2558                 [ ac_cv_have_clock_t="no" ]
2559         )
2560 ])
2561 if test "x$ac_cv_have_clock_t" = "xyes" ; then
2562         AC_DEFINE(HAVE_CLOCK_T, 1, [define if you have clock_t data type])
2563 fi
2564
2565 AC_CACHE_CHECK([for sa_family_t], ac_cv_have_sa_family_t, [
2566         AC_TRY_COMPILE(
2567                 [
2568 #include <sys/types.h>
2569 #include <sys/socket.h>
2570                 ],
2571                 [ sa_family_t foo; foo = 1235; ],
2572                 [ ac_cv_have_sa_family_t="yes" ],
2573                 [ AC_TRY_COMPILE(
2574                   [
2575 #include <sys/types.h>
2576 #include <sys/socket.h>
2577 #include <netinet/in.h>
2578                 ],
2579                 [ sa_family_t foo; foo = 1235; ],
2580                 [ ac_cv_have_sa_family_t="yes" ],
2581
2582                 [ ac_cv_have_sa_family_t="no" ]
2583         )]
2584         )
2585 ])
2586 if test "x$ac_cv_have_sa_family_t" = "xyes" ; then
2587         AC_DEFINE(HAVE_SA_FAMILY_T, 1,
2588                 [define if you have sa_family_t data type])
2589 fi
2590
2591 AC_CACHE_CHECK([for pid_t], ac_cv_have_pid_t, [
2592         AC_TRY_COMPILE(
2593                 [
2594 #include <sys/types.h>
2595                 ],
2596                 [ pid_t foo; foo = 1235; ],
2597                 [ ac_cv_have_pid_t="yes" ],
2598                 [ ac_cv_have_pid_t="no" ]
2599         )
2600 ])
2601 if test "x$ac_cv_have_pid_t" = "xyes" ; then
2602         AC_DEFINE(HAVE_PID_T, 1, [define if you have pid_t data type])
2603 fi
2604
2605 AC_CACHE_CHECK([for mode_t], ac_cv_have_mode_t, [
2606         AC_TRY_COMPILE(
2607                 [
2608 #include <sys/types.h>
2609                 ],
2610                 [ mode_t foo; foo = 1235; ],
2611                 [ ac_cv_have_mode_t="yes" ],
2612                 [ ac_cv_have_mode_t="no" ]
2613         )
2614 ])
2615 if test "x$ac_cv_have_mode_t" = "xyes" ; then
2616         AC_DEFINE(HAVE_MODE_T, 1, [define if you have mode_t data type])
2617 fi
2618
2619
2620 AC_CACHE_CHECK([for struct sockaddr_storage], ac_cv_have_struct_sockaddr_storage, [
2621         AC_TRY_COMPILE(
2622                 [
2623 #include <sys/types.h>
2624 #include <sys/socket.h>
2625                 ],
2626                 [ struct sockaddr_storage s; ],
2627                 [ ac_cv_have_struct_sockaddr_storage="yes" ],
2628                 [ ac_cv_have_struct_sockaddr_storage="no" ]
2629         )
2630 ])
2631 if test "x$ac_cv_have_struct_sockaddr_storage" = "xyes" ; then
2632         AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE, 1,
2633                 [define if you have struct sockaddr_storage data type])
2634 fi
2635
2636 AC_CACHE_CHECK([for struct sockaddr_in6], ac_cv_have_struct_sockaddr_in6, [
2637         AC_TRY_COMPILE(
2638                 [
2639 #include <sys/types.h>
2640 #include <netinet/in.h>
2641                 ],
2642                 [ struct sockaddr_in6 s; s.sin6_family = 0; ],
2643                 [ ac_cv_have_struct_sockaddr_in6="yes" ],
2644                 [ ac_cv_have_struct_sockaddr_in6="no" ]
2645         )
2646 ])
2647 if test "x$ac_cv_have_struct_sockaddr_in6" = "xyes" ; then
2648         AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6, 1,
2649                 [define if you have struct sockaddr_in6 data type])
2650 fi
2651
2652 AC_CACHE_CHECK([for struct in6_addr], ac_cv_have_struct_in6_addr, [
2653         AC_TRY_COMPILE(
2654                 [
2655 #include <sys/types.h>
2656 #include <netinet/in.h>
2657                 ],
2658                 [ struct in6_addr s; s.s6_addr[0] = 0; ],
2659                 [ ac_cv_have_struct_in6_addr="yes" ],
2660                 [ ac_cv_have_struct_in6_addr="no" ]
2661         )
2662 ])
2663 if test "x$ac_cv_have_struct_in6_addr" = "xyes" ; then
2664         AC_DEFINE(HAVE_STRUCT_IN6_ADDR, 1,
2665                 [define if you have struct in6_addr data type])
2666 fi
2667
2668 AC_CACHE_CHECK([for struct addrinfo], ac_cv_have_struct_addrinfo, [
2669         AC_TRY_COMPILE(
2670                 [
2671 #include <sys/types.h>
2672 #include <sys/socket.h>
2673 #include <netdb.h>
2674                 ],
2675                 [ struct addrinfo s; s.ai_flags = AI_PASSIVE; ],
2676                 [ ac_cv_have_struct_addrinfo="yes" ],
2677                 [ ac_cv_have_struct_addrinfo="no" ]
2678         )
2679 ])
2680 if test "x$ac_cv_have_struct_addrinfo" = "xyes" ; then
2681         AC_DEFINE(HAVE_STRUCT_ADDRINFO, 1,
2682                 [define if you have struct addrinfo data type])
2683 fi
2684
2685 AC_CACHE_CHECK([for struct timeval], ac_cv_have_struct_timeval, [
2686         AC_TRY_COMPILE(
2687                 [ #include <sys/time.h> ],
2688                 [ struct timeval tv; tv.tv_sec = 1;],
2689                 [ ac_cv_have_struct_timeval="yes" ],
2690                 [ ac_cv_have_struct_timeval="no" ]
2691         )
2692 ])
2693 if test "x$ac_cv_have_struct_timeval" = "xyes" ; then
2694         AC_DEFINE(HAVE_STRUCT_TIMEVAL, 1, [define if you have struct timeval])
2695         have_struct_timeval=1
2696 fi
2697
2698 AC_CHECK_TYPES(struct timespec)
2699
2700 # We need int64_t or else certian parts of the compile will fail.
2701 if test "x$ac_cv_have_int64_t" = "xno" && \
2702         test "x$ac_cv_sizeof_long_int" != "x8" && \
2703         test "x$ac_cv_sizeof_long_long_int" = "x0" ; then
2704         echo "OpenSSH requires int64_t support.  Contact your vendor or install"
2705         echo "an alternative compiler (I.E., GCC) before continuing."
2706         echo ""
2707         exit 1;
2708 else
2709 dnl test snprintf (broken on SCO w/gcc)
2710         AC_RUN_IFELSE(
2711                 [AC_LANG_SOURCE([[
2712 #include <stdio.h>
2713 #include <string.h>
2714 #ifdef HAVE_SNPRINTF
2715 main()
2716 {
2717         char buf[50];
2718         char expected_out[50];
2719         int mazsize = 50 ;
2720 #if (SIZEOF_LONG_INT == 8)
2721         long int num = 0x7fffffffffffffff;
2722 #else
2723         long long num = 0x7fffffffffffffffll;
2724 #endif
2725         strcpy(expected_out, "9223372036854775807");
2726         snprintf(buf, mazsize, "%lld", num);
2727         if(strcmp(buf, expected_out) != 0)
2728                 exit(1);
2729         exit(0);
2730 }
2731 #else
2732 main() { exit(0); }
2733 #endif
2734                 ]])], [ true ], [ AC_DEFINE(BROKEN_SNPRINTF) ],
2735                 AC_MSG_WARN([cross compiling: Assuming working snprintf()])
2736         )
2737 fi
2738
2739 dnl Checks for structure members
2740 OSSH_CHECK_HEADER_FOR_FIELD(ut_host, utmp.h, HAVE_HOST_IN_UTMP)
2741 OSSH_CHECK_HEADER_FOR_FIELD(ut_host, utmpx.h, HAVE_HOST_IN_UTMPX)
2742 OSSH_CHECK_HEADER_FOR_FIELD(syslen, utmpx.h, HAVE_SYSLEN_IN_UTMPX)
2743 OSSH_CHECK_HEADER_FOR_FIELD(ut_pid, utmp.h, HAVE_PID_IN_UTMP)
2744 OSSH_CHECK_HEADER_FOR_FIELD(ut_type, utmp.h, HAVE_TYPE_IN_UTMP)
2745 OSSH_CHECK_HEADER_FOR_FIELD(ut_type, utmpx.h, HAVE_TYPE_IN_UTMPX)
2746 OSSH_CHECK_HEADER_FOR_FIELD(ut_tv, utmp.h, HAVE_TV_IN_UTMP)
2747 OSSH_CHECK_HEADER_FOR_FIELD(ut_id, utmp.h, HAVE_ID_IN_UTMP)
2748 OSSH_CHECK_HEADER_FOR_FIELD(ut_id, utmpx.h, HAVE_ID_IN_UTMPX)
2749 OSSH_CHECK_HEADER_FOR_FIELD(ut_addr, utmp.h, HAVE_ADDR_IN_UTMP)
2750 OSSH_CHECK_HEADER_FOR_FIELD(ut_addr, utmpx.h, HAVE_ADDR_IN_UTMPX)
2751 OSSH_CHECK_HEADER_FOR_FIELD(ut_addr_v6, utmp.h, HAVE_ADDR_V6_IN_UTMP)
2752 OSSH_CHECK_HEADER_FOR_FIELD(ut_addr_v6, utmpx.h, HAVE_ADDR_V6_IN_UTMPX)
2753 OSSH_CHECK_HEADER_FOR_FIELD(ut_exit, utmp.h, HAVE_EXIT_IN_UTMP)
2754 OSSH_CHECK_HEADER_FOR_FIELD(ut_time, utmp.h, HAVE_TIME_IN_UTMP)
2755 OSSH_CHECK_HEADER_FOR_FIELD(ut_time, utmpx.h, HAVE_TIME_IN_UTMPX)
2756 OSSH_CHECK_HEADER_FOR_FIELD(ut_tv, utmpx.h, HAVE_TV_IN_UTMPX)
2757
2758 AC_CHECK_MEMBERS([struct stat.st_blksize])
2759 AC_CHECK_MEMBER([struct __res_state.retrans], [], [AC_DEFINE(__res_state, state,
2760         [Define if we don't have struct __res_state in resolv.h])],
2761 [
2762 #include <stdio.h>
2763 #if HAVE_SYS_TYPES_H
2764 # include <sys/types.h>
2765 #endif
2766 #include <netinet/in.h>
2767 #include <arpa/nameser.h>
2768 #include <resolv.h>
2769 ])
2770
2771 AC_CACHE_CHECK([for ss_family field in struct sockaddr_storage],
2772                 ac_cv_have_ss_family_in_struct_ss, [
2773         AC_TRY_COMPILE(
2774                 [
2775 #include <sys/types.h>
2776 #include <sys/socket.h>
2777                 ],
2778                 [ struct sockaddr_storage s; s.ss_family = 1; ],
2779                 [ ac_cv_have_ss_family_in_struct_ss="yes" ],
2780                 [ ac_cv_have_ss_family_in_struct_ss="no" ],
2781         )
2782 ])
2783 if test "x$ac_cv_have_ss_family_in_struct_ss" = "xyes" ; then
2784         AC_DEFINE(HAVE_SS_FAMILY_IN_SS, 1, [Fields in struct sockaddr_storage])
2785 fi
2786
2787 AC_CACHE_CHECK([for __ss_family field in struct sockaddr_storage],
2788                 ac_cv_have___ss_family_in_struct_ss, [
2789         AC_TRY_COMPILE(
2790                 [
2791 #include <sys/types.h>
2792 #include <sys/socket.h>
2793                 ],
2794                 [ struct sockaddr_storage s; s.__ss_family = 1; ],
2795                 [ ac_cv_have___ss_family_in_struct_ss="yes" ],
2796                 [ ac_cv_have___ss_family_in_struct_ss="no" ]
2797         )
2798 ])
2799 if test "x$ac_cv_have___ss_family_in_struct_ss" = "xyes" ; then
2800         AC_DEFINE(HAVE___SS_FAMILY_IN_SS, 1,
2801                 [Fields in struct sockaddr_storage])
2802 fi
2803
2804 AC_CACHE_CHECK([for pw_class field in struct passwd],
2805                 ac_cv_have_pw_class_in_struct_passwd, [
2806         AC_TRY_COMPILE(
2807                 [
2808 #include <pwd.h>
2809                 ],
2810                 [ struct passwd p; p.pw_class = 0; ],
2811                 [ ac_cv_have_pw_class_in_struct_passwd="yes" ],
2812                 [ ac_cv_have_pw_class_in_struct_passwd="no" ]
2813         )
2814 ])
2815 if test "x$ac_cv_have_pw_class_in_struct_passwd" = "xyes" ; then
2816         AC_DEFINE(HAVE_PW_CLASS_IN_PASSWD, 1,
2817                 [Define if your password has a pw_class field])
2818 fi
2819
2820 AC_CACHE_CHECK([for pw_expire field in struct passwd],
2821                 ac_cv_have_pw_expire_in_struct_passwd, [
2822         AC_TRY_COMPILE(
2823                 [
2824 #include <pwd.h>
2825                 ],
2826                 [ struct passwd p; p.pw_expire = 0; ],
2827                 [ ac_cv_have_pw_expire_in_struct_passwd="yes" ],
2828                 [ ac_cv_have_pw_expire_in_struct_passwd="no" ]
2829         )
2830 ])
2831 if test "x$ac_cv_have_pw_expire_in_struct_passwd" = "xyes" ; then
2832         AC_DEFINE(HAVE_PW_EXPIRE_IN_PASSWD, 1,
2833                 [Define if your password has a pw_expire field])
2834 fi
2835
2836 AC_CACHE_CHECK([for pw_change field in struct passwd],
2837                 ac_cv_have_pw_change_in_struct_passwd, [
2838         AC_TRY_COMPILE(
2839                 [
2840 #include <pwd.h>
2841                 ],
2842                 [ struct passwd p; p.pw_change = 0; ],
2843                 [ ac_cv_have_pw_change_in_struct_passwd="yes" ],
2844                 [ ac_cv_have_pw_change_in_struct_passwd="no" ]
2845         )
2846 ])
2847 if test "x$ac_cv_have_pw_change_in_struct_passwd" = "xyes" ; then
2848         AC_DEFINE(HAVE_PW_CHANGE_IN_PASSWD, 1,
2849                 [Define if your password has a pw_change field])
2850 fi
2851
2852 dnl make sure we're using the real structure members and not defines
2853 AC_CACHE_CHECK([for msg_accrights field in struct msghdr],
2854                 ac_cv_have_accrights_in_msghdr, [
2855         AC_COMPILE_IFELSE(
2856                 [
2857 #include <sys/types.h>
2858 #include <sys/socket.h>
2859 #include <sys/uio.h>
2860 int main() {
2861 #ifdef msg_accrights
2862 #error "msg_accrights is a macro"
2863 exit(1);
2864 #endif
2865 struct msghdr m;
2866 m.msg_accrights = 0;
2867 exit(0);
2868 }
2869                 ],
2870                 [ ac_cv_have_accrights_in_msghdr="yes" ],
2871                 [ ac_cv_have_accrights_in_msghdr="no" ]
2872         )
2873 ])
2874 if test "x$ac_cv_have_accrights_in_msghdr" = "xyes" ; then
2875         AC_DEFINE(HAVE_ACCRIGHTS_IN_MSGHDR, 1,
2876                 [Define if your system uses access rights style
2877                 file descriptor passing])
2878 fi
2879
2880 AC_CACHE_CHECK([for msg_control field in struct msghdr],
2881                 ac_cv_have_control_in_msghdr, [
2882         AC_COMPILE_IFELSE(
2883                 [
2884 #include <sys/types.h>
2885 #include <sys/socket.h>
2886 #include <sys/uio.h>
2887 int main() {
2888 #ifdef msg_control
2889 #error "msg_control is a macro"
2890 exit(1);
2891 #endif
2892 struct msghdr m;
2893 m.msg_control = 0;
2894 exit(0);
2895 }
2896                 ],
2897                 [ ac_cv_have_control_in_msghdr="yes" ],
2898                 [ ac_cv_have_control_in_msghdr="no" ]
2899         )
2900 ])
2901 if test "x$ac_cv_have_control_in_msghdr" = "xyes" ; then
2902         AC_DEFINE(HAVE_CONTROL_IN_MSGHDR, 1,
2903                 [Define if your system uses ancillary data style
2904                 file descriptor passing])
2905 fi
2906
2907 AC_CACHE_CHECK([if libc defines __progname], ac_cv_libc_defines___progname, [
2908         AC_TRY_LINK([],
2909                 [ extern char *__progname; printf("%s", __progname); ],
2910                 [ ac_cv_libc_defines___progname="yes" ],
2911                 [ ac_cv_libc_defines___progname="no" ]
2912         )
2913 ])
2914 if test "x$ac_cv_libc_defines___progname" = "xyes" ; then
2915         AC_DEFINE(HAVE___PROGNAME, 1, [Define if libc defines __progname])
2916 fi
2917
2918 AC_CACHE_CHECK([whether $CC implements __FUNCTION__], ac_cv_cc_implements___FUNCTION__, [
2919         AC_TRY_LINK([
2920 #include <stdio.h>
2921 ],
2922                 [ printf("%s", __FUNCTION__); ],
2923                 [ ac_cv_cc_implements___FUNCTION__="yes" ],
2924                 [ ac_cv_cc_implements___FUNCTION__="no" ]
2925         )
2926 ])
2927 if test "x$ac_cv_cc_implements___FUNCTION__" = "xyes" ; then
2928         AC_DEFINE(HAVE___FUNCTION__, 1,
2929                 [Define if compiler implements __FUNCTION__])
2930 fi
2931
2932 AC_CACHE_CHECK([whether $CC implements __func__], ac_cv_cc_implements___func__, [
2933         AC_TRY_LINK([
2934 #include <stdio.h>
2935 ],
2936                 [ printf("%s", __func__); ],
2937                 [ ac_cv_cc_implements___func__="yes" ],
2938                 [ ac_cv_cc_implements___func__="no" ]
2939         )
2940 ])
2941 if test "x$ac_cv_cc_implements___func__" = "xyes" ; then
2942         AC_DEFINE(HAVE___func__, 1, [Define if compiler implements __func__])
2943 fi
2944
2945 AC_CACHE_CHECK([whether va_copy exists], ac_cv_have_va_copy, [
2946         AC_TRY_LINK(
2947                 [#include <stdarg.h>
2948                  va_list x,y;],
2949                 [va_copy(x,y);],
2950                 [ ac_cv_have_va_copy="yes" ],
2951                 [ ac_cv_have_va_copy="no" ]
2952         )
2953 ])
2954 if test "x$ac_cv_have_va_copy" = "xyes" ; then
2955         AC_DEFINE(HAVE_VA_COPY, 1, [Define if va_copy exists])
2956 fi
2957
2958 AC_CACHE_CHECK([whether __va_copy exists], ac_cv_have___va_copy, [
2959         AC_TRY_LINK(
2960                 [#include <stdarg.h>
2961                  va_list x,y;],
2962                 [__va_copy(x,y);],
2963                 [ ac_cv_have___va_copy="yes" ],
2964                 [ ac_cv_have___va_copy="no" ]
2965         )
2966 ])
2967 if test "x$ac_cv_have___va_copy" = "xyes" ; then
2968         AC_DEFINE(HAVE___VA_COPY, 1, [Define if __va_copy exists])
2969 fi
2970
2971 AC_CACHE_CHECK([whether getopt has optreset support],
2972                 ac_cv_have_getopt_optreset, [
2973         AC_TRY_LINK(
2974                 [
2975 #include <getopt.h>
2976                 ],
2977                 [ extern int optreset; optreset = 0; ],
2978                 [ ac_cv_have_getopt_optreset="yes" ],
2979                 [ ac_cv_have_getopt_optreset="no" ]
2980         )
2981 ])
2982 if test "x$ac_cv_have_getopt_optreset" = "xyes" ; then
2983         AC_DEFINE(HAVE_GETOPT_OPTRESET, 1,
2984                 [Define if your getopt(3) defines and uses optreset])
2985 fi
2986
2987 AC_CACHE_CHECK([if libc defines sys_errlist], ac_cv_libc_defines_sys_errlist, [
2988         AC_TRY_LINK([],
2989                 [ extern const char *const sys_errlist[]; printf("%s", sys_errlist[0]);],
2990                 [ ac_cv_libc_defines_sys_errlist="yes" ],
2991                 [ ac_cv_libc_defines_sys_errlist="no" ]
2992         )
2993 ])
2994 if test "x$ac_cv_libc_defines_sys_errlist" = "xyes" ; then
2995         AC_DEFINE(HAVE_SYS_ERRLIST, 1,
2996                 [Define if your system defines sys_errlist[]])
2997 fi
2998
2999
3000 AC_CACHE_CHECK([if libc defines sys_nerr], ac_cv_libc_defines_sys_nerr, [
3001         AC_TRY_LINK([],
3002                 [ extern int sys_nerr; printf("%i", sys_nerr);],
3003                 [ ac_cv_libc_defines_sys_nerr="yes" ],
3004                 [ ac_cv_libc_defines_sys_nerr="no" ]
3005         )
3006 ])
3007 if test "x$ac_cv_libc_defines_sys_nerr" = "xyes" ; then
3008         AC_DEFINE(HAVE_SYS_NERR, 1, [Define if your system defines sys_nerr])
3009 fi
3010
3011 SCARD_MSG="no"
3012 # Check whether user wants sectok support
3013 AC_ARG_WITH(sectok,
3014         [  --with-sectok           Enable smartcard support using libsectok],
3015         [
3016                 if test "x$withval" != "xno" ; then
3017                         if test "x$withval" != "xyes" ; then
3018                                 CPPFLAGS="$CPPFLAGS -I${withval}"
3019                                 LDFLAGS="$LDFLAGS -L${withval}"
3020                                 if test ! -z "$need_dash_r" ; then
3021                                         LDFLAGS="$LDFLAGS -R${withval}"
3022                                 fi
3023                                 if test ! -z "$blibpath" ; then
3024                                         blibpath="$blibpath:${withval}"
3025                                 fi
3026                         fi
3027                         AC_CHECK_HEADERS(sectok.h)
3028                         if test "$ac_cv_header_sectok_h" != yes; then
3029                                 AC_MSG_ERROR(Can't find sectok.h)
3030                         fi
3031                         AC_CHECK_LIB(sectok, sectok_open)
3032                         if test "$ac_cv_lib_sectok_sectok_open" != yes; then
3033                                 AC_MSG_ERROR(Can't find libsectok)
3034                         fi
3035                         AC_DEFINE(SMARTCARD, 1,
3036                                 [Define if you want smartcard support])
3037                         AC_DEFINE(USE_SECTOK, 1,
3038                                 [Define if you want smartcard support
3039                                 using sectok])
3040                         SCARD_MSG="yes, using sectok"
3041                 fi
3042         ]
3043 )
3044
3045 # Check whether user wants OpenSC support
3046 OPENSC_CONFIG="no"
3047 AC_ARG_WITH(opensc,
3048         [  --with-opensc[[=PFX]]     Enable smartcard support using OpenSC (optionally in PATH)],
3049         [
3050             if test "x$withval" != "xno" ; then
3051                 if test "x$withval" != "xyes" ; then
3052                         OPENSC_CONFIG=$withval/bin/opensc-config
3053                 else
3054                         AC_PATH_PROG(OPENSC_CONFIG, opensc-config, no)
3055                 fi
3056                 if test "$OPENSC_CONFIG" != "no"; then
3057                         LIBOPENSC_CFLAGS=`$OPENSC_CONFIG --cflags`
3058                         LIBOPENSC_LIBS=`$OPENSC_CONFIG --libs`
3059                         CPPFLAGS="$CPPFLAGS $LIBOPENSC_CFLAGS"
3060                         LDFLAGS="$LDFLAGS $LIBOPENSC_LIBS"
3061                         AC_DEFINE(SMARTCARD)
3062                         AC_DEFINE(USE_OPENSC, 1,
3063                                 [Define if you want smartcard support
3064                                 using OpenSC])
3065                         SCARD_MSG="yes, using OpenSC"
3066                 fi
3067             fi
3068         ]
3069 )
3070
3071 # Check libraries needed by DNS fingerprint support
3072 AC_SEARCH_LIBS(getrrsetbyname, resolv,
3073         [AC_DEFINE(HAVE_GETRRSETBYNAME, 1,
3074                 [Define if getrrsetbyname() exists])],
3075         [
3076                 # Needed by our getrrsetbyname()
3077                 AC_SEARCH_LIBS(res_query, resolv)
3078                 AC_SEARCH_LIBS(dn_expand, resolv)
3079                 AC_MSG_CHECKING(if res_query will link)
3080                 AC_TRY_LINK_FUNC(res_query, AC_MSG_RESULT(yes),
3081                    [AC_MSG_RESULT(no)
3082                     saved_LIBS="$LIBS"
3083                     LIBS="$LIBS -lresolv"
3084                     AC_MSG_CHECKING(for res_query in -lresolv)
3085                     AC_LINK_IFELSE([
3086 #include <resolv.h>
3087 int main()
3088 {
3089         res_query (0, 0, 0, 0, 0);
3090         return 0;
3091 }
3092                         ],
3093                         [LIBS="$LIBS -lresolv"
3094                          AC_MSG_RESULT(yes)],
3095                         [LIBS="$saved_LIBS"
3096                          AC_MSG_RESULT(no)])
3097                     ])
3098                 AC_CHECK_FUNCS(_getshort _getlong)
3099                 AC_CHECK_DECLS([_getshort, _getlong], , ,
3100                     [#include <sys/types.h>
3101                     #include <arpa/nameser.h>])
3102                 AC_CHECK_MEMBER(HEADER.ad,
3103                         [AC_DEFINE(HAVE_HEADER_AD, 1,
3104                             [Define if HEADER.ad exists in arpa/nameser.h])],,
3105                         [#include <arpa/nameser.h>])
3106         ])
3107
3108 # Check whether user wants SELinux support
3109 SELINUX_MSG="no"
3110 LIBSELINUX=""
3111 AC_ARG_WITH(selinux,
3112         [  --with-selinux   Enable SELinux support],
3113         [ if test "x$withval" != "xno" ; then
3114                 AC_DEFINE(WITH_SELINUX,1,[Define if you want SELinux support.])
3115                 SELINUX_MSG="yes"
3116                 AC_CHECK_HEADER([selinux/selinux.h], ,
3117                     AC_MSG_ERROR(SELinux support requires selinux.h header))
3118                 AC_CHECK_LIB(selinux, setexeccon, [ LIBSELINUX="-lselinux" ],
3119                     AC_MSG_ERROR(SELinux support requires libselinux library))
3120                 AC_CHECK_FUNCS(getseuserbyname get_default_context_with_level)
3121         fi ]
3122 )
3123 AC_SUBST(LIBSELINUX)
3124
3125 # Check whether user wants Kerberos 5 support
3126 KRB5_MSG="no"
3127 AC_ARG_WITH(kerberos5,
3128         [  --with-kerberos5=PATH   Enable Kerberos 5 support],
3129         [ if test "x$withval" != "xno" ; then
3130                 if test "x$withval" = "xyes" ; then
3131                         KRB5ROOT="/usr/local"
3132                 else
3133                         KRB5ROOT=${withval}
3134                 fi
3135
3136                 AC_DEFINE(KRB5, 1, [Define if you want Kerberos 5 support])
3137                 KRB5_MSG="yes"
3138
3139                 AC_MSG_CHECKING(for krb5-config)
3140                 if test -x  $KRB5ROOT/bin/krb5-config ; then
3141                         KRB5CONF=$KRB5ROOT/bin/krb5-config
3142                         AC_MSG_RESULT($KRB5CONF)
3143
3144                         AC_MSG_CHECKING(for gssapi support)
3145                         if $KRB5CONF | grep gssapi >/dev/null ; then
3146                                 AC_MSG_RESULT(yes)
3147                                 AC_DEFINE(GSSAPI, 1,
3148                                         [Define this if you want GSSAPI
3149                                         support in the version 2 protocol])
3150                                 k5confopts=gssapi
3151                         else
3152                                 AC_MSG_RESULT(no)
3153                                 k5confopts=""
3154                         fi
3155                         K5CFLAGS="`$KRB5CONF --cflags $k5confopts`"
3156                         K5LIBS="`$KRB5CONF --libs $k5confopts`"
3157                         CPPFLAGS="$CPPFLAGS $K5CFLAGS"
3158                         AC_MSG_CHECKING(whether we are using Heimdal)
3159                         AC_TRY_COMPILE([ #include <krb5.h> ],
3160                                        [ char *tmp = heimdal_version; ],
3161                                        [ AC_MSG_RESULT(yes)
3162                                          AC_DEFINE(HEIMDAL, 1,
3163                                         [Define this if you are using the
3164                                         Heimdal version of Kerberos V5]) ],
3165                                          AC_MSG_RESULT(no)
3166                         )
3167                 else
3168                         AC_MSG_RESULT(no)
3169                         CPPFLAGS="$CPPFLAGS -I${KRB5ROOT}/include"
3170                         LDFLAGS="$LDFLAGS -L${KRB5ROOT}/lib"
3171                         AC_MSG_CHECKING(whether we are using Heimdal)
3172                         AC_TRY_COMPILE([ #include <krb5.h> ],
3173                                        [ char *tmp = heimdal_version; ],
3174                                        [ AC_MSG_RESULT(yes)
3175                                          AC_DEFINE(HEIMDAL)
3176                                          K5LIBS="-lkrb5 -ldes"
3177                                          K5LIBS="$K5LIBS -lcom_err -lasn1"
3178                                          AC_CHECK_LIB(roken, net_write,
3179                                            [K5LIBS="$K5LIBS -lroken"])
3180                                        ],
3181                                        [ AC_MSG_RESULT(no)
3182                                          K5LIBS="-lkrb5 -lk5crypto -lcom_err"
3183                                        ]
3184                         )
3185                         AC_SEARCH_LIBS(dn_expand, resolv)
3186
3187                         AC_CHECK_LIB(gssapi,gss_init_sec_context,
3188                                 [ AC_DEFINE(GSSAPI)
3189                                   K5LIBS="-lgssapi $K5LIBS" ],
3190                                 [ AC_CHECK_LIB(gssapi_krb5,gss_init_sec_context,
3191                                         [ AC_DEFINE(GSSAPI)
3192                                           K5LIBS="-lgssapi_krb5 $K5LIBS" ],
3193                                         AC_MSG_WARN([Cannot find any suitable gss-api library - build may fail]),
3194                                         $K5LIBS)
3195                                 ],
3196                                 $K5LIBS)
3197
3198                         AC_CHECK_HEADER(gssapi.h, ,
3199                                 [ unset ac_cv_header_gssapi_h
3200                                   CPPFLAGS="$CPPFLAGS -I${KRB5ROOT}/include/gssapi"
3201                                   AC_CHECK_HEADERS(gssapi.h, ,
3202                                         AC_MSG_WARN([Cannot find any suitable gss-api header - build may fail])
3203                                   )
3204                                 ]
3205                         )
3206
3207                         oldCPP="$CPPFLAGS"
3208                         CPPFLAGS="$CPPFLAGS -I${KRB5ROOT}/include/gssapi"
3209                         AC_CHECK_HEADER(gssapi_krb5.h, ,
3210                                         [ CPPFLAGS="$oldCPP" ])
3211
3212                 fi
3213                 if test ! -z "$need_dash_r" ; then
3214                         LDFLAGS="$LDFLAGS -R${KRB5ROOT}/lib"
3215                 fi
3216                 if test ! -z "$blibpath" ; then
3217                         blibpath="$blibpath:${KRB5ROOT}/lib"
3218                 fi
3219
3220                 AC_CHECK_HEADERS(gssapi.h gssapi/gssapi.h)
3221                 AC_CHECK_HEADERS(gssapi_krb5.h gssapi/gssapi_krb5.h)
3222                 AC_CHECK_HEADERS(gssapi_generic.h gssapi/gssapi_generic.h)
3223
3224                 LIBS="$LIBS $K5LIBS"
3225                 AC_SEARCH_LIBS(k_hasafs, kafs, AC_DEFINE(USE_AFS, 1,
3226                         [Define this if you want to use libkafs' AFS support]))
3227         fi
3228         ]
3229 )
3230
3231 # Looking for programs, paths and files
3232
3233 PRIVSEP_PATH=/var/empty
3234 AC_ARG_WITH(privsep-path,
3235         [  --with-privsep-path=xxx Path for privilege separation chroot (default=/var/empty)],
3236         [
3237                 if test -n "$withval"  &&  test "x$withval" != "xno"  &&  \
3238                     test "x${withval}" != "xyes"; then
3239                         PRIVSEP_PATH=$withval
3240                 fi
3241         ]
3242 )
3243 AC_SUBST(PRIVSEP_PATH)
3244
3245 AC_ARG_WITH(xauth,
3246         [  --with-xauth=PATH       Specify path to xauth program ],
3247         [
3248                 if test -n "$withval"  &&  test "x$withval" != "xno"  &&  \
3249                     test "x${withval}" != "xyes"; then
3250                         xauth_path=$withval
3251                 fi
3252         ],
3253         [
3254                 TestPath="$PATH"
3255                 TestPath="${TestPath}${PATH_SEPARATOR}/usr/X/bin"
3256                 TestPath="${TestPath}${PATH_SEPARATOR}/usr/bin/X11"
3257                 TestPath="${TestPath}${PATH_SEPARATOR}/usr/X11R6/bin"
3258                 TestPath="${TestPath}${PATH_SEPARATOR}/usr/openwin/bin"
3259                 AC_PATH_PROG(xauth_path, xauth, , $TestPath)
3260                 if (test ! -z "$xauth_path" && test -x "/usr/openwin/bin/xauth") ; then
3261                         xauth_path="/usr/openwin/bin/xauth"
3262                 fi
3263         ]
3264 )
3265
3266 STRIP_OPT=-s
3267 AC_ARG_ENABLE(strip,
3268         [  --disable-strip         Disable calling strip(1) on install],
3269         [
3270                 if test "x$enableval" = "xno" ; then
3271                         STRIP_OPT=
3272                 fi
3273         ]
3274 )
3275 AC_SUBST(STRIP_OPT)
3276
3277 if test -z "$xauth_path" ; then
3278         XAUTH_PATH="undefined"
3279         AC_SUBST(XAUTH_PATH)
3280 else
3281         AC_DEFINE_UNQUOTED(XAUTH_PATH, "$xauth_path",
3282                 [Define if xauth is found in your path])
3283         XAUTH_PATH=$xauth_path
3284         AC_SUBST(XAUTH_PATH)
3285 fi
3286
3287 # Check for mail directory (last resort if we cannot get it from headers)
3288 if test ! -z "$MAIL" ; then
3289         maildir=`dirname $MAIL`
3290         AC_DEFINE_UNQUOTED(MAIL_DIRECTORY, "$maildir",
3291                 [Set this to your mail directory if you don't have maillock.h])
3292 fi
3293
3294 if test ! -z "$cross_compiling" && test "x$cross_compiling" = "xyes"; then
3295         AC_MSG_WARN([cross compiling: Disabling /dev/ptmx test])
3296         disable_ptmx_check=yes
3297 fi
3298 if test -z "$no_dev_ptmx" ; then
3299         if test "x$disable_ptmx_check" != "xyes" ; then
3300                 AC_CHECK_FILE("/dev/ptmx",
3301                         [
3302                                 AC_DEFINE_UNQUOTED(HAVE_DEV_PTMX, 1,
3303                                         [Define if you have /dev/ptmx])
3304                                 have_dev_ptmx=1
3305                         ]
3306                 )
3307         fi
3308 fi
3309
3310 if test ! -z "$cross_compiling" && test "x$cross_compiling" != "xyes"; then
3311         AC_CHECK_FILE("/dev/ptc",
3312                 [
3313                         AC_DEFINE_UNQUOTED(HAVE_DEV_PTS_AND_PTC, 1,
3314                                 [Define if you have /dev/ptc])
3315                         have_dev_ptc=1
3316                 ]
3317         )
3318 else
3319         AC_MSG_WARN([cross compiling: Disabling /dev/ptc test])
3320 fi
3321
3322 # Options from here on. Some of these are preset by platform above
3323 AC_ARG_WITH(mantype,
3324         [  --with-mantype=man|cat|doc  Set man page type],
3325         [
3326                 case "$withval" in
3327                 man|cat|doc)
3328                         MANTYPE=$withval
3329                         ;;
3330                 *)
3331                         AC_MSG_ERROR(invalid man type: $withval)
3332                         ;;
3333                 esac
3334         ]
3335 )
3336 if test -z "$MANTYPE"; then
3337         TestPath="/usr/bin${PATH_SEPARATOR}/usr/ucb"
3338         AC_PATH_PROGS(NROFF, nroff awf, /bin/false, $TestPath)
3339         if ${NROFF} -mdoc ${srcdir}/ssh.1 >/dev/null 2>&1; then
3340                 MANTYPE=doc
3341         elif ${NROFF} -man ${srcdir}/ssh.1 >/dev/null 2>&1; then
3342                 MANTYPE=man
3343         else
3344                 MANTYPE=cat
3345         fi
3346 fi
3347 AC_SUBST(MANTYPE)
3348 if test "$MANTYPE" = "doc"; then
3349         mansubdir=man;
3350 else
3351         mansubdir=$MANTYPE;
3352 fi
3353 AC_SUBST(mansubdir)
3354
3355 # Check whether to enable MD5 passwords
3356 MD5_MSG="no"
3357 AC_ARG_WITH(md5-passwords,
3358         [  --with-md5-passwords    Enable use of MD5 passwords],
3359         [
3360                 if test "x$withval" != "xno" ; then
3361                         AC_DEFINE(HAVE_MD5_PASSWORDS, 1,
3362                                 [Define if you want to allow MD5 passwords])
3363                         MD5_MSG="yes"
3364                 fi
3365         ]
3366 )
3367
3368 # Whether to disable shadow password support
3369 AC_ARG_WITH(shadow,
3370         [  --without-shadow        Disable shadow password support],
3371         [
3372                 if test "x$withval" = "xno" ; then
3373                         AC_DEFINE(DISABLE_SHADOW)
3374                         disable_shadow=yes
3375                 fi
3376         ]
3377 )
3378
3379 if test -z "$disable_shadow" ; then
3380         AC_MSG_CHECKING([if the systems has expire shadow information])
3381         AC_TRY_COMPILE(
3382         [
3383 #include <sys/types.h>
3384 #include <shadow.h>
3385         struct spwd sp;
3386         ],[ sp.sp_expire = sp.sp_lstchg = sp.sp_inact = 0; ],
3387         [ sp_expire_available=yes ], []
3388         )
3389
3390         if test "x$sp_expire_available" = "xyes" ; then
3391                 AC_MSG_RESULT(yes)
3392                 AC_DEFINE(HAS_SHADOW_EXPIRE, 1,
3393                     [Define if you want to use shadow password expire field])
3394         else
3395                 AC_MSG_RESULT(no)
3396         fi
3397 fi
3398
3399 # Use ip address instead of hostname in $DISPLAY
3400 if test ! -z "$IPADDR_IN_DISPLAY" ; then
3401         DISPLAY_HACK_MSG="yes"
3402         AC_DEFINE(IPADDR_IN_DISPLAY, 1,
3403                 [Define if you need to use IP address
3404                 instead of hostname in $DISPLAY])
3405 else
3406         DISPLAY_HACK_MSG="no"
3407         AC_ARG_WITH(ipaddr-display,
3408                 [  --with-ipaddr-display   Use ip address instead of hostname in \$DISPLAY],
3409                 [
3410                         if test "x$withval" != "xno" ; then
3411                                 AC_DEFINE(IPADDR_IN_DISPLAY)
3412                                 DISPLAY_HACK_MSG="yes"
3413                         fi
3414                 ]
3415         )
3416 fi
3417
3418 # check for /etc/default/login and use it if present.
3419 AC_ARG_ENABLE(etc-default-login,
3420         [  --disable-etc-default-login Disable using PATH from /etc/default/login [no]],
3421         [ if test "x$enableval" = "xno"; then
3422                 AC_MSG_NOTICE([/etc/default/login handling disabled])
3423                 etc_default_login=no
3424           else
3425                 etc_default_login=yes
3426           fi ],
3427         [ if test ! -z "$cross_compiling" && test "x$cross_compiling" = "xyes";
3428           then
3429                 AC_MSG_WARN([cross compiling: not checking /etc/default/login])
3430                 etc_default_login=no
3431           else
3432                 etc_default_login=yes
3433           fi ]
3434 )
3435
3436 if test "x$etc_default_login" != "xno"; then
3437         AC_CHECK_FILE("/etc/default/login",
3438             [ external_path_file=/etc/default/login ])
3439         if test "x$external_path_file" = "x/etc/default/login"; then
3440                 AC_DEFINE(HAVE_ETC_DEFAULT_LOGIN, 1,
3441                         [Define if your system has /etc/default/login])
3442         fi
3443 fi
3444
3445 dnl BSD systems use /etc/login.conf so --with-default-path= has no effect
3446 if test $ac_cv_func_login_getcapbool = "yes" && \
3447         test $ac_cv_header_login_cap_h = "yes" ; then
3448         external_path_file=/etc/login.conf
3449 fi
3450
3451 # Whether to mess with the default path
3452 SERVER_PATH_MSG="(default)"
3453 AC_ARG_WITH(default-path,
3454         [  --with-default-path=    Specify default \$PATH environment for server],
3455         [
3456                 if test "x$external_path_file" = "x/etc/login.conf" ; then
3457                         AC_MSG_WARN([
3458 --with-default-path=PATH has no effect on this system.
3459 Edit /etc/login.conf instead.])
3460                 elif test "x$withval" != "xno" ; then
3461                         if test ! -z "$external_path_file" ; then
3462                                 AC_MSG_WARN([
3463 --with-default-path=PATH will only be used if PATH is not defined in
3464 $external_path_file .])
3465                         fi
3466                         user_path="$withval"
3467                         SERVER_PATH_MSG="$withval"
3468                 fi
3469         ],
3470         [ if test "x$external_path_file" = "x/etc/login.conf" ; then
3471                 AC_MSG_WARN([Make sure the path to scp is in /etc/login.conf])
3472         else
3473                 if test ! -z "$external_path_file" ; then
3474                         AC_MSG_WARN([
3475 If PATH is defined in $external_path_file, ensure the path to scp is included,
3476 otherwise scp will not work.])
3477                 fi
3478                 AC_RUN_IFELSE(
3479                         [AC_LANG_SOURCE([[
3480 /* find out what STDPATH is */
3481 #include <stdio.h>
3482 #ifdef HAVE_PATHS_H
3483 # include <paths.h>
3484 #endif
3485 #ifndef _PATH_STDPATH
3486 # ifdef _PATH_USERPATH  /* Irix */
3487 #  define _PATH_STDPATH _PATH_USERPATH
3488 # else
3489 #  define _PATH_STDPATH "/usr/bin:/bin:/usr/sbin:/sbin"
3490 # endif
3491 #endif
3492 #include <sys/types.h>
3493 #include <sys/stat.h>
3494 #include <fcntl.h>
3495 #define DATA "conftest.stdpath"
3496
3497 main()
3498 {
3499         FILE *fd;
3500         int rc;
3501
3502         fd = fopen(DATA,"w");
3503         if(fd == NULL)
3504                 exit(1);
3505
3506         if ((rc = fprintf(fd,"%s", _PATH_STDPATH)) < 0)
3507                 exit(1);
3508
3509         exit(0);
3510 }
3511                 ]])],
3512                 [ user_path=`cat conftest.stdpath` ],
3513                 [ user_path="/usr/bin:/bin:/usr/sbin:/sbin" ],
3514                 [ user_path="/usr/bin:/bin:/usr/sbin:/sbin" ]
3515         )
3516 # make sure $bindir is in USER_PATH so scp will work
3517                 t_bindir=`eval echo ${bindir}`
3518                 case $t_bindir in
3519                         NONE/*) t_bindir=`echo $t_bindir | sed "s~NONE~$prefix~"` ;;
3520                 esac
3521                 case $t_bindir in
3522                         NONE/*) t_bindir=`echo $t_bindir | sed "s~NONE~$ac_default_prefix~"` ;;
3523                 esac
3524                 echo $user_path | grep ":$t_bindir"  > /dev/null 2>&1
3525                 if test $? -ne 0  ; then
3526                         echo $user_path | grep "^$t_bindir"  > /dev/null 2>&1
3527                         if test $? -ne 0  ; then
3528                                 user_path=$user_path:$t_bindir
3529                                 AC_MSG_RESULT(Adding $t_bindir to USER_PATH so scp will work)
3530                         fi
3531                 fi
3532         fi ]
3533 )
3534 if test "x$external_path_file" != "x/etc/login.conf" ; then
3535         AC_DEFINE_UNQUOTED(USER_PATH, "$user_path", [Specify default $PATH])
3536         AC_SUBST(user_path)
3537 fi
3538
3539 # Set superuser path separately to user path
3540 AC_ARG_WITH(superuser-path,
3541         [  --with-superuser-path=  Specify different path for super-user],
3542         [
3543                 if test -n "$withval"  &&  test "x$withval" != "xno"  &&  \
3544                     test "x${withval}" != "xyes"; then
3545                         AC_DEFINE_UNQUOTED(SUPERUSER_PATH, "$withval",
3546                                 [Define if you want a different $PATH
3547                                 for the superuser])
3548                         superuser_path=$withval
3549                 fi
3550         ]
3551 )
3552
3553
3554 AC_MSG_CHECKING([if we need to convert IPv4 in IPv6-mapped addresses])
3555 IPV4_IN6_HACK_MSG="no"
3556 AC_ARG_WITH(4in6,
3557         [  --with-4in6             Check for and convert IPv4 in IPv6 mapped addresses],
3558         [
3559                 if test "x$withval" != "xno" ; then
3560                         AC_MSG_RESULT(yes)
3561                         AC_DEFINE(IPV4_IN_IPV6, 1,
3562                                 [Detect IPv4 in IPv6 mapped addresses
3563                                 and treat as IPv4])
3564                         IPV4_IN6_HACK_MSG="yes"
3565                 else
3566                         AC_MSG_RESULT(no)
3567                 fi
3568         ],[
3569                 if test "x$inet6_default_4in6" = "xyes"; then
3570                         AC_MSG_RESULT([yes (default)])
3571                         AC_DEFINE(IPV4_IN_IPV6)
3572                         IPV4_IN6_HACK_MSG="yes"
3573                 else
3574                         AC_MSG_RESULT([no (default)])
3575                 fi
3576         ]
3577 )
3578
3579 # Whether to enable BSD auth support
3580 BSD_AUTH_MSG=no
3581 AC_ARG_WITH(bsd-auth,
3582         [  --with-bsd-auth         Enable BSD auth support],
3583         [
3584                 if test "x$withval" != "xno" ; then
3585                         AC_DEFINE(BSD_AUTH, 1,
3586                                 [Define if you have BSD auth support])
3587                         BSD_AUTH_MSG=yes
3588                 fi
3589         ]
3590 )
3591
3592 # Where to place sshd.pid
3593 piddir=/var/run
3594 # make sure the directory exists
3595 if test ! -d $piddir ; then
3596         piddir=`eval echo ${sysconfdir}`
3597         case $piddir in
3598                 NONE/*) piddir=`echo $piddir | sed "s~NONE~$ac_default_prefix~"` ;;
3599         esac
3600 fi
3601
3602 AC_ARG_WITH(pid-dir,
3603         [  --with-pid-dir=PATH     Specify location of ssh.pid file],
3604         [
3605                 if test -n "$withval"  &&  test "x$withval" != "xno"  &&  \
3606                     test "x${withval}" != "xyes"; then
3607                         piddir=$withval
3608                         if test ! -d $piddir ; then
3609                         AC_MSG_WARN([** no $piddir directory on this system **])
3610                         fi
3611                 fi
3612         ]
3613 )
3614
3615 AC_DEFINE_UNQUOTED(_PATH_SSH_PIDDIR, "$piddir", [Specify location of ssh.pid])
3616 AC_SUBST(piddir)
3617
3618 dnl allow user to disable some login recording features
3619 AC_ARG_ENABLE(lastlog,
3620         [  --disable-lastlog       disable use of lastlog even if detected [no]],
3621         [
3622                 if test "x$enableval" = "xno" ; then
3623                         AC_DEFINE(DISABLE_LASTLOG)
3624                 fi
3625         ]
3626 )
3627 AC_ARG_ENABLE(utmp,
3628         [  --disable-utmp          disable use of utmp even if detected [no]],
3629         [
3630                 if test "x$enableval" = "xno" ; then
3631                         AC_DEFINE(DISABLE_UTMP)
3632                 fi
3633         ]
3634 )
3635 AC_ARG_ENABLE(utmpx,
3636         [  --disable-utmpx         disable use of utmpx even if detected [no]],
3637         [
3638                 if test "x$enableval" = "xno" ; then
3639                         AC_DEFINE(DISABLE_UTMPX, 1,
3640                                 [Define if you don't want to use utmpx])
3641                 fi
3642         ]
3643 )
3644 AC_ARG_ENABLE(wtmp,
3645         [  --disable-wtmp          disable use of wtmp even if detected [no]],
3646         [
3647                 if test "x$enableval" = "xno" ; then
3648                         AC_DEFINE(DISABLE_WTMP)
3649                 fi
3650         ]
3651 )
3652 AC_ARG_ENABLE(wtmpx,
3653         [  --disable-wtmpx         disable use of wtmpx even if detected [no]],
3654         [
3655                 if test "x$enableval" = "xno" ; then
3656                         AC_DEFINE(DISABLE_WTMPX, 1,
3657                                 [Define if you don't want to use wtmpx])
3658                 fi
3659         ]
3660 )
3661 AC_ARG_ENABLE(libutil,
3662         [  --disable-libutil       disable use of libutil (login() etc.) [no]],
3663         [
3664                 if test "x$enableval" = "xno" ; then
3665                         AC_DEFINE(DISABLE_LOGIN)
3666                 fi
3667         ]
3668 )
3669 AC_ARG_ENABLE(pututline,
3670         [  --disable-pututline     disable use of pututline() etc. ([uw]tmp) [no]],
3671         [
3672                 if test "x$enableval" = "xno" ; then
3673                         AC_DEFINE(DISABLE_PUTUTLINE, 1,
3674                                 [Define if you don't want to use pututline()
3675                                 etc. to write [uw]tmp])
3676                 fi
3677         ]
3678 )
3679 AC_ARG_ENABLE(pututxline,
3680         [  --disable-pututxline    disable use of pututxline() etc. ([uw]tmpx) [no]],
3681         [
3682                 if test "x$enableval" = "xno" ; then
3683                         AC_DEFINE(DISABLE_PUTUTXLINE, 1,
3684                                 [Define if you don't want to use pututxline()
3685                                 etc. to write [uw]tmpx])
3686                 fi
3687         ]
3688 )
3689 AC_ARG_WITH(lastlog,
3690   [  --with-lastlog=FILE|DIR specify lastlog location [common locations]],
3691         [
3692                 if test "x$withval" = "xno" ; then
3693                         AC_DEFINE(DISABLE_LASTLOG)
3694                 elif test -n "$withval"  &&  test "x${withval}" != "xyes"; then
3695                         conf_lastlog_location=$withval
3696                 fi
3697         ]
3698 )
3699
3700 dnl lastlog, [uw]tmpx? detection
3701 dnl  NOTE: set the paths in the platform section to avoid the
3702 dnl   need for command-line parameters
3703 dnl lastlog and [uw]tmp are subject to a file search if all else fails
3704
3705 dnl lastlog detection
3706 dnl  NOTE: the code itself will detect if lastlog is a directory
3707 AC_MSG_CHECKING([if your system defines LASTLOG_FILE])
3708 AC_TRY_COMPILE([
3709 #include <sys/types.h>
3710 #include <utmp.h>
3711 #ifdef HAVE_LASTLOG_H
3712 #  include <lastlog.h>
3713 #endif
3714 #ifdef HAVE_PATHS_H
3715 #  include <paths.h>
3716 #endif
3717 #ifdef HAVE_LOGIN_H
3718 # include <login.h>
3719 #endif
3720         ],
3721         [ char *lastlog = LASTLOG_FILE; ],
3722         [ AC_MSG_RESULT(yes) ],
3723         [
3724                 AC_MSG_RESULT(no)
3725                 AC_MSG_CHECKING([if your system defines _PATH_LASTLOG])
3726                 AC_TRY_COMPILE([
3727 #include <sys/types.h>
3728 #include <utmp.h>
3729 #ifdef HAVE_LASTLOG_H
3730 #  include <lastlog.h>
3731 #endif
3732 #ifdef HAVE_PATHS_H
3733 #  include <paths.h>
3734 #endif
3735                 ],
3736                 [ char *lastlog = _PATH_LASTLOG; ],
3737                 [ AC_MSG_RESULT(yes) ],
3738                 [
3739                         AC_MSG_RESULT(no)
3740                         system_lastlog_path=no
3741                 ])
3742         ]
3743 )
3744
3745 if test -z "$conf_lastlog_location"; then
3746         if test x"$system_lastlog_path" = x"no" ; then
3747                 for f in /var/log/lastlog /usr/adm/lastlog /var/adm/lastlog /etc/security/lastlog ; do
3748                                 if (test -d "$f" || test -f "$f") ; then
3749                                         conf_lastlog_location=$f
3750                                 fi
3751                 done
3752                 if test -z "$conf_lastlog_location"; then
3753                         AC_MSG_WARN([** Cannot find lastlog **])
3754                         dnl Don't define DISABLE_LASTLOG - that means we don't try wtmp/wtmpx
3755                 fi
3756         fi
3757 fi
3758
3759 if test -n "$conf_lastlog_location"; then
3760         AC_DEFINE_UNQUOTED(CONF_LASTLOG_FILE, "$conf_lastlog_location",
3761                 [Define if you want to specify the path to your lastlog file])
3762 fi
3763
3764 dnl utmp detection
3765 AC_MSG_CHECKING([if your system defines UTMP_FILE])
3766 AC_TRY_COMPILE([
3767 #include <sys/types.h>
3768 #include <utmp.h>
3769 #ifdef HAVE_PATHS_H
3770 #  include <paths.h>
3771 #endif
3772         ],
3773         [ char *utmp = UTMP_FILE; ],
3774         [ AC_MSG_RESULT(yes) ],
3775         [ AC_MSG_RESULT(no)
3776           system_utmp_path=no ]
3777 )
3778 if test -z "$conf_utmp_location"; then
3779         if test x"$system_utmp_path" = x"no" ; then
3780                 for f in /etc/utmp /usr/adm/utmp /var/run/utmp; do
3781                         if test -f $f ; then
3782                                 conf_utmp_location=$f
3783                         fi
3784                 done
3785                 if test -z "$conf_utmp_location"; then
3786                         AC_DEFINE(DISABLE_UTMP)
3787                 fi
3788         fi
3789 fi
3790 if test -n "$conf_utmp_location"; then
3791         AC_DEFINE_UNQUOTED(CONF_UTMP_FILE, "$conf_utmp_location",
3792                 [Define if you want to specify the path to your utmp file])
3793 fi
3794
3795 dnl wtmp detection
3796 AC_MSG_CHECKING([if your system defines WTMP_FILE])
3797 AC_TRY_COMPILE([
3798 #include <sys/types.h>
3799 #include <utmp.h>
3800 #ifdef HAVE_PATHS_H
3801 #  include <paths.h>
3802 #endif
3803         ],
3804         [ char *wtmp = WTMP_FILE; ],
3805         [ AC_MSG_RESULT(yes) ],
3806         [ AC_MSG_RESULT(no)
3807           system_wtmp_path=no ]
3808 )
3809 if test -z "$conf_wtmp_location"; then
3810         if test x"$system_wtmp_path" = x"no" ; then
3811                 for f in /usr/adm/wtmp /var/log/wtmp; do
3812                         if test -f $f ; then
3813                                 conf_wtmp_location=$f
3814                         fi
3815                 done
3816                 if test -z "$conf_wtmp_location"; then
3817                         AC_DEFINE(DISABLE_WTMP)
3818                 fi
3819         fi
3820 fi
3821 if test -n "$conf_wtmp_location"; then
3822         AC_DEFINE_UNQUOTED(CONF_WTMP_FILE, "$conf_wtmp_location",
3823                 [Define if you want to specify the path to your wtmp file])
3824 fi
3825
3826
3827 dnl utmpx detection - I don't know any system so perverse as to require
3828 dnl  utmpx, but not define UTMPX_FILE (ditto wtmpx.) No doubt it's out
3829 dnl  there, though.
3830 AC_MSG_CHECKING([if your system defines UTMPX_FILE])
3831 AC_TRY_COMPILE([
3832 #include <sys/types.h>
3833 #include <utmp.h>
3834 #ifdef HAVE_UTMPX_H
3835 #include <utmpx.h>
3836 #endif
3837 #ifdef HAVE_PATHS_H
3838 #  include <paths.h>
3839 #endif
3840         ],
3841         [ char *utmpx = UTMPX_FILE; ],
3842         [ AC_MSG_RESULT(yes) ],
3843         [ AC_MSG_RESULT(no)
3844           system_utmpx_path=no ]
3845 )
3846 if test -z "$conf_utmpx_location"; then
3847         if test x"$system_utmpx_path" = x"no" ; then
3848                 AC_DEFINE(DISABLE_UTMPX)
3849         fi
3850 else
3851         AC_DEFINE_UNQUOTED(CONF_UTMPX_FILE, "$conf_utmpx_location",
3852                 [Define if you want to specify the path to your utmpx file])
3853 fi
3854
3855 dnl wtmpx detection
3856 AC_MSG_CHECKING([if your system defines WTMPX_FILE])
3857 AC_TRY_COMPILE([
3858 #include <sys/types.h>
3859 #include <utmp.h>
3860 #ifdef HAVE_UTMPX_H
3861 #include <utmpx.h>
3862 #endif
3863 #ifdef HAVE_PATHS_H
3864 #  include <paths.h>
3865 #endif
3866         ],
3867         [ char *wtmpx = WTMPX_FILE; ],
3868         [ AC_MSG_RESULT(yes) ],
3869         [ AC_MSG_RESULT(no)
3870           system_wtmpx_path=no ]
3871 )
3872 if test -z "$conf_wtmpx_location"; then
3873         if test x"$system_wtmpx_path" = x"no" ; then
3874                 AC_DEFINE(DISABLE_WTMPX)
3875         fi
3876 else
3877         AC_DEFINE_UNQUOTED(CONF_WTMPX_FILE, "$conf_wtmpx_location",
3878                 [Define if you want to specify the path to your wtmpx file])
3879 fi
3880
3881
3882 if test ! -z "$blibpath" ; then
3883         LDFLAGS="$LDFLAGS $blibflags$blibpath"
3884         AC_MSG_WARN([Please check and edit blibpath in LDFLAGS in Makefile])
3885 fi
3886
3887 dnl Adding -Werror to CFLAGS early prevents configure tests from running.
3888 dnl Add now.
3889 CFLAGS="$CFLAGS $werror_flags"
3890
3891 AC_EXEEXT
3892 AC_CONFIG_FILES([Makefile buildpkg.sh opensshd.init openbsd-compat/Makefile \
3893         openbsd-compat/regress/Makefile scard/Makefile ssh_prng_cmds survey.sh])
3894 AC_OUTPUT
3895
3896 # Print summary of options
3897
3898 # Someone please show me a better way :)
3899 A=`eval echo ${prefix}` ; A=`eval echo ${A}`
3900 B=`eval echo ${bindir}` ; B=`eval echo ${B}`
3901 C=`eval echo ${sbindir}` ; C=`eval echo ${C}`
3902 D=`eval echo ${sysconfdir}` ; D=`eval echo ${D}`
3903 E=`eval echo ${libexecdir}/ssh-askpass` ; E=`eval echo ${E}`
3904 F=`eval echo ${mandir}/${mansubdir}X` ; F=`eval echo ${F}`
3905 G=`eval echo ${piddir}` ; G=`eval echo ${G}`
3906 H=`eval echo ${PRIVSEP_PATH}` ; H=`eval echo ${H}`
3907 I=`eval echo ${user_path}` ; I=`eval echo ${I}`
3908 J=`eval echo ${superuser_path}` ; J=`eval echo ${J}`
3909
3910 echo ""
3911 echo "OpenSSH has been configured with the following options:"
3912 echo "                     User binaries: $B"
3913 echo "                   System binaries: $C"
3914 echo "               Configuration files: $D"
3915 echo "                   Askpass program: $E"
3916 echo "                      Manual pages: $F"
3917 echo "                          PID file: $G"
3918 echo "  Privilege separation chroot path: $H"
3919 if test "x$external_path_file" = "x/etc/login.conf" ; then
3920 echo "   At runtime, sshd will use the path defined in $external_path_file"
3921 echo "   Make sure the path to scp is present, otherwise scp will not work"
3922 else
3923 echo "            sshd default user PATH: $I"
3924         if test ! -z "$external_path_file"; then
3925 echo "   (If PATH is set in $external_path_file it will be used instead. If"
3926 echo "   used, ensure the path to scp is present, otherwise scp will not work.)"
3927         fi
3928 fi
3929 if test ! -z "$superuser_path" ; then
3930 echo "          sshd superuser user PATH: $J"
3931 fi
3932 echo "                    Manpage format: $MANTYPE"
3933 echo "                       PAM support: $PAM_MSG"
3934 echo "                   OSF SIA support: $SIA_MSG"
3935 echo "                 KerberosV support: $KRB5_MSG"
3936 echo "                   SELinux support: $SELINUX_MSG"
3937 echo "                 Smartcard support: $SCARD_MSG"
3938 echo "                     S/KEY support: $SKEY_MSG"
3939 echo "              TCP Wrappers support: $TCPW_MSG"
3940 echo "              MD5 password support: $MD5_MSG"
3941 echo "                   libedit support: $LIBEDIT_MSG"
3942 echo "  Solaris process contract support: $SPC_MSG"
3943 echo "       IP address in \$DISPLAY hack: $DISPLAY_HACK_MSG"
3944 echo "           Translate v4 in v6 hack: $IPV4_IN6_HACK_MSG"
3945 echo "                  BSD Auth support: $BSD_AUTH_MSG"
3946 echo "              Random number source: $RAND_MSG"
3947 if test ! -z "$USE_RAND_HELPER" ; then
3948 echo "     ssh-rand-helper collects from: $RAND_HELPER_MSG"
3949 fi
3950
3951 echo ""
3952
3953 echo "              Host: ${host}"
3954 echo "          Compiler: ${CC}"
3955 echo "    Compiler flags: ${CFLAGS}"
3956 echo "Preprocessor flags: ${CPPFLAGS}"
3957 echo "      Linker flags: ${LDFLAGS}"
3958 echo "         Libraries: ${LIBWRAP} ${LIBPAM} ${LIBS}"
3959
3960 echo ""
3961
3962 if test "x$MAKE_PACKAGE_SUPPORTED" = "xyes" ; then
3963         echo "SVR4 style packages are supported with \"make package\""
3964         echo ""
3965 fi
3966
3967 if test "x$PAM_MSG" = "xyes" ; then
3968         echo "PAM is enabled. You may need to install a PAM control file "
3969         echo "for sshd, otherwise password authentication may fail. "
3970         echo "Example PAM control files can be found in the contrib/ "
3971         echo "subdirectory"
3972         echo ""
3973 fi
3974
3975 if test ! -z "$RAND_HELPER_CMDHASH" ; then
3976         echo "WARNING: you are using the builtin random number collection "
3977         echo "service. Please read WARNING.RNG and request that your OS "
3978         echo "vendor includes kernel-based random number collection in "
3979         echo "future versions of your OS."
3980         echo ""
3981 fi
3982
3983 if test ! -z "$NO_PEERCHECK" ; then
3984         echo "WARNING: the operating system that you are using does not "
3985         echo "appear to support either the getpeereid() API nor the "
3986         echo "SO_PEERCRED getsockopt() option. These facilities are used to "
3987         echo "enforce security checks to prevent unauthorised connections to "
3988         echo "ssh-agent. Their absence increases the risk that a malicious "
3989         echo "user can connect to your agent. "
3990         echo ""
3991 fi
3992
3993 if test "$AUDIT_MODULE" = "bsm" ; then
3994         echo "WARNING: BSM audit support is currently considered EXPERIMENTAL."
3995         echo "See the Solaris section in README.platform for details."
3996 fi
This page took 0.412921 seconds and 5 git commands to generate.