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