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