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