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