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