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