]> andersk Git - openssh.git/blob - configure.ac
- (dtucker) [configure.ac openbsd-compat/getrrsetbyname.c] Declare h_errno
[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
18 AC_CONFIG_SRCDIR([ssh.c])
19
20 AC_CONFIG_HEADER(config.h)
21 AC_PROG_CC
22 AC_CANONICAL_HOST
23 AC_C_BIGENDIAN
24
25 # Checks for programs.
26 AC_PROG_AWK
27 AC_PROG_CPP
28 AC_PROG_RANLIB
29 AC_PROG_INSTALL
30 AC_PATH_PROG(AR, ar)
31 AC_PATH_PROGS(PERL, perl5 perl)
32 AC_PATH_PROG(SED, sed)
33 AC_SUBST(PERL)
34 AC_PATH_PROG(ENT, ent)
35 AC_SUBST(ENT)
36 AC_PATH_PROG(TEST_MINUS_S_SH, bash)
37 AC_PATH_PROG(TEST_MINUS_S_SH, ksh)
38 AC_PATH_PROG(TEST_MINUS_S_SH, sh)
39 AC_PATH_PROG(SH, sh)
40
41 # System features
42 AC_SYS_LARGEFILE
43
44 if test -z "$AR" ; then
45         AC_MSG_ERROR([*** 'ar' missing, please install or fix your \$PATH ***])
46 fi
47
48 # Use LOGIN_PROGRAM from environment if possible
49 if test ! -z "$LOGIN_PROGRAM" ; then
50         AC_DEFINE_UNQUOTED(LOGIN_PROGRAM_FALLBACK, "$LOGIN_PROGRAM")
51 else
52         # Search for login
53         AC_PATH_PROG(LOGIN_PROGRAM_FALLBACK, login)
54         if test ! -z "$LOGIN_PROGRAM_FALLBACK" ; then
55                 AC_DEFINE_UNQUOTED(LOGIN_PROGRAM_FALLBACK, "$LOGIN_PROGRAM_FALLBACK")
56         fi
57 fi
58
59 AC_PATH_PROG(PATH_PASSWD_PROG, passwd)
60 if test ! -z "$PATH_PASSWD_PROG" ; then
61         AC_DEFINE_UNQUOTED(_PATH_PASSWD_PROG, "$PATH_PASSWD_PROG")
62 fi
63
64 if test -z "$LD" ; then
65         LD=$CC
66 fi
67 AC_SUBST(LD)
68         
69 AC_C_INLINE
70 if test "$GCC" = "yes" || test "$GCC" = "egcs"; then
71         CFLAGS="$CFLAGS -Wall -Wpointer-arith -Wno-uninitialized"
72 fi
73
74 AC_ARG_WITH(rpath,
75         [  --without-rpath         Disable auto-added -R linker paths],
76         [
77                 if test "x$withval" = "xno" ; then      
78                         need_dash_r=""
79                 fi
80                 if test "x$withval" = "xyes" ; then
81                         need_dash_r=1
82                 fi
83         ]
84 )
85
86 # Check for some target-specific stuff
87 case "$host" in
88 *-*-aix*)
89         AC_MSG_CHECKING([how to specify blibpath for linker ($LD)])
90         if (test -z "$blibpath"); then
91                 blibpath="/usr/lib:/lib"
92         fi
93         saved_LDFLAGS="$LDFLAGS"
94         for tryflags in -blibpath: -Wl,-blibpath: -Wl,-rpath, ;do
95                 if (test -z "$blibflags"); then
96                         LDFLAGS="$saved_LDFLAGS $tryflags$blibpath"
97                         AC_TRY_LINK([], [], [blibflags=$tryflags])
98                 fi
99         done
100         if (test -z "$blibflags"); then
101                 AC_MSG_RESULT(not found)
102                 AC_MSG_ERROR([*** must be able to specify blibpath on AIX - check config.log])
103         else
104                 AC_MSG_RESULT($blibflags)
105         fi
106         LDFLAGS="$saved_LDFLAGS"
107         dnl Check for authenticate.  Might be in libs.a on older AIXes
108         AC_CHECK_FUNC(authenticate, [AC_DEFINE(WITH_AIXAUTHENTICATE)],
109                 [AC_CHECK_LIB(s,authenticate,
110                         [ AC_DEFINE(WITH_AIXAUTHENTICATE)
111                                 LIBS="$LIBS -ls"
112                         ])
113                 ])
114         dnl Check if loginfailed is declared and takes 4 arguments (AIX >= 5.2)
115         AC_CHECK_DECL(loginfailed,
116                  [AC_MSG_CHECKING(if loginfailed takes 4 arguments)
117                   AC_TRY_COMPILE(
118                         [#include <usersec.h>],
119                         [(void)loginfailed("user","host","tty",0);],
120                         [AC_MSG_RESULT(yes)
121                          AC_DEFINE(AIX_LOGINFAILED_4ARG)],
122                         [AC_MSG_RESULT(no)]
123                 )],
124                 [],
125                 [#include <usersec.h>]
126         )
127         AC_CHECK_FUNCS(setauthdb)
128         AC_DEFINE(BROKEN_GETADDRINFO)
129         AC_DEFINE(BROKEN_REALPATH)
130         AC_DEFINE(SETEUID_BREAKS_SETUID)
131         AC_DEFINE(BROKEN_SETREUID)
132         AC_DEFINE(BROKEN_SETREGID)
133         dnl AIX handles lastlog as part of its login message
134         AC_DEFINE(DISABLE_LASTLOG)
135         AC_DEFINE(LOGIN_NEEDS_UTMPX)
136         AC_DEFINE(SPT_TYPE,SPT_REUSEARGV)
137         ;;
138 *-*-cygwin*)
139         check_for_libcrypt_later=1
140         LIBS="$LIBS /usr/lib/textmode.o"
141         AC_DEFINE(HAVE_CYGWIN)
142         AC_DEFINE(USE_PIPES)
143         AC_DEFINE(DISABLE_SHADOW)
144         AC_DEFINE(IP_TOS_IS_BROKEN)
145         AC_DEFINE(NO_X11_UNIX_SOCKETS)
146         AC_DEFINE(NO_IPPORT_RESERVED_CONCEPT)
147         AC_DEFINE(DISABLE_FD_PASSING)
148         AC_DEFINE(SETGROUPS_NOOP)
149         ;;
150 *-*-dgux*)
151         AC_DEFINE(IP_TOS_IS_BROKEN)
152         AC_DEFINE(SETEUID_BREAKS_SETUID)
153         AC_DEFINE(BROKEN_SETREUID)
154         AC_DEFINE(BROKEN_SETREGID)
155         ;;
156 *-*-darwin*)
157         AC_MSG_CHECKING(if we have working getaddrinfo)
158         AC_TRY_RUN([#include <mach-o/dyld.h>
159 main() { if (NSVersionOfRunTimeLibrary("System") >= (60 << 16))
160                 exit(0);
161         else
162                 exit(1);
163 }], [AC_MSG_RESULT(working)],
164         [AC_MSG_RESULT(buggy)
165         AC_DEFINE(BROKEN_GETADDRINFO)],
166         [AC_MSG_RESULT(assume it is working)])
167         AC_DEFINE(SETEUID_BREAKS_SETUID)
168         AC_DEFINE(BROKEN_SETREUID)
169         AC_DEFINE(BROKEN_SETREGID)
170         AC_DEFINE_UNQUOTED(BIND_8_COMPAT, 1)
171         ;;
172 *-*-hpux10.26)
173         if test -z "$GCC"; then
174                 CFLAGS="$CFLAGS -Ae"
175         fi
176         CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1"
177         IPADDR_IN_DISPLAY=yes
178         AC_DEFINE(HAVE_SECUREWARE)
179         AC_DEFINE(USE_PIPES)
180         AC_DEFINE(LOGIN_NO_ENDOPT)
181         AC_DEFINE(LOGIN_NEEDS_UTMPX)
182         AC_DEFINE(LOCKED_PASSWD_STRING, "*")
183         AC_DEFINE(SPT_TYPE,SPT_PSTAT)
184         LIBS="$LIBS -lsec -lsecpw"
185         AC_CHECK_LIB(xnet, t_error, ,AC_MSG_ERROR([*** -lxnet needed on HP-UX - check config.log ***]))
186         disable_ptmx_check=yes
187         ;;
188 *-*-hpux10*)
189         if test -z "$GCC"; then
190                 CFLAGS="$CFLAGS -Ae"
191         fi
192         CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1"
193         IPADDR_IN_DISPLAY=yes
194         AC_DEFINE(USE_PIPES)
195         AC_DEFINE(LOGIN_NO_ENDOPT)
196         AC_DEFINE(LOGIN_NEEDS_UTMPX)
197         AC_DEFINE(LOCKED_PASSWD_STRING, "*")
198         AC_DEFINE(SPT_TYPE,SPT_PSTAT)
199         LIBS="$LIBS -lsec"
200         AC_CHECK_LIB(xnet, t_error, ,AC_MSG_ERROR([*** -lxnet needed on HP-UX - check config.log ***]))
201         ;;
202 *-*-hpux11*)
203         CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1"
204         IPADDR_IN_DISPLAY=yes
205         AC_DEFINE(PAM_SUN_CODEBASE)
206         AC_DEFINE(USE_PIPES)
207         AC_DEFINE(LOGIN_NO_ENDOPT)
208         AC_DEFINE(LOGIN_NEEDS_UTMPX)
209         AC_DEFINE(DISABLE_UTMP)
210         AC_DEFINE(LOCKED_PASSWD_STRING, "*")
211         AC_DEFINE(SPT_TYPE,SPT_PSTAT)
212         check_for_hpux_broken_getaddrinfo=1
213         LIBS="$LIBS -lsec"
214         AC_CHECK_LIB(xnet, t_error, ,AC_MSG_ERROR([*** -lxnet needed on HP-UX - check config.log ***]))
215         ;;
216 *-*-irix5*)
217         PATH="$PATH:/usr/etc"
218         AC_DEFINE(BROKEN_INET_NTOA)
219         AC_DEFINE(SETEUID_BREAKS_SETUID)
220         AC_DEFINE(BROKEN_SETREUID)
221         AC_DEFINE(BROKEN_SETREGID)
222         AC_DEFINE(WITH_ABBREV_NO_TTY)
223         AC_DEFINE(LOCKED_PASSWD_STRING, "*LK*")
224         ;;
225 *-*-irix6*)
226         PATH="$PATH:/usr/etc"
227         AC_DEFINE(WITH_IRIX_ARRAY)
228         AC_DEFINE(WITH_IRIX_PROJECT)
229         AC_DEFINE(WITH_IRIX_AUDIT)
230         AC_CHECK_FUNC(jlimit_startjob, [AC_DEFINE(WITH_IRIX_JOBS)])
231         AC_DEFINE(BROKEN_INET_NTOA)
232         AC_DEFINE(SETEUID_BREAKS_SETUID)
233         AC_DEFINE(BROKEN_SETREUID)
234         AC_DEFINE(BROKEN_SETREGID)
235         AC_DEFINE(BROKEN_UPDWTMPX)
236         AC_DEFINE(WITH_ABBREV_NO_TTY)
237         AC_DEFINE(LOCKED_PASSWD_STRING, "*LK*")
238         ;;
239 *-*-linux*)
240         no_dev_ptmx=1
241         check_for_libcrypt_later=1
242         check_for_openpty_ctty_bug=1
243         AC_DEFINE(DONT_TRY_OTHER_AF)
244         AC_DEFINE(PAM_TTY_KLUDGE)
245         AC_DEFINE(LOCKED_PASSWD_PREFIX, "!")
246         AC_DEFINE(SPT_TYPE,SPT_REUSEARGV)
247         inet6_default_4in6=yes
248         case `uname -r` in
249         1.*|2.0.*)
250                 AC_DEFINE(BROKEN_CMSG_TYPE)
251                 ;;
252         esac
253         ;;
254 mips-sony-bsd|mips-sony-newsos4)
255         AC_DEFINE(HAVE_NEWS4)
256         SONY=1
257         ;;
258 *-*-netbsd*)
259         check_for_libcrypt_before=1
260         if test "x$withval" != "xno" ; then     
261                 need_dash_r=1
262         fi
263         ;;
264 *-*-freebsd*)
265         check_for_libcrypt_later=1
266         ;;
267 *-*-bsdi*)
268         AC_DEFINE(SETEUID_BREAKS_SETUID)
269         AC_DEFINE(BROKEN_SETREUID)
270         AC_DEFINE(BROKEN_SETREGID)
271         ;;
272 *-next-*)
273         conf_lastlog_location="/usr/adm/lastlog"
274         conf_utmp_location=/etc/utmp
275         conf_wtmp_location=/usr/adm/wtmp
276         MAIL=/usr/spool/mail
277         AC_DEFINE(HAVE_NEXT)
278         AC_DEFINE(BROKEN_REALPATH)
279         AC_DEFINE(USE_PIPES)
280         AC_DEFINE(BROKEN_SAVED_UIDS)
281         ;;
282 *-*-solaris*)
283         if test "x$withval" != "xno" ; then     
284                 need_dash_r=1
285         fi
286         AC_DEFINE(PAM_SUN_CODEBASE)
287         AC_DEFINE(LOGIN_NEEDS_UTMPX)
288         AC_DEFINE(LOGIN_NEEDS_TERM)
289         AC_DEFINE(PAM_TTY_KLUDGE)
290         AC_DEFINE(LOCKED_PASSWD_STRING, "*LK*")
291         # Pushing STREAMS modules will cause sshd to acquire a controlling tty.
292         AC_DEFINE(SSHD_ACQUIRES_CTTY)
293         external_path_file=/etc/default/login
294         # hardwire lastlog location (can't detect it on some versions)
295         conf_lastlog_location="/var/adm/lastlog"
296         AC_MSG_CHECKING(for obsolete utmp and wtmp in solaris2.x)
297         sol2ver=`echo "$host"| sed -e 's/.*[[0-9]]\.//'`
298         if test "$sol2ver" -ge 8; then
299                 AC_MSG_RESULT(yes)
300                 AC_DEFINE(DISABLE_UTMP)
301                 AC_DEFINE(DISABLE_WTMP)
302         else
303                 AC_MSG_RESULT(no)
304         fi
305         ;;
306 *-*-sunos4*)
307         CPPFLAGS="$CPPFLAGS -DSUNOS4"
308         AC_CHECK_FUNCS(getpwanam)
309         AC_DEFINE(PAM_SUN_CODEBASE)
310         conf_utmp_location=/etc/utmp
311         conf_wtmp_location=/var/adm/wtmp
312         conf_lastlog_location=/var/adm/lastlog
313         AC_DEFINE(USE_PIPES)
314         ;;
315 *-ncr-sysv*)
316         LIBS="$LIBS -lc89"
317         AC_DEFINE(USE_PIPES)
318         AC_DEFINE(SSHD_ACQUIRES_CTTY)
319         AC_DEFINE(SETEUID_BREAKS_SETUID)
320         AC_DEFINE(BROKEN_SETREUID)
321         AC_DEFINE(BROKEN_SETREGID)
322         ;;
323 *-sni-sysv*)
324         # /usr/ucblib MUST NOT be searched on ReliantUNIX
325         AC_CHECK_LIB(dl, dlsym, ,)
326         IPADDR_IN_DISPLAY=yes
327         AC_DEFINE(USE_PIPES)
328         AC_DEFINE(IP_TOS_IS_BROKEN)
329         AC_DEFINE(SETEUID_BREAKS_SETUID)
330         AC_DEFINE(BROKEN_SETREUID)
331         AC_DEFINE(BROKEN_SETREGID)
332         AC_DEFINE(SSHD_ACQUIRES_CTTY)
333         external_path_file=/etc/default/login
334         # /usr/ucblib/libucb.a no longer needed on ReliantUNIX
335         # Attention: always take care to bind libsocket and libnsl before libc,
336         # otherwise you will find lots of "SIOCGPGRP errno 22" on syslog
337         ;;
338 *-*-sysv4.2*)
339         AC_DEFINE(USE_PIPES)
340         AC_DEFINE(SETEUID_BREAKS_SETUID)
341         AC_DEFINE(BROKEN_SETREUID)
342         AC_DEFINE(BROKEN_SETREGID)
343         ;;
344 *-*-sysv5*)
345         AC_DEFINE(USE_PIPES)
346         AC_DEFINE(SETEUID_BREAKS_SETUID)
347         AC_DEFINE(BROKEN_SETREUID)
348         AC_DEFINE(BROKEN_SETREGID)
349         ;;
350 *-*-sysv*)
351         ;;
352 *-*-sco3.2v4*)
353         CPPFLAGS="$CPPFLAGS -Dftruncate=chsize"
354         LIBS="$LIBS -los -lprot -lcrypt_i -lx -ltinfo -lm"
355         RANLIB=true
356         no_dev_ptmx=1
357         AC_DEFINE(BROKEN_SYS_TERMIO_H)
358         AC_DEFINE(USE_PIPES)
359         AC_DEFINE(HAVE_SECUREWARE)
360         AC_DEFINE(DISABLE_SHADOW)
361         AC_DEFINE(BROKEN_SAVED_UIDS)
362         AC_DEFINE(SETEUID_BREAKS_SETUID)
363         AC_DEFINE(BROKEN_SETREUID)
364         AC_DEFINE(BROKEN_SETREGID)
365         AC_DEFINE(WITH_ABBREV_NO_TTY)
366         AC_CHECK_FUNCS(getluid setluid)
367         MANTYPE=man
368         do_sco3_extra_lib_check=yes
369         ;;
370 *-*-sco3.2v5*)
371         if test -z "$GCC"; then
372                 CFLAGS="$CFLAGS -belf"
373         fi
374         LIBS="$LIBS -lprot -lx -ltinfo -lm"
375         no_dev_ptmx=1
376         AC_DEFINE(USE_PIPES)
377         AC_DEFINE(HAVE_SECUREWARE)
378         AC_DEFINE(DISABLE_SHADOW)
379         AC_DEFINE(DISABLE_FD_PASSING)
380         AC_DEFINE(SETEUID_BREAKS_SETUID)
381         AC_DEFINE(BROKEN_SETREUID)
382         AC_DEFINE(BROKEN_SETREGID)
383         AC_DEFINE(WITH_ABBREV_NO_TTY)
384         AC_CHECK_FUNCS(getluid setluid)
385         MANTYPE=man
386         ;;
387 *-*-unicosmk*)
388         AC_DEFINE(NO_SSH_LASTLOG)
389         AC_DEFINE(SETEUID_BREAKS_SETUID)
390         AC_DEFINE(BROKEN_SETREUID)
391         AC_DEFINE(BROKEN_SETREGID)
392         AC_DEFINE(USE_PIPES)
393         AC_DEFINE(DISABLE_FD_PASSING)
394         LDFLAGS="$LDFLAGS"
395         LIBS="$LIBS -lgen -lrsc -lshare -luex -lacm"
396         MANTYPE=cat
397         ;;
398 *-*-unicosmp*)
399         AC_DEFINE(SETEUID_BREAKS_SETUID)
400         AC_DEFINE(BROKEN_SETREUID)
401         AC_DEFINE(BROKEN_SETREGID)
402         AC_DEFINE(WITH_ABBREV_NO_TTY)
403         AC_DEFINE(USE_PIPES)
404         AC_DEFINE(DISABLE_FD_PASSING)
405         LDFLAGS="$LDFLAGS"
406         LIBS="$LIBS -lgen -lacid -ldb"
407         MANTYPE=cat
408         ;;
409 *-*-unicos*)
410         AC_DEFINE(SETEUID_BREAKS_SETUID)
411         AC_DEFINE(BROKEN_SETREUID)
412         AC_DEFINE(BROKEN_SETREGID)
413         AC_DEFINE(USE_PIPES)
414         AC_DEFINE(DISABLE_FD_PASSING)
415         AC_DEFINE(NO_SSH_LASTLOG)
416         LDFLAGS="$LDFLAGS -Wl,-Dmsglevel=334:fatal"
417         LIBS="$LIBS -lgen -lrsc -lshare -luex -lacm"
418         MANTYPE=cat
419         ;;
420 *-dec-osf*)
421         AC_MSG_CHECKING(for Digital Unix SIA)
422         no_osfsia=""
423         AC_ARG_WITH(osfsia,
424                 [  --with-osfsia           Enable Digital Unix SIA],
425                 [
426                         if test "x$withval" = "xno" ; then
427                                 AC_MSG_RESULT(disabled)
428                                 no_osfsia=1
429                         fi
430                 ],
431         )
432         if test -z "$no_osfsia" ; then
433                 if test -f /etc/sia/matrix.conf; then
434                         AC_MSG_RESULT(yes)
435                         AC_DEFINE(HAVE_OSF_SIA)
436                         AC_DEFINE(DISABLE_LOGIN)
437                         AC_DEFINE(DISABLE_FD_PASSING)
438                         LIBS="$LIBS -lsecurity -ldb -lm -laud"
439                 else
440                         AC_MSG_RESULT(no)
441                         AC_DEFINE(LOCKED_PASSWD_SUBSTR, "Nologin")
442                 fi
443         fi
444         AC_DEFINE(BROKEN_GETADDRINFO)
445         AC_DEFINE(SETEUID_BREAKS_SETUID)
446         AC_DEFINE(BROKEN_SETREUID)
447         AC_DEFINE(BROKEN_SETREGID)
448         ;;
449
450 *-*-nto-qnx)
451         AC_DEFINE(USE_PIPES)
452         AC_DEFINE(NO_X11_UNIX_SOCKETS)
453         AC_DEFINE(MISSING_NFDBITS)
454         AC_DEFINE(MISSING_HOWMANY)
455         AC_DEFINE(MISSING_FD_MASK)
456         ;;
457 esac
458
459 # Allow user to specify flags
460 AC_ARG_WITH(cflags,
461         [  --with-cflags           Specify additional flags to pass to compiler],
462         [
463                 if test "x$withval" != "xno" ; then
464                         CFLAGS="$CFLAGS $withval"
465                 fi
466         ]       
467 )
468 AC_ARG_WITH(cppflags,
469         [  --with-cppflags         Specify additional flags to pass to preprocessor] ,
470         [
471                 if test "x$withval" != "xno"; then
472                         CPPFLAGS="$CPPFLAGS $withval"
473                 fi
474         ]
475 )
476 AC_ARG_WITH(ldflags,
477         [  --with-ldflags          Specify additional flags to pass to linker],
478         [
479                 if test "x$withval" != "xno" ; then
480                         LDFLAGS="$LDFLAGS $withval"
481                 fi
482         ]       
483 )
484 AC_ARG_WITH(libs,
485         [  --with-libs             Specify additional libraries to link with],
486         [
487                 if test "x$withval" != "xno" ; then
488                         LIBS="$LIBS $withval"
489                 fi
490         ]       
491 )
492
493 AC_MSG_CHECKING(compiler and flags for sanity)
494 AC_TRY_RUN([
495 #include <stdio.h>
496 int main(){exit(0);}
497         ],
498         [       AC_MSG_RESULT(yes) ],
499         [
500                 AC_MSG_RESULT(no)
501                 AC_MSG_ERROR([*** compiler cannot create working executables, check config.log ***])
502         ]
503 )
504
505 # Checks for header files.
506 AC_CHECK_HEADERS(bstring.h crypt.h endian.h features.h floatingpoint.h \
507         getopt.h glob.h ia.h lastlog.h limits.h login.h \
508         login_cap.h maillock.h netdb.h netgroup.h \
509         netinet/in_systm.h pam/pam_appl.h paths.h pty.h readpassphrase.h \
510         rpc/types.h security/pam_appl.h shadow.h stddef.h stdint.h \
511         strings.h sys/strtio.h sys/audit.h sys/bitypes.h sys/bsdtty.h \
512         sys/cdefs.h sys/mman.h sys/prctl.h sys/pstat.h sys/ptms.h \
513         sys/select.h sys/stat.h sys/stream.h sys/stropts.h \
514         sys/sysmacros.h sys/time.h sys/timers.h sys/un.h time.h tmpdir.h \
515         ttyent.h usersec.h util.h utime.h utmp.h utmpx.h vis.h)
516
517 # Checks for libraries.
518 AC_CHECK_FUNC(yp_match, , AC_CHECK_LIB(nsl, yp_match))
519 AC_CHECK_FUNC(setsockopt, , AC_CHECK_LIB(socket, setsockopt))
520
521 dnl SCO OS3 needs this for libwrap
522 if test "x$with_tcp_wrappers" != "xno" ; then
523     if test "x$do_sco3_extra_lib_check" = "xyes" ; then
524         AC_CHECK_LIB(rpc, innetgr, LIBS="-lrpc -lyp -lrpc $LIBS" , , -lyp -lrpc)
525     fi
526 fi
527
528 dnl IRIX and Solaris 2.5.1 have dirname() in libgen
529 AC_CHECK_FUNCS(dirname, [AC_CHECK_HEADERS(libgen.h)] ,[
530         AC_CHECK_LIB(gen, dirname,[
531                 AC_CACHE_CHECK([for broken dirname],
532                         ac_cv_have_broken_dirname, [
533                         save_LIBS="$LIBS"
534                         LIBS="$LIBS -lgen"
535                         AC_TRY_RUN(
536                                 [
537 #include <libgen.h>
538 #include <string.h>
539
540 int main(int argc, char **argv) {
541     char *s, buf[32];
542
543     strncpy(buf,"/etc", 32);
544     s = dirname(buf);
545     if (!s || strncmp(s, "/", 32) != 0) {
546         exit(1);
547     } else {
548         exit(0);
549     }
550 }
551                                 ],
552                                 [ ac_cv_have_broken_dirname="no" ],
553                                 [ ac_cv_have_broken_dirname="yes" ]
554                         )
555                         LIBS="$save_LIBS"
556                 ])
557                 if test "x$ac_cv_have_broken_dirname" = "xno" ; then
558                         LIBS="$LIBS -lgen"
559                         AC_DEFINE(HAVE_DIRNAME)
560                         AC_CHECK_HEADERS(libgen.h)
561                 fi
562         ])
563 ])
564
565 AC_CHECK_FUNC(getspnam, ,
566         AC_CHECK_LIB(gen, getspnam, LIBS="$LIBS -lgen"))
567 AC_SEARCH_LIBS(basename, gen, AC_DEFINE(HAVE_BASENAME))
568
569 dnl zlib is required
570 AC_ARG_WITH(zlib,
571         [  --with-zlib=PATH        Use zlib in PATH],
572         [
573                 if test "x$withval" = "xno" ; then
574                         AC_MSG_ERROR([*** zlib is required ***])
575                 fi
576                 if test -d "$withval/lib"; then
577                         if test -n "${need_dash_r}"; then
578                                 LDFLAGS="-L${withval}/lib -R${withval}/lib ${LDFLAGS}"
579                         else
580                                 LDFLAGS="-L${withval}/lib ${LDFLAGS}"
581                         fi
582                 else
583                         if test -n "${need_dash_r}"; then
584                                 LDFLAGS="-L${withval} -R${withval} ${LDFLAGS}"
585                         else
586                                 LDFLAGS="-L${withval} ${LDFLAGS}"
587                         fi
588                 fi
589                 if test -d "$withval/include"; then
590                         CPPFLAGS="-I${withval}/include ${CPPFLAGS}"
591                 else
592                         CPPFLAGS="-I${withval} ${CPPFLAGS}"
593                 fi
594         ]
595 )
596
597 AC_CHECK_LIB(z, deflate, ,
598         [
599                 saved_CPPFLAGS="$CPPFLAGS"
600                 saved_LDFLAGS="$LDFLAGS"
601                 save_LIBS="$LIBS"
602                 dnl Check default zlib install dir
603                 if test -n "${need_dash_r}"; then
604                         LDFLAGS="-L/usr/local/lib -R/usr/local/lib ${saved_LDFLAGS}"
605                 else
606                         LDFLAGS="-L/usr/local/lib ${saved_LDFLAGS}"
607                 fi
608                 CPPFLAGS="-I/usr/local/include ${saved_CPPFLAGS}"
609                 LIBS="$LIBS -lz"
610                 AC_TRY_LINK_FUNC(deflate, AC_DEFINE(HAVE_LIBZ),
611                         [
612                                 AC_MSG_ERROR([*** zlib missing - please install first or check config.log ***])
613                         ]
614                 )
615         ]
616 )
617 AC_CHECK_HEADER([zlib.h], ,AC_MSG_ERROR([*** zlib.h missing - please install first or check config.log ***]))
618
619 AC_ARG_WITH(zlib-version-check,
620         [  --without-zlib-version-check Disable zlib version check],
621         [  if test "x$withval" = "xno" ; then
622                 zlib_check_nonfatal=1
623            fi
624         ]
625 )
626
627 AC_MSG_CHECKING(for zlib 1.1.4 or greater)
628 AC_TRY_RUN([
629 #include <zlib.h>
630 int main()
631 {
632         int a, b, c, v;
633         if (sscanf(ZLIB_VERSION, "%d.%d.%d", &a, &b, &c) != 3)
634                 exit(1);
635         v = a*1000000 + b*1000 + c;
636         if (v >= 1001004)
637                 exit(0);
638         exit(2);
639 }
640         ],
641         AC_MSG_RESULT(yes),
642         [ AC_MSG_RESULT(no)
643           if test -z "$zlib_check_nonfatal" ; then
644                 AC_MSG_ERROR([*** zlib too old - check config.log ***
645 Your reported zlib version has known security problems.  It's possible your
646 vendor has fixed these problems without changing the version number.  If you
647 are sure this is the case, you can disable the check by running
648 "./configure --without-zlib-version-check".
649 If you are in doubt, upgrade zlib to version 1.1.4 or greater.])
650           else
651                 AC_MSG_WARN([zlib version may have security problems])
652           fi
653         ]
654 )
655
656 dnl UnixWare 2.x
657 AC_CHECK_FUNC(strcasecmp,
658         [], [ AC_CHECK_LIB(resolv, strcasecmp, LIBS="$LIBS -lresolv") ]
659 )
660 AC_CHECK_FUNC(utimes,
661         [], [ AC_CHECK_LIB(c89, utimes, [AC_DEFINE(HAVE_UTIMES)
662                                         LIBS="$LIBS -lc89"]) ]
663 )
664
665 dnl    Checks for libutil functions
666 AC_CHECK_HEADERS(libutil.h)
667 AC_SEARCH_LIBS(login, util bsd, [AC_DEFINE(HAVE_LOGIN)])
668 AC_CHECK_FUNCS(logout updwtmp logwtmp)
669
670 AC_FUNC_STRFTIME
671
672 # Check for ALTDIRFUNC glob() extension
673 AC_MSG_CHECKING(for GLOB_ALTDIRFUNC support)
674 AC_EGREP_CPP(FOUNDIT,
675         [
676                 #include <glob.h>
677                 #ifdef GLOB_ALTDIRFUNC
678                 FOUNDIT
679                 #endif
680         ],
681         [
682                 AC_DEFINE(GLOB_HAS_ALTDIRFUNC)
683                 AC_MSG_RESULT(yes)
684         ],
685         [
686                 AC_MSG_RESULT(no)
687         ]
688 )
689
690 # Check for g.gl_matchc glob() extension
691 AC_MSG_CHECKING(for gl_matchc field in glob_t)
692 AC_EGREP_CPP(FOUNDIT,
693         [
694                 #include <glob.h>
695                 int main(void){glob_t g; g.gl_matchc = 1;}
696         ],
697         [
698                 AC_DEFINE(GLOB_HAS_GL_MATCHC)
699                 AC_MSG_RESULT(yes)
700         ],
701         [
702                 AC_MSG_RESULT(no)
703         ]
704 )
705
706 AC_MSG_CHECKING([whether struct dirent allocates space for d_name])
707 AC_TRY_RUN(
708         [
709 #include <sys/types.h>
710 #include <dirent.h>
711 int main(void){struct dirent d;exit(sizeof(d.d_name)<=sizeof(char));}
712         ],
713         [AC_MSG_RESULT(yes)],
714         [
715                 AC_MSG_RESULT(no)
716                 AC_DEFINE(BROKEN_ONE_BYTE_DIRENT_D_NAME)
717         ]
718 )
719
720 # Check whether user wants S/Key support
721 SKEY_MSG="no"
722 AC_ARG_WITH(skey,
723         [  --with-skey[[=PATH]]      Enable S/Key support
724                             (optionally in PATH)],
725         [
726                 if test "x$withval" != "xno" ; then
727
728                         if test "x$withval" != "xyes" ; then
729                                 CPPFLAGS="$CPPFLAGS -I${withval}/include"
730                                 LDFLAGS="$LDFLAGS -L${withval}/lib"
731                         fi
732
733                         AC_DEFINE(SKEY)
734                         LIBS="-lskey $LIBS"
735                         SKEY_MSG="yes"
736         
737                         AC_MSG_CHECKING([for s/key support])
738                         AC_TRY_RUN(
739                                 [
740 #include <stdio.h>
741 #include <skey.h>
742 int main() { char *ff = skey_keyinfo(""); ff=""; exit(0); }
743                                 ],
744                                 [AC_MSG_RESULT(yes)],
745                                 [
746                                         AC_MSG_RESULT(no)
747                                         AC_MSG_ERROR([** Incomplete or missing s/key libraries.])
748                                 ])
749                         AC_MSG_CHECKING(if skeychallenge takes 4 arguments)
750                         AC_TRY_COMPILE(
751                                 [#include <stdio.h>
752                                  #include <skey.h>],
753                                 [(void)skeychallenge(NULL,"name","",0);],
754                                 [AC_MSG_RESULT(yes)
755                                  AC_DEFINE(SKEYCHALLENGE_4ARG)],
756                                 [AC_MSG_RESULT(no)]
757                         )
758                 fi
759         ]
760 )
761
762 # Check whether user wants TCP wrappers support
763 TCPW_MSG="no"
764 AC_ARG_WITH(tcp-wrappers,
765         [  --with-tcp-wrappers[[=PATH]]      Enable tcpwrappers support
766                             (optionally in PATH)],
767         [
768                 if test "x$withval" != "xno" ; then
769                         saved_LIBS="$LIBS"
770                         saved_LDFLAGS="$LDFLAGS"
771                         saved_CPPFLAGS="$CPPFLAGS"
772                         if test -n "${withval}" -a "${withval}" != "yes"; then
773                                 if test -d "${withval}/lib"; then
774                                         if test -n "${need_dash_r}"; then
775                                                 LDFLAGS="-L${withval}/lib -R${withval}/lib ${LDFLAGS}"
776                                         else
777                                                 LDFLAGS="-L${withval}/lib ${LDFLAGS}"
778                                         fi
779                                 else
780                                         if test -n "${need_dash_r}"; then
781                                                 LDFLAGS="-L${withval} -R${withval} ${LDFLAGS}"
782                                         else
783                                                 LDFLAGS="-L${withval} ${LDFLAGS}"
784                                         fi
785                                 fi
786                                 if test -d "${withval}/include"; then
787                                         CPPFLAGS="-I${withval}/include ${CPPFLAGS}"
788                                 else
789                                         CPPFLAGS="-I${withval} ${CPPFLAGS}"
790                                 fi
791                         fi
792                         LIBWRAP="-lwrap"
793                         LIBS="$LIBWRAP $LIBS"
794                         AC_MSG_CHECKING(for libwrap)
795                         AC_TRY_LINK(
796                                 [
797 #include <sys/types.h>
798 #include <sys/socket.h>
799 #include <netinet/in.h>
800 #include <tcpd.h>
801                                         int deny_severity = 0, allow_severity = 0;
802                                 ],
803                                 [hosts_access(0);],
804                                 [
805                                         AC_MSG_RESULT(yes)
806                                         AC_DEFINE(LIBWRAP)
807                                         AC_SUBST(LIBWRAP)
808                                         TCPW_MSG="yes"
809                                 ],
810                                 [
811                                         AC_MSG_ERROR([*** libwrap missing])
812                                 ]
813                         )
814                         LIBS="$saved_LIBS"
815                 fi
816         ]
817 )
818
819 dnl    Checks for library functions. Please keep in alphabetical order
820 AC_CHECK_FUNCS(\
821         arc4random __b64_ntop b64_ntop __b64_pton b64_pton \
822         bcopy bindresvport_sa clock fchmod fchown freeaddrinfo futimes \
823         getaddrinfo getcwd getgrouplist getnameinfo getopt \
824         getpeereid _getpty getrlimit getttyent glob inet_aton \
825         inet_ntoa inet_ntop innetgr login_getcapbool md5_crypt memmove \
826         mkdtemp mmap ngetaddrinfo nsleep ogetaddrinfo openlog_r openpty \
827         pstat prctl readpassphrase realpath recvmsg rresvport_af sendmsg \
828         setdtablesize setegid setenv seteuid setgroups setlogin setpcred \
829         setproctitle setregid setreuid setrlimit \
830         setsid setvbuf sigaction sigvec snprintf socketpair strerror \
831         strlcat strlcpy strmode strnvis strtoul sysconf tcgetpgrp \
832         truncate unsetenv updwtmpx utimes vhangup vsnprintf waitpid \
833 )
834
835 # IRIX has a const char return value for gai_strerror()
836 AC_CHECK_FUNCS(gai_strerror,[
837         AC_DEFINE(HAVE_GAI_STRERROR)
838         AC_TRY_COMPILE([
839 #include <sys/types.h>
840 #include <sys/socket.h>
841 #include <netdb.h>
842
843 const char *gai_strerror(int);],[
844 char *str;
845
846 str = gai_strerror(0);],[
847                 AC_DEFINE(HAVE_CONST_GAI_STRERROR_PROTO, 1,
848                 [Define if gai_strerror() returns const char *])])])
849
850 AC_SEARCH_LIBS(nanosleep, rt posix4, AC_DEFINE(HAVE_NANOSLEEP))
851
852 dnl Make sure prototypes are defined for these before using them.
853 AC_CHECK_DECL(strsep, [AC_CHECK_FUNCS(strsep)])
854 AC_CHECK_DECL(getrusage, [AC_CHECK_FUNCS(getrusage)])
855
856 dnl tcsendbreak might be a macro
857 AC_CHECK_DECL(tcsendbreak,
858         [AC_DEFINE(HAVE_TCSENDBREAK)],
859         [AC_CHECK_FUNCS(tcsendbreak)],
860         [#include <termios.h>]
861 )
862
863 AC_CHECK_DECLS(h_errno, , ,[#include <netdb.h>])
864
865 AC_CHECK_FUNCS(setresuid, [
866         dnl Some platorms have setresuid that isn't implemented, test for this
867         AC_MSG_CHECKING(if setresuid seems to work)
868         AC_TRY_RUN([
869 #include <stdlib.h>
870 #include <errno.h>
871 int main(){errno=0; setresuid(0,0,0); if (errno==ENOSYS) exit(1); else exit(0);}
872                 ],
873                 [AC_MSG_RESULT(yes)],
874                 [AC_DEFINE(BROKEN_SETRESUID)
875                  AC_MSG_RESULT(not implemented)]
876         )
877 ])
878
879 AC_CHECK_FUNCS(setresgid, [
880         dnl Some platorms have setresgid that isn't implemented, test for this
881         AC_MSG_CHECKING(if setresgid seems to work)
882         AC_TRY_RUN([
883 #include <stdlib.h>
884 #include <errno.h>
885 int main(){errno=0; setresgid(0,0,0); if (errno==ENOSYS) exit(1); else exit(0);}
886                 ],
887                 [AC_MSG_RESULT(yes)],
888                 [AC_DEFINE(BROKEN_SETRESGID)
889                  AC_MSG_RESULT(not implemented)]
890         )
891 ])
892
893 dnl    Checks for time functions
894 AC_CHECK_FUNCS(gettimeofday time)
895 dnl    Checks for utmp functions
896 AC_CHECK_FUNCS(endutent getutent getutid getutline pututline setutent)
897 AC_CHECK_FUNCS(utmpname)
898 dnl    Checks for utmpx functions
899 AC_CHECK_FUNCS(endutxent getutxent getutxid getutxline pututxline )
900 AC_CHECK_FUNCS(setutxent utmpxname)
901
902 AC_CHECK_FUNC(daemon,
903         [AC_DEFINE(HAVE_DAEMON)],
904         [AC_CHECK_LIB(bsd, daemon, [LIBS="$LIBS -lbsd"; AC_DEFINE(HAVE_DAEMON)])]
905 )
906
907 AC_CHECK_FUNC(getpagesize,
908         [AC_DEFINE(HAVE_GETPAGESIZE)],
909         [AC_CHECK_LIB(ucb, getpagesize, [LIBS="$LIBS -lucb"; AC_DEFINE(HAVE_GETPAGESIZE)])]
910 )
911
912 # Check for broken snprintf
913 if test "x$ac_cv_func_snprintf" = "xyes" ; then
914         AC_MSG_CHECKING([whether snprintf correctly terminates long strings])
915         AC_TRY_RUN(
916                 [
917 #include <stdio.h>
918 int main(void){char b[5];snprintf(b,5,"123456789");exit(b[4]!='\0');}
919                 ],
920                 [AC_MSG_RESULT(yes)],
921                 [
922                         AC_MSG_RESULT(no)
923                         AC_DEFINE(BROKEN_SNPRINTF)
924                         AC_MSG_WARN([****** Your snprintf() function is broken, complain to your vendor])
925                 ]
926         )
927 fi
928
929 dnl see whether mkstemp() requires XXXXXX
930 if test "x$ac_cv_func_mkdtemp" = "xyes" ; then
931 AC_MSG_CHECKING([for (overly) strict mkstemp])
932 AC_TRY_RUN(
933         [
934 #include <stdlib.h>
935 main() { char template[]="conftest.mkstemp-test";
936 if (mkstemp(template) == -1)
937         exit(1);
938 unlink(template); exit(0);
939 }
940         ],
941         [
942                 AC_MSG_RESULT(no)
943         ],
944         [
945                 AC_MSG_RESULT(yes)
946                 AC_DEFINE(HAVE_STRICT_MKSTEMP)
947         ],
948         [
949                 AC_MSG_RESULT(yes)
950                 AC_DEFINE(HAVE_STRICT_MKSTEMP)
951         ]
952 )
953 fi
954
955 dnl make sure that openpty does not reacquire controlling terminal
956 if test ! -z "$check_for_openpty_ctty_bug"; then
957         AC_MSG_CHECKING(if openpty correctly handles controlling tty)
958         AC_TRY_RUN(
959                 [
960 #include <stdio.h>
961 #include <sys/fcntl.h>
962 #include <sys/types.h>
963 #include <sys/wait.h>
964
965 int
966 main()
967 {
968         pid_t pid;
969         int fd, ptyfd, ttyfd, status;
970
971         pid = fork();
972         if (pid < 0) {          /* failed */
973                 exit(1);
974         } else if (pid > 0) {   /* parent */
975                 waitpid(pid, &status, 0);
976                 if (WIFEXITED(status))
977                         exit(WEXITSTATUS(status));
978                 else
979                         exit(2);
980         } else {                /* child */
981                 close(0); close(1); close(2);
982                 setsid();
983                 openpty(&ptyfd, &ttyfd, NULL, NULL, NULL);
984                 fd = open("/dev/tty", O_RDWR | O_NOCTTY);
985                 if (fd >= 0)
986                         exit(3);        /* Acquired ctty: broken */
987                 else
988                         exit(0);        /* Did not acquire ctty: OK */
989         }
990 }
991                 ],
992                 [
993                         AC_MSG_RESULT(yes)
994                 ],
995                 [
996                         AC_MSG_RESULT(no)
997                         AC_DEFINE(SSHD_ACQUIRES_CTTY)
998                 ]
999         )
1000 fi
1001
1002 if test "x$ac_cv_func_getaddrinfo" = "xyes" -a "x$check_for_hpux_broken_getaddrinfo" = "x1"; then
1003         AC_MSG_CHECKING(if getaddrinfo seems to work)
1004         AC_TRY_RUN(
1005                 [
1006 #include <stdio.h>
1007 #include <sys/socket.h>
1008 #include <netdb.h>
1009 #include <errno.h>
1010 #include <netinet/in.h>
1011
1012 #define TEST_PORT "2222"
1013
1014 int
1015 main(void)
1016 {
1017         int err, sock;
1018         struct addrinfo *gai_ai, *ai, hints;
1019         char ntop[NI_MAXHOST], strport[NI_MAXSERV], *name = NULL;
1020
1021         memset(&hints, 0, sizeof(hints));
1022         hints.ai_family = PF_UNSPEC;
1023         hints.ai_socktype = SOCK_STREAM;
1024         hints.ai_flags = AI_PASSIVE;
1025
1026         err = getaddrinfo(name, TEST_PORT, &hints, &gai_ai);
1027         if (err != 0) {
1028                 fprintf(stderr, "getaddrinfo failed (%s)", gai_strerror(err));
1029                 exit(1);
1030         }
1031
1032         for (ai = gai_ai; ai != NULL; ai = ai->ai_next) {
1033                 if (ai->ai_family != AF_INET6)
1034                         continue;
1035
1036                 err = getnameinfo(ai->ai_addr, ai->ai_addrlen, ntop,
1037                     sizeof(ntop), strport, sizeof(strport),
1038                     NI_NUMERICHOST|NI_NUMERICSERV);
1039
1040                 if (err != 0) {
1041                         if (err == EAI_SYSTEM)
1042                                 perror("getnameinfo EAI_SYSTEM");
1043                         else
1044                                 fprintf(stderr, "getnameinfo failed: %s\n",
1045                                     gai_strerror(err));
1046                         exit(2);
1047                 }
1048
1049                 sock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
1050                 if (sock < 0)
1051                         perror("socket");
1052                 if (bind(sock, ai->ai_addr, ai->ai_addrlen) < 0) {
1053                         if (errno == EBADF)
1054                                 exit(3);
1055                 }
1056         }
1057         exit(0);
1058 }
1059                 ],
1060                 [
1061                         AC_MSG_RESULT(yes)
1062                 ],
1063                 [
1064                         AC_MSG_RESULT(no)
1065                         AC_DEFINE(BROKEN_GETADDRINFO)
1066                 ]
1067         )
1068 fi
1069
1070 AC_FUNC_GETPGRP
1071
1072 # Check for PAM libs
1073 PAM_MSG="no"
1074 AC_ARG_WITH(pam,
1075         [  --with-pam              Enable PAM support ],
1076         [
1077                 if test "x$withval" != "xno" ; then
1078                         if test "x$ac_cv_header_security_pam_appl_h" != "xyes" && \
1079                            test "x$ac_cv_header_pam_pam_appl_h" != "xyes" ; then
1080                                 AC_MSG_ERROR([PAM headers not found])
1081                         fi
1082
1083                         AC_CHECK_LIB(dl, dlopen, , )
1084                         AC_CHECK_LIB(pam, pam_set_item, , AC_MSG_ERROR([*** libpam missing]))
1085                         AC_CHECK_FUNCS(pam_getenvlist)
1086                         AC_CHECK_FUNCS(pam_putenv)
1087
1088                         PAM_MSG="yes"
1089
1090                         AC_DEFINE(USE_PAM)
1091                         if test $ac_cv_lib_dl_dlopen = yes; then
1092                                 LIBPAM="-lpam -ldl"
1093                         else
1094                                 LIBPAM="-lpam"
1095                         fi
1096                         AC_SUBST(LIBPAM)
1097                 fi
1098         ]
1099 )
1100
1101 # Check for older PAM
1102 if test "x$PAM_MSG" = "xyes" ; then
1103         # Check PAM strerror arguments (old PAM)
1104         AC_MSG_CHECKING([whether pam_strerror takes only one argument])
1105         AC_TRY_COMPILE(
1106                 [
1107 #include <stdlib.h>
1108 #if defined(HAVE_SECURITY_PAM_APPL_H)
1109 #include <security/pam_appl.h>
1110 #elif defined (HAVE_PAM_PAM_APPL_H)
1111 #include <pam/pam_appl.h>
1112 #endif
1113                 ],
1114                 [(void)pam_strerror((pam_handle_t *)NULL, -1);],
1115                 [AC_MSG_RESULT(no)],
1116                 [
1117                         AC_DEFINE(HAVE_OLD_PAM)
1118                         AC_MSG_RESULT(yes)
1119                         PAM_MSG="yes (old library)"
1120                 ]
1121         )
1122 fi
1123
1124 # Search for OpenSSL
1125 saved_CPPFLAGS="$CPPFLAGS"
1126 saved_LDFLAGS="$LDFLAGS"
1127 AC_ARG_WITH(ssl-dir,
1128         [  --with-ssl-dir=PATH     Specify path to OpenSSL installation ],
1129         [
1130                 if test "x$withval" != "xno" ; then
1131                         if test -d "$withval/lib"; then
1132                                 if test -n "${need_dash_r}"; then
1133                                         LDFLAGS="-L${withval}/lib -R${withval}/lib ${LDFLAGS}"
1134                                 else
1135                                         LDFLAGS="-L${withval}/lib ${LDFLAGS}"
1136                                 fi
1137                         else
1138                                 if test -n "${need_dash_r}"; then
1139                                         LDFLAGS="-L${withval} -R${withval} ${LDFLAGS}"
1140                                 else
1141                                         LDFLAGS="-L${withval} ${LDFLAGS}"
1142                                 fi
1143                         fi
1144                         if test -d "$withval/include"; then
1145                                 CPPFLAGS="-I${withval}/include ${CPPFLAGS}"
1146                         else
1147                                 CPPFLAGS="-I${withval} ${CPPFLAGS}"
1148                         fi
1149                 fi
1150         ]
1151 )
1152 LIBS="-lcrypto $LIBS"
1153 AC_TRY_LINK_FUNC(RAND_add, AC_DEFINE(HAVE_OPENSSL),
1154         [
1155                 dnl Check default openssl install dir
1156                 if test -n "${need_dash_r}"; then
1157                         LDFLAGS="-L/usr/local/ssl/lib -R/usr/local/ssl/lib ${saved_LDFLAGS}"
1158                 else
1159                         LDFLAGS="-L/usr/local/ssl/lib ${saved_LDFLAGS}"
1160                 fi
1161                 CPPFLAGS="-I/usr/local/ssl/include ${saved_CPPFLAGS}"
1162                 AC_TRY_LINK_FUNC(RAND_add, AC_DEFINE(HAVE_OPENSSL),
1163                         [
1164                                 AC_MSG_ERROR([*** Can't find recent OpenSSL libcrypto (see config.log for details) ***])
1165                         ]
1166                 )
1167         ]
1168 )
1169
1170 # Determine OpenSSL header version
1171 AC_MSG_CHECKING([OpenSSL header version])
1172 AC_TRY_RUN(
1173         [
1174 #include <stdio.h>
1175 #include <string.h>
1176 #include <openssl/opensslv.h>
1177 #define DATA "conftest.sslincver"
1178 int main(void) {
1179         FILE *fd;
1180         int rc;
1181
1182         fd = fopen(DATA,"w");
1183         if(fd == NULL)
1184                 exit(1);
1185
1186         if ((rc = fprintf(fd ,"%x (%s)\n", OPENSSL_VERSION_NUMBER, OPENSSL_VERSION_TEXT)) <0)
1187                 exit(1);
1188
1189         exit(0);
1190 }
1191         ],
1192         [
1193                 ssl_header_ver=`cat conftest.sslincver`
1194                 AC_MSG_RESULT($ssl_header_ver)
1195         ],
1196         [
1197                 AC_MSG_RESULT(not found)
1198                 AC_MSG_ERROR(OpenSSL version header not found.)
1199         ]
1200 )
1201
1202 # Determine OpenSSL library version
1203 AC_MSG_CHECKING([OpenSSL library version])
1204 AC_TRY_RUN(
1205         [
1206 #include <stdio.h>
1207 #include <string.h>
1208 #include <openssl/opensslv.h>
1209 #include <openssl/crypto.h>
1210 #define DATA "conftest.ssllibver"
1211 int main(void) {
1212         FILE *fd;
1213         int rc;
1214
1215         fd = fopen(DATA,"w");
1216         if(fd == NULL)
1217                 exit(1);
1218
1219         if ((rc = fprintf(fd ,"%x (%s)\n", SSLeay(), SSLeay_version(SSLEAY_VERSION))) <0)
1220                 exit(1);
1221
1222         exit(0);
1223 }
1224         ],
1225         [
1226                 ssl_library_ver=`cat conftest.ssllibver`
1227                 AC_MSG_RESULT($ssl_library_ver)
1228         ],
1229         [
1230                 AC_MSG_RESULT(not found)
1231                 AC_MSG_ERROR(OpenSSL library not found.)
1232         ]
1233 )
1234
1235 # Sanity check OpenSSL headers
1236 AC_MSG_CHECKING([whether OpenSSL's headers match the library])
1237 AC_TRY_RUN(
1238         [
1239 #include <string.h>
1240 #include <openssl/opensslv.h>
1241 int main(void) { exit(SSLeay() == OPENSSL_VERSION_NUMBER ? 0 : 1); }
1242         ],
1243         [
1244                 AC_MSG_RESULT(yes)
1245         ],
1246         [
1247                 AC_MSG_RESULT(no)
1248                 AC_MSG_ERROR([Your OpenSSL headers do not match your library.
1249 Check config.log for details.
1250 Also see contrib/findssl.sh for help identifying header/library mismatches.])
1251         ]
1252 )
1253
1254 # Some systems want crypt() from libcrypt, *not* the version in OpenSSL,
1255 # because the system crypt() is more featureful.
1256 if test "x$check_for_libcrypt_before" = "x1"; then
1257         AC_CHECK_LIB(crypt, crypt)
1258 fi
1259
1260 # Some Linux systems (Slackware) need crypt() from libcrypt, *not* the
1261 # version in OpenSSL.
1262 if test "x$check_for_libcrypt_later" = "x1"; then
1263         AC_CHECK_LIB(crypt, crypt, LIBS="$LIBS -lcrypt")
1264 fi
1265
1266
1267 ### Configure cryptographic random number support
1268
1269 # Check wheter OpenSSL seeds itself
1270 AC_MSG_CHECKING([whether OpenSSL's PRNG is internally seeded])
1271 AC_TRY_RUN(
1272         [
1273 #include <string.h>
1274 #include <openssl/rand.h>
1275 int main(void) { exit(RAND_status() == 1 ? 0 : 1); }
1276         ],
1277         [
1278                 OPENSSL_SEEDS_ITSELF=yes
1279                 AC_MSG_RESULT(yes)
1280         ],
1281         [
1282                 AC_MSG_RESULT(no)
1283                 # Default to use of the rand helper if OpenSSL doesn't
1284                 # seed itself
1285                 USE_RAND_HELPER=yes
1286         ]
1287 )
1288
1289
1290 # Do we want to force the use of the rand helper?
1291 AC_ARG_WITH(rand-helper,
1292         [  --with-rand-helper      Use subprocess to gather strong randomness ],
1293         [
1294                 if test "x$withval" = "xno" ; then
1295                         # Force use of OpenSSL's internal RNG, even if
1296                         # the previous test showed it to be unseeded.
1297                         if test -z "$OPENSSL_SEEDS_ITSELF" ; then
1298                                 AC_MSG_WARN([*** Forcing use of OpenSSL's non-self-seeding PRNG])
1299                                 OPENSSL_SEEDS_ITSELF=yes
1300                                 USE_RAND_HELPER=""
1301                         fi
1302                 else
1303                         USE_RAND_HELPER=yes
1304                 fi
1305         ],
1306 )       
1307
1308 # Which randomness source do we use?
1309 if test ! -z "$OPENSSL_SEEDS_ITSELF" -a -z "$USE_RAND_HELPER" ; then
1310         # OpenSSL only
1311         AC_DEFINE(OPENSSL_PRNG_ONLY)
1312         RAND_MSG="OpenSSL internal ONLY"
1313         INSTALL_SSH_RAND_HELPER=""
1314 elif test ! -z "$USE_RAND_HELPER" ; then
1315         # install rand helper
1316         RAND_MSG="ssh-rand-helper"
1317         INSTALL_SSH_RAND_HELPER="yes"
1318 fi
1319 AC_SUBST(INSTALL_SSH_RAND_HELPER)
1320
1321 ### Configuration of ssh-rand-helper
1322
1323 # PRNGD TCP socket
1324 AC_ARG_WITH(prngd-port,
1325         [  --with-prngd-port=PORT  read entropy from PRNGD/EGD TCP localhost:PORT],
1326         [
1327                 case "$withval" in
1328                 no)
1329                         withval=""
1330                         ;;
1331                 [[0-9]]*)
1332                         ;;
1333                 *)
1334                         AC_MSG_ERROR(You must specify a numeric port number for --with-prngd-port)
1335                         ;;
1336                 esac
1337                 if test ! -z "$withval" ; then
1338                         PRNGD_PORT="$withval"
1339                         AC_DEFINE_UNQUOTED(PRNGD_PORT, $PRNGD_PORT)
1340                 fi
1341         ]
1342 )
1343
1344 # PRNGD Unix domain socket
1345 AC_ARG_WITH(prngd-socket,
1346         [  --with-prngd-socket=FILE read entropy from PRNGD/EGD socket FILE (default=/var/run/egd-pool)],
1347         [
1348                 case "$withval" in
1349                 yes)
1350                         withval="/var/run/egd-pool"
1351                         ;;
1352                 no)
1353                         withval=""
1354                         ;;
1355                 /*)
1356                         ;;
1357                 *)
1358                         AC_MSG_ERROR(You must specify an absolute path to the entropy socket)
1359                         ;;
1360                 esac
1361
1362                 if test ! -z "$withval" ; then
1363                         if test ! -z "$PRNGD_PORT" ; then
1364                                 AC_MSG_ERROR(You may not specify both a PRNGD/EGD port and socket)
1365                         fi
1366                         if test ! -r "$withval" ; then
1367                                 AC_MSG_WARN(Entropy socket is not readable)
1368                         fi
1369                         PRNGD_SOCKET="$withval"
1370                         AC_DEFINE_UNQUOTED(PRNGD_SOCKET, "$PRNGD_SOCKET")
1371                 fi
1372         ],
1373         [
1374                 # Check for existing socket only if we don't have a random device already
1375                 if test "$USE_RAND_HELPER" = yes ; then
1376                         AC_MSG_CHECKING(for PRNGD/EGD socket)
1377                         # Insert other locations here
1378                         for sock in /var/run/egd-pool /dev/egd-pool /etc/entropy; do
1379                                 if test -r $sock && $TEST_MINUS_S_SH -c "test -S $sock -o -p $sock" ; then
1380                                         PRNGD_SOCKET="$sock"
1381                                         AC_DEFINE_UNQUOTED(PRNGD_SOCKET, "$PRNGD_SOCKET")
1382                                         break;
1383                                 fi
1384                         done
1385                         if test ! -z "$PRNGD_SOCKET" ; then
1386                                 AC_MSG_RESULT($PRNGD_SOCKET)
1387                         else
1388                                 AC_MSG_RESULT(not found)
1389                         fi
1390                 fi
1391         ]
1392 )
1393
1394 # Change default command timeout for hashing entropy source
1395 entropy_timeout=200
1396 AC_ARG_WITH(entropy-timeout,
1397         [  --with-entropy-timeout  Specify entropy gathering command timeout (msec)],
1398         [
1399                 if test "x$withval" != "xno" ; then
1400                         entropy_timeout=$withval
1401                 fi
1402         ]       
1403 )
1404 AC_DEFINE_UNQUOTED(ENTROPY_TIMEOUT_MSEC, $entropy_timeout)
1405
1406 SSH_PRIVSEP_USER=sshd
1407 AC_ARG_WITH(privsep-user,
1408         [  --with-privsep-user=user Specify non-privileged user for privilege separation],
1409         [
1410                 if test -n "$withval"; then
1411                         SSH_PRIVSEP_USER=$withval
1412                 fi
1413         ]       
1414 )
1415 AC_DEFINE_UNQUOTED(SSH_PRIVSEP_USER, "$SSH_PRIVSEP_USER")
1416 AC_SUBST(SSH_PRIVSEP_USER)
1417
1418 # We do this little dance with the search path to insure
1419 # that programs that we select for use by installed programs
1420 # (which may be run by the super-user) come from trusted
1421 # locations before they come from the user's private area.
1422 # This should help avoid accidentally configuring some
1423 # random version of a program in someone's personal bin.
1424
1425 OPATH=$PATH
1426 PATH=/bin:/usr/bin
1427 test -h /bin 2> /dev/null && PATH=/usr/bin
1428 test -d /sbin && PATH=$PATH:/sbin
1429 test -d /usr/sbin && PATH=$PATH:/usr/sbin
1430 PATH=$PATH:/etc:$OPATH
1431
1432 # These programs are used by the command hashing source to gather entropy
1433 OSSH_PATH_ENTROPY_PROG(PROG_LS, ls)
1434 OSSH_PATH_ENTROPY_PROG(PROG_NETSTAT, netstat)
1435 OSSH_PATH_ENTROPY_PROG(PROG_ARP, arp)
1436 OSSH_PATH_ENTROPY_PROG(PROG_IFCONFIG, ifconfig)
1437 OSSH_PATH_ENTROPY_PROG(PROG_JSTAT, jstat)
1438 OSSH_PATH_ENTROPY_PROG(PROG_PS, ps)
1439 OSSH_PATH_ENTROPY_PROG(PROG_SAR, sar)
1440 OSSH_PATH_ENTROPY_PROG(PROG_W, w)
1441 OSSH_PATH_ENTROPY_PROG(PROG_WHO, who)
1442 OSSH_PATH_ENTROPY_PROG(PROG_LAST, last)
1443 OSSH_PATH_ENTROPY_PROG(PROG_LASTLOG, lastlog)
1444 OSSH_PATH_ENTROPY_PROG(PROG_DF, df)
1445 OSSH_PATH_ENTROPY_PROG(PROG_VMSTAT, vmstat)
1446 OSSH_PATH_ENTROPY_PROG(PROG_UPTIME, uptime)
1447 OSSH_PATH_ENTROPY_PROG(PROG_IPCS, ipcs)
1448 OSSH_PATH_ENTROPY_PROG(PROG_TAIL, tail)
1449 # restore PATH
1450 PATH=$OPATH
1451
1452 # Where does ssh-rand-helper get its randomness from?
1453 INSTALL_SSH_PRNG_CMDS=""
1454 if test ! -z "$INSTALL_SSH_RAND_HELPER" ; then
1455         if test ! -z "$PRNGD_PORT" ; then
1456                 RAND_HELPER_MSG="TCP localhost:$PRNGD_PORT"
1457         elif test ! -z "$PRNGD_SOCKET" ; then
1458                 RAND_HELPER_MSG="Unix domain socket \"$PRNGD_SOCKET\""
1459         else
1460                 RAND_HELPER_MSG="Command hashing (timeout $entropy_timeout)"
1461                 RAND_HELPER_CMDHASH=yes
1462                 INSTALL_SSH_PRNG_CMDS="yes"
1463         fi
1464 fi
1465 AC_SUBST(INSTALL_SSH_PRNG_CMDS)
1466
1467
1468 # Cheap hack to ensure NEWS-OS libraries are arranged right.
1469 if test ! -z "$SONY" ; then
1470   LIBS="$LIBS -liberty";
1471 fi
1472
1473 # Checks for data types
1474 AC_CHECK_SIZEOF(char, 1)
1475 AC_CHECK_SIZEOF(short int, 2)
1476 AC_CHECK_SIZEOF(int, 4)
1477 AC_CHECK_SIZEOF(long int, 4)
1478 AC_CHECK_SIZEOF(long long int, 8)
1479
1480 # Sanity check long long for some platforms (AIX)
1481 if test "x$ac_cv_sizeof_long_long_int" = "x4" ; then
1482         ac_cv_sizeof_long_long_int=0
1483 fi
1484
1485 # More checks for data types
1486 AC_CACHE_CHECK([for u_int type], ac_cv_have_u_int, [
1487         AC_TRY_COMPILE(
1488                 [ #include <sys/types.h> ],
1489                 [ u_int a; a = 1;],
1490                 [ ac_cv_have_u_int="yes" ],
1491                 [ ac_cv_have_u_int="no" ]
1492         )
1493 ])
1494 if test "x$ac_cv_have_u_int" = "xyes" ; then
1495         AC_DEFINE(HAVE_U_INT)
1496         have_u_int=1
1497 fi
1498
1499 AC_CACHE_CHECK([for intXX_t types], ac_cv_have_intxx_t, [
1500         AC_TRY_COMPILE(
1501                 [ #include <sys/types.h> ],
1502                 [ int8_t a; int16_t b; int32_t c; a = b = c = 1;],
1503                 [ ac_cv_have_intxx_t="yes" ],
1504                 [ ac_cv_have_intxx_t="no" ]
1505         )
1506 ])
1507 if test "x$ac_cv_have_intxx_t" = "xyes" ; then
1508         AC_DEFINE(HAVE_INTXX_T)
1509         have_intxx_t=1
1510 fi
1511
1512 if (test -z "$have_intxx_t" && \
1513            test "x$ac_cv_header_stdint_h" = "xyes")
1514 then
1515     AC_MSG_CHECKING([for intXX_t types in stdint.h])
1516         AC_TRY_COMPILE(
1517                 [ #include <stdint.h> ],
1518                 [ int8_t a; int16_t b; int32_t c; a = b = c = 1;],
1519                 [
1520                         AC_DEFINE(HAVE_INTXX_T)
1521                         AC_MSG_RESULT(yes)
1522                 ],
1523                 [ AC_MSG_RESULT(no) ]
1524         )
1525 fi
1526
1527 AC_CACHE_CHECK([for int64_t type], ac_cv_have_int64_t, [
1528         AC_TRY_COMPILE(
1529                 [
1530 #include <sys/types.h>
1531 #ifdef HAVE_STDINT_H
1532 # include <stdint.h>
1533 #endif
1534 #include <sys/socket.h>
1535 #ifdef HAVE_SYS_BITYPES_H
1536 # include <sys/bitypes.h>
1537 #endif
1538                 ],
1539                 [ int64_t a; a = 1;],
1540                 [ ac_cv_have_int64_t="yes" ],
1541                 [ ac_cv_have_int64_t="no" ]
1542         )
1543 ])
1544 if test "x$ac_cv_have_int64_t" = "xyes" ; then
1545         AC_DEFINE(HAVE_INT64_T)
1546 fi
1547
1548 AC_CACHE_CHECK([for u_intXX_t types], ac_cv_have_u_intxx_t, [
1549         AC_TRY_COMPILE(
1550                 [ #include <sys/types.h> ],
1551                 [ u_int8_t a; u_int16_t b; u_int32_t c; a = b = c = 1;],
1552                 [ ac_cv_have_u_intxx_t="yes" ],
1553                 [ ac_cv_have_u_intxx_t="no" ]
1554         )
1555 ])
1556 if test "x$ac_cv_have_u_intxx_t" = "xyes" ; then
1557         AC_DEFINE(HAVE_U_INTXX_T)
1558         have_u_intxx_t=1
1559 fi
1560
1561 if test -z "$have_u_intxx_t" ; then
1562     AC_MSG_CHECKING([for u_intXX_t types in sys/socket.h])
1563         AC_TRY_COMPILE(
1564                 [ #include <sys/socket.h> ],
1565                 [ u_int8_t a; u_int16_t b; u_int32_t c; a = b = c = 1;],
1566                 [
1567                         AC_DEFINE(HAVE_U_INTXX_T)
1568                         AC_MSG_RESULT(yes)
1569                 ],
1570                 [ AC_MSG_RESULT(no) ]
1571         )
1572 fi
1573
1574 AC_CACHE_CHECK([for u_int64_t types], ac_cv_have_u_int64_t, [
1575         AC_TRY_COMPILE(
1576                 [ #include <sys/types.h> ],
1577                 [ u_int64_t a; a = 1;],
1578                 [ ac_cv_have_u_int64_t="yes" ],
1579                 [ ac_cv_have_u_int64_t="no" ]
1580         )
1581 ])
1582 if test "x$ac_cv_have_u_int64_t" = "xyes" ; then
1583         AC_DEFINE(HAVE_U_INT64_T)
1584         have_u_int64_t=1
1585 fi
1586
1587 if test -z "$have_u_int64_t" ; then
1588     AC_MSG_CHECKING([for u_int64_t type in sys/bitypes.h])
1589         AC_TRY_COMPILE(
1590                 [ #include <sys/bitypes.h> ],
1591                 [ u_int64_t a; a = 1],
1592                 [
1593                         AC_DEFINE(HAVE_U_INT64_T)
1594                         AC_MSG_RESULT(yes)
1595                 ],
1596                 [ AC_MSG_RESULT(no) ]
1597         )
1598 fi
1599
1600 if test -z "$have_u_intxx_t" ; then
1601         AC_CACHE_CHECK([for uintXX_t types], ac_cv_have_uintxx_t, [
1602                 AC_TRY_COMPILE(
1603                         [
1604 #include <sys/types.h>
1605                         ],
1606                         [ uint8_t a; uint16_t b; uint32_t c; a = b = c = 1; ],
1607                         [ ac_cv_have_uintxx_t="yes" ],
1608                         [ ac_cv_have_uintxx_t="no" ]
1609                 )
1610         ])
1611         if test "x$ac_cv_have_uintxx_t" = "xyes" ; then
1612                 AC_DEFINE(HAVE_UINTXX_T)
1613         fi
1614 fi
1615
1616 if test -z "$have_uintxx_t" ; then
1617     AC_MSG_CHECKING([for uintXX_t types in stdint.h])
1618         AC_TRY_COMPILE(
1619                 [ #include <stdint.h> ],
1620                 [ uint8_t a; uint16_t b; uint32_t c; a = b = c = 1;],
1621                 [
1622                         AC_DEFINE(HAVE_UINTXX_T)
1623                         AC_MSG_RESULT(yes)
1624                 ],
1625                 [ AC_MSG_RESULT(no) ]
1626         )
1627 fi
1628
1629 if (test -z "$have_u_intxx_t" || test -z "$have_intxx_t" && \
1630            test "x$ac_cv_header_sys_bitypes_h" = "xyes")
1631 then
1632         AC_MSG_CHECKING([for intXX_t and u_intXX_t types in sys/bitypes.h])
1633         AC_TRY_COMPILE(
1634                 [
1635 #include <sys/bitypes.h>
1636                 ],
1637                 [
1638                         int8_t a; int16_t b; int32_t c;
1639                         u_int8_t e; u_int16_t f; u_int32_t g;
1640                         a = b = c = e = f = g = 1;
1641                 ],
1642                 [
1643                         AC_DEFINE(HAVE_U_INTXX_T)
1644                         AC_DEFINE(HAVE_INTXX_T)
1645                         AC_MSG_RESULT(yes)
1646                 ],
1647                 [AC_MSG_RESULT(no)]
1648         )
1649 fi
1650
1651
1652 AC_CACHE_CHECK([for u_char], ac_cv_have_u_char, [
1653         AC_TRY_COMPILE(
1654                 [
1655 #include <sys/types.h>
1656                 ],
1657                 [ u_char foo; foo = 125; ],
1658                 [ ac_cv_have_u_char="yes" ],
1659                 [ ac_cv_have_u_char="no" ]
1660         )
1661 ])
1662 if test "x$ac_cv_have_u_char" = "xyes" ; then
1663         AC_DEFINE(HAVE_U_CHAR)
1664 fi
1665
1666 TYPE_SOCKLEN_T
1667
1668 AC_CHECK_TYPES(sig_atomic_t,,,[#include <signal.h>])
1669
1670 AC_CACHE_CHECK([for size_t], ac_cv_have_size_t, [
1671         AC_TRY_COMPILE(
1672                 [
1673 #include <sys/types.h>
1674                 ],
1675                 [ size_t foo; foo = 1235; ],
1676                 [ ac_cv_have_size_t="yes" ],
1677                 [ ac_cv_have_size_t="no" ]
1678         )
1679 ])
1680 if test "x$ac_cv_have_size_t" = "xyes" ; then
1681         AC_DEFINE(HAVE_SIZE_T)
1682 fi
1683
1684 AC_CACHE_CHECK([for ssize_t], ac_cv_have_ssize_t, [
1685         AC_TRY_COMPILE(
1686                 [
1687 #include <sys/types.h>
1688                 ],
1689                 [ ssize_t foo; foo = 1235; ],
1690                 [ ac_cv_have_ssize_t="yes" ],
1691                 [ ac_cv_have_ssize_t="no" ]
1692         )
1693 ])
1694 if test "x$ac_cv_have_ssize_t" = "xyes" ; then
1695         AC_DEFINE(HAVE_SSIZE_T)
1696 fi
1697
1698 AC_CACHE_CHECK([for clock_t], ac_cv_have_clock_t, [
1699         AC_TRY_COMPILE(
1700                 [
1701 #include <time.h>
1702                 ],
1703                 [ clock_t foo; foo = 1235; ],
1704                 [ ac_cv_have_clock_t="yes" ],
1705                 [ ac_cv_have_clock_t="no" ]
1706         )
1707 ])
1708 if test "x$ac_cv_have_clock_t" = "xyes" ; then
1709         AC_DEFINE(HAVE_CLOCK_T)
1710 fi
1711
1712 AC_CACHE_CHECK([for sa_family_t], ac_cv_have_sa_family_t, [
1713         AC_TRY_COMPILE(
1714                 [
1715 #include <sys/types.h>
1716 #include <sys/socket.h>
1717                 ],
1718                 [ sa_family_t foo; foo = 1235; ],
1719                 [ ac_cv_have_sa_family_t="yes" ],
1720                 [ AC_TRY_COMPILE(
1721                   [
1722 #include <sys/types.h>
1723 #include <sys/socket.h>
1724 #include <netinet/in.h>
1725                 ],
1726                 [ sa_family_t foo; foo = 1235; ],
1727                 [ ac_cv_have_sa_family_t="yes" ],
1728
1729                 [ ac_cv_have_sa_family_t="no" ]
1730         )]
1731         )
1732 ])
1733 if test "x$ac_cv_have_sa_family_t" = "xyes" ; then
1734         AC_DEFINE(HAVE_SA_FAMILY_T)
1735 fi
1736
1737 AC_CACHE_CHECK([for pid_t], ac_cv_have_pid_t, [
1738         AC_TRY_COMPILE(
1739                 [
1740 #include <sys/types.h>
1741                 ],
1742                 [ pid_t foo; foo = 1235; ],
1743                 [ ac_cv_have_pid_t="yes" ],
1744                 [ ac_cv_have_pid_t="no" ]
1745         )
1746 ])
1747 if test "x$ac_cv_have_pid_t" = "xyes" ; then
1748         AC_DEFINE(HAVE_PID_T)
1749 fi
1750
1751 AC_CACHE_CHECK([for mode_t], ac_cv_have_mode_t, [
1752         AC_TRY_COMPILE(
1753                 [
1754 #include <sys/types.h>
1755                 ],
1756                 [ mode_t foo; foo = 1235; ],
1757                 [ ac_cv_have_mode_t="yes" ],
1758                 [ ac_cv_have_mode_t="no" ]
1759         )
1760 ])
1761 if test "x$ac_cv_have_mode_t" = "xyes" ; then
1762         AC_DEFINE(HAVE_MODE_T)
1763 fi
1764
1765
1766 AC_CACHE_CHECK([for struct sockaddr_storage], ac_cv_have_struct_sockaddr_storage, [
1767         AC_TRY_COMPILE(
1768                 [
1769 #include <sys/types.h>
1770 #include <sys/socket.h>
1771                 ],
1772                 [ struct sockaddr_storage s; ],
1773                 [ ac_cv_have_struct_sockaddr_storage="yes" ],
1774                 [ ac_cv_have_struct_sockaddr_storage="no" ]
1775         )
1776 ])
1777 if test "x$ac_cv_have_struct_sockaddr_storage" = "xyes" ; then
1778         AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE)
1779 fi
1780
1781 AC_CACHE_CHECK([for struct sockaddr_in6], ac_cv_have_struct_sockaddr_in6, [
1782         AC_TRY_COMPILE(
1783                 [
1784 #include <sys/types.h>
1785 #include <netinet/in.h>
1786                 ],
1787                 [ struct sockaddr_in6 s; s.sin6_family = 0; ],
1788                 [ ac_cv_have_struct_sockaddr_in6="yes" ],
1789                 [ ac_cv_have_struct_sockaddr_in6="no" ]
1790         )
1791 ])
1792 if test "x$ac_cv_have_struct_sockaddr_in6" = "xyes" ; then
1793         AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6)
1794 fi
1795
1796 AC_CACHE_CHECK([for struct in6_addr], ac_cv_have_struct_in6_addr, [
1797         AC_TRY_COMPILE(
1798                 [
1799 #include <sys/types.h>
1800 #include <netinet/in.h>
1801                 ],
1802                 [ struct in6_addr s; s.s6_addr[0] = 0; ],
1803                 [ ac_cv_have_struct_in6_addr="yes" ],
1804                 [ ac_cv_have_struct_in6_addr="no" ]
1805         )
1806 ])
1807 if test "x$ac_cv_have_struct_in6_addr" = "xyes" ; then
1808         AC_DEFINE(HAVE_STRUCT_IN6_ADDR)
1809 fi
1810
1811 AC_CACHE_CHECK([for struct addrinfo], ac_cv_have_struct_addrinfo, [
1812         AC_TRY_COMPILE(
1813                 [
1814 #include <sys/types.h>
1815 #include <sys/socket.h>
1816 #include <netdb.h>
1817                 ],
1818                 [ struct addrinfo s; s.ai_flags = AI_PASSIVE; ],
1819                 [ ac_cv_have_struct_addrinfo="yes" ],
1820                 [ ac_cv_have_struct_addrinfo="no" ]
1821         )
1822 ])
1823 if test "x$ac_cv_have_struct_addrinfo" = "xyes" ; then
1824         AC_DEFINE(HAVE_STRUCT_ADDRINFO)
1825 fi
1826
1827 AC_CACHE_CHECK([for struct timeval], ac_cv_have_struct_timeval, [
1828         AC_TRY_COMPILE(
1829                 [ #include <sys/time.h> ],
1830                 [ struct timeval tv; tv.tv_sec = 1;],
1831                 [ ac_cv_have_struct_timeval="yes" ],
1832                 [ ac_cv_have_struct_timeval="no" ]
1833         )
1834 ])
1835 if test "x$ac_cv_have_struct_timeval" = "xyes" ; then
1836         AC_DEFINE(HAVE_STRUCT_TIMEVAL)
1837         have_struct_timeval=1
1838 fi
1839
1840 AC_CHECK_TYPES(struct timespec)
1841
1842 # We need int64_t or else certian parts of the compile will fail.
1843 if test "x$ac_cv_have_int64_t" = "xno" -a \
1844         "x$ac_cv_sizeof_long_int" != "x8" -a \
1845         "x$ac_cv_sizeof_long_long_int" = "x0" ; then
1846         echo "OpenSSH requires int64_t support.  Contact your vendor or install"
1847         echo "an alternative compiler (I.E., GCC) before continuing."
1848         echo ""
1849         exit 1;
1850 else
1851 dnl test snprintf (broken on SCO w/gcc)
1852         AC_TRY_RUN(
1853                 [
1854 #include <stdio.h>
1855 #include <string.h>
1856 #ifdef HAVE_SNPRINTF
1857 main()
1858 {
1859         char buf[50];
1860         char expected_out[50];
1861         int mazsize = 50 ;
1862 #if (SIZEOF_LONG_INT == 8)
1863         long int num = 0x7fffffffffffffff;
1864 #else
1865         long long num = 0x7fffffffffffffffll;
1866 #endif
1867         strcpy(expected_out, "9223372036854775807");
1868         snprintf(buf, mazsize, "%lld", num);
1869         if(strcmp(buf, expected_out) != 0)
1870                 exit(1);
1871         exit(0);
1872 }
1873 #else
1874 main() { exit(0); }
1875 #endif
1876                 ], [ true ], [ AC_DEFINE(BROKEN_SNPRINTF) ]
1877         )
1878 fi
1879
1880 dnl Checks for structure members
1881 OSSH_CHECK_HEADER_FOR_FIELD(ut_host, utmp.h, HAVE_HOST_IN_UTMP)
1882 OSSH_CHECK_HEADER_FOR_FIELD(ut_host, utmpx.h, HAVE_HOST_IN_UTMPX)
1883 OSSH_CHECK_HEADER_FOR_FIELD(syslen, utmpx.h, HAVE_SYSLEN_IN_UTMPX)
1884 OSSH_CHECK_HEADER_FOR_FIELD(ut_pid, utmp.h, HAVE_PID_IN_UTMP)
1885 OSSH_CHECK_HEADER_FOR_FIELD(ut_type, utmp.h, HAVE_TYPE_IN_UTMP)
1886 OSSH_CHECK_HEADER_FOR_FIELD(ut_type, utmpx.h, HAVE_TYPE_IN_UTMPX)
1887 OSSH_CHECK_HEADER_FOR_FIELD(ut_tv, utmp.h, HAVE_TV_IN_UTMP)
1888 OSSH_CHECK_HEADER_FOR_FIELD(ut_id, utmp.h, HAVE_ID_IN_UTMP)
1889 OSSH_CHECK_HEADER_FOR_FIELD(ut_id, utmpx.h, HAVE_ID_IN_UTMPX)
1890 OSSH_CHECK_HEADER_FOR_FIELD(ut_addr, utmp.h, HAVE_ADDR_IN_UTMP)
1891 OSSH_CHECK_HEADER_FOR_FIELD(ut_addr, utmpx.h, HAVE_ADDR_IN_UTMPX)
1892 OSSH_CHECK_HEADER_FOR_FIELD(ut_addr_v6, utmp.h, HAVE_ADDR_V6_IN_UTMP)
1893 OSSH_CHECK_HEADER_FOR_FIELD(ut_addr_v6, utmpx.h, HAVE_ADDR_V6_IN_UTMPX)
1894 OSSH_CHECK_HEADER_FOR_FIELD(ut_exit, utmp.h, HAVE_EXIT_IN_UTMP)
1895 OSSH_CHECK_HEADER_FOR_FIELD(ut_time, utmp.h, HAVE_TIME_IN_UTMP)
1896 OSSH_CHECK_HEADER_FOR_FIELD(ut_time, utmpx.h, HAVE_TIME_IN_UTMPX)
1897 OSSH_CHECK_HEADER_FOR_FIELD(ut_tv, utmpx.h, HAVE_TV_IN_UTMPX)
1898
1899 AC_CHECK_MEMBERS([struct stat.st_blksize])
1900
1901 AC_CACHE_CHECK([for ss_family field in struct sockaddr_storage],
1902                 ac_cv_have_ss_family_in_struct_ss, [
1903         AC_TRY_COMPILE(
1904                 [
1905 #include <sys/types.h>
1906 #include <sys/socket.h>
1907                 ],
1908                 [ struct sockaddr_storage s; s.ss_family = 1; ],
1909                 [ ac_cv_have_ss_family_in_struct_ss="yes" ],
1910                 [ ac_cv_have_ss_family_in_struct_ss="no" ],
1911         )
1912 ])
1913 if test "x$ac_cv_have_ss_family_in_struct_ss" = "xyes" ; then
1914         AC_DEFINE(HAVE_SS_FAMILY_IN_SS)
1915 fi
1916
1917 AC_CACHE_CHECK([for __ss_family field in struct sockaddr_storage],
1918                 ac_cv_have___ss_family_in_struct_ss, [
1919         AC_TRY_COMPILE(
1920                 [
1921 #include <sys/types.h>
1922 #include <sys/socket.h>
1923                 ],
1924                 [ struct sockaddr_storage s; s.__ss_family = 1; ],
1925                 [ ac_cv_have___ss_family_in_struct_ss="yes" ],
1926                 [ ac_cv_have___ss_family_in_struct_ss="no" ]
1927         )
1928 ])
1929 if test "x$ac_cv_have___ss_family_in_struct_ss" = "xyes" ; then
1930         AC_DEFINE(HAVE___SS_FAMILY_IN_SS)
1931 fi
1932
1933 AC_CACHE_CHECK([for pw_class field in struct passwd],
1934                 ac_cv_have_pw_class_in_struct_passwd, [
1935         AC_TRY_COMPILE(
1936                 [
1937 #include <pwd.h>
1938                 ],
1939                 [ struct passwd p; p.pw_class = 0; ],
1940                 [ ac_cv_have_pw_class_in_struct_passwd="yes" ],
1941                 [ ac_cv_have_pw_class_in_struct_passwd="no" ]
1942         )
1943 ])
1944 if test "x$ac_cv_have_pw_class_in_struct_passwd" = "xyes" ; then
1945         AC_DEFINE(HAVE_PW_CLASS_IN_PASSWD)
1946 fi
1947
1948 AC_CACHE_CHECK([for pw_expire field in struct passwd],
1949                 ac_cv_have_pw_expire_in_struct_passwd, [
1950         AC_TRY_COMPILE(
1951                 [
1952 #include <pwd.h>
1953                 ],
1954                 [ struct passwd p; p.pw_expire = 0; ],
1955                 [ ac_cv_have_pw_expire_in_struct_passwd="yes" ],
1956                 [ ac_cv_have_pw_expire_in_struct_passwd="no" ]
1957         )
1958 ])
1959 if test "x$ac_cv_have_pw_expire_in_struct_passwd" = "xyes" ; then
1960         AC_DEFINE(HAVE_PW_EXPIRE_IN_PASSWD)
1961 fi
1962
1963 AC_CACHE_CHECK([for pw_change field in struct passwd],
1964                 ac_cv_have_pw_change_in_struct_passwd, [
1965         AC_TRY_COMPILE(
1966                 [
1967 #include <pwd.h>
1968                 ],
1969                 [ struct passwd p; p.pw_change = 0; ],
1970                 [ ac_cv_have_pw_change_in_struct_passwd="yes" ],
1971                 [ ac_cv_have_pw_change_in_struct_passwd="no" ]
1972         )
1973 ])
1974 if test "x$ac_cv_have_pw_change_in_struct_passwd" = "xyes" ; then
1975         AC_DEFINE(HAVE_PW_CHANGE_IN_PASSWD)
1976 fi
1977
1978 dnl make sure we're using the real structure members and not defines
1979 AC_CACHE_CHECK([for msg_accrights field in struct msghdr],
1980                 ac_cv_have_accrights_in_msghdr, [
1981         AC_TRY_RUN(
1982                 [
1983 #include <sys/types.h>
1984 #include <sys/socket.h>
1985 #include <sys/uio.h>
1986 int main() {
1987 #ifdef msg_accrights
1988 exit(1);
1989 #endif
1990 struct msghdr m;
1991 m.msg_accrights = 0;
1992 exit(0);
1993 }
1994                 ],
1995                 [ ac_cv_have_accrights_in_msghdr="yes" ],
1996                 [ ac_cv_have_accrights_in_msghdr="no" ]
1997         )
1998 ])
1999 if test "x$ac_cv_have_accrights_in_msghdr" = "xyes" ; then
2000         AC_DEFINE(HAVE_ACCRIGHTS_IN_MSGHDR)
2001 fi
2002
2003 AC_CACHE_CHECK([for msg_control field in struct msghdr],
2004                 ac_cv_have_control_in_msghdr, [
2005         AC_TRY_RUN(
2006                 [
2007 #include <sys/types.h>
2008 #include <sys/socket.h>
2009 #include <sys/uio.h>
2010 int main() {
2011 #ifdef msg_control
2012 exit(1);
2013 #endif
2014 struct msghdr m;
2015 m.msg_control = 0;
2016 exit(0);
2017 }
2018                 ],
2019                 [ ac_cv_have_control_in_msghdr="yes" ],
2020                 [ ac_cv_have_control_in_msghdr="no" ]
2021         )
2022 ])
2023 if test "x$ac_cv_have_control_in_msghdr" = "xyes" ; then
2024         AC_DEFINE(HAVE_CONTROL_IN_MSGHDR)
2025 fi
2026
2027 AC_CACHE_CHECK([if libc defines __progname], ac_cv_libc_defines___progname, [
2028         AC_TRY_LINK([],
2029                 [ extern char *__progname; printf("%s", __progname); ],
2030                 [ ac_cv_libc_defines___progname="yes" ],
2031                 [ ac_cv_libc_defines___progname="no" ]
2032         )
2033 ])
2034 if test "x$ac_cv_libc_defines___progname" = "xyes" ; then
2035         AC_DEFINE(HAVE___PROGNAME)
2036 fi
2037
2038 AC_CACHE_CHECK([whether $CC implements __FUNCTION__], ac_cv_cc_implements___FUNCTION__, [
2039         AC_TRY_LINK([
2040 #include <stdio.h>
2041 ],
2042                 [ printf("%s", __FUNCTION__); ],
2043                 [ ac_cv_cc_implements___FUNCTION__="yes" ],
2044                 [ ac_cv_cc_implements___FUNCTION__="no" ]
2045         )
2046 ])
2047 if test "x$ac_cv_cc_implements___FUNCTION__" = "xyes" ; then
2048         AC_DEFINE(HAVE___FUNCTION__)
2049 fi
2050
2051 AC_CACHE_CHECK([whether $CC implements __func__], ac_cv_cc_implements___func__, [
2052         AC_TRY_LINK([
2053 #include <stdio.h>
2054 ],
2055                 [ printf("%s", __func__); ],
2056                 [ ac_cv_cc_implements___func__="yes" ],
2057                 [ ac_cv_cc_implements___func__="no" ]
2058         )
2059 ])
2060 if test "x$ac_cv_cc_implements___func__" = "xyes" ; then
2061         AC_DEFINE(HAVE___func__)
2062 fi
2063
2064 AC_CACHE_CHECK([whether getopt has optreset support],
2065                 ac_cv_have_getopt_optreset, [
2066         AC_TRY_LINK(
2067                 [
2068 #include <getopt.h>
2069                 ],
2070                 [ extern int optreset; optreset = 0; ],
2071                 [ ac_cv_have_getopt_optreset="yes" ],
2072                 [ ac_cv_have_getopt_optreset="no" ]
2073         )
2074 ])
2075 if test "x$ac_cv_have_getopt_optreset" = "xyes" ; then
2076         AC_DEFINE(HAVE_GETOPT_OPTRESET)
2077 fi
2078
2079 AC_CACHE_CHECK([if libc defines sys_errlist], ac_cv_libc_defines_sys_errlist, [
2080         AC_TRY_LINK([],
2081                 [ extern const char *const sys_errlist[]; printf("%s", sys_errlist[0]);],
2082                 [ ac_cv_libc_defines_sys_errlist="yes" ],
2083                 [ ac_cv_libc_defines_sys_errlist="no" ]
2084         )
2085 ])
2086 if test "x$ac_cv_libc_defines_sys_errlist" = "xyes" ; then
2087         AC_DEFINE(HAVE_SYS_ERRLIST)
2088 fi
2089
2090
2091 AC_CACHE_CHECK([if libc defines sys_nerr], ac_cv_libc_defines_sys_nerr, [
2092         AC_TRY_LINK([],
2093                 [ extern int sys_nerr; printf("%i", sys_nerr);],
2094                 [ ac_cv_libc_defines_sys_nerr="yes" ],
2095                 [ ac_cv_libc_defines_sys_nerr="no" ]
2096         )
2097 ])
2098 if test "x$ac_cv_libc_defines_sys_nerr" = "xyes" ; then
2099         AC_DEFINE(HAVE_SYS_NERR)
2100 fi
2101
2102 SCARD_MSG="no"
2103 # Check whether user wants sectok support
2104 AC_ARG_WITH(sectok,
2105         [  --with-sectok           Enable smartcard support using libsectok],
2106         [
2107                 if test "x$withval" != "xno" ; then
2108                         if test "x$withval" != "xyes" ; then
2109                                 CPPFLAGS="$CPPFLAGS -I${withval}"
2110                                 LDFLAGS="$LDFLAGS -L${withval}"
2111                                 if test ! -z "$need_dash_r" ; then
2112                                         LDFLAGS="$LDFLAGS -R${withval}"
2113                                 fi
2114                                 if test ! -z "$blibpath" ; then
2115                                         blibpath="$blibpath:${withval}"
2116                                 fi
2117                         fi
2118                         AC_CHECK_HEADERS(sectok.h)
2119                         if test "$ac_cv_header_sectok_h" != yes; then
2120                                 AC_MSG_ERROR(Can't find sectok.h)
2121                         fi
2122                         AC_CHECK_LIB(sectok, sectok_open)
2123                         if test "$ac_cv_lib_sectok_sectok_open" != yes; then
2124                                 AC_MSG_ERROR(Can't find libsectok)
2125                         fi
2126                         AC_DEFINE(SMARTCARD)
2127                         AC_DEFINE(USE_SECTOK)
2128                         SCARD_MSG="yes, using sectok"
2129                 fi
2130         ]
2131 )
2132
2133 # Check whether user wants OpenSC support
2134 AC_ARG_WITH(opensc,
2135         AC_HELP_STRING([--with-opensc=PFX],
2136                        [Enable smartcard support using OpenSC]),
2137         opensc_config_prefix="$withval", opensc_config_prefix="")
2138 if test x$opensc_config_prefix != x ; then
2139   OPENSC_CONFIG=$opensc_config_prefix/bin/opensc-config
2140   AC_PATH_PROG(OPENSC_CONFIG, opensc-config, no)
2141   if test "$OPENSC_CONFIG" != "no"; then
2142     LIBOPENSC_CFLAGS=`$OPENSC_CONFIG --cflags`
2143     LIBOPENSC_LIBS=`$OPENSC_CONFIG --libs`
2144     CPPFLAGS="$CPPFLAGS $LIBOPENSC_CFLAGS"
2145     LDFLAGS="$LDFLAGS $LIBOPENSC_LIBS"
2146     AC_DEFINE(SMARTCARD)
2147     AC_DEFINE(USE_OPENSC)
2148     SCARD_MSG="yes, using OpenSC"
2149   fi
2150 fi
2151
2152 # Check libraries needed by DNS fingerprint support
2153 AC_SEARCH_LIBS(getrrsetbyname, resolv,
2154         [AC_DEFINE(HAVE_GETRRSETBYNAME)],
2155         [
2156                 # Needed by our getrrsetbyname()
2157                 AC_SEARCH_LIBS(res_query, resolv)
2158                 AC_SEARCH_LIBS(dn_expand, resolv)
2159                 AC_CHECK_FUNCS(_getshort _getlong)
2160                 AC_CHECK_MEMBER(HEADER.ad,
2161                         [AC_DEFINE(HAVE_HEADER_AD)],,
2162                         [#include <arpa/nameser.h>])
2163         ])
2164
2165 # Check whether user wants Kerberos 5 support
2166 KRB5_MSG="no"
2167 AC_ARG_WITH(kerberos5,
2168         [  --with-kerberos5=PATH   Enable Kerberos 5 support],
2169         [ if test "x$withval" != "xno" ; then
2170                 if test "x$withval" = "xyes" ; then
2171                         KRB5ROOT="/usr/local"
2172                 else
2173                         KRB5ROOT=${withval}
2174                 fi
2175
2176                 AC_DEFINE(KRB5)
2177                 KRB5_MSG="yes"
2178
2179                 AC_MSG_CHECKING(for krb5-config)
2180                 if test -x  $KRB5ROOT/bin/krb5-config ; then
2181                         KRB5CONF=$KRB5ROOT/bin/krb5-config
2182                         AC_MSG_RESULT($KRB5CONF)
2183
2184                         AC_MSG_CHECKING(for gssapi support)
2185                         if $KRB5CONF | grep gssapi >/dev/null ; then
2186                                 AC_MSG_RESULT(yes)
2187                                 AC_DEFINE(GSSAPI)
2188                                 k5confopts=gssapi
2189                         else
2190                                 AC_MSG_RESULT(no)
2191                                 k5confopts=""
2192                         fi
2193                         K5CFLAGS="`$KRB5CONF --cflags $k5confopts`"
2194                         K5LIBS="`$KRB5CONF --libs $k5confopts`"
2195                         CPPFLAGS="$CPPFLAGS $K5CFLAGS"
2196                         AC_MSG_CHECKING(whether we are using Heimdal)
2197                         AC_TRY_COMPILE([ #include <krb5.h> ],
2198                                        [ char *tmp = heimdal_version; ],
2199                                        [ AC_MSG_RESULT(yes)
2200                                          AC_DEFINE(HEIMDAL) ],
2201                                          AC_MSG_RESULT(no)
2202                         )
2203                 else
2204                         AC_MSG_RESULT(no)
2205                         CPPFLAGS="$CPPFLAGS -I${KRB5ROOT}/include"
2206                         LDFLAGS="$LDFLAGS -L${KRB5ROOT}/lib"
2207                         AC_MSG_CHECKING(whether we are using Heimdal)
2208                         AC_TRY_COMPILE([ #include <krb5.h> ],
2209                                        [ char *tmp = heimdal_version; ],
2210                                        [ AC_MSG_RESULT(yes)
2211                                          AC_DEFINE(HEIMDAL)
2212                                          K5LIBS="-lkrb5 -ldes"
2213                                          K5LIBS="$K5LIBS -lcom_err -lasn1"
2214                                          AC_CHECK_LIB(roken, net_write, 
2215                                            [K5LIBS="$K5LIBS -lroken"])
2216                                        ],
2217                                        [ AC_MSG_RESULT(no)
2218                                          K5LIBS="-lkrb5 -lk5crypto -lcom_err"
2219                                        ]
2220                         )
2221                         AC_SEARCH_LIBS(dn_expand, resolv)
2222
2223                         AC_CHECK_LIB(gssapi,gss_init_sec_context,
2224                                 [ AC_DEFINE(GSSAPI)
2225                                   K5LIBS="-lgssapi $K5LIBS" ],
2226                                 [ AC_CHECK_LIB(gssapi_krb5,gss_init_sec_context,
2227                                         [ AC_DEFINE(GSSAPI)
2228                                           K5LIBS="-lgssapi_krb5 $K5LIBS" ],
2229                                         AC_MSG_WARN([Cannot find any suitable gss-api library - build may fail]),
2230                                         $K5LIBS)
2231                                 ],
2232                                 $K5LIBS)
2233                         
2234                         AC_CHECK_HEADER(gssapi.h, ,
2235                                 [ unset ac_cv_header_gssapi_h
2236                                   CPPFLAGS="$CPPFLAGS -I${KRB5ROOT}/include/gssapi"
2237                                   AC_CHECK_HEADERS(gssapi.h, ,
2238                                         AC_MSG_WARN([Cannot find any suitable gss-api header - build may fail])
2239                                   )
2240                                 ]
2241                         )
2242
2243                         oldCPP="$CPPFLAGS"
2244                         CPPFLAGS="$CPPFLAGS -I${KRB5ROOT}/include/gssapi"
2245                         AC_CHECK_HEADER(gssapi_krb5.h, ,
2246                                         [ CPPFLAGS="$oldCPP" ])
2247
2248                 fi
2249                 if test ! -z "$need_dash_r" ; then
2250                         LDFLAGS="$LDFLAGS -R${KRB5ROOT}/lib"
2251                 fi
2252                 if test ! -z "$blibpath" ; then
2253                         blibpath="$blibpath:${KRB5ROOT}/lib"
2254                 fi
2255         fi
2256
2257         AC_CHECK_HEADERS(gssapi.h gssapi/gssapi.h)
2258         AC_CHECK_HEADERS(gssapi_krb5.h gssapi/gssapi_krb5.h)
2259         AC_CHECK_HEADERS(gssapi_generic.h gssapi/gssapi_generic.h)
2260
2261         LIBS="$LIBS $K5LIBS"
2262         AC_SEARCH_LIBS(k_hasafs, kafs, AC_DEFINE(USE_AFS))
2263         AC_SEARCH_LIBS(krb5_init_ets, $K5LIBS, AC_DEFINE(KRB5_INIT_ETS))
2264         ]
2265 )
2266
2267 # Looking for programs, paths and files
2268
2269 PRIVSEP_PATH=/var/empty
2270 AC_ARG_WITH(privsep-path,
2271         [  --with-privsep-path=xxx Path for privilege separation chroot (default=/var/empty)],
2272         [
2273                 if test "x$withval" != "$no" ; then
2274                         PRIVSEP_PATH=$withval
2275                 fi
2276         ]
2277 )
2278 AC_SUBST(PRIVSEP_PATH)
2279
2280 AC_ARG_WITH(xauth,
2281         [  --with-xauth=PATH       Specify path to xauth program ],
2282         [
2283                 if test "x$withval" != "xno" ; then
2284                         xauth_path=$withval
2285                 fi
2286         ],
2287         [
2288                 TestPath="$PATH"
2289                 TestPath="${TestPath}${PATH_SEPARATOR}/usr/X/bin"
2290                 TestPath="${TestPath}${PATH_SEPARATOR}/usr/bin/X11"
2291                 TestPath="${TestPath}${PATH_SEPARATOR}/usr/X11R6/bin"
2292                 TestPath="${TestPath}${PATH_SEPARATOR}/usr/openwin/bin"
2293                 AC_PATH_PROG(xauth_path, xauth, , $TestPath)
2294                 if (test ! -z "$xauth_path" && test -x "/usr/openwin/bin/xauth") ; then
2295                         xauth_path="/usr/openwin/bin/xauth"
2296                 fi
2297         ]
2298 )
2299
2300 STRIP_OPT=-s
2301 AC_ARG_ENABLE(strip,
2302         [  --disable-strip         Disable calling strip(1) on install],
2303         [
2304                 if test "x$enableval" = "xno" ; then
2305                         STRIP_OPT=
2306                 fi
2307         ]
2308 )
2309 AC_SUBST(STRIP_OPT)
2310
2311 if test -z "$xauth_path" ; then
2312         XAUTH_PATH="undefined"
2313         AC_SUBST(XAUTH_PATH)
2314 else
2315         AC_DEFINE_UNQUOTED(XAUTH_PATH, "$xauth_path")
2316         XAUTH_PATH=$xauth_path
2317         AC_SUBST(XAUTH_PATH)
2318 fi
2319
2320 # Check for mail directory (last resort if we cannot get it from headers)
2321 if test ! -z "$MAIL" ; then
2322         maildir=`dirname $MAIL`
2323         AC_DEFINE_UNQUOTED(MAIL_DIRECTORY, "$maildir")
2324 fi
2325
2326 if test -z "$no_dev_ptmx" ; then
2327         if test "x$disable_ptmx_check" != "xyes" ; then
2328                 AC_CHECK_FILE("/dev/ptmx",
2329                         [
2330                                 AC_DEFINE_UNQUOTED(HAVE_DEV_PTMX)
2331                                 have_dev_ptmx=1
2332                         ]
2333                 )
2334         fi
2335 fi
2336 AC_CHECK_FILE("/dev/ptc",
2337         [
2338                 AC_DEFINE_UNQUOTED(HAVE_DEV_PTS_AND_PTC)
2339                 have_dev_ptc=1
2340         ]
2341 )
2342
2343 # Options from here on. Some of these are preset by platform above
2344 AC_ARG_WITH(mantype,
2345         [  --with-mantype=man|cat|doc  Set man page type],
2346         [
2347                 case "$withval" in
2348                 man|cat|doc)
2349                         MANTYPE=$withval
2350                         ;;
2351                 *)
2352                         AC_MSG_ERROR(invalid man type: $withval)
2353                         ;;
2354                 esac
2355         ]
2356 )
2357 if test -z "$MANTYPE"; then
2358         TestPath="/usr/bin${PATH_SEPARATOR}/usr/ucb"
2359         AC_PATH_PROGS(NROFF, nroff awf, /bin/false, $TestPath)
2360         if ${NROFF} -mdoc ${srcdir}/ssh.1 >/dev/null 2>&1; then
2361                 MANTYPE=doc
2362         elif ${NROFF} -man ${srcdir}/ssh.1 >/dev/null 2>&1; then
2363                 MANTYPE=man
2364         else
2365                 MANTYPE=cat
2366         fi
2367 fi
2368 AC_SUBST(MANTYPE)
2369 if test "$MANTYPE" = "doc"; then
2370         mansubdir=man;
2371 else
2372         mansubdir=$MANTYPE;
2373 fi
2374 AC_SUBST(mansubdir)
2375
2376 # Check whether to enable MD5 passwords
2377 MD5_MSG="no"
2378 AC_ARG_WITH(md5-passwords,
2379         [  --with-md5-passwords    Enable use of MD5 passwords],
2380         [
2381                 if test "x$withval" != "xno" ; then
2382                         AC_DEFINE(HAVE_MD5_PASSWORDS)
2383                         MD5_MSG="yes"
2384                 fi
2385         ]
2386 )
2387
2388 # Whether to disable shadow password support
2389 AC_ARG_WITH(shadow,
2390         [  --without-shadow        Disable shadow password support],
2391         [
2392                 if test "x$withval" = "xno" ; then      
2393                         AC_DEFINE(DISABLE_SHADOW)
2394                         disable_shadow=yes
2395                 fi
2396         ]
2397 )
2398
2399 if test -z "$disable_shadow" ; then
2400         AC_MSG_CHECKING([if the systems has expire shadow information])
2401         AC_TRY_COMPILE(
2402         [
2403 #include <sys/types.h>
2404 #include <shadow.h>
2405         struct spwd sp;
2406         ],[ sp.sp_expire = sp.sp_lstchg = sp.sp_inact = 0; ],
2407         [ sp_expire_available=yes ], []
2408         )
2409
2410         if test "x$sp_expire_available" = "xyes" ; then
2411                 AC_MSG_RESULT(yes)
2412                 AC_DEFINE(HAS_SHADOW_EXPIRE)
2413         else
2414                 AC_MSG_RESULT(no)
2415         fi
2416 fi
2417
2418 # Use ip address instead of hostname in $DISPLAY
2419 if test ! -z "$IPADDR_IN_DISPLAY" ; then
2420         DISPLAY_HACK_MSG="yes"
2421         AC_DEFINE(IPADDR_IN_DISPLAY)
2422 else
2423         DISPLAY_HACK_MSG="no"
2424         AC_ARG_WITH(ipaddr-display,
2425                 [  --with-ipaddr-display   Use ip address instead of hostname in \$DISPLAY],
2426                 [
2427                         if test "x$withval" != "xno" ; then     
2428                                 AC_DEFINE(IPADDR_IN_DISPLAY)
2429                                 DISPLAY_HACK_MSG="yes"
2430                         fi
2431                 ]
2432         )
2433 fi
2434
2435 # check for /etc/default/login and use it if present.
2436 AC_ARG_ENABLE(etc-default-login,
2437         [  --disable-etc-default-login       Disable using PATH from /etc/default/login [no]],,
2438 [
2439 AC_CHECK_FILE("/etc/default/login", [ external_path_file=/etc/default/login ])
2440
2441 if test "x$external_path_file" = "x/etc/default/login"; then
2442         AC_DEFINE(HAVE_ETC_DEFAULT_LOGIN)
2443 fi
2444 ])
2445
2446 dnl BSD systems use /etc/login.conf so --with-default-path= has no effect
2447 if test $ac_cv_func_login_getcapbool = "yes" -a \
2448         $ac_cv_header_login_cap_h = "yes" ; then
2449         external_path_file=/etc/login.conf
2450 fi
2451
2452 # Whether to mess with the default path
2453 SERVER_PATH_MSG="(default)"
2454 AC_ARG_WITH(default-path,
2455         [  --with-default-path=    Specify default \$PATH environment for server],
2456         [
2457                 if test "x$external_path_file" = "x/etc/login.conf" ; then
2458                         AC_MSG_WARN([
2459 --with-default-path=PATH has no effect on this system.
2460 Edit /etc/login.conf instead.])
2461                 elif test "x$withval" != "xno" ; then   
2462                         if test ! -z "$external_path_file" ; then
2463                                 AC_MSG_WARN([
2464 --with-default-path=PATH will only be used if PATH is not defined in
2465 $external_path_file .])
2466                         fi
2467                         user_path="$withval"
2468                         SERVER_PATH_MSG="$withval"
2469                 fi
2470         ],
2471         [ if test "x$external_path_file" = "x/etc/login.conf" ; then
2472                 AC_MSG_WARN([Make sure the path to scp is in /etc/login.conf])
2473         else
2474                 if test ! -z "$external_path_file" ; then
2475                         AC_MSG_WARN([
2476 If PATH is defined in $external_path_file, ensure the path to scp is included,
2477 otherwise scp will not work.])
2478                 fi
2479                 AC_TRY_RUN(
2480                         [
2481 /* find out what STDPATH is */
2482 #include <stdio.h>
2483 #ifdef HAVE_PATHS_H
2484 # include <paths.h>
2485 #endif
2486 #ifndef _PATH_STDPATH
2487 # ifdef _PATH_USERPATH  /* Irix */
2488 #  define _PATH_STDPATH _PATH_USERPATH
2489 # else
2490 #  define _PATH_STDPATH "/usr/bin:/bin:/usr/sbin:/sbin"
2491 # endif
2492 #endif
2493 #include <sys/types.h>
2494 #include <sys/stat.h>
2495 #include <fcntl.h>
2496 #define DATA "conftest.stdpath"
2497
2498 main()
2499 {
2500         FILE *fd;
2501         int rc;
2502         
2503         fd = fopen(DATA,"w");
2504         if(fd == NULL)
2505                 exit(1);
2506         
2507         if ((rc = fprintf(fd,"%s", _PATH_STDPATH)) < 0)
2508                 exit(1);
2509
2510         exit(0);
2511 }
2512                 ], [ user_path=`cat conftest.stdpath` ],
2513                 [ user_path="/usr/bin:/bin:/usr/sbin:/sbin" ],
2514                 [ user_path="/usr/bin:/bin:/usr/sbin:/sbin" ]
2515         )
2516 # make sure $bindir is in USER_PATH so scp will work
2517                 t_bindir=`eval echo ${bindir}`
2518                 case $t_bindir in
2519                         NONE/*) t_bindir=`echo $t_bindir | sed "s~NONE~$prefix~"` ;;
2520                 esac
2521                 case $t_bindir in
2522                         NONE/*) t_bindir=`echo $t_bindir | sed "s~NONE~$ac_default_prefix~"` ;;
2523                 esac
2524                 echo $user_path | grep ":$t_bindir"  > /dev/null 2>&1
2525                 if test $? -ne 0  ; then
2526                         echo $user_path | grep "^$t_bindir"  > /dev/null 2>&1
2527                         if test $? -ne 0  ; then
2528                                 user_path=$user_path:$t_bindir
2529                                 AC_MSG_RESULT(Adding $t_bindir to USER_PATH so scp will work)
2530                         fi
2531                 fi
2532         fi ]
2533 )
2534 if test "x$external_path_file" != "x/etc/login.conf" ; then
2535         AC_DEFINE_UNQUOTED(USER_PATH, "$user_path")
2536         AC_SUBST(user_path)
2537 fi
2538
2539 # Set superuser path separately to user path
2540 AC_ARG_WITH(superuser-path,
2541         [  --with-superuser-path=  Specify different path for super-user],
2542         [
2543                 if test "x$withval" != "xno" ; then
2544                         AC_DEFINE_UNQUOTED(SUPERUSER_PATH, "$withval")
2545                         superuser_path=$withval
2546                 fi
2547         ]
2548 )
2549
2550
2551 AC_MSG_CHECKING([if we need to convert IPv4 in IPv6-mapped addresses])
2552 IPV4_IN6_HACK_MSG="no"
2553 AC_ARG_WITH(4in6,
2554         [  --with-4in6             Check for and convert IPv4 in IPv6 mapped addresses],
2555         [
2556                 if test "x$withval" != "xno" ; then
2557                         AC_MSG_RESULT(yes)
2558                         AC_DEFINE(IPV4_IN_IPV6)
2559                         IPV4_IN6_HACK_MSG="yes"
2560                 else
2561                         AC_MSG_RESULT(no)
2562                 fi
2563         ],[
2564                 if test "x$inet6_default_4in6" = "xyes"; then
2565                         AC_MSG_RESULT([yes (default)])
2566                         AC_DEFINE(IPV4_IN_IPV6)
2567                         IPV4_IN6_HACK_MSG="yes"
2568                 else
2569                         AC_MSG_RESULT([no (default)])
2570                 fi
2571         ]
2572 )
2573
2574 # Whether to enable BSD auth support
2575 BSD_AUTH_MSG=no
2576 AC_ARG_WITH(bsd-auth,
2577         [  --with-bsd-auth         Enable BSD auth support],
2578         [
2579                 if test "x$withval" != "xno" ; then     
2580                         AC_DEFINE(BSD_AUTH)
2581                         BSD_AUTH_MSG=yes
2582                 fi
2583         ]
2584 )
2585
2586 # Where to place sshd.pid
2587 piddir=/var/run
2588 # make sure the directory exists
2589 if test ! -d $piddir ; then     
2590         piddir=`eval echo ${sysconfdir}`
2591         case $piddir in
2592                 NONE/*) piddir=`echo $piddir | sed "s~NONE~$ac_default_prefix~"` ;;
2593         esac
2594 fi
2595
2596 AC_ARG_WITH(pid-dir,
2597         [  --with-pid-dir=PATH     Specify location of ssh.pid file],
2598         [
2599                 if test "x$withval" != "xno" ; then     
2600                         piddir=$withval
2601                         if test ! -d $piddir ; then     
2602                         AC_MSG_WARN([** no $piddir directory on this system **])
2603                         fi
2604                 fi
2605         ]
2606 )
2607
2608 AC_DEFINE_UNQUOTED(_PATH_SSH_PIDDIR, "$piddir")
2609 AC_SUBST(piddir)
2610
2611 dnl allow user to disable some login recording features
2612 AC_ARG_ENABLE(lastlog,
2613         [  --disable-lastlog       disable use of lastlog even if detected [no]],
2614         [
2615                 if test "x$enableval" = "xno" ; then
2616                         AC_DEFINE(DISABLE_LASTLOG)
2617                 fi
2618         ]
2619 )
2620 AC_ARG_ENABLE(utmp,
2621         [  --disable-utmp          disable use of utmp even if detected [no]],
2622         [
2623                 if test "x$enableval" = "xno" ; then
2624                         AC_DEFINE(DISABLE_UTMP)
2625                 fi
2626         ]
2627 )
2628 AC_ARG_ENABLE(utmpx,
2629         [  --disable-utmpx         disable use of utmpx even if detected [no]],
2630         [
2631                 if test "x$enableval" = "xno" ; then
2632                         AC_DEFINE(DISABLE_UTMPX)
2633                 fi
2634         ]
2635 )
2636 AC_ARG_ENABLE(wtmp,
2637         [  --disable-wtmp          disable use of wtmp even if detected [no]],
2638         [
2639                 if test "x$enableval" = "xno" ; then
2640                         AC_DEFINE(DISABLE_WTMP)
2641                 fi
2642         ]
2643 )
2644 AC_ARG_ENABLE(wtmpx,
2645         [  --disable-wtmpx         disable use of wtmpx even if detected [no]],
2646         [
2647                 if test "x$enableval" = "xno" ; then
2648                         AC_DEFINE(DISABLE_WTMPX)
2649                 fi
2650         ]
2651 )
2652 AC_ARG_ENABLE(libutil,
2653         [  --disable-libutil       disable use of libutil (login() etc.) [no]],
2654         [
2655                 if test "x$enableval" = "xno" ; then
2656                         AC_DEFINE(DISABLE_LOGIN)
2657                 fi
2658         ]
2659 )
2660 AC_ARG_ENABLE(pututline,
2661         [  --disable-pututline     disable use of pututline() etc. ([uw]tmp) [no]],
2662         [
2663                 if test "x$enableval" = "xno" ; then
2664                         AC_DEFINE(DISABLE_PUTUTLINE)
2665                 fi
2666         ]
2667 )
2668 AC_ARG_ENABLE(pututxline,
2669         [  --disable-pututxline    disable use of pututxline() etc. ([uw]tmpx) [no]],
2670         [
2671                 if test "x$enableval" = "xno" ; then
2672                         AC_DEFINE(DISABLE_PUTUTXLINE)
2673                 fi
2674         ]
2675 )
2676 AC_ARG_WITH(lastlog,
2677   [  --with-lastlog=FILE|DIR specify lastlog location [common locations]],
2678         [
2679                 if test "x$withval" = "xno" ; then      
2680                         AC_DEFINE(DISABLE_LASTLOG)
2681                 else
2682                         conf_lastlog_location=$withval
2683                 fi
2684         ]
2685 )
2686
2687 dnl lastlog, [uw]tmpx? detection
2688 dnl  NOTE: set the paths in the platform section to avoid the
2689 dnl   need for command-line parameters
2690 dnl lastlog and [uw]tmp are subject to a file search if all else fails
2691
2692 dnl lastlog detection
2693 dnl  NOTE: the code itself will detect if lastlog is a directory
2694 AC_MSG_CHECKING([if your system defines LASTLOG_FILE])
2695 AC_TRY_COMPILE([
2696 #include <sys/types.h>
2697 #include <utmp.h>
2698 #ifdef HAVE_LASTLOG_H
2699 #  include <lastlog.h>
2700 #endif
2701 #ifdef HAVE_PATHS_H
2702 #  include <paths.h>
2703 #endif
2704 #ifdef HAVE_LOGIN_H
2705 # include <login.h>
2706 #endif
2707         ],
2708         [ char *lastlog = LASTLOG_FILE; ],
2709         [ AC_MSG_RESULT(yes) ],
2710         [
2711                 AC_MSG_RESULT(no)
2712                 AC_MSG_CHECKING([if your system defines _PATH_LASTLOG])
2713                 AC_TRY_COMPILE([
2714 #include <sys/types.h>
2715 #include <utmp.h>
2716 #ifdef HAVE_LASTLOG_H
2717 #  include <lastlog.h>
2718 #endif
2719 #ifdef HAVE_PATHS_H
2720 #  include <paths.h>
2721 #endif
2722                 ],
2723                 [ char *lastlog = _PATH_LASTLOG; ],
2724                 [ AC_MSG_RESULT(yes) ],
2725                 [
2726                         AC_MSG_RESULT(no)
2727                         system_lastlog_path=no
2728                 ])
2729         ]
2730 )
2731
2732 if test -z "$conf_lastlog_location"; then
2733         if test x"$system_lastlog_path" = x"no" ; then
2734                 for f in /var/log/lastlog /usr/adm/lastlog /var/adm/lastlog /etc/security/lastlog ; do
2735                                 if (test -d "$f" || test -f "$f") ; then
2736                                         conf_lastlog_location=$f
2737                                 fi
2738                 done
2739                 if test -z "$conf_lastlog_location"; then
2740                         AC_MSG_WARN([** Cannot find lastlog **])
2741                         dnl Don't define DISABLE_LASTLOG - that means we don't try wtmp/wtmpx
2742                 fi
2743         fi
2744 fi
2745
2746 if test -n "$conf_lastlog_location"; then
2747         AC_DEFINE_UNQUOTED(CONF_LASTLOG_FILE, "$conf_lastlog_location")
2748 fi      
2749
2750 dnl utmp detection
2751 AC_MSG_CHECKING([if your system defines UTMP_FILE])
2752 AC_TRY_COMPILE([
2753 #include <sys/types.h>
2754 #include <utmp.h>
2755 #ifdef HAVE_PATHS_H
2756 #  include <paths.h>
2757 #endif
2758         ],
2759         [ char *utmp = UTMP_FILE; ],
2760         [ AC_MSG_RESULT(yes) ],
2761         [ AC_MSG_RESULT(no)
2762           system_utmp_path=no ]
2763 )
2764 if test -z "$conf_utmp_location"; then
2765         if test x"$system_utmp_path" = x"no" ; then
2766                 for f in /etc/utmp /usr/adm/utmp /var/run/utmp; do
2767                         if test -f $f ; then
2768                                 conf_utmp_location=$f
2769                         fi
2770                 done
2771                 if test -z "$conf_utmp_location"; then
2772                         AC_DEFINE(DISABLE_UTMP)
2773                 fi
2774         fi
2775 fi
2776 if test -n "$conf_utmp_location"; then
2777         AC_DEFINE_UNQUOTED(CONF_UTMP_FILE, "$conf_utmp_location")
2778 fi      
2779
2780 dnl wtmp detection
2781 AC_MSG_CHECKING([if your system defines WTMP_FILE])
2782 AC_TRY_COMPILE([
2783 #include <sys/types.h>
2784 #include <utmp.h>
2785 #ifdef HAVE_PATHS_H
2786 #  include <paths.h>
2787 #endif
2788         ],
2789         [ char *wtmp = WTMP_FILE; ],
2790         [ AC_MSG_RESULT(yes) ],
2791         [ AC_MSG_RESULT(no)
2792           system_wtmp_path=no ]
2793 )
2794 if test -z "$conf_wtmp_location"; then
2795         if test x"$system_wtmp_path" = x"no" ; then
2796                 for f in /usr/adm/wtmp /var/log/wtmp; do
2797                         if test -f $f ; then
2798                                 conf_wtmp_location=$f
2799                         fi
2800                 done
2801                 if test -z "$conf_wtmp_location"; then
2802                         AC_DEFINE(DISABLE_WTMP)
2803                 fi
2804         fi
2805 fi
2806 if test -n "$conf_wtmp_location"; then
2807         AC_DEFINE_UNQUOTED(CONF_WTMP_FILE, "$conf_wtmp_location")
2808 fi      
2809
2810
2811 dnl utmpx detection - I don't know any system so perverse as to require
2812 dnl  utmpx, but not define UTMPX_FILE (ditto wtmpx.) No doubt it's out
2813 dnl  there, though.
2814 AC_MSG_CHECKING([if your system defines UTMPX_FILE])
2815 AC_TRY_COMPILE([
2816 #include <sys/types.h>
2817 #include <utmp.h>
2818 #ifdef HAVE_UTMPX_H
2819 #include <utmpx.h>
2820 #endif
2821 #ifdef HAVE_PATHS_H
2822 #  include <paths.h>
2823 #endif
2824         ],
2825         [ char *utmpx = UTMPX_FILE; ],
2826         [ AC_MSG_RESULT(yes) ],
2827         [ AC_MSG_RESULT(no)
2828           system_utmpx_path=no ]
2829 )
2830 if test -z "$conf_utmpx_location"; then
2831         if test x"$system_utmpx_path" = x"no" ; then
2832                 AC_DEFINE(DISABLE_UTMPX)
2833         fi
2834 else
2835         AC_DEFINE_UNQUOTED(CONF_UTMPX_FILE, "$conf_utmpx_location")
2836 fi      
2837
2838 dnl wtmpx detection
2839 AC_MSG_CHECKING([if your system defines WTMPX_FILE])
2840 AC_TRY_COMPILE([
2841 #include <sys/types.h>
2842 #include <utmp.h>
2843 #ifdef HAVE_UTMPX_H
2844 #include <utmpx.h>
2845 #endif
2846 #ifdef HAVE_PATHS_H
2847 #  include <paths.h>
2848 #endif
2849         ],
2850         [ char *wtmpx = WTMPX_FILE; ],
2851         [ AC_MSG_RESULT(yes) ],
2852         [ AC_MSG_RESULT(no)
2853           system_wtmpx_path=no ]
2854 )
2855 if test -z "$conf_wtmpx_location"; then
2856         if test x"$system_wtmpx_path" = x"no" ; then
2857                 AC_DEFINE(DISABLE_WTMPX)
2858         fi
2859 else
2860         AC_DEFINE_UNQUOTED(CONF_WTMPX_FILE, "$conf_wtmpx_location")
2861 fi      
2862
2863
2864 if test ! -z "$blibpath" ; then
2865         LDFLAGS="$LDFLAGS $blibflags$blibpath"
2866         AC_MSG_WARN([Please check and edit blibpath in LDFLAGS in Makefile])
2867 fi
2868
2869 dnl remove pam and dl because they are in $LIBPAM
2870 if test "$PAM_MSG" = yes ; then
2871         LIBS=`echo $LIBS | sed 's/-lpam //'`
2872 fi
2873 if test "$ac_cv_lib_pam_pam_set_item" = yes ; then
2874         LIBS=`echo $LIBS | sed 's/-ldl //'`
2875 fi
2876
2877 AC_EXEEXT
2878 AC_CONFIG_FILES([Makefile openbsd-compat/Makefile scard/Makefile ssh_prng_cmds])
2879 AC_OUTPUT
2880
2881 # Print summary of options
2882
2883 # Someone please show me a better way :)
2884 A=`eval echo ${prefix}` ; A=`eval echo ${A}`
2885 B=`eval echo ${bindir}` ; B=`eval echo ${B}`
2886 C=`eval echo ${sbindir}` ; C=`eval echo ${C}`
2887 D=`eval echo ${sysconfdir}` ; D=`eval echo ${D}`
2888 E=`eval echo ${libexecdir}/ssh-askpass` ; E=`eval echo ${E}`
2889 F=`eval echo ${mandir}/${mansubdir}X` ; F=`eval echo ${F}`
2890 G=`eval echo ${piddir}` ; G=`eval echo ${G}`
2891 H=`eval echo ${PRIVSEP_PATH}` ; H=`eval echo ${H}`
2892 I=`eval echo ${user_path}` ; I=`eval echo ${I}`
2893 J=`eval echo ${superuser_path}` ; J=`eval echo ${J}`
2894
2895 echo ""
2896 echo "OpenSSH has been configured with the following options:"
2897 echo "                     User binaries: $B"
2898 echo "                   System binaries: $C"
2899 echo "               Configuration files: $D"
2900 echo "                   Askpass program: $E"
2901 echo "                      Manual pages: $F"
2902 echo "                          PID file: $G"
2903 echo "  Privilege separation chroot path: $H"
2904 if test "x$external_path_file" = "x/etc/login.conf" ; then
2905 echo "   At runtime, sshd will use the path defined in $external_path_file"
2906 echo "   Make sure the path to scp is present, otherwise scp will not work"
2907 else
2908 echo "            sshd default user PATH: $I"
2909         if test ! -z "$external_path_file"; then
2910 echo "   (If PATH is set in $external_path_file it will be used instead. If"
2911 echo "   used, ensure the path to scp is present, otherwise scp will not work.)"
2912         fi
2913 fi
2914 if test ! -z "$superuser_path" ; then
2915 echo "          sshd superuser user PATH: $J"
2916 fi
2917 echo "                    Manpage format: $MANTYPE"
2918 echo "                       PAM support: $PAM_MSG"
2919 echo "                 KerberosV support: $KRB5_MSG"
2920 echo "                 Smartcard support: $SCARD_MSG"
2921 echo "                     S/KEY support: $SKEY_MSG"
2922 echo "              TCP Wrappers support: $TCPW_MSG"
2923 echo "              MD5 password support: $MD5_MSG"
2924 echo "       IP address in \$DISPLAY hack: $DISPLAY_HACK_MSG"
2925 echo "           Translate v4 in v6 hack: $IPV4_IN6_HACK_MSG"
2926 echo "                  BSD Auth support: $BSD_AUTH_MSG"
2927 echo "              Random number source: $RAND_MSG"
2928 if test ! -z "$USE_RAND_HELPER" ; then
2929 echo "     ssh-rand-helper collects from: $RAND_HELPER_MSG"
2930 fi
2931
2932 echo ""
2933
2934 echo "              Host: ${host}"
2935 echo "          Compiler: ${CC}"
2936 echo "    Compiler flags: ${CFLAGS}"
2937 echo "Preprocessor flags: ${CPPFLAGS}"
2938 echo "      Linker flags: ${LDFLAGS}"
2939 echo "         Libraries: ${LIBWRAP} ${LIBPAM} ${LIBS}"
2940
2941 echo ""
2942
2943 if test "x$PAM_MSG" = "xyes" ; then
2944         echo "PAM is enabled. You may need to install a PAM control file "
2945         echo "for sshd, otherwise password authentication may fail. "
2946         echo "Example PAM control files can be found in the contrib/ "
2947         echo "subdirectory"
2948         echo ""
2949 fi
2950
2951 if test ! -z "$RAND_HELPER_CMDHASH" ; then
2952         echo "WARNING: you are using the builtin random number collection "
2953         echo "service. Please read WARNING.RNG and request that your OS "
2954         echo "vendor includes kernel-based random number collection in "
2955         echo "future versions of your OS."
2956         echo ""
2957 fi
2958
This page took 0.4616 seconds and 5 git commands to generate.