]> andersk Git - gssapi-openssh.git/blob - openssh/configure.ac
a27c547ff6d013bcb47e8241bfb35e6501b33efc
[gssapi-openssh.git] / openssh / configure.ac
1 # $Id$
2 #
3 # Copyright (c) 1999-2004 Damien Miller
4 #
5 # Permission to use, copy, modify, and distribute this software for any
6 # purpose with or without fee is hereby granted, provided that the above
7 # copyright notice and this permission notice appear in all copies.
8 #
9 # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16
17 AC_INIT(OpenSSH, Portable, openssh-unix-dev@mindrot.org)
18 AC_REVISION($Revision$)
19 AC_CONFIG_SRCDIR([ssh.c])
20
21 AC_CONFIG_HEADER(config.h)
22 AC_PROG_CC
23 AC_CANONICAL_HOST
24 AC_C_BIGENDIAN
25
26 # Checks for programs.
27 AC_PROG_AWK
28 AC_PROG_CPP
29 AC_PROG_RANLIB
30 AC_PROG_INSTALL
31 AC_PROG_EGREP
32 AC_PATH_PROG(AR, ar)
33 AC_PATH_PROG(CAT, cat)
34 AC_PATH_PROG(KILL, kill)
35 AC_PATH_PROGS(PERL, perl5 perl)
36 AC_PATH_PROG(SED, sed)
37 AC_SUBST(PERL)
38 AC_PATH_PROG(ENT, ent)
39 AC_SUBST(ENT)
40 AC_PATH_PROG(TEST_MINUS_S_SH, bash)
41 AC_PATH_PROG(TEST_MINUS_S_SH, ksh)
42 AC_PATH_PROG(TEST_MINUS_S_SH, sh)
43 AC_PATH_PROG(SH, sh)
44 AC_SUBST(TEST_SHELL,sh)
45
46 dnl for buildpkg.sh
47 AC_PATH_PROG(PATH_GROUPADD_PROG, groupadd, groupadd,
48         [/usr/sbin${PATH_SEPARATOR}/etc])
49 AC_PATH_PROG(PATH_USERADD_PROG, useradd, useradd,
50         [/usr/sbin${PATH_SEPARATOR}/etc])
51 AC_CHECK_PROG(MAKE_PACKAGE_SUPPORTED, pkgmk, yes, no)
52 if test -x /sbin/sh; then
53         AC_SUBST(STARTUP_SCRIPT_SHELL,/sbin/sh)
54 else
55         AC_SUBST(STARTUP_SCRIPT_SHELL,/bin/sh)
56 fi
57
58 # System features
59 AC_SYS_LARGEFILE
60
61 if test -z "$AR" ; then
62         AC_MSG_ERROR([*** 'ar' missing, please install or fix your \$PATH ***])
63 fi
64
65 # Use LOGIN_PROGRAM from environment if possible
66 if test ! -z "$LOGIN_PROGRAM" ; then
67         AC_DEFINE_UNQUOTED(LOGIN_PROGRAM_FALLBACK, "$LOGIN_PROGRAM",
68                 [If your header files don't define LOGIN_PROGRAM,
69                 then use this (detected) from environment and PATH])
70 else
71         # Search for login
72         AC_PATH_PROG(LOGIN_PROGRAM_FALLBACK, login)
73         if test ! -z "$LOGIN_PROGRAM_FALLBACK" ; then
74                 AC_DEFINE_UNQUOTED(LOGIN_PROGRAM_FALLBACK, "$LOGIN_PROGRAM_FALLBACK")
75         fi
76 fi
77
78 AC_PATH_PROG(PATH_PASSWD_PROG, passwd)
79 if test ! -z "$PATH_PASSWD_PROG" ; then
80         AC_DEFINE_UNQUOTED(_PATH_PASSWD_PROG, "$PATH_PASSWD_PROG",
81                 [Full path of your "passwd" program])
82 fi
83
84 if test -z "$LD" ; then
85         LD=$CC
86 fi
87 AC_SUBST(LD)
88
89 AC_C_INLINE
90
91 AC_CHECK_DECL(LLONG_MAX, have_llong_max=1, , [#include <limits.h>])
92
93 if test "$GCC" = "yes" || test "$GCC" = "egcs"; then
94         CFLAGS="$CFLAGS -Wall -Wpointer-arith -Wuninitialized"
95         GCC_VER=`$CC -v 2>&1 | $AWK '/gcc version /{print $3}'`
96         case $GCC_VER in
97                 1.*) 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 ])
2009 LIBS="$saved_LIBS"
2010
2011 ### Configure cryptographic random number support
2012
2013 # Check wheter OpenSSL seeds itself
2014 AC_MSG_CHECKING([whether OpenSSL's PRNG is internally seeded])
2015 AC_RUN_IFELSE(
2016         [AC_LANG_SOURCE([[
2017 #include <string.h>
2018 #include <openssl/rand.h>
2019 int main(void) { exit(RAND_status() == 1 ? 0 : 1); }
2020         ]])],
2021         [
2022                 OPENSSL_SEEDS_ITSELF=yes
2023                 AC_MSG_RESULT(yes)
2024         ],
2025         [
2026                 AC_MSG_RESULT(no)
2027                 # Default to use of the rand helper if OpenSSL doesn't
2028                 # seed itself
2029                 USE_RAND_HELPER=yes
2030         ],
2031         [
2032                 AC_MSG_WARN([cross compiling: assuming yes])
2033                 # This is safe, since all recent OpenSSL versions will
2034                 # complain at runtime if not seeded correctly.
2035                 OPENSSL_SEEDS_ITSELF=yes
2036         ]
2037 )
2038
2039 # Check for PAM libs
2040 PAM_MSG="no"
2041 AC_ARG_WITH(pam,
2042         [  --with-pam              Enable PAM support ],
2043         [
2044                 if test "x$withval" != "xno" ; then
2045                         if test "x$ac_cv_header_security_pam_appl_h" != "xyes" && \
2046                            test "x$ac_cv_header_pam_pam_appl_h" != "xyes" ; then
2047                                 AC_MSG_ERROR([PAM headers not found])
2048                         fi
2049
2050                         saved_LIBS="$LIBS"
2051                         AC_CHECK_LIB(dl, dlopen, , )
2052                         AC_CHECK_LIB(pam, pam_set_item, , AC_MSG_ERROR([*** libpam missing]))
2053                         AC_CHECK_FUNCS(pam_getenvlist)
2054                         AC_CHECK_FUNCS(pam_putenv)
2055                         LIBS="$saved_LIBS"
2056
2057                         PAM_MSG="yes"
2058
2059                         SSHDLIBS="$SSHDLIBS -lpam"
2060                         AC_DEFINE(USE_PAM, 1,
2061                                 [Define if you want to enable PAM support])
2062
2063                         if test $ac_cv_lib_dl_dlopen = yes; then
2064                                 case "$LIBS" in
2065                                 *-ldl*)
2066                                         # libdl already in LIBS
2067                                         ;;
2068                                 *)
2069                                         SSHDLIBS="$SSHDLIBS -ldl"
2070                                         ;;
2071                                 esac
2072                         fi
2073                 fi
2074         ]
2075 )
2076
2077 # Check for older PAM
2078 if test "x$PAM_MSG" = "xyes" ; then
2079         # Check PAM strerror arguments (old PAM)
2080         AC_MSG_CHECKING([whether pam_strerror takes only one argument])
2081         AC_TRY_COMPILE(
2082                 [
2083 #include <stdlib.h>
2084 #if defined(HAVE_SECURITY_PAM_APPL_H)
2085 #include <security/pam_appl.h>
2086 #elif defined (HAVE_PAM_PAM_APPL_H)
2087 #include <pam/pam_appl.h>
2088 #endif
2089                 ],
2090                 [(void)pam_strerror((pam_handle_t *)NULL, -1);],
2091                 [AC_MSG_RESULT(no)],
2092                 [
2093                         AC_DEFINE(HAVE_OLD_PAM, 1,
2094                                 [Define if you have an old version of PAM
2095                                 which takes only one argument to pam_strerror])
2096                         AC_MSG_RESULT(yes)
2097                         PAM_MSG="yes (old library)"
2098                 ]
2099         )
2100 fi
2101
2102 # Do we want to force the use of the rand helper?
2103 AC_ARG_WITH(rand-helper,
2104         [  --with-rand-helper      Use subprocess to gather strong randomness ],
2105         [
2106                 if test "x$withval" = "xno" ; then
2107                         # Force use of OpenSSL's internal RNG, even if
2108                         # the previous test showed it to be unseeded.
2109                         if test -z "$OPENSSL_SEEDS_ITSELF" ; then
2110                                 AC_MSG_WARN([*** Forcing use of OpenSSL's non-self-seeding PRNG])
2111                                 OPENSSL_SEEDS_ITSELF=yes
2112                                 USE_RAND_HELPER=""
2113                         fi
2114                 else
2115                         USE_RAND_HELPER=yes
2116                 fi
2117         ],
2118 )
2119
2120 # Which randomness source do we use?
2121 if test ! -z "$OPENSSL_SEEDS_ITSELF" && test -z "$USE_RAND_HELPER" ; then
2122         # OpenSSL only
2123         AC_DEFINE(OPENSSL_PRNG_ONLY, 1,
2124                 [Define if you want OpenSSL's internally seeded PRNG only])
2125         RAND_MSG="OpenSSL internal ONLY"
2126         INSTALL_SSH_RAND_HELPER=""
2127 elif test ! -z "$USE_RAND_HELPER" ; then
2128         # install rand helper
2129         RAND_MSG="ssh-rand-helper"
2130         INSTALL_SSH_RAND_HELPER="yes"
2131 fi
2132 AC_SUBST(INSTALL_SSH_RAND_HELPER)
2133
2134 ### Configuration of ssh-rand-helper
2135
2136 # PRNGD TCP socket
2137 AC_ARG_WITH(prngd-port,
2138         [  --with-prngd-port=PORT  read entropy from PRNGD/EGD TCP localhost:PORT],
2139         [
2140                 case "$withval" in
2141                 no)
2142                         withval=""
2143                         ;;
2144                 [[0-9]]*)
2145                         ;;
2146                 *)
2147                         AC_MSG_ERROR(You must specify a numeric port number for --with-prngd-port)
2148                         ;;
2149                 esac
2150                 if test ! -z "$withval" ; then
2151                         PRNGD_PORT="$withval"
2152                         AC_DEFINE_UNQUOTED(PRNGD_PORT, $PRNGD_PORT,
2153                                 [Port number of PRNGD/EGD random number socket])
2154                 fi
2155         ]
2156 )
2157
2158 # PRNGD Unix domain socket
2159 AC_ARG_WITH(prngd-socket,
2160         [  --with-prngd-socket=FILE read entropy from PRNGD/EGD socket FILE (default=/var/run/egd-pool)],
2161         [
2162                 case "$withval" in
2163                 yes)
2164                         withval="/var/run/egd-pool"
2165                         ;;
2166                 no)
2167                         withval=""
2168                         ;;
2169                 /*)
2170                         ;;
2171                 *)
2172                         AC_MSG_ERROR(You must specify an absolute path to the entropy socket)
2173                         ;;
2174                 esac
2175
2176                 if test ! -z "$withval" ; then
2177                         if test ! -z "$PRNGD_PORT" ; then
2178                                 AC_MSG_ERROR(You may not specify both a PRNGD/EGD port and socket)
2179                         fi
2180                         if test ! -r "$withval" ; then
2181                                 AC_MSG_WARN(Entropy socket is not readable)
2182                         fi
2183                         PRNGD_SOCKET="$withval"
2184                         AC_DEFINE_UNQUOTED(PRNGD_SOCKET, "$PRNGD_SOCKET",
2185                                 [Location of PRNGD/EGD random number socket])
2186                 fi
2187         ],
2188         [
2189                 # Check for existing socket only if we don't have a random device already
2190                 if test "$USE_RAND_HELPER" = yes ; then
2191                         AC_MSG_CHECKING(for PRNGD/EGD socket)
2192                         # Insert other locations here
2193                         for sock in /var/run/egd-pool /dev/egd-pool /etc/entropy; do
2194                                 if test -r $sock && $TEST_MINUS_S_SH -c "test -S $sock -o -p $sock" ; then
2195                                         PRNGD_SOCKET="$sock"
2196                                         AC_DEFINE_UNQUOTED(PRNGD_SOCKET, "$PRNGD_SOCKET")
2197                                         break;
2198                                 fi
2199                         done
2200                         if test ! -z "$PRNGD_SOCKET" ; then
2201                                 AC_MSG_RESULT($PRNGD_SOCKET)
2202                         else
2203                                 AC_MSG_RESULT(not found)
2204                         fi
2205                 fi
2206         ]
2207 )
2208
2209 # Change default command timeout for hashing entropy source
2210 entropy_timeout=200
2211 AC_ARG_WITH(entropy-timeout,
2212         [  --with-entropy-timeout  Specify entropy gathering command timeout (msec)],
2213         [
2214                 if test -n "$withval"  &&  test "x$withval" != "xno"  &&  \
2215                     test "x${withval}" != "xyes"; then
2216                         entropy_timeout=$withval
2217                 fi
2218         ]
2219 )
2220 AC_DEFINE_UNQUOTED(ENTROPY_TIMEOUT_MSEC, $entropy_timeout,
2221         [Builtin PRNG command timeout])
2222
2223 SSH_PRIVSEP_USER=sshd
2224 AC_ARG_WITH(privsep-user,
2225         [  --with-privsep-user=user Specify non-privileged user for privilege separation],
2226         [
2227                 if test -n "$withval"  &&  test "x$withval" != "xno"  &&  \
2228                     test "x${withval}" != "xyes"; then
2229                         SSH_PRIVSEP_USER=$withval
2230                 fi
2231         ]
2232 )
2233 AC_DEFINE_UNQUOTED(SSH_PRIVSEP_USER, "$SSH_PRIVSEP_USER",
2234         [non-privileged user for privilege separation])
2235 AC_SUBST(SSH_PRIVSEP_USER)
2236
2237 # We do this little dance with the search path to insure
2238 # that programs that we select for use by installed programs
2239 # (which may be run by the super-user) come from trusted
2240 # locations before they come from the user's private area.
2241 # This should help avoid accidentally configuring some
2242 # random version of a program in someone's personal bin.
2243
2244 OPATH=$PATH
2245 PATH=/bin:/usr/bin
2246 test -h /bin 2> /dev/null && PATH=/usr/bin
2247 test -d /sbin && PATH=$PATH:/sbin
2248 test -d /usr/sbin && PATH=$PATH:/usr/sbin
2249 PATH=$PATH:/etc:$OPATH
2250
2251 # These programs are used by the command hashing source to gather entropy
2252 OSSH_PATH_ENTROPY_PROG(PROG_LS, ls)
2253 OSSH_PATH_ENTROPY_PROG(PROG_NETSTAT, netstat)
2254 OSSH_PATH_ENTROPY_PROG(PROG_ARP, arp)
2255 OSSH_PATH_ENTROPY_PROG(PROG_IFCONFIG, ifconfig)
2256 OSSH_PATH_ENTROPY_PROG(PROG_JSTAT, jstat)
2257 OSSH_PATH_ENTROPY_PROG(PROG_PS, ps)
2258 OSSH_PATH_ENTROPY_PROG(PROG_SAR, sar)
2259 OSSH_PATH_ENTROPY_PROG(PROG_W, w)
2260 OSSH_PATH_ENTROPY_PROG(PROG_WHO, who)
2261 OSSH_PATH_ENTROPY_PROG(PROG_LAST, last)
2262 OSSH_PATH_ENTROPY_PROG(PROG_LASTLOG, lastlog)
2263 OSSH_PATH_ENTROPY_PROG(PROG_DF, df)
2264 OSSH_PATH_ENTROPY_PROG(PROG_VMSTAT, vmstat)
2265 OSSH_PATH_ENTROPY_PROG(PROG_UPTIME, uptime)
2266 OSSH_PATH_ENTROPY_PROG(PROG_IPCS, ipcs)
2267 OSSH_PATH_ENTROPY_PROG(PROG_TAIL, tail)
2268 # restore PATH
2269 PATH=$OPATH
2270
2271 # Where does ssh-rand-helper get its randomness from?
2272 INSTALL_SSH_PRNG_CMDS=""
2273 if test ! -z "$INSTALL_SSH_RAND_HELPER" ; then
2274         if test ! -z "$PRNGD_PORT" ; then
2275                 RAND_HELPER_MSG="TCP localhost:$PRNGD_PORT"
2276         elif test ! -z "$PRNGD_SOCKET" ; then
2277                 RAND_HELPER_MSG="Unix domain socket \"$PRNGD_SOCKET\""
2278         else
2279                 RAND_HELPER_MSG="Command hashing (timeout $entropy_timeout)"
2280                 RAND_HELPER_CMDHASH=yes
2281                 INSTALL_SSH_PRNG_CMDS="yes"
2282         fi
2283 fi
2284 AC_SUBST(INSTALL_SSH_PRNG_CMDS)
2285
2286
2287 # Cheap hack to ensure NEWS-OS libraries are arranged right.
2288 if test ! -z "$SONY" ; then
2289   LIBS="$LIBS -liberty";
2290 fi
2291
2292 # Check for  long long datatypes
2293 AC_CHECK_TYPES([long long, unsigned long long, long double])
2294
2295 # Check datatype sizes
2296 AC_CHECK_SIZEOF(char, 1)
2297 AC_CHECK_SIZEOF(short int, 2)
2298 AC_CHECK_SIZEOF(int, 4)
2299 AC_CHECK_SIZEOF(long int, 4)
2300 AC_CHECK_SIZEOF(long long int, 8)
2301
2302 # Sanity check long long for some platforms (AIX)
2303 if test "x$ac_cv_sizeof_long_long_int" = "x4" ; then
2304         ac_cv_sizeof_long_long_int=0
2305 fi
2306
2307 # compute LLONG_MIN and LLONG_MAX if we don't know them.
2308 if test -z "$have_llong_max"; then
2309         AC_MSG_CHECKING([for max value of long long])
2310         AC_RUN_IFELSE(
2311                 [AC_LANG_SOURCE([[
2312 #include <stdio.h>
2313 /* Why is this so damn hard? */
2314 #ifdef __GNUC__
2315 # undef __GNUC__
2316 #endif
2317 #define __USE_ISOC99
2318 #include <limits.h>
2319 #define DATA "conftest.llminmax"
2320 #define my_abs(a) ((a) < 0 ? ((a) * -1) : (a))
2321
2322 /*
2323  * printf in libc on some platforms (eg old Tru64) does not understand %lld so
2324  * we do this the hard way.
2325  */
2326 static int
2327 fprint_ll(FILE *f, long long n)
2328 {
2329         unsigned int i;
2330         int l[sizeof(long long) * 8];
2331
2332         if (n < 0)
2333                 if (fprintf(f, "-") < 0)
2334                         return -1;
2335         for (i = 0; n != 0; i++) {
2336                 l[i] = my_abs(n % 10);
2337                 n /= 10;
2338         }
2339         do {
2340                 if (fprintf(f, "%d", l[--i]) < 0)
2341                         return -1;
2342         } while (i != 0);
2343         if (fprintf(f, " ") < 0)
2344                 return -1;
2345         return 0;
2346 }
2347
2348 int main(void) {
2349         FILE *f;
2350         long long i, llmin, llmax = 0;
2351
2352         if((f = fopen(DATA,"w")) == NULL)
2353                 exit(1);
2354
2355 #if defined(LLONG_MIN) && defined(LLONG_MAX)
2356         fprintf(stderr, "Using system header for LLONG_MIN and LLONG_MAX\n");
2357         llmin = LLONG_MIN;
2358         llmax = LLONG_MAX;
2359 #else
2360         fprintf(stderr, "Calculating  LLONG_MIN and LLONG_MAX\n");
2361         /* This will work on one's complement and two's complement */
2362         for (i = 1; i > llmax; i <<= 1, i++)
2363                 llmax = i;
2364         llmin = llmax + 1LL;    /* wrap */
2365 #endif
2366
2367         /* Sanity check */
2368         if (llmin + 1 < llmin || llmin - 1 < llmin || llmax + 1 > llmax
2369             || llmax - 1 > llmax || llmin == llmax || llmin == 0
2370             || llmax == 0 || llmax < LONG_MAX || llmin > LONG_MIN) {
2371                 fprintf(f, "unknown unknown\n");
2372                 exit(2);
2373         }
2374
2375         if (fprint_ll(f, llmin) < 0)
2376                 exit(3);
2377         if (fprint_ll(f, llmax) < 0)
2378                 exit(4);
2379         if (fclose(f) < 0)
2380                 exit(5);
2381         exit(0);
2382 }
2383                 ]])],
2384                 [
2385                         llong_min=`$AWK '{print $1}' conftest.llminmax`
2386                         llong_max=`$AWK '{print $2}' conftest.llminmax`
2387
2388                         AC_MSG_RESULT($llong_max)
2389                         AC_DEFINE_UNQUOTED(LLONG_MAX, [${llong_max}LL],
2390                             [max value of long long calculated by configure])
2391                         AC_MSG_CHECKING([for min value of long long])
2392                         AC_MSG_RESULT($llong_min)
2393                         AC_DEFINE_UNQUOTED(LLONG_MIN, [${llong_min}LL],
2394                             [min value of long long calculated by configure])
2395                 ],
2396                 [
2397                         AC_MSG_RESULT(not found)
2398                 ],
2399                 [
2400                         AC_MSG_WARN([cross compiling: not checking])
2401                 ]
2402         )
2403 fi
2404
2405
2406 # More checks for data types
2407 AC_CACHE_CHECK([for u_int type], ac_cv_have_u_int, [
2408         AC_TRY_COMPILE(
2409                 [ #include <sys/types.h> ],
2410                 [ u_int a; a = 1;],
2411                 [ ac_cv_have_u_int="yes" ],
2412                 [ ac_cv_have_u_int="no" ]
2413         )
2414 ])
2415 if test "x$ac_cv_have_u_int" = "xyes" ; then
2416         AC_DEFINE(HAVE_U_INT, 1, [define if you have u_int data type])
2417         have_u_int=1
2418 fi
2419
2420 AC_CACHE_CHECK([for intXX_t types], ac_cv_have_intxx_t, [
2421         AC_TRY_COMPILE(
2422                 [ #include <sys/types.h> ],
2423                 [ int8_t a; int16_t b; int32_t c; a = b = c = 1;],
2424                 [ ac_cv_have_intxx_t="yes" ],
2425                 [ ac_cv_have_intxx_t="no" ]
2426         )
2427 ])
2428 if test "x$ac_cv_have_intxx_t" = "xyes" ; then
2429         AC_DEFINE(HAVE_INTXX_T, 1, [define if you have intxx_t data type])
2430         have_intxx_t=1
2431 fi
2432
2433 if (test -z "$have_intxx_t" && \
2434            test "x$ac_cv_header_stdint_h" = "xyes")
2435 then
2436     AC_MSG_CHECKING([for intXX_t types in stdint.h])
2437         AC_TRY_COMPILE(
2438                 [ #include <stdint.h> ],
2439                 [ int8_t a; int16_t b; int32_t c; a = b = c = 1;],
2440                 [
2441                         AC_DEFINE(HAVE_INTXX_T)
2442                         AC_MSG_RESULT(yes)
2443                 ],
2444                 [ AC_MSG_RESULT(no) ]
2445         )
2446 fi
2447
2448 AC_CACHE_CHECK([for int64_t type], ac_cv_have_int64_t, [
2449         AC_TRY_COMPILE(
2450                 [
2451 #include <sys/types.h>
2452 #ifdef HAVE_STDINT_H
2453 # include <stdint.h>
2454 #endif
2455 #include <sys/socket.h>
2456 #ifdef HAVE_SYS_BITYPES_H
2457 # include <sys/bitypes.h>
2458 #endif
2459                 ],
2460                 [ int64_t a; a = 1;],
2461                 [ ac_cv_have_int64_t="yes" ],
2462                 [ ac_cv_have_int64_t="no" ]
2463         )
2464 ])
2465 if test "x$ac_cv_have_int64_t" = "xyes" ; then
2466         AC_DEFINE(HAVE_INT64_T, 1, [define if you have int64_t data type])
2467 fi
2468
2469 AC_CACHE_CHECK([for u_intXX_t types], ac_cv_have_u_intxx_t, [
2470         AC_TRY_COMPILE(
2471                 [ #include <sys/types.h> ],
2472                 [ u_int8_t a; u_int16_t b; u_int32_t c; a = b = c = 1;],
2473                 [ ac_cv_have_u_intxx_t="yes" ],
2474                 [ ac_cv_have_u_intxx_t="no" ]
2475         )
2476 ])
2477 if test "x$ac_cv_have_u_intxx_t" = "xyes" ; then
2478         AC_DEFINE(HAVE_U_INTXX_T, 1, [define if you have u_intxx_t data type])
2479         have_u_intxx_t=1
2480 fi
2481
2482 if test -z "$have_u_intxx_t" ; then
2483     AC_MSG_CHECKING([for u_intXX_t types in sys/socket.h])
2484         AC_TRY_COMPILE(
2485                 [ #include <sys/socket.h> ],
2486                 [ u_int8_t a; u_int16_t b; u_int32_t c; a = b = c = 1;],
2487                 [
2488                         AC_DEFINE(HAVE_U_INTXX_T)
2489                         AC_MSG_RESULT(yes)
2490                 ],
2491                 [ AC_MSG_RESULT(no) ]
2492         )
2493 fi
2494
2495 AC_CACHE_CHECK([for u_int64_t types], ac_cv_have_u_int64_t, [
2496         AC_TRY_COMPILE(
2497                 [ #include <sys/types.h> ],
2498                 [ u_int64_t a; a = 1;],
2499                 [ ac_cv_have_u_int64_t="yes" ],
2500                 [ ac_cv_have_u_int64_t="no" ]
2501         )
2502 ])
2503 if test "x$ac_cv_have_u_int64_t" = "xyes" ; then
2504         AC_DEFINE(HAVE_U_INT64_T, 1, [define if you have u_int64_t data type])
2505         have_u_int64_t=1
2506 fi
2507
2508 if test -z "$have_u_int64_t" ; then
2509     AC_MSG_CHECKING([for u_int64_t type in sys/bitypes.h])
2510         AC_TRY_COMPILE(
2511                 [ #include <sys/bitypes.h> ],
2512                 [ u_int64_t a; a = 1],
2513                 [
2514                         AC_DEFINE(HAVE_U_INT64_T)
2515                         AC_MSG_RESULT(yes)
2516                 ],
2517                 [ AC_MSG_RESULT(no) ]
2518         )
2519 fi
2520
2521 if test -z "$have_u_intxx_t" ; then
2522         AC_CACHE_CHECK([for uintXX_t types], ac_cv_have_uintxx_t, [
2523                 AC_TRY_COMPILE(
2524                         [
2525 #include <sys/types.h>
2526                         ],
2527                         [ uint8_t a; uint16_t b; uint32_t c; a = b = c = 1; ],
2528                         [ ac_cv_have_uintxx_t="yes" ],
2529                         [ ac_cv_have_uintxx_t="no" ]
2530                 )
2531         ])
2532         if test "x$ac_cv_have_uintxx_t" = "xyes" ; then
2533                 AC_DEFINE(HAVE_UINTXX_T, 1,
2534                         [define if you have uintxx_t data type])
2535         fi
2536 fi
2537
2538 if test -z "$have_uintxx_t" ; then
2539     AC_MSG_CHECKING([for uintXX_t types in stdint.h])
2540         AC_TRY_COMPILE(
2541                 [ #include <stdint.h> ],
2542                 [ uint8_t a; uint16_t b; uint32_t c; a = b = c = 1;],
2543                 [
2544                         AC_DEFINE(HAVE_UINTXX_T)
2545                         AC_MSG_RESULT(yes)
2546                 ],
2547                 [ AC_MSG_RESULT(no) ]
2548         )
2549 fi
2550
2551 if (test -z "$have_u_intxx_t" || test -z "$have_intxx_t" && \
2552            test "x$ac_cv_header_sys_bitypes_h" = "xyes")
2553 then
2554         AC_MSG_CHECKING([for intXX_t and u_intXX_t types in sys/bitypes.h])
2555         AC_TRY_COMPILE(
2556                 [
2557 #include <sys/bitypes.h>
2558                 ],
2559                 [
2560                         int8_t a; int16_t b; int32_t c;
2561                         u_int8_t e; u_int16_t f; u_int32_t g;
2562                         a = b = c = e = f = g = 1;
2563                 ],
2564                 [
2565                         AC_DEFINE(HAVE_U_INTXX_T)
2566                         AC_DEFINE(HAVE_INTXX_T)
2567                         AC_MSG_RESULT(yes)
2568                 ],
2569                 [AC_MSG_RESULT(no)]
2570         )
2571 fi
2572
2573
2574 AC_CACHE_CHECK([for u_char], ac_cv_have_u_char, [
2575         AC_TRY_COMPILE(
2576                 [
2577 #include <sys/types.h>
2578                 ],
2579                 [ u_char foo; foo = 125; ],
2580                 [ ac_cv_have_u_char="yes" ],
2581                 [ ac_cv_have_u_char="no" ]
2582         )
2583 ])
2584 if test "x$ac_cv_have_u_char" = "xyes" ; then
2585         AC_DEFINE(HAVE_U_CHAR, 1, [define if you have u_char data type])
2586 fi
2587
2588 TYPE_SOCKLEN_T
2589
2590 AC_CHECK_TYPES(sig_atomic_t,,,[#include <signal.h>])
2591
2592 AC_CHECK_TYPES(in_addr_t,,,
2593 [#include <sys/types.h>
2594 #include <netinet/in.h>])
2595
2596 AC_CACHE_CHECK([for size_t], ac_cv_have_size_t, [
2597         AC_TRY_COMPILE(
2598                 [
2599 #include <sys/types.h>
2600                 ],
2601                 [ size_t foo; foo = 1235; ],
2602                 [ ac_cv_have_size_t="yes" ],
2603                 [ ac_cv_have_size_t="no" ]
2604         )
2605 ])
2606 if test "x$ac_cv_have_size_t" = "xyes" ; then
2607         AC_DEFINE(HAVE_SIZE_T, 1, [define if you have size_t data type])
2608 fi
2609
2610 AC_CACHE_CHECK([for ssize_t], ac_cv_have_ssize_t, [
2611         AC_TRY_COMPILE(
2612                 [
2613 #include <sys/types.h>
2614                 ],
2615                 [ ssize_t foo; foo = 1235; ],
2616                 [ ac_cv_have_ssize_t="yes" ],
2617                 [ ac_cv_have_ssize_t="no" ]
2618         )
2619 ])
2620 if test "x$ac_cv_have_ssize_t" = "xyes" ; then
2621         AC_DEFINE(HAVE_SSIZE_T, 1, [define if you have ssize_t data type])
2622 fi
2623
2624 AC_CACHE_CHECK([for clock_t], ac_cv_have_clock_t, [
2625         AC_TRY_COMPILE(
2626                 [
2627 #include <time.h>
2628                 ],
2629                 [ clock_t foo; foo = 1235; ],
2630                 [ ac_cv_have_clock_t="yes" ],
2631                 [ ac_cv_have_clock_t="no" ]
2632         )
2633 ])
2634 if test "x$ac_cv_have_clock_t" = "xyes" ; then
2635         AC_DEFINE(HAVE_CLOCK_T, 1, [define if you have clock_t data type])
2636 fi
2637
2638 AC_CACHE_CHECK([for sa_family_t], ac_cv_have_sa_family_t, [
2639         AC_TRY_COMPILE(
2640                 [
2641 #include <sys/types.h>
2642 #include <sys/socket.h>
2643                 ],
2644                 [ sa_family_t foo; foo = 1235; ],
2645                 [ ac_cv_have_sa_family_t="yes" ],
2646                 [ AC_TRY_COMPILE(
2647                   [
2648 #include <sys/types.h>
2649 #include <sys/socket.h>
2650 #include <netinet/in.h>
2651                 ],
2652                 [ sa_family_t foo; foo = 1235; ],
2653                 [ ac_cv_have_sa_family_t="yes" ],
2654
2655                 [ ac_cv_have_sa_family_t="no" ]
2656         )]
2657         )
2658 ])
2659 if test "x$ac_cv_have_sa_family_t" = "xyes" ; then
2660         AC_DEFINE(HAVE_SA_FAMILY_T, 1,
2661                 [define if you have sa_family_t data type])
2662 fi
2663
2664 AC_CACHE_CHECK([for pid_t], ac_cv_have_pid_t, [
2665         AC_TRY_COMPILE(
2666                 [
2667 #include <sys/types.h>
2668                 ],
2669                 [ pid_t foo; foo = 1235; ],
2670                 [ ac_cv_have_pid_t="yes" ],
2671                 [ ac_cv_have_pid_t="no" ]
2672         )
2673 ])
2674 if test "x$ac_cv_have_pid_t" = "xyes" ; then
2675         AC_DEFINE(HAVE_PID_T, 1, [define if you have pid_t data type])
2676 fi
2677
2678 AC_CACHE_CHECK([for mode_t], ac_cv_have_mode_t, [
2679         AC_TRY_COMPILE(
2680                 [
2681 #include <sys/types.h>
2682                 ],
2683                 [ mode_t foo; foo = 1235; ],
2684                 [ ac_cv_have_mode_t="yes" ],
2685                 [ ac_cv_have_mode_t="no" ]
2686         )
2687 ])
2688 if test "x$ac_cv_have_mode_t" = "xyes" ; then
2689         AC_DEFINE(HAVE_MODE_T, 1, [define if you have mode_t data type])
2690 fi
2691
2692
2693 AC_CACHE_CHECK([for struct sockaddr_storage], ac_cv_have_struct_sockaddr_storage, [
2694         AC_TRY_COMPILE(
2695                 [
2696 #include <sys/types.h>
2697 #include <sys/socket.h>
2698                 ],
2699                 [ struct sockaddr_storage s; ],
2700                 [ ac_cv_have_struct_sockaddr_storage="yes" ],
2701                 [ ac_cv_have_struct_sockaddr_storage="no" ]
2702         )
2703 ])
2704 if test "x$ac_cv_have_struct_sockaddr_storage" = "xyes" ; then
2705         AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE, 1,
2706                 [define if you have struct sockaddr_storage data type])
2707 fi
2708
2709 AC_CACHE_CHECK([for struct sockaddr_in6], ac_cv_have_struct_sockaddr_in6, [
2710         AC_TRY_COMPILE(
2711                 [
2712 #include <sys/types.h>
2713 #include <netinet/in.h>
2714                 ],
2715                 [ struct sockaddr_in6 s; s.sin6_family = 0; ],
2716                 [ ac_cv_have_struct_sockaddr_in6="yes" ],
2717                 [ ac_cv_have_struct_sockaddr_in6="no" ]
2718         )
2719 ])
2720 if test "x$ac_cv_have_struct_sockaddr_in6" = "xyes" ; then
2721         AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6, 1,
2722                 [define if you have struct sockaddr_in6 data type])
2723 fi
2724
2725 AC_CACHE_CHECK([for struct in6_addr], ac_cv_have_struct_in6_addr, [
2726         AC_TRY_COMPILE(
2727                 [
2728 #include <sys/types.h>
2729 #include <netinet/in.h>
2730                 ],
2731                 [ struct in6_addr s; s.s6_addr[0] = 0; ],
2732                 [ ac_cv_have_struct_in6_addr="yes" ],
2733                 [ ac_cv_have_struct_in6_addr="no" ]
2734         )
2735 ])
2736 if test "x$ac_cv_have_struct_in6_addr" = "xyes" ; then
2737         AC_DEFINE(HAVE_STRUCT_IN6_ADDR, 1,
2738                 [define if you have struct in6_addr data type])
2739 fi
2740
2741 AC_CACHE_CHECK([for struct addrinfo], ac_cv_have_struct_addrinfo, [
2742         AC_TRY_COMPILE(
2743                 [
2744 #include <sys/types.h>
2745 #include <sys/socket.h>
2746 #include <netdb.h>
2747                 ],
2748                 [ struct addrinfo s; s.ai_flags = AI_PASSIVE; ],
2749                 [ ac_cv_have_struct_addrinfo="yes" ],
2750                 [ ac_cv_have_struct_addrinfo="no" ]
2751         )
2752 ])
2753 if test "x$ac_cv_have_struct_addrinfo" = "xyes" ; then
2754         AC_DEFINE(HAVE_STRUCT_ADDRINFO, 1,
2755                 [define if you have struct addrinfo data type])
2756 fi
2757
2758 AC_CACHE_CHECK([for struct timeval], ac_cv_have_struct_timeval, [
2759         AC_TRY_COMPILE(
2760                 [ #include <sys/time.h> ],
2761                 [ struct timeval tv; tv.tv_sec = 1;],
2762                 [ ac_cv_have_struct_timeval="yes" ],
2763                 [ ac_cv_have_struct_timeval="no" ]
2764         )
2765 ])
2766 if test "x$ac_cv_have_struct_timeval" = "xyes" ; then
2767         AC_DEFINE(HAVE_STRUCT_TIMEVAL, 1, [define if you have struct timeval])
2768         have_struct_timeval=1
2769 fi
2770
2771 AC_CHECK_TYPES(struct timespec)
2772
2773 # We need int64_t or else certian parts of the compile will fail.
2774 if test "x$ac_cv_have_int64_t" = "xno" && \
2775         test "x$ac_cv_sizeof_long_int" != "x8" && \
2776         test "x$ac_cv_sizeof_long_long_int" = "x0" ; then
2777         echo "OpenSSH requires int64_t support.  Contact your vendor or install"
2778         echo "an alternative compiler (I.E., GCC) before continuing."
2779         echo ""
2780         exit 1;
2781 else
2782 dnl test snprintf (broken on SCO w/gcc)
2783         AC_RUN_IFELSE(
2784                 [AC_LANG_SOURCE([[
2785 #include <stdio.h>
2786 #include <string.h>
2787 #ifdef HAVE_SNPRINTF
2788 main()
2789 {
2790         char buf[50];
2791         char expected_out[50];
2792         int mazsize = 50 ;
2793 #if (SIZEOF_LONG_INT == 8)
2794         long int num = 0x7fffffffffffffff;
2795 #else
2796         long long num = 0x7fffffffffffffffll;
2797 #endif
2798         strcpy(expected_out, "9223372036854775807");
2799         snprintf(buf, mazsize, "%lld", num);
2800         if(strcmp(buf, expected_out) != 0)
2801                 exit(1);
2802         exit(0);
2803 }
2804 #else
2805 main() { exit(0); }
2806 #endif
2807                 ]])], [ true ], [ AC_DEFINE(BROKEN_SNPRINTF) ],
2808                 AC_MSG_WARN([cross compiling: Assuming working snprintf()])
2809         )
2810 fi
2811
2812 dnl Checks for structure members
2813 OSSH_CHECK_HEADER_FOR_FIELD(ut_host, utmp.h, HAVE_HOST_IN_UTMP)
2814 OSSH_CHECK_HEADER_FOR_FIELD(ut_host, utmpx.h, HAVE_HOST_IN_UTMPX)
2815 OSSH_CHECK_HEADER_FOR_FIELD(syslen, utmpx.h, HAVE_SYSLEN_IN_UTMPX)
2816 OSSH_CHECK_HEADER_FOR_FIELD(ut_pid, utmp.h, HAVE_PID_IN_UTMP)
2817 OSSH_CHECK_HEADER_FOR_FIELD(ut_type, utmp.h, HAVE_TYPE_IN_UTMP)
2818 OSSH_CHECK_HEADER_FOR_FIELD(ut_type, utmpx.h, HAVE_TYPE_IN_UTMPX)
2819 OSSH_CHECK_HEADER_FOR_FIELD(ut_tv, utmp.h, HAVE_TV_IN_UTMP)
2820 OSSH_CHECK_HEADER_FOR_FIELD(ut_id, utmp.h, HAVE_ID_IN_UTMP)
2821 OSSH_CHECK_HEADER_FOR_FIELD(ut_id, utmpx.h, HAVE_ID_IN_UTMPX)
2822 OSSH_CHECK_HEADER_FOR_FIELD(ut_addr, utmp.h, HAVE_ADDR_IN_UTMP)
2823 OSSH_CHECK_HEADER_FOR_FIELD(ut_addr, utmpx.h, HAVE_ADDR_IN_UTMPX)
2824 OSSH_CHECK_HEADER_FOR_FIELD(ut_addr_v6, utmp.h, HAVE_ADDR_V6_IN_UTMP)
2825 OSSH_CHECK_HEADER_FOR_FIELD(ut_addr_v6, utmpx.h, HAVE_ADDR_V6_IN_UTMPX)
2826 OSSH_CHECK_HEADER_FOR_FIELD(ut_exit, utmp.h, HAVE_EXIT_IN_UTMP)
2827 OSSH_CHECK_HEADER_FOR_FIELD(ut_time, utmp.h, HAVE_TIME_IN_UTMP)
2828 OSSH_CHECK_HEADER_FOR_FIELD(ut_time, utmpx.h, HAVE_TIME_IN_UTMPX)
2829 OSSH_CHECK_HEADER_FOR_FIELD(ut_tv, utmpx.h, HAVE_TV_IN_UTMPX)
2830
2831 AC_CHECK_MEMBERS([struct stat.st_blksize])
2832 AC_CHECK_MEMBER([struct __res_state.retrans], [], [AC_DEFINE(__res_state, state,
2833         [Define if we don't have struct __res_state in resolv.h])],
2834 [
2835 #include <stdio.h>
2836 #if HAVE_SYS_TYPES_H
2837 # include <sys/types.h>
2838 #endif
2839 #include <netinet/in.h>
2840 #include <arpa/nameser.h>
2841 #include <resolv.h>
2842 ])
2843
2844 AC_CACHE_CHECK([for ss_family field in struct sockaddr_storage],
2845                 ac_cv_have_ss_family_in_struct_ss, [
2846         AC_TRY_COMPILE(
2847                 [
2848 #include <sys/types.h>
2849 #include <sys/socket.h>
2850                 ],
2851                 [ struct sockaddr_storage s; s.ss_family = 1; ],
2852                 [ ac_cv_have_ss_family_in_struct_ss="yes" ],
2853                 [ ac_cv_have_ss_family_in_struct_ss="no" ],
2854         )
2855 ])
2856 if test "x$ac_cv_have_ss_family_in_struct_ss" = "xyes" ; then
2857         AC_DEFINE(HAVE_SS_FAMILY_IN_SS, 1, [Fields in struct sockaddr_storage])
2858 fi
2859
2860 AC_CACHE_CHECK([for __ss_family field in struct sockaddr_storage],
2861                 ac_cv_have___ss_family_in_struct_ss, [
2862         AC_TRY_COMPILE(
2863                 [
2864 #include <sys/types.h>
2865 #include <sys/socket.h>
2866                 ],
2867                 [ struct sockaddr_storage s; s.__ss_family = 1; ],
2868                 [ ac_cv_have___ss_family_in_struct_ss="yes" ],
2869                 [ ac_cv_have___ss_family_in_struct_ss="no" ]
2870         )
2871 ])
2872 if test "x$ac_cv_have___ss_family_in_struct_ss" = "xyes" ; then
2873         AC_DEFINE(HAVE___SS_FAMILY_IN_SS, 1,
2874                 [Fields in struct sockaddr_storage])
2875 fi
2876
2877 AC_CACHE_CHECK([for pw_class field in struct passwd],
2878                 ac_cv_have_pw_class_in_struct_passwd, [
2879         AC_TRY_COMPILE(
2880                 [
2881 #include <pwd.h>
2882                 ],
2883                 [ struct passwd p; p.pw_class = 0; ],
2884                 [ ac_cv_have_pw_class_in_struct_passwd="yes" ],
2885                 [ ac_cv_have_pw_class_in_struct_passwd="no" ]
2886         )
2887 ])
2888 if test "x$ac_cv_have_pw_class_in_struct_passwd" = "xyes" ; then
2889         AC_DEFINE(HAVE_PW_CLASS_IN_PASSWD, 1,
2890                 [Define if your password has a pw_class field])
2891 fi
2892
2893 AC_CACHE_CHECK([for pw_expire field in struct passwd],
2894                 ac_cv_have_pw_expire_in_struct_passwd, [
2895         AC_TRY_COMPILE(
2896                 [
2897 #include <pwd.h>
2898                 ],
2899                 [ struct passwd p; p.pw_expire = 0; ],
2900                 [ ac_cv_have_pw_expire_in_struct_passwd="yes" ],
2901                 [ ac_cv_have_pw_expire_in_struct_passwd="no" ]
2902         )
2903 ])
2904 if test "x$ac_cv_have_pw_expire_in_struct_passwd" = "xyes" ; then
2905         AC_DEFINE(HAVE_PW_EXPIRE_IN_PASSWD, 1,
2906                 [Define if your password has a pw_expire field])
2907 fi
2908
2909 AC_CACHE_CHECK([for pw_change field in struct passwd],
2910                 ac_cv_have_pw_change_in_struct_passwd, [
2911         AC_TRY_COMPILE(
2912                 [
2913 #include <pwd.h>
2914                 ],
2915                 [ struct passwd p; p.pw_change = 0; ],
2916                 [ ac_cv_have_pw_change_in_struct_passwd="yes" ],
2917                 [ ac_cv_have_pw_change_in_struct_passwd="no" ]
2918         )
2919 ])
2920 if test "x$ac_cv_have_pw_change_in_struct_passwd" = "xyes" ; then
2921         AC_DEFINE(HAVE_PW_CHANGE_IN_PASSWD, 1,
2922                 [Define if your password has a pw_change field])
2923 fi
2924
2925 dnl make sure we're using the real structure members and not defines
2926 AC_CACHE_CHECK([for msg_accrights field in struct msghdr],
2927                 ac_cv_have_accrights_in_msghdr, [
2928         AC_COMPILE_IFELSE(
2929                 [
2930 #include <sys/types.h>
2931 #include <sys/socket.h>
2932 #include <sys/uio.h>
2933 int main() {
2934 #ifdef msg_accrights
2935 #error "msg_accrights is a macro"
2936 exit(1);
2937 #endif
2938 struct msghdr m;
2939 m.msg_accrights = 0;
2940 exit(0);
2941 }
2942                 ],
2943                 [ ac_cv_have_accrights_in_msghdr="yes" ],
2944                 [ ac_cv_have_accrights_in_msghdr="no" ]
2945         )
2946 ])
2947 if test "x$ac_cv_have_accrights_in_msghdr" = "xyes" ; then
2948         AC_DEFINE(HAVE_ACCRIGHTS_IN_MSGHDR, 1,
2949                 [Define if your system uses access rights style
2950                 file descriptor passing])
2951 fi
2952
2953 AC_CACHE_CHECK([for msg_control field in struct msghdr],
2954                 ac_cv_have_control_in_msghdr, [
2955         AC_COMPILE_IFELSE(
2956                 [
2957 #include <sys/types.h>
2958 #include <sys/socket.h>
2959 #include <sys/uio.h>
2960 int main() {
2961 #ifdef msg_control
2962 #error "msg_control is a macro"
2963 exit(1);
2964 #endif
2965 struct msghdr m;
2966 m.msg_control = 0;
2967 exit(0);
2968 }
2969                 ],
2970                 [ ac_cv_have_control_in_msghdr="yes" ],
2971                 [ ac_cv_have_control_in_msghdr="no" ]
2972         )
2973 ])
2974 if test "x$ac_cv_have_control_in_msghdr" = "xyes" ; then
2975         AC_DEFINE(HAVE_CONTROL_IN_MSGHDR, 1,
2976                 [Define if your system uses ancillary data style
2977                 file descriptor passing])
2978 fi
2979
2980 AC_CACHE_CHECK([if libc defines __progname], ac_cv_libc_defines___progname, [
2981         AC_TRY_LINK([],
2982                 [ extern char *__progname; printf("%s", __progname); ],
2983                 [ ac_cv_libc_defines___progname="yes" ],
2984                 [ ac_cv_libc_defines___progname="no" ]
2985         )
2986 ])
2987 if test "x$ac_cv_libc_defines___progname" = "xyes" ; then
2988         AC_DEFINE(HAVE___PROGNAME, 1, [Define if libc defines __progname])
2989 fi
2990
2991 AC_CACHE_CHECK([whether $CC implements __FUNCTION__], ac_cv_cc_implements___FUNCTION__, [
2992         AC_TRY_LINK([
2993 #include <stdio.h>
2994 ],
2995                 [ printf("%s", __FUNCTION__); ],
2996                 [ ac_cv_cc_implements___FUNCTION__="yes" ],
2997                 [ ac_cv_cc_implements___FUNCTION__="no" ]
2998         )
2999 ])
3000 if test "x$ac_cv_cc_implements___FUNCTION__" = "xyes" ; then
3001         AC_DEFINE(HAVE___FUNCTION__, 1,
3002                 [Define if compiler implements __FUNCTION__])
3003 fi
3004
3005 AC_CACHE_CHECK([whether $CC implements __func__], ac_cv_cc_implements___func__, [
3006         AC_TRY_LINK([
3007 #include <stdio.h>
3008 ],
3009                 [ printf("%s", __func__); ],
3010                 [ ac_cv_cc_implements___func__="yes" ],
3011                 [ ac_cv_cc_implements___func__="no" ]
3012         )
3013 ])
3014 if test "x$ac_cv_cc_implements___func__" = "xyes" ; then
3015         AC_DEFINE(HAVE___func__, 1, [Define if compiler implements __func__])
3016 fi
3017
3018 AC_CACHE_CHECK([whether va_copy exists], ac_cv_have_va_copy, [
3019         AC_TRY_LINK(
3020                 [#include <stdarg.h>
3021                  va_list x,y;],
3022                 [va_copy(x,y);],
3023                 [ ac_cv_have_va_copy="yes" ],
3024                 [ ac_cv_have_va_copy="no" ]
3025         )
3026 ])
3027 if test "x$ac_cv_have_va_copy" = "xyes" ; then
3028         AC_DEFINE(HAVE_VA_COPY, 1, [Define if va_copy exists])
3029 fi
3030
3031 AC_CACHE_CHECK([whether __va_copy exists], ac_cv_have___va_copy, [
3032         AC_TRY_LINK(
3033                 [#include <stdarg.h>
3034                  va_list x,y;],
3035                 [__va_copy(x,y);],
3036                 [ ac_cv_have___va_copy="yes" ],
3037                 [ ac_cv_have___va_copy="no" ]
3038         )
3039 ])
3040 if test "x$ac_cv_have___va_copy" = "xyes" ; then
3041         AC_DEFINE(HAVE___VA_COPY, 1, [Define if __va_copy exists])
3042 fi
3043
3044 AC_CACHE_CHECK([whether getopt has optreset support],
3045                 ac_cv_have_getopt_optreset, [
3046         AC_TRY_LINK(
3047                 [
3048 #include <getopt.h>
3049                 ],
3050                 [ extern int optreset; optreset = 0; ],
3051                 [ ac_cv_have_getopt_optreset="yes" ],
3052                 [ ac_cv_have_getopt_optreset="no" ]
3053         )
3054 ])
3055 if test "x$ac_cv_have_getopt_optreset" = "xyes" ; then
3056         AC_DEFINE(HAVE_GETOPT_OPTRESET, 1,
3057                 [Define if your getopt(3) defines and uses optreset])
3058 fi
3059
3060 AC_CACHE_CHECK([if libc defines sys_errlist], ac_cv_libc_defines_sys_errlist, [
3061         AC_TRY_LINK([],
3062                 [ extern const char *const sys_errlist[]; printf("%s", sys_errlist[0]);],
3063                 [ ac_cv_libc_defines_sys_errlist="yes" ],
3064                 [ ac_cv_libc_defines_sys_errlist="no" ]
3065         )
3066 ])
3067 if test "x$ac_cv_libc_defines_sys_errlist" = "xyes" ; then
3068         AC_DEFINE(HAVE_SYS_ERRLIST, 1,
3069                 [Define if your system defines sys_errlist[]])
3070 fi
3071
3072
3073 AC_CACHE_CHECK([if libc defines sys_nerr], ac_cv_libc_defines_sys_nerr, [
3074         AC_TRY_LINK([],
3075                 [ extern int sys_nerr; printf("%i", sys_nerr);],
3076                 [ ac_cv_libc_defines_sys_nerr="yes" ],
3077                 [ ac_cv_libc_defines_sys_nerr="no" ]
3078         )
3079 ])
3080 if test "x$ac_cv_libc_defines_sys_nerr" = "xyes" ; then
3081         AC_DEFINE(HAVE_SYS_NERR, 1, [Define if your system defines sys_nerr])
3082 fi
3083
3084 SCARD_MSG="no"
3085 # Check whether user wants sectok support
3086 AC_ARG_WITH(sectok,
3087         [  --with-sectok           Enable smartcard support using libsectok],
3088         [
3089                 if test "x$withval" != "xno" ; then
3090                         if test "x$withval" != "xyes" ; then
3091                                 CPPFLAGS="$CPPFLAGS -I${withval}"
3092                                 LDFLAGS="$LDFLAGS -L${withval}"
3093                                 if test ! -z "$need_dash_r" ; then
3094                                         LDFLAGS="$LDFLAGS -R${withval}"
3095                                 fi
3096                                 if test ! -z "$blibpath" ; then
3097                                         blibpath="$blibpath:${withval}"
3098                                 fi
3099                         fi
3100                         AC_CHECK_HEADERS(sectok.h)
3101                         if test "$ac_cv_header_sectok_h" != yes; then
3102                                 AC_MSG_ERROR(Can't find sectok.h)
3103                         fi
3104                         AC_CHECK_LIB(sectok, sectok_open)
3105                         if test "$ac_cv_lib_sectok_sectok_open" != yes; then
3106                                 AC_MSG_ERROR(Can't find libsectok)
3107                         fi
3108                         AC_DEFINE(SMARTCARD, 1,
3109                                 [Define if you want smartcard support])
3110                         AC_DEFINE(USE_SECTOK, 1,
3111                                 [Define if you want smartcard support
3112                                 using sectok])
3113                         SCARD_MSG="yes, using sectok"
3114                 fi
3115         ]
3116 )
3117
3118 # Check whether user wants OpenSC support
3119 OPENSC_CONFIG="no"
3120 AC_ARG_WITH(opensc,
3121         [  --with-opensc[[=PFX]]     Enable smartcard support using OpenSC (optionally in PATH)],
3122         [
3123             if test "x$withval" != "xno" ; then
3124                 if test "x$withval" != "xyes" ; then
3125                         OPENSC_CONFIG=$withval/bin/opensc-config
3126                 else
3127                         AC_PATH_PROG(OPENSC_CONFIG, opensc-config, no)
3128                 fi
3129                 if test "$OPENSC_CONFIG" != "no"; then
3130                         LIBOPENSC_CFLAGS=`$OPENSC_CONFIG --cflags`
3131                         LIBOPENSC_LIBS=`$OPENSC_CONFIG --libs`
3132                         CPPFLAGS="$CPPFLAGS $LIBOPENSC_CFLAGS"
3133                         LIBS="$LIBS $LIBOPENSC_LIBS"
3134                         AC_DEFINE(SMARTCARD)
3135                         AC_DEFINE(USE_OPENSC, 1,
3136                                 [Define if you want smartcard support
3137                                 using OpenSC])
3138                         SCARD_MSG="yes, using OpenSC"
3139                 fi
3140             fi
3141         ]
3142 )
3143
3144 # Check libraries needed by DNS fingerprint support
3145 AC_SEARCH_LIBS(getrrsetbyname, resolv,
3146         [AC_DEFINE(HAVE_GETRRSETBYNAME, 1,
3147                 [Define if getrrsetbyname() exists])],
3148         [
3149                 # Needed by our getrrsetbyname()
3150                 AC_SEARCH_LIBS(res_query, resolv)
3151                 AC_SEARCH_LIBS(dn_expand, resolv)
3152                 AC_MSG_CHECKING(if res_query will link)
3153                 AC_TRY_LINK_FUNC(res_query, AC_MSG_RESULT(yes),
3154                    [AC_MSG_RESULT(no)
3155                     saved_LIBS="$LIBS"
3156                     LIBS="$LIBS -lresolv"
3157                     AC_MSG_CHECKING(for res_query in -lresolv)
3158                     AC_LINK_IFELSE([
3159 #include <resolv.h>
3160 int main()
3161 {
3162         res_query (0, 0, 0, 0, 0);
3163         return 0;
3164 }
3165                         ],
3166                         [LIBS="$LIBS -lresolv"
3167                          AC_MSG_RESULT(yes)],
3168                         [LIBS="$saved_LIBS"
3169                          AC_MSG_RESULT(no)])
3170                     ])
3171                 AC_CHECK_FUNCS(_getshort _getlong)
3172                 AC_CHECK_DECLS([_getshort, _getlong], , ,
3173                     [#include <sys/types.h>
3174                     #include <arpa/nameser.h>])
3175                 AC_CHECK_MEMBER(HEADER.ad,
3176                         [AC_DEFINE(HAVE_HEADER_AD, 1,
3177                             [Define if HEADER.ad exists in arpa/nameser.h])],,
3178                         [#include <arpa/nameser.h>])
3179         ])
3180
3181 AC_MSG_CHECKING(if struct __res_state _res is an extern)
3182 AC_LINK_IFELSE([
3183 #include <stdio.h>
3184 #if HAVE_SYS_TYPES_H
3185 # include <sys/types.h>
3186 #endif
3187 #include <netinet/in.h>
3188 #include <arpa/nameser.h>
3189 #include <resolv.h>
3190 extern struct __res_state _res;
3191 int main() { return 0; }
3192                 ],
3193                 [AC_MSG_RESULT(yes)
3194                  AC_DEFINE(HAVE__RES_EXTERN, 1,
3195                     [Define if you have struct __res_state _res as an extern])
3196                 ],
3197                 [ AC_MSG_RESULT(no) ]
3198 )
3199
3200 # Check whether user wants SELinux support
3201 SELINUX_MSG="no"
3202 LIBSELINUX=""
3203 AC_ARG_WITH(selinux,
3204         [  --with-selinux   Enable SELinux support],
3205         [ if test "x$withval" != "xno" ; then
3206                 save_LIBS="$LIBS"
3207                 AC_DEFINE(WITH_SELINUX,1,[Define if you want SELinux support.])
3208                 SELINUX_MSG="yes"
3209                 AC_CHECK_HEADER([selinux/selinux.h], ,
3210                     AC_MSG_ERROR(SELinux support requires selinux.h header))
3211                 AC_CHECK_LIB(selinux, setexeccon, [ LIBSELINUX="-lselinux" ],
3212                     AC_MSG_ERROR(SELinux support requires libselinux library))
3213                 SSHDLIBS="$SSHDLIBS $LIBSELINUX"
3214                 AC_CHECK_FUNCS(getseuserbyname get_default_context_with_level)
3215                 LIBS="$save_LIBS"
3216         fi ]
3217 )
3218
3219 # Check whether user wants Kerberos 5 support
3220 KRB5_MSG="no"
3221 AC_ARG_WITH(kerberos5,
3222         [  --with-kerberos5=PATH   Enable Kerberos 5 support],
3223         [ if test "x$withval" != "xno" ; then
3224                 if test "x$withval" = "xyes" ; then
3225                         KRB5ROOT="/usr/local"
3226                 else
3227                         KRB5ROOT=${withval}
3228                 fi
3229
3230                 AC_DEFINE(KRB5, 1, [Define if you want Kerberos 5 support])
3231                 KRB5_MSG="yes"
3232
3233                 AC_MSG_CHECKING(for krb5-config)
3234                 if test -x  $KRB5ROOT/bin/krb5-config ; then
3235                         KRB5CONF=$KRB5ROOT/bin/krb5-config
3236                         AC_MSG_RESULT($KRB5CONF)
3237
3238                         AC_MSG_CHECKING(for gssapi support)
3239                         if $KRB5CONF | grep gssapi >/dev/null ; then
3240                                 AC_MSG_RESULT(yes)
3241                                 AC_DEFINE(GSSAPI, 1,
3242                                         [Define this if you want GSSAPI
3243                                         support in the version 2 protocol])
3244                                 k5confopts=gssapi
3245                         else
3246                                 AC_MSG_RESULT(no)
3247                                 k5confopts=""
3248                         fi
3249                         K5CFLAGS="`$KRB5CONF --cflags $k5confopts`"
3250                         K5LIBS="`$KRB5CONF --libs $k5confopts`"
3251                         CPPFLAGS="$CPPFLAGS $K5CFLAGS"
3252                         AC_MSG_CHECKING(whether we are using Heimdal)
3253                         AC_TRY_COMPILE([ #include <krb5.h> ],
3254                                        [ char *tmp = heimdal_version; ],
3255                                        [ AC_MSG_RESULT(yes)
3256                                          AC_DEFINE(HEIMDAL, 1,
3257                                         [Define this if you are using the
3258                                         Heimdal version of Kerberos V5]) ],
3259                                          AC_MSG_RESULT(no)
3260                         )
3261                 else
3262                         AC_MSG_RESULT(no)
3263                         CPPFLAGS="$CPPFLAGS -I${KRB5ROOT}/include"
3264                         LDFLAGS="$LDFLAGS -L${KRB5ROOT}/lib"
3265                         AC_MSG_CHECKING(whether we are using Heimdal)
3266                         AC_TRY_COMPILE([ #include <krb5.h> ],
3267                                        [ char *tmp = heimdal_version; ],
3268                                        [ AC_MSG_RESULT(yes)
3269                                          AC_DEFINE(HEIMDAL)
3270                                          K5LIBS="-lkrb5 -ldes"
3271                                          K5LIBS="$K5LIBS -lcom_err -lasn1"
3272                                          AC_CHECK_LIB(roken, net_write,
3273                                            [K5LIBS="$K5LIBS -lroken"])
3274                                        ],
3275                                        [ AC_MSG_RESULT(no)
3276                                          K5LIBS="-lkrb5 -lk5crypto -lcom_err"
3277                                        ]
3278                         )
3279                         AC_SEARCH_LIBS(dn_expand, resolv)
3280
3281                         AC_CHECK_LIB(gssapi,gss_init_sec_context,
3282                                 [ AC_DEFINE(GSSAPI)
3283                                   K5LIBS="-lgssapi $K5LIBS" ],
3284                                 [ AC_CHECK_LIB(gssapi_krb5,gss_init_sec_context,
3285                                         [ AC_DEFINE(GSSAPI)
3286                                           K5LIBS="-lgssapi_krb5 $K5LIBS" ],
3287                                         AC_MSG_WARN([Cannot find any suitable gss-api library - build may fail]),
3288                                         $K5LIBS)
3289                                 ],
3290                                 $K5LIBS)
3291
3292                         AC_CHECK_HEADER(gssapi.h, ,
3293                                 [ unset ac_cv_header_gssapi_h
3294                                   CPPFLAGS="$CPPFLAGS -I${KRB5ROOT}/include/gssapi"
3295                                   AC_CHECK_HEADERS(gssapi.h, ,
3296                                         AC_MSG_WARN([Cannot find any suitable gss-api header - build may fail])
3297                                   )
3298                                 ]
3299                         )
3300
3301                         oldCPP="$CPPFLAGS"
3302                         CPPFLAGS="$CPPFLAGS -I${KRB5ROOT}/include/gssapi"
3303                         AC_CHECK_HEADER(gssapi_krb5.h, ,
3304                                         [ CPPFLAGS="$oldCPP" ])
3305
3306                 fi
3307                 if test ! -z "$need_dash_r" ; then
3308                         LDFLAGS="$LDFLAGS -R${KRB5ROOT}/lib"
3309                 fi
3310                 if test ! -z "$blibpath" ; then
3311                         blibpath="$blibpath:${KRB5ROOT}/lib"
3312                 fi
3313
3314                 AC_CHECK_HEADERS(gssapi.h gssapi/gssapi.h)
3315                 AC_CHECK_HEADERS(gssapi_krb5.h gssapi/gssapi_krb5.h)
3316                 AC_CHECK_HEADERS(gssapi_generic.h gssapi/gssapi_generic.h)
3317
3318                 LIBS="$LIBS $K5LIBS"
3319                 AC_SEARCH_LIBS(k_hasafs, kafs, AC_DEFINE(USE_AFS, 1,
3320                         [Define this if you want to use libkafs' AFS support]))
3321         fi
3322         ]
3323 )
3324
3325 # Looking for programs, paths and files
3326
3327 PRIVSEP_PATH=/var/empty
3328 AC_ARG_WITH(privsep-path,
3329         [  --with-privsep-path=xxx Path for privilege separation chroot (default=/var/empty)],
3330         [
3331                 if test -n "$withval"  &&  test "x$withval" != "xno"  &&  \
3332                     test "x${withval}" != "xyes"; then
3333                         PRIVSEP_PATH=$withval
3334                 fi
3335         ]
3336 )
3337 AC_SUBST(PRIVSEP_PATH)
3338
3339 AC_ARG_WITH(xauth,
3340         [  --with-xauth=PATH       Specify path to xauth program ],
3341         [
3342                 if test -n "$withval"  &&  test "x$withval" != "xno"  &&  \
3343                     test "x${withval}" != "xyes"; then
3344                         xauth_path=$withval
3345                 fi
3346         ],
3347         [
3348                 TestPath="$PATH"
3349                 TestPath="${TestPath}${PATH_SEPARATOR}/usr/X/bin"
3350                 TestPath="${TestPath}${PATH_SEPARATOR}/usr/bin/X11"
3351                 TestPath="${TestPath}${PATH_SEPARATOR}/usr/X11R6/bin"
3352                 TestPath="${TestPath}${PATH_SEPARATOR}/usr/openwin/bin"
3353                 AC_PATH_PROG(xauth_path, xauth, , $TestPath)
3354                 if (test ! -z "$xauth_path" && test -x "/usr/openwin/bin/xauth") ; then
3355                         xauth_path="/usr/openwin/bin/xauth"
3356                 fi
3357         ]
3358 )
3359
3360 STRIP_OPT=-s
3361 AC_ARG_ENABLE(strip,
3362         [  --disable-strip         Disable calling strip(1) on install],
3363         [
3364                 if test "x$enableval" = "xno" ; then
3365                         STRIP_OPT=
3366                 fi
3367         ]
3368 )
3369 AC_SUBST(STRIP_OPT)
3370
3371 if test -z "$xauth_path" ; then
3372         XAUTH_PATH="undefined"
3373         AC_SUBST(XAUTH_PATH)
3374 else
3375         AC_DEFINE_UNQUOTED(XAUTH_PATH, "$xauth_path",
3376                 [Define if xauth is found in your path])
3377         XAUTH_PATH=$xauth_path
3378         AC_SUBST(XAUTH_PATH)
3379 fi
3380
3381 # Check for mail directory (last resort if we cannot get it from headers)
3382 if test ! -z "$MAIL" ; then
3383         maildir=`dirname $MAIL`
3384         AC_DEFINE_UNQUOTED(MAIL_DIRECTORY, "$maildir",
3385                 [Set this to your mail directory if you don't have maillock.h])
3386 fi
3387
3388 if test ! -z "$cross_compiling" && test "x$cross_compiling" = "xyes"; then
3389         AC_MSG_WARN([cross compiling: Disabling /dev/ptmx test])
3390         disable_ptmx_check=yes
3391 fi
3392 if test -z "$no_dev_ptmx" ; then
3393         if test "x$disable_ptmx_check" != "xyes" ; then
3394                 AC_CHECK_FILE("/dev/ptmx",
3395                         [
3396                                 AC_DEFINE_UNQUOTED(HAVE_DEV_PTMX, 1,
3397                                         [Define if you have /dev/ptmx])
3398                                 have_dev_ptmx=1
3399                         ]
3400                 )
3401         fi
3402 fi
3403
3404 if test ! -z "$cross_compiling" && test "x$cross_compiling" != "xyes"; then
3405         AC_CHECK_FILE("/dev/ptc",
3406                 [
3407                         AC_DEFINE_UNQUOTED(HAVE_DEV_PTS_AND_PTC, 1,
3408                                 [Define if you have /dev/ptc])
3409                         have_dev_ptc=1
3410                 ]
3411         )
3412 else
3413         AC_MSG_WARN([cross compiling: Disabling /dev/ptc test])
3414 fi
3415
3416 # Options from here on. Some of these are preset by platform above
3417 AC_ARG_WITH(mantype,
3418         [  --with-mantype=man|cat|doc  Set man page type],
3419         [
3420                 case "$withval" in
3421                 man|cat|doc)
3422                         MANTYPE=$withval
3423                         ;;
3424                 *)
3425                         AC_MSG_ERROR(invalid man type: $withval)
3426                         ;;
3427                 esac
3428         ]
3429 )
3430 if test -z "$MANTYPE"; then
3431         TestPath="/usr/bin${PATH_SEPARATOR}/usr/ucb"
3432         AC_PATH_PROGS(NROFF, nroff awf, /bin/false, $TestPath)
3433         if ${NROFF} -mdoc ${srcdir}/ssh.1 >/dev/null 2>&1; then
3434                 MANTYPE=doc
3435         elif ${NROFF} -man ${srcdir}/ssh.1 >/dev/null 2>&1; then
3436                 MANTYPE=man
3437         else
3438                 MANTYPE=cat
3439         fi
3440 fi
3441 AC_SUBST(MANTYPE)
3442 if test "$MANTYPE" = "doc"; then
3443         mansubdir=man;
3444 else
3445         mansubdir=$MANTYPE;
3446 fi
3447 AC_SUBST(mansubdir)
3448
3449 # Check whether to enable MD5 passwords
3450 MD5_MSG="no"
3451 AC_ARG_WITH(md5-passwords,
3452         [  --with-md5-passwords    Enable use of MD5 passwords],
3453         [
3454                 if test "x$withval" != "xno" ; then
3455                         AC_DEFINE(HAVE_MD5_PASSWORDS, 1,
3456                                 [Define if you want to allow MD5 passwords])
3457                         MD5_MSG="yes"
3458                 fi
3459         ]
3460 )
3461
3462 # Whether to disable shadow password support
3463 AC_ARG_WITH(shadow,
3464         [  --without-shadow        Disable shadow password support],
3465         [
3466                 if test "x$withval" = "xno" ; then
3467                         AC_DEFINE(DISABLE_SHADOW)
3468                         disable_shadow=yes
3469                 fi
3470         ]
3471 )
3472
3473 if test -z "$disable_shadow" ; then
3474         AC_MSG_CHECKING([if the systems has expire shadow information])
3475         AC_TRY_COMPILE(
3476         [
3477 #include <sys/types.h>
3478 #include <shadow.h>
3479         struct spwd sp;
3480         ],[ sp.sp_expire = sp.sp_lstchg = sp.sp_inact = 0; ],
3481         [ sp_expire_available=yes ], []
3482         )
3483
3484         if test "x$sp_expire_available" = "xyes" ; then
3485                 AC_MSG_RESULT(yes)
3486                 AC_DEFINE(HAS_SHADOW_EXPIRE, 1,
3487                     [Define if you want to use shadow password expire field])
3488         else
3489                 AC_MSG_RESULT(no)
3490         fi
3491 fi
3492
3493 # Use ip address instead of hostname in $DISPLAY
3494 if test ! -z "$IPADDR_IN_DISPLAY" ; then
3495         DISPLAY_HACK_MSG="yes"
3496         AC_DEFINE(IPADDR_IN_DISPLAY, 1,
3497                 [Define if you need to use IP address
3498                 instead of hostname in $DISPLAY])
3499 else
3500         DISPLAY_HACK_MSG="no"
3501         AC_ARG_WITH(ipaddr-display,
3502                 [  --with-ipaddr-display   Use ip address instead of hostname in \$DISPLAY],
3503                 [
3504                         if test "x$withval" != "xno" ; then
3505                                 AC_DEFINE(IPADDR_IN_DISPLAY)
3506                                 DISPLAY_HACK_MSG="yes"
3507                         fi
3508                 ]
3509         )
3510 fi
3511
3512 # check for /etc/default/login and use it if present.
3513 AC_ARG_ENABLE(etc-default-login,
3514         [  --disable-etc-default-login Disable using PATH from /etc/default/login [no]],
3515         [ if test "x$enableval" = "xno"; then
3516                 AC_MSG_NOTICE([/etc/default/login handling disabled])
3517                 etc_default_login=no
3518           else
3519                 etc_default_login=yes
3520           fi ],
3521         [ if test ! -z "$cross_compiling" && test "x$cross_compiling" = "xyes";
3522           then
3523                 AC_MSG_WARN([cross compiling: not checking /etc/default/login])
3524                 etc_default_login=no
3525           else
3526                 etc_default_login=yes
3527           fi ]
3528 )
3529
3530 if test "x$etc_default_login" != "xno"; then
3531         AC_CHECK_FILE("/etc/default/login",
3532             [ external_path_file=/etc/default/login ])
3533         if test "x$external_path_file" = "x/etc/default/login"; then
3534                 AC_DEFINE(HAVE_ETC_DEFAULT_LOGIN, 1,
3535                         [Define if your system has /etc/default/login])
3536         fi
3537 fi
3538
3539 dnl BSD systems use /etc/login.conf so --with-default-path= has no effect
3540 if test $ac_cv_func_login_getcapbool = "yes" && \
3541         test $ac_cv_header_login_cap_h = "yes" ; then
3542         external_path_file=/etc/login.conf
3543 fi
3544
3545 # Whether to mess with the default path
3546 SERVER_PATH_MSG="(default)"
3547 AC_ARG_WITH(default-path,
3548         [  --with-default-path=    Specify default \$PATH environment for server],
3549         [
3550                 if test "x$external_path_file" = "x/etc/login.conf" ; then
3551                         AC_MSG_WARN([
3552 --with-default-path=PATH has no effect on this system.
3553 Edit /etc/login.conf instead.])
3554                 elif test "x$withval" != "xno" ; then
3555                         if test ! -z "$external_path_file" ; then
3556                                 AC_MSG_WARN([
3557 --with-default-path=PATH will only be used if PATH is not defined in
3558 $external_path_file .])
3559                         fi
3560                         user_path="$withval"
3561                         SERVER_PATH_MSG="$withval"
3562                 fi
3563         ],
3564         [ if test "x$external_path_file" = "x/etc/login.conf" ; then
3565                 AC_MSG_WARN([Make sure the path to scp is in /etc/login.conf])
3566         else
3567                 if test ! -z "$external_path_file" ; then
3568                         AC_MSG_WARN([
3569 If PATH is defined in $external_path_file, ensure the path to scp is included,
3570 otherwise scp will not work.])
3571                 fi
3572                 AC_RUN_IFELSE(
3573                         [AC_LANG_SOURCE([[
3574 /* find out what STDPATH is */
3575 #include <stdio.h>
3576 #ifdef HAVE_PATHS_H
3577 # include <paths.h>
3578 #endif
3579 #ifndef _PATH_STDPATH
3580 # ifdef _PATH_USERPATH  /* Irix */
3581 #  define _PATH_STDPATH _PATH_USERPATH
3582 # else
3583 #  define _PATH_STDPATH "/usr/bin:/bin:/usr/sbin:/sbin"
3584 # endif
3585 #endif
3586 #include <sys/types.h>
3587 #include <sys/stat.h>
3588 #include <fcntl.h>
3589 #define DATA "conftest.stdpath"
3590
3591 main()
3592 {
3593         FILE *fd;
3594         int rc;
3595
3596         fd = fopen(DATA,"w");
3597         if(fd == NULL)
3598                 exit(1);
3599
3600         if ((rc = fprintf(fd,"%s", _PATH_STDPATH)) < 0)
3601                 exit(1);
3602
3603         exit(0);
3604 }
3605                 ]])],
3606                 [ user_path=`cat conftest.stdpath` ],
3607                 [ user_path="/usr/bin:/bin:/usr/sbin:/sbin" ],
3608                 [ user_path="/usr/bin:/bin:/usr/sbin:/sbin" ]
3609         )
3610 # make sure $bindir is in USER_PATH so scp will work
3611                 t_bindir=`eval echo ${bindir}`
3612                 case $t_bindir in
3613                         NONE/*) t_bindir=`echo $t_bindir | sed "s~NONE~$prefix~"` ;;
3614                 esac
3615                 case $t_bindir in
3616                         NONE/*) t_bindir=`echo $t_bindir | sed "s~NONE~$ac_default_prefix~"` ;;
3617                 esac
3618                 echo $user_path | grep ":$t_bindir"  > /dev/null 2>&1
3619                 if test $? -ne 0  ; then
3620                         echo $user_path | grep "^$t_bindir"  > /dev/null 2>&1
3621                         if test $? -ne 0  ; then
3622                                 user_path=$user_path:$t_bindir
3623                                 AC_MSG_RESULT(Adding $t_bindir to USER_PATH so scp will work)
3624                         fi
3625                 fi
3626         fi ]
3627 )
3628 if test "x$external_path_file" != "x/etc/login.conf" ; then
3629         AC_DEFINE_UNQUOTED(USER_PATH, "$user_path", [Specify default $PATH])
3630         AC_SUBST(user_path)
3631 fi
3632
3633 # Set superuser path separately to user path
3634 AC_ARG_WITH(superuser-path,
3635         [  --with-superuser-path=  Specify different path for super-user],
3636         [
3637                 if test -n "$withval"  &&  test "x$withval" != "xno"  &&  \
3638                     test "x${withval}" != "xyes"; then
3639                         AC_DEFINE_UNQUOTED(SUPERUSER_PATH, "$withval",
3640                                 [Define if you want a different $PATH
3641                                 for the superuser])
3642                         superuser_path=$withval
3643                 fi
3644         ]
3645 )
3646
3647
3648 AC_MSG_CHECKING([if we need to convert IPv4 in IPv6-mapped addresses])
3649 IPV4_IN6_HACK_MSG="no"
3650 AC_ARG_WITH(4in6,
3651         [  --with-4in6             Check for and convert IPv4 in IPv6 mapped addresses],
3652         [
3653                 if test "x$withval" != "xno" ; then
3654                         AC_MSG_RESULT(yes)
3655                         AC_DEFINE(IPV4_IN_IPV6, 1,
3656                                 [Detect IPv4 in IPv6 mapped addresses
3657                                 and treat as IPv4])
3658                         IPV4_IN6_HACK_MSG="yes"
3659                 else
3660                         AC_MSG_RESULT(no)
3661                 fi
3662         ],[
3663                 if test "x$inet6_default_4in6" = "xyes"; then
3664                         AC_MSG_RESULT([yes (default)])
3665                         AC_DEFINE(IPV4_IN_IPV6)
3666                         IPV4_IN6_HACK_MSG="yes"
3667                 else
3668                         AC_MSG_RESULT([no (default)])
3669                 fi
3670         ]
3671 )
3672
3673 # Whether to enable BSD auth support
3674 BSD_AUTH_MSG=no
3675 AC_ARG_WITH(bsd-auth,
3676         [  --with-bsd-auth         Enable BSD auth support],
3677         [
3678                 if test "x$withval" != "xno" ; then
3679                         AC_DEFINE(BSD_AUTH, 1,
3680                                 [Define if you have BSD auth support])
3681                         BSD_AUTH_MSG=yes
3682                 fi
3683         ]
3684 )
3685
3686 # Where to place sshd.pid
3687 piddir=/var/run
3688 # make sure the directory exists
3689 if test ! -d $piddir ; then
3690         piddir=`eval echo ${sysconfdir}`
3691         case $piddir in
3692                 NONE/*) piddir=`echo $piddir | sed "s~NONE~$ac_default_prefix~"` ;;
3693         esac
3694 fi
3695
3696 AC_ARG_WITH(pid-dir,
3697         [  --with-pid-dir=PATH     Specify location of ssh.pid file],
3698         [
3699                 if test -n "$withval"  &&  test "x$withval" != "xno"  &&  \
3700                     test "x${withval}" != "xyes"; then
3701                         piddir=$withval
3702                         if test ! -d $piddir ; then
3703                         AC_MSG_WARN([** no $piddir directory on this system **])
3704                         fi
3705                 fi
3706         ]
3707 )
3708
3709 AC_DEFINE_UNQUOTED(_PATH_SSH_PIDDIR, "$piddir", [Specify location of ssh.pid])
3710 AC_SUBST(piddir)
3711
3712 dnl allow user to disable some login recording features
3713 AC_ARG_ENABLE(lastlog,
3714         [  --disable-lastlog       disable use of lastlog even if detected [no]],
3715         [
3716                 if test "x$enableval" = "xno" ; then
3717                         AC_DEFINE(DISABLE_LASTLOG)
3718                 fi
3719         ]
3720 )
3721 AC_ARG_ENABLE(utmp,
3722         [  --disable-utmp          disable use of utmp even if detected [no]],
3723         [
3724                 if test "x$enableval" = "xno" ; then
3725                         AC_DEFINE(DISABLE_UTMP)
3726                 fi
3727         ]
3728 )
3729 AC_ARG_ENABLE(utmpx,
3730         [  --disable-utmpx         disable use of utmpx even if detected [no]],
3731         [
3732                 if test "x$enableval" = "xno" ; then
3733                         AC_DEFINE(DISABLE_UTMPX, 1,
3734                                 [Define if you don't want to use utmpx])
3735                 fi
3736         ]
3737 )
3738 AC_ARG_ENABLE(wtmp,
3739         [  --disable-wtmp          disable use of wtmp even if detected [no]],
3740         [
3741                 if test "x$enableval" = "xno" ; then
3742                         AC_DEFINE(DISABLE_WTMP)
3743                 fi
3744         ]
3745 )
3746 AC_ARG_ENABLE(wtmpx,
3747         [  --disable-wtmpx         disable use of wtmpx even if detected [no]],
3748         [
3749                 if test "x$enableval" = "xno" ; then
3750                         AC_DEFINE(DISABLE_WTMPX, 1,
3751                                 [Define if you don't want to use wtmpx])
3752                 fi
3753         ]
3754 )
3755 AC_ARG_ENABLE(libutil,
3756         [  --disable-libutil       disable use of libutil (login() etc.) [no]],
3757         [
3758                 if test "x$enableval" = "xno" ; then
3759                         AC_DEFINE(DISABLE_LOGIN)
3760                 fi
3761         ]
3762 )
3763 AC_ARG_ENABLE(pututline,
3764         [  --disable-pututline     disable use of pututline() etc. ([uw]tmp) [no]],
3765         [
3766                 if test "x$enableval" = "xno" ; then
3767                         AC_DEFINE(DISABLE_PUTUTLINE, 1,
3768                                 [Define if you don't want to use pututline()
3769                                 etc. to write [uw]tmp])
3770                 fi
3771         ]
3772 )
3773 AC_ARG_ENABLE(pututxline,
3774         [  --disable-pututxline    disable use of pututxline() etc. ([uw]tmpx) [no]],
3775         [
3776                 if test "x$enableval" = "xno" ; then
3777                         AC_DEFINE(DISABLE_PUTUTXLINE, 1,
3778                                 [Define if you don't want to use pututxline()
3779                                 etc. to write [uw]tmpx])
3780                 fi
3781         ]
3782 )
3783 AC_ARG_WITH(lastlog,
3784   [  --with-lastlog=FILE|DIR specify lastlog location [common locations]],
3785         [
3786                 if test "x$withval" = "xno" ; then
3787                         AC_DEFINE(DISABLE_LASTLOG)
3788                 elif test -n "$withval"  &&  test "x${withval}" != "xyes"; then
3789                         conf_lastlog_location=$withval
3790                 fi
3791         ]
3792 )
3793
3794 dnl lastlog, [uw]tmpx? detection
3795 dnl  NOTE: set the paths in the platform section to avoid the
3796 dnl   need for command-line parameters
3797 dnl lastlog and [uw]tmp are subject to a file search if all else fails
3798
3799 dnl lastlog detection
3800 dnl  NOTE: the code itself will detect if lastlog is a directory
3801 AC_MSG_CHECKING([if your system defines LASTLOG_FILE])
3802 AC_TRY_COMPILE([
3803 #include <sys/types.h>
3804 #include <utmp.h>
3805 #ifdef HAVE_LASTLOG_H
3806 #  include <lastlog.h>
3807 #endif
3808 #ifdef HAVE_PATHS_H
3809 #  include <paths.h>
3810 #endif
3811 #ifdef HAVE_LOGIN_H
3812 # include <login.h>
3813 #endif
3814         ],
3815         [ char *lastlog = LASTLOG_FILE; ],
3816         [ AC_MSG_RESULT(yes) ],
3817         [
3818                 AC_MSG_RESULT(no)
3819                 AC_MSG_CHECKING([if your system defines _PATH_LASTLOG])
3820                 AC_TRY_COMPILE([
3821 #include <sys/types.h>
3822 #include <utmp.h>
3823 #ifdef HAVE_LASTLOG_H
3824 #  include <lastlog.h>
3825 #endif
3826 #ifdef HAVE_PATHS_H
3827 #  include <paths.h>
3828 #endif
3829                 ],
3830                 [ char *lastlog = _PATH_LASTLOG; ],
3831                 [ AC_MSG_RESULT(yes) ],
3832                 [
3833                         AC_MSG_RESULT(no)
3834                         system_lastlog_path=no
3835                 ])
3836         ]
3837 )
3838
3839 if test -z "$conf_lastlog_location"; then
3840         if test x"$system_lastlog_path" = x"no" ; then
3841                 for f in /var/log/lastlog /usr/adm/lastlog /var/adm/lastlog /etc/security/lastlog ; do
3842                                 if (test -d "$f" || test -f "$f") ; then
3843                                         conf_lastlog_location=$f
3844                                 fi
3845                 done
3846                 if test -z "$conf_lastlog_location"; then
3847                         AC_MSG_WARN([** Cannot find lastlog **])
3848                         dnl Don't define DISABLE_LASTLOG - that means we don't try wtmp/wtmpx
3849                 fi
3850         fi
3851 fi
3852
3853 if test -n "$conf_lastlog_location"; then
3854         AC_DEFINE_UNQUOTED(CONF_LASTLOG_FILE, "$conf_lastlog_location",
3855                 [Define if you want to specify the path to your lastlog file])
3856 fi
3857
3858 dnl utmp detection
3859 AC_MSG_CHECKING([if your system defines UTMP_FILE])
3860 AC_TRY_COMPILE([
3861 #include <sys/types.h>
3862 #include <utmp.h>
3863 #ifdef HAVE_PATHS_H
3864 #  include <paths.h>
3865 #endif
3866         ],
3867         [ char *utmp = UTMP_FILE; ],
3868         [ AC_MSG_RESULT(yes) ],
3869         [ AC_MSG_RESULT(no)
3870           system_utmp_path=no ]
3871 )
3872 if test -z "$conf_utmp_location"; then
3873         if test x"$system_utmp_path" = x"no" ; then
3874                 for f in /etc/utmp /usr/adm/utmp /var/run/utmp; do
3875                         if test -f $f ; then
3876                                 conf_utmp_location=$f
3877                         fi
3878                 done
3879                 if test -z "$conf_utmp_location"; then
3880                         AC_DEFINE(DISABLE_UTMP)
3881                 fi
3882         fi
3883 fi
3884 if test -n "$conf_utmp_location"; then
3885         AC_DEFINE_UNQUOTED(CONF_UTMP_FILE, "$conf_utmp_location",
3886                 [Define if you want to specify the path to your utmp file])
3887 fi
3888
3889 dnl wtmp detection
3890 AC_MSG_CHECKING([if your system defines WTMP_FILE])
3891 AC_TRY_COMPILE([
3892 #include <sys/types.h>
3893 #include <utmp.h>
3894 #ifdef HAVE_PATHS_H
3895 #  include <paths.h>
3896 #endif
3897         ],
3898         [ char *wtmp = WTMP_FILE; ],
3899         [ AC_MSG_RESULT(yes) ],
3900         [ AC_MSG_RESULT(no)
3901           system_wtmp_path=no ]
3902 )
3903 if test -z "$conf_wtmp_location"; then
3904         if test x"$system_wtmp_path" = x"no" ; then
3905                 for f in /usr/adm/wtmp /var/log/wtmp; do
3906                         if test -f $f ; then
3907                                 conf_wtmp_location=$f
3908                         fi
3909                 done
3910                 if test -z "$conf_wtmp_location"; then
3911                         AC_DEFINE(DISABLE_WTMP)
3912                 fi
3913         fi
3914 fi
3915 if test -n "$conf_wtmp_location"; then
3916         AC_DEFINE_UNQUOTED(CONF_WTMP_FILE, "$conf_wtmp_location",
3917                 [Define if you want to specify the path to your wtmp file])
3918 fi
3919
3920
3921 dnl utmpx detection - I don't know any system so perverse as to require
3922 dnl  utmpx, but not define UTMPX_FILE (ditto wtmpx.) No doubt it's out
3923 dnl  there, though.
3924 AC_MSG_CHECKING([if your system defines UTMPX_FILE])
3925 AC_TRY_COMPILE([
3926 #include <sys/types.h>
3927 #include <utmp.h>
3928 #ifdef HAVE_UTMPX_H
3929 #include <utmpx.h>
3930 #endif
3931 #ifdef HAVE_PATHS_H
3932 #  include <paths.h>
3933 #endif
3934         ],
3935         [ char *utmpx = UTMPX_FILE; ],
3936         [ AC_MSG_RESULT(yes) ],
3937         [ AC_MSG_RESULT(no)
3938           system_utmpx_path=no ]
3939 )
3940 if test -z "$conf_utmpx_location"; then
3941         if test x"$system_utmpx_path" = x"no" ; then
3942                 AC_DEFINE(DISABLE_UTMPX)
3943         fi
3944 else
3945         AC_DEFINE_UNQUOTED(CONF_UTMPX_FILE, "$conf_utmpx_location",
3946                 [Define if you want to specify the path to your utmpx file])
3947 fi
3948
3949 dnl wtmpx detection
3950 AC_MSG_CHECKING([if your system defines WTMPX_FILE])
3951 AC_TRY_COMPILE([
3952 #include <sys/types.h>
3953 #include <utmp.h>
3954 #ifdef HAVE_UTMPX_H
3955 #include <utmpx.h>
3956 #endif
3957 #ifdef HAVE_PATHS_H
3958 #  include <paths.h>
3959 #endif
3960         ],
3961         [ char *wtmpx = WTMPX_FILE; ],
3962         [ AC_MSG_RESULT(yes) ],
3963         [ AC_MSG_RESULT(no)
3964           system_wtmpx_path=no ]
3965 )
3966 if test -z "$conf_wtmpx_location"; then
3967         if test x"$system_wtmpx_path" = x"no" ; then
3968                 AC_DEFINE(DISABLE_WTMPX)
3969         fi
3970 else
3971         AC_DEFINE_UNQUOTED(CONF_WTMPX_FILE, "$conf_wtmpx_location",
3972                 [Define if you want to specify the path to your wtmpx file])
3973 fi
3974
3975
3976 if test ! -z "$blibpath" ; then
3977         LDFLAGS="$LDFLAGS $blibflags$blibpath"
3978         AC_MSG_WARN([Please check and edit blibpath in LDFLAGS in Makefile])
3979 fi
3980
3981 dnl Adding -Werror to CFLAGS early prevents configure tests from running.
3982 dnl Add now.
3983 CFLAGS="$CFLAGS $werror_flags"
3984
3985 AC_EXEEXT
3986 AC_CONFIG_FILES([Makefile buildpkg.sh opensshd.init openssh.xml \
3987         openbsd-compat/Makefile openbsd-compat/regress/Makefile \
3988         scard/Makefile ssh_prng_cmds survey.sh])
3989 AC_OUTPUT
3990
3991 # Print summary of options
3992
3993 # Someone please show me a better way :)
3994 A=`eval echo ${prefix}` ; A=`eval echo ${A}`
3995 B=`eval echo ${bindir}` ; B=`eval echo ${B}`
3996 C=`eval echo ${sbindir}` ; C=`eval echo ${C}`
3997 D=`eval echo ${sysconfdir}` ; D=`eval echo ${D}`
3998 E=`eval echo ${libexecdir}/ssh-askpass` ; E=`eval echo ${E}`
3999 F=`eval echo ${mandir}/${mansubdir}X` ; F=`eval echo ${F}`
4000 G=`eval echo ${piddir}` ; G=`eval echo ${G}`
4001 H=`eval echo ${PRIVSEP_PATH}` ; H=`eval echo ${H}`
4002 I=`eval echo ${user_path}` ; I=`eval echo ${I}`
4003 J=`eval echo ${superuser_path}` ; J=`eval echo ${J}`
4004
4005 echo ""
4006 echo "OpenSSH has been configured with the following options:"
4007 echo "                     User binaries: $B"
4008 echo "                   System binaries: $C"
4009 echo "               Configuration files: $D"
4010 echo "                   Askpass program: $E"
4011 echo "                      Manual pages: $F"
4012 echo "                          PID file: $G"
4013 echo "  Privilege separation chroot path: $H"
4014 if test "x$external_path_file" = "x/etc/login.conf" ; then
4015 echo "   At runtime, sshd will use the path defined in $external_path_file"
4016 echo "   Make sure the path to scp is present, otherwise scp will not work"
4017 else
4018 echo "            sshd default user PATH: $I"
4019         if test ! -z "$external_path_file"; then
4020 echo "   (If PATH is set in $external_path_file it will be used instead. If"
4021 echo "   used, ensure the path to scp is present, otherwise scp will not work.)"
4022         fi
4023 fi
4024 if test ! -z "$superuser_path" ; then
4025 echo "          sshd superuser user PATH: $J"
4026 fi
4027 echo "                    Manpage format: $MANTYPE"
4028 echo "                       PAM support: $PAM_MSG"
4029 echo "                   OSF SIA support: $SIA_MSG"
4030 echo "                 KerberosV support: $KRB5_MSG"
4031 echo "                   SELinux support: $SELINUX_MSG"
4032 echo "                 Smartcard support: $SCARD_MSG"
4033 echo "                     S/KEY support: $SKEY_MSG"
4034 echo "              TCP Wrappers support: $TCPW_MSG"
4035 echo "              MD5 password support: $MD5_MSG"
4036 echo "                   libedit support: $LIBEDIT_MSG"
4037 echo "  Solaris process contract support: $SPC_MSG"
4038 echo "       IP address in \$DISPLAY hack: $DISPLAY_HACK_MSG"
4039 echo "           Translate v4 in v6 hack: $IPV4_IN6_HACK_MSG"
4040 echo "                  BSD Auth support: $BSD_AUTH_MSG"
4041 echo "              Random number source: $RAND_MSG"
4042 if test ! -z "$USE_RAND_HELPER" ; then
4043 echo "     ssh-rand-helper collects from: $RAND_HELPER_MSG"
4044 fi
4045
4046 echo ""
4047
4048 echo "              Host: ${host}"
4049 echo "          Compiler: ${CC}"
4050 echo "    Compiler flags: ${CFLAGS}"
4051 echo "Preprocessor flags: ${CPPFLAGS}"
4052 echo "      Linker flags: ${LDFLAGS}"
4053 echo "         Libraries: ${LIBS}"
4054 if test ! -z "${SSHDLIBS}"; then
4055 echo "         +for sshd: ${SSHDLIBS}"
4056 fi
4057
4058 echo ""
4059
4060 if test "x$MAKE_PACKAGE_SUPPORTED" = "xyes" ; then
4061         echo "SVR4 style packages are supported with \"make package\""
4062         echo ""
4063 fi
4064
4065 if test "x$PAM_MSG" = "xyes" ; then
4066         echo "PAM is enabled. You may need to install a PAM control file "
4067         echo "for sshd, otherwise password authentication may fail. "
4068         echo "Example PAM control files can be found in the contrib/ "
4069         echo "subdirectory"
4070         echo ""
4071 fi
4072
4073 if test ! -z "$RAND_HELPER_CMDHASH" ; then
4074         echo "WARNING: you are using the builtin random number collection "
4075         echo "service. Please read WARNING.RNG and request that your OS "
4076         echo "vendor includes kernel-based random number collection in "
4077         echo "future versions of your OS."
4078         echo ""
4079 fi
4080
4081 if test ! -z "$NO_PEERCHECK" ; then
4082         echo "WARNING: the operating system that you are using does not"
4083         echo "appear to support getpeereid(), getpeerucred() or the"
4084         echo "SO_PEERCRED getsockopt() option. These facilities are used to"
4085         echo "enforce security checks to prevent unauthorised connections to"
4086         echo "ssh-agent. Their absence increases the risk that a malicious"
4087         echo "user can connect to your agent."
4088         echo ""
4089 fi
4090
4091 if test "$AUDIT_MODULE" = "bsm" ; then
4092         echo "WARNING: BSM audit support is currently considered EXPERIMENTAL."
4093         echo "See the Solaris section in README.platform for details."
4094 fi
This page took 0.368952 seconds and 3 git commands to generate.