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