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