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