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