]> andersk Git - openssh.git/blame - configure.ac
- (dtucker) [channels.c serverloop.c] Apply the bug #1102 workaround to ptys
[openssh.git] / configure.ac
CommitLineData
eb5d7ff6 1# $Id$
2b983b95 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.
0b202697 16
76e6410a 17AC_INIT(OpenSSH, Portable, openssh-unix-dev@mindrot.org)
823221b2 18AC_REVISION($Revision$)
98a7c37b 19AC_CONFIG_SRCDIR([ssh.c])
5881cd60 20
21AC_CONFIG_HEADER(config.h)
b14b2ae7 22AC_PROG_CC
a7effaac 23AC_CANONICAL_HOST
cf0c5df5 24AC_C_BIGENDIAN
5881cd60 25
a0391976 26# Checks for programs.
4bbf95fa 27AC_PROG_AWK
4cca272e 28AC_PROG_CPP
5881cd60 29AC_PROG_RANLIB
cf8dd513 30AC_PROG_INSTALL
c9ecc3c7 31AC_PROG_EGREP
bee0a37e 32AC_PATH_PROG(AR, ar)
ddd8c95b 33AC_PATH_PROG(CAT, cat)
34AC_PATH_PROG(KILL, kill)
13dd877b 35AC_PATH_PROGS(PERL, perl5 perl)
c3690df3 36AC_PATH_PROG(SED, sed)
a0f84251 37AC_SUBST(PERL)
ad85db64 38AC_PATH_PROG(ENT, ent)
39AC_SUBST(ENT)
6958bd37 40AC_PATH_PROG(TEST_MINUS_S_SH, bash)
41AC_PATH_PROG(TEST_MINUS_S_SH, ksh)
42AC_PATH_PROG(TEST_MINUS_S_SH, sh)
6193497b 43AC_PATH_PROG(SH, sh)
a3245b92 44AC_SUBST(TEST_SHELL,sh)
f498ed15 45
9cefe228 46dnl for buildpkg.sh
47AC_PATH_PROG(PATH_GROUPADD_PROG, groupadd, groupadd,
48 [/usr/sbin${PATH_SEPARATOR}/etc])
49AC_PATH_PROG(PATH_USERADD_PROG, useradd, useradd,
50 [/usr/sbin${PATH_SEPARATOR}/etc])
51AC_CHECK_PROG(MAKE_PACKAGE_SUPPORTED, pkgmk, yes, no)
eeb27c78 52if test -x /sbin/sh; then
53 AC_SUBST(STARTUP_SCRIPT_SHELL,/sbin/sh)
54else
55 AC_SUBST(STARTUP_SCRIPT_SHELL,/bin/sh)
56fi
9cefe228 57
948fd8b9 58# System features
59AC_SYS_LARGEFILE
60
c193d002 61if test -z "$AR" ; then
62 AC_MSG_ERROR([*** 'ar' missing, please install or fix your \$PATH ***])
63fi
64
2e73a022 65# Use LOGIN_PROGRAM from environment if possible
66if test ! -z "$LOGIN_PROGRAM" ; then
3466e002 67 AC_DEFINE_UNQUOTED(LOGIN_PROGRAM_FALLBACK, "$LOGIN_PROGRAM",
68 [If your header files don't define LOGIN_PROGRAM,
69 then use this (detected) from environment and PATH])
2e73a022 70else
71 # Search for login
72 AC_PATH_PROG(LOGIN_PROGRAM_FALLBACK, login)
73 if test ! -z "$LOGIN_PROGRAM_FALLBACK" ; then
74 AC_DEFINE_UNQUOTED(LOGIN_PROGRAM_FALLBACK, "$LOGIN_PROGRAM_FALLBACK")
75 fi
76fi
77
37656beb 78AC_PATH_PROG(PATH_PASSWD_PROG, passwd)
79if test ! -z "$PATH_PASSWD_PROG" ; then
3466e002 80 AC_DEFINE_UNQUOTED(_PATH_PASSWD_PROG, "$PATH_PASSWD_PROG",
81 [Full path of your "passwd" program])
37656beb 82fi
83
d423d822 84if test -z "$LD" ; then
85 LD=$CC
86fi
87AC_SUBST(LD)
82f4e93d 88
d423d822 89AC_C_INLINE
dfafb2e1 90
91AC_CHECK_DECL(LLONG_MAX, have_llong_max=1, , [#include <limits.h>])
92
aff51935 93if test "$GCC" = "yes" || test "$GCC" = "egcs"; then
af40ca44 94 CFLAGS="$CFLAGS -Wall -Wpointer-arith -Wuninitialized"
eeee8237 95 GCC_VER=`$CC -v 2>&1 | $AWK '/gcc version /{print $3}'`
5fdabf45 96 case $GCC_VER in
97 1.*) ;;
98 2.8* | 2.9*) CFLAGS="$CFLAGS -Wsign-compare" ;;
99 2.*) ;;
dbf07ba2 100 3.*) CFLAGS="$CFLAGS -Wsign-compare" ;;
cd595991 101 4.*) CFLAGS="$CFLAGS -Wsign-compare -Wno-pointer-sign" ;;
102 *) ;;
5fdabf45 103 esac
8a3ff1aa 104
dfafb2e1 105 if test -z "$have_llong_max"; then
106 # retry LLONG_MAX with -std=gnu99, needed on some Linuxes
107 unset ac_cv_have_decl_LLONG_MAX
108 saved_CFLAGS="$CFLAGS"
109 CFLAGS="$CFLAGS -std=gnu99"
110 AC_CHECK_DECL(LLONG_MAX,
111 [have_llong_max=1],
112 [CFLAGS="$saved_CFLAGS"],
113 [#include <limits.h>]
114 )
115 fi
d423d822 116fi
117
e6354014 118AC_ARG_WITH(rpath,
119 [ --without-rpath Disable auto-added -R linker paths],
120 [
82f4e93d 121 if test "x$withval" = "xno" ; then
e6354014 122 need_dash_r=""
123 fi
124 if test "x$withval" = "xyes" ; then
125 need_dash_r=1
126 fi
127 ]
128)
129
a0391976 130# Check for some target-specific stuff
a7effaac 131case "$host" in
9d6b1b96 132*-*-aix*)
aff51935 133 AC_MSG_CHECKING([how to specify blibpath for linker ($LD)])
68ece370 134 if (test -z "$blibpath"); then
0a15d73b 135 blibpath="/usr/lib:/lib"
68ece370 136 fi
137 saved_LDFLAGS="$LDFLAGS"
138 for tryflags in -blibpath: -Wl,-blibpath: -Wl,-rpath, ;do
139 if (test -z "$blibflags"); then
140 LDFLAGS="$saved_LDFLAGS $tryflags$blibpath"
141 AC_TRY_LINK([], [], [blibflags=$tryflags])
142 fi
143 done
144 if (test -z "$blibflags"); then
145 AC_MSG_RESULT(not found)
146 AC_MSG_ERROR([*** must be able to specify blibpath on AIX - check config.log])
147 else
148 AC_MSG_RESULT($blibflags)
bd499f9e 149 fi
68ece370 150 LDFLAGS="$saved_LDFLAGS"
e351e493 151 dnl Check for authenticate. Might be in libs.a on older AIXes
3466e002 152 AC_CHECK_FUNC(authenticate, [AC_DEFINE(WITH_AIXAUTHENTICATE, 1,
153 [Define if you want to enable AIX4's authenticate function])],
0764e748 154 [AC_CHECK_LIB(s,authenticate,
e351e493 155 [ AC_DEFINE(WITH_AIXAUTHENTICATE)
0764e748 156 LIBS="$LIBS -ls"
157 ])
158 ])
ba603e06 159 dnl Check for various auth function declarations in headers.
c85ed8e2 160 AC_CHECK_DECLS([authenticate, loginrestrictions, loginsuccess,
72ad335d 161 passwdexpired, setauthdb], , , [#include <usersec.h>])
e351e493 162 dnl Check if loginfailed is declared and takes 4 arguments (AIX >= 5.2)
ba603e06 163 AC_CHECK_DECLS(loginfailed,
e351e493 164 [AC_MSG_CHECKING(if loginfailed takes 4 arguments)
165 AC_TRY_COMPILE(
f58c0e01 166 [#include <usersec.h>],
e351e493 167 [(void)loginfailed("user","host","tty",0);],
168 [AC_MSG_RESULT(yes)
3466e002 169 AC_DEFINE(AIX_LOGINFAILED_4ARG, 1,
170 [Define if your AIX loginfailed() function
171 takes 4 arguments (AIX >= 5.2)])],
f58c0e01 172 [AC_MSG_RESULT(no)]
e351e493 173 )],
174 [],
175 [#include <usersec.h>]
176 )
2aa3a16c 177 AC_CHECK_FUNCS(setauthdb)
5ccf88cb 178 check_for_aix_broken_getaddrinfo=1
3466e002 179 AC_DEFINE(BROKEN_REALPATH, 1, [Define if you have a broken realpath.])
180 AC_DEFINE(SETEUID_BREAKS_SETUID, 1,
181 [Define if your platform breaks doing a seteuid before a setuid])
182 AC_DEFINE(BROKEN_SETREUID, 1, [Define if your setreuid() is broken])
183 AC_DEFINE(BROKEN_SETREGID, 1, [Define if your setregid() is broken])
a3cef3ca 184 dnl AIX handles lastlog as part of its login message
3466e002 185 AC_DEFINE(DISABLE_LASTLOG, 1, [Define if you don't want to use lastlog])
186 AC_DEFINE(LOGIN_NEEDS_UTMPX, 1,
187 [Some systems need a utmpx entry for /bin/login to work])
188 AC_DEFINE(SPT_TYPE,SPT_REUSEARGV,
189 [Define to a Set Process Title type if your system is
190 supported by bsd-setproctitle.c])
961c2997 191 AC_DEFINE(SSHPAM_CHAUTHTOK_NEEDS_RUID, 1,
192 [AIX 5.2 and 5.3 (and presumably newer) require this])
ea8c44d9 193 AC_DEFINE(PTY_ZEROREAD, 1, [read(1) can return 0 for a non-closed fd])
9d6b1b96 194 ;;
3c62e7eb 195*-*-cygwin*)
a52997bd 196 check_for_libcrypt_later=1
ffb8d130 197 LIBS="$LIBS /usr/lib/textmode.o"
3466e002 198 AC_DEFINE(HAVE_CYGWIN, 1, [Define if you are on Cygwin])
199 AC_DEFINE(USE_PIPES, 1, [Use PIPES instead of a socketpair()])
200 AC_DEFINE(DISABLE_SHADOW, 1,
201 [Define if you want to disable shadow passwords])
202 AC_DEFINE(IP_TOS_IS_BROKEN, 1,
203 [Define if your system choked on IP TOS setting])
204 AC_DEFINE(NO_X11_UNIX_SOCKETS, 1,
205 [Define if X11 doesn't support AF_UNIX sockets on that system])
206 AC_DEFINE(NO_IPPORT_RESERVED_CONCEPT, 1,
207 [Define if the concept of ports only accessible to
208 superusers isn't known])
209 AC_DEFINE(DISABLE_FD_PASSING, 1,
210 [Define if your platform needs to skip post auth
211 file descriptor passing])
3c62e7eb 212 ;;
d6fdb079 213*-*-dgux*)
214 AC_DEFINE(IP_TOS_IS_BROKEN)
0c6a72a5 215 AC_DEFINE(SETEUID_BREAKS_SETUID)
216 AC_DEFINE(BROKEN_SETREUID)
217 AC_DEFINE(BROKEN_SETREGID)
d6fdb079 218 ;;
39c98ef7 219*-*-darwin*)
33e2e066 220 AC_MSG_CHECKING(if we have working getaddrinfo)
221 AC_TRY_RUN([#include <mach-o/dyld.h>
222main() { if (NSVersionOfRunTimeLibrary("System") >= (60 << 16))
223 exit(0);
224 else
225 exit(1);
226}], [AC_MSG_RESULT(working)],
227 [AC_MSG_RESULT(buggy)
3466e002 228 AC_DEFINE(BROKEN_GETADDRINFO, 1, [getaddrinfo is broken (if present)])],
b27e573d 229 [AC_MSG_RESULT(assume it is working)])
635e0c42 230 AC_DEFINE(SETEUID_BREAKS_SETUID)
231 AC_DEFINE(BROKEN_SETREUID)
232 AC_DEFINE(BROKEN_SETREGID)
3466e002 233 AC_DEFINE_UNQUOTED(BIND_8_COMPAT, 1,
234 [Define if your resolver libs need this for getrrsetbyname])
e02505e2 235 AC_DEFINE(SSH_TUN_FREEBSD, 1, [Open tunnel devices the FreeBSD way])
236 AC_DEFINE(SSH_TUN_COMPAT_AF, 1,
237 [Use tunnel device compatibility to OpenBSD])
238 AC_DEFINE(SSH_TUN_PREPEND_AF, 1,
239 [Prepend the address family to IP tunnel traffic])
39c98ef7 240 ;;
7d458c86 241*-*-hpux*)
242 # first we define all of the options common to all HP-UX releases
b8fea62d 243 CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1"
44839801 244 IPADDR_IN_DISPLAY=yes
2b10f47a 245 AC_DEFINE(USE_PIPES)
3466e002 246 AC_DEFINE(LOGIN_NO_ENDOPT, 1,
247 [Define if your login program cannot handle end of options ("--")])
a2572aa7 248 AC_DEFINE(LOGIN_NEEDS_UTMPX)
3466e002 249 AC_DEFINE(LOCKED_PASSWD_STRING, "*",
250 [String used in /etc/passwd to denote locked account])
3a2b2b44 251 AC_DEFINE(SPT_TYPE,SPT_PSTAT)
83f987c3 252 MAIL="/var/mail/username"
f75ca46d 253 LIBS="$LIBS -lsec"
7d458c86 254 AC_CHECK_LIB(xnet, t_error, ,
255 AC_MSG_ERROR([*** -lxnet needed on HP-UX - check config.log ***]))
256
257 # next, we define all of the options specific to major releases
258 case "$host" in
259 *-*-hpux10*)
260 if test -z "$GCC"; then
261 CFLAGS="$CFLAGS -Ae"
262 fi
263 ;;
264 *-*-hpux11*)
3466e002 265 AC_DEFINE(PAM_SUN_CODEBASE, 1,
266 [Define if you are using Solaris-derived PAM which
267 passes pam_messages to the conversation function
268 with an extra level of indirection])
269 AC_DEFINE(DISABLE_UTMP, 1,
270 [Define if you don't want to use utmp])
7d458c86 271 AC_DEFINE(USE_BTMP, 1, [Use btmp to log bad logins])
272 check_for_hpux_broken_getaddrinfo=1
273 check_for_conflicting_getspnam=1
274 ;;
275 esac
276
277 # lastly, we define options specific to minor releases
278 case "$host" in
279 *-*-hpux10.26)
3466e002 280 AC_DEFINE(HAVE_SECUREWARE, 1,
281 [Define if you have SecureWare-based
282 protected password database])
7d458c86 283 disable_ptmx_check=yes
284 LIBS="$LIBS -lsecpw"
285 ;;
286 esac
2b763e31 287 ;;
d94aa2ae 288*-*-irix5*)
6ac7829a 289 PATH="$PATH:/usr/etc"
3466e002 290 AC_DEFINE(BROKEN_INET_NTOA, 1,
291 [Define if you system's inet_ntoa is busted
292 (e.g. Irix gcc issue)])
cb433561 293 AC_DEFINE(SETEUID_BREAKS_SETUID)
294 AC_DEFINE(BROKEN_SETREUID)
295 AC_DEFINE(BROKEN_SETREGID)
3466e002 296 AC_DEFINE(WITH_ABBREV_NO_TTY, 1,
297 [Define if you shouldn't strip 'tty' from your
298 ttyname in [uw]tmp])
3e6e3da0 299 AC_DEFINE(LOCKED_PASSWD_STRING, "*LK*")
b9795b89 300 ;;
301*-*-irix6*)
6ac7829a 302 PATH="$PATH:/usr/etc"
3466e002 303 AC_DEFINE(WITH_IRIX_ARRAY, 1,
304 [Define if you have/want arrays
305 (cluster-wide session managment, not C arrays)])
306 AC_DEFINE(WITH_IRIX_PROJECT, 1,
307 [Define if you want IRIX project management])
308 AC_DEFINE(WITH_IRIX_AUDIT, 1,
309 [Define if you want IRIX audit trails])
310 AC_CHECK_FUNC(jlimit_startjob, [AC_DEFINE(WITH_IRIX_JOBS, 1,
311 [Define if you want IRIX kernel jobs])])
416ed5a7 312 AC_DEFINE(BROKEN_INET_NTOA)
412c0eaa 313 AC_DEFINE(SETEUID_BREAKS_SETUID)
314 AC_DEFINE(BROKEN_SETREUID)
315 AC_DEFINE(BROKEN_SETREGID)
3466e002 316 AC_DEFINE(BROKEN_UPDWTMPX, 1, [updwtmpx is broken (if present)])
0e8f4eba 317 AC_DEFINE(WITH_ABBREV_NO_TTY)
3e6e3da0 318 AC_DEFINE(LOCKED_PASSWD_STRING, "*LK*")
d94aa2ae 319 ;;
5cdfe03f 320*-*-linux*)
321 no_dev_ptmx=1
717057b6 322 check_for_libcrypt_later=1
eacb954e 323 check_for_openpty_ctty_bug=1
3466e002 324 AC_DEFINE(DONT_TRY_OTHER_AF, 1, [Workaround more Linux IPv6 quirks])
325 AC_DEFINE(PAM_TTY_KLUDGE, 1,
326 [Work around problematic Linux PAM modules handling of PAM_TTY])
327 AC_DEFINE(LOCKED_PASSWD_PREFIX, "!",
328 [String used in /etc/passwd to denote locked account])
3a2b2b44 329 AC_DEFINE(SPT_TYPE,SPT_REUSEARGV)
3466e002 330 AC_DEFINE(LINK_OPNOTSUPP_ERRNO, EPERM,
331 [Define to whatever link() returns for "not supported"
332 if it doesn't return EOPNOTSUPP.])
b6610e8f 333 AC_DEFINE(_PATH_BTMP, "/var/log/btmp", [log for bad login attempts])
3466e002 334 AC_DEFINE(USE_BTMP)
80faa19f 335 inet6_default_4in6=yes
bf7c1e6c 336 case `uname -r` in
ad84c479 337 1.*|2.0.*)
3466e002 338 AC_DEFINE(BROKEN_CMSG_TYPE, 1,
339 [Define if cmsg_type is not passed correctly])
bf7c1e6c 340 ;;
bf7c1e6c 341 esac
c40f09ca 342 # tun(4) forwarding compat code
d91775e1 343 AC_CHECK_HEADERS(linux/if_tun.h)
b5081213 344 if test "x$ac_cv_header_linux_if_tun_h" = "xyes" ; then
c40f09ca 345 AC_DEFINE(SSH_TUN_LINUX, 1,
346 [Open tunnel devices the Linux tun/tap way])
347 AC_DEFINE(SSH_TUN_COMPAT_AF, 1,
348 [Use tunnel device compatibility to OpenBSD])
349 AC_DEFINE(SSH_TUN_PREPEND_AF, 1,
350 [Prepend the address family to IP tunnel traffic])
351 fi
5cdfe03f 352 ;;
66d6c27e 353mips-sony-bsd|mips-sony-newsos4)
4b2cf3f1 354 AC_DEFINE(NEED_SETPGRP, 1, [Need setpgrp to acquire controlling tty])
66d6c27e 355 SONY=1
66d6c27e 356 ;;
d468fc76 357*-*-netbsd*)
33e2e066 358 check_for_libcrypt_before=1
82f4e93d 359 if test "x$withval" != "xno" ; then
e6354014 360 need_dash_r=1
361 fi
0f6cb079 362 AC_DEFINE(SSH_TUN_FREEBSD, 1, [Open tunnel devices the FreeBSD way])
363 AC_CHECK_HEADER([net/if_tap.h], ,
364 AC_DEFINE(SSH_TUN_NO_L2, 1, [No layer 2 tunnel support]))
365 AC_DEFINE(SSH_TUN_PREPEND_AF, 1,
366 [Prepend the address family to IP tunnel traffic])
d468fc76 367 ;;
86b416a7 368*-*-freebsd*)
369 check_for_libcrypt_later=1
988c5031 370 AC_DEFINE(LOCKED_PASSWD_PREFIX, "*LOCKED*", [Account locked with pw(1)])
0f6cb079 371 AC_DEFINE(SSH_TUN_FREEBSD, 1, [Open tunnel devices the FreeBSD way])
372 AC_CHECK_HEADER([net/if_tap.h], ,
373 AC_DEFINE(SSH_TUN_NO_L2, 1, [No layer 2 tunnel support]))
86b416a7 374 ;;
8707b7eb 375*-*-bsdi*)
376 AC_DEFINE(SETEUID_BREAKS_SETUID)
377 AC_DEFINE(BROKEN_SETREUID)
378 AC_DEFINE(BROKEN_SETREGID)
379 ;;
729bfe59 380*-next-*)
729bfe59 381 conf_lastlog_location="/usr/adm/lastlog"
698d107e 382 conf_utmp_location=/etc/utmp
383 conf_wtmp_location=/usr/adm/wtmp
384 MAIL=/usr/spool/mail
3466e002 385 AC_DEFINE(HAVE_NEXT, 1, [Define if you are on NeXT])
443172c4 386 AC_DEFINE(BROKEN_REALPATH)
00937921 387 AC_DEFINE(USE_PIPES)
3466e002 388 AC_DEFINE(BROKEN_SAVED_UIDS, 1, [Needed for NeXT])
729bfe59 389 ;;
5b7b5e23 390*-*-openbsd*)
391 AC_DEFINE(HAVE_ATTRIBUTE__SENTINEL__, 1, [OpenBSD's gcc has sentinel])
8034a348 392 AC_DEFINE(HAVE_ATTRIBUTE__BOUNDED__, 1, [OpenBSD's gcc has bounded])
0f6cb079 393 AC_DEFINE(SSH_TUN_OPENBSD, 1, [Open tunnel devices the OpenBSD way])
5b7b5e23 394 ;;
9d6b1b96 395*-*-solaris*)
82f4e93d 396 if test "x$withval" != "xno" ; then
010e9d5b 397 need_dash_r=1
398 fi
adeebd37 399 AC_DEFINE(PAM_SUN_CODEBASE)
7e2d5fa4 400 AC_DEFINE(LOGIN_NEEDS_UTMPX)
3466e002 401 AC_DEFINE(LOGIN_NEEDS_TERM, 1,
402 [Some versions of /bin/login need the TERM supplied
403 on the commandline])
7f0a4ff1 404 AC_DEFINE(PAM_TTY_KLUDGE)
3466e002 405 AC_DEFINE(SSHPAM_CHAUTHTOK_NEEDS_RUID, 1,
406 [Define if pam_chauthtok wants real uid set
407 to the unpriv'ed user])
3e6e3da0 408 AC_DEFINE(LOCKED_PASSWD_STRING, "*LK*")
ad84c479 409 # Pushing STREAMS modules will cause sshd to acquire a controlling tty.
3466e002 410 AC_DEFINE(SSHD_ACQUIRES_CTTY, 1,
411 [Define if sshd somehow reacquires a controlling TTY
412 after setsid()])
795aa5f5 413 AC_DEFINE(PASSWD_NEEDS_USERNAME, 1, [must supply username to passwd
414 in case the name is longer than 8 chars])
95b99395 415 external_path_file=/etc/default/login
1d7b9b20 416 # hardwire lastlog location (can't detect it on some versions)
417 conf_lastlog_location="/var/adm/lastlog"
32c80420 418 AC_MSG_CHECKING(for obsolete utmp and wtmp in solaris2.x)
419 sol2ver=`echo "$host"| sed -e 's/.*[[0-9]]\.//'`
420 if test "$sol2ver" -ge 8; then
421 AC_MSG_RESULT(yes)
422 AC_DEFINE(DISABLE_UTMP)
3466e002 423 AC_DEFINE(DISABLE_WTMP, 1,
424 [Define if you don't want to use wtmp])
32c80420 425 else
426 AC_MSG_RESULT(no)
427 fi
9d6b1b96 428 ;;
a423beaf 429*-*-sunos4*)
0c2fb82f 430 CPPFLAGS="$CPPFLAGS -DSUNOS4"
a423beaf 431 AC_CHECK_FUNCS(getpwanam)
adeebd37 432 AC_DEFINE(PAM_SUN_CODEBASE)
32eec038 433 conf_utmp_location=/etc/utmp
434 conf_wtmp_location=/var/adm/wtmp
435 conf_lastlog_location=/var/adm/lastlog
137d7b6c 436 AC_DEFINE(USE_PIPES)
a423beaf 437 ;;
6f68f28a 438*-ncr-sysv*)
98a7c37b 439 LIBS="$LIBS -lc89"
29525240 440 AC_DEFINE(USE_PIPES)
eabb99c6 441 AC_DEFINE(SSHD_ACQUIRES_CTTY)
6fb3618d 442 AC_DEFINE(SETEUID_BREAKS_SETUID)
443 AC_DEFINE(BROKEN_SETREUID)
444 AC_DEFINE(BROKEN_SETREGID)
6f68f28a 445 ;;
132dd316 446*-sni-sysv*)
c8c15bcb 447 # /usr/ucblib MUST NOT be searched on ReliantUNIX
e2798e96 448 AC_CHECK_LIB(dl, dlsym, ,)
d08db6d1 449 # -lresolv needs to be at the end of LIBS or DNS lookups break
450 AC_CHECK_LIB(resolv, res_query, [ LIBS="$LIBS -lresolv" ])
9548d6c8 451 IPADDR_IN_DISPLAY=yes
452 AC_DEFINE(USE_PIPES)
132dd316 453 AC_DEFINE(IP_TOS_IS_BROKEN)
605369bb 454 AC_DEFINE(SETEUID_BREAKS_SETUID)
455 AC_DEFINE(BROKEN_SETREUID)
456 AC_DEFINE(BROKEN_SETREGID)
eabb99c6 457 AC_DEFINE(SSHD_ACQUIRES_CTTY)
95b99395 458 external_path_file=/etc/default/login
c8c15bcb 459 # /usr/ucblib/libucb.a no longer needed on ReliantUNIX
460 # Attention: always take care to bind libsocket and libnsl before libc,
461 # otherwise you will find lots of "SIOCGPGRP errno 22" on syslog
132dd316 462 ;;
79a7ba96 463# UnixWare 1.x, UnixWare 2.x, and others based on code from Univel.
77bb0bca 464*-*-sysv4.2*)
9a406e1e 465 CFLAGS="$CFLAGS -Dva_list=_VA_LIST"
ed6553e2 466 AC_DEFINE(USE_PIPES)
7ed101c0 467 AC_DEFINE(SETEUID_BREAKS_SETUID)
468 AC_DEFINE(BROKEN_SETREUID)
469 AC_DEFINE(BROKEN_SETREGID)
46f853b9 470 AC_DEFINE(PASSWD_NEEDS_USERNAME, 1, [must supply username to passwd])
e45da4d6 471 AC_DEFINE(LOCKED_PASSWD_STRING, "*LK*")
77bb0bca 472 ;;
79a7ba96 473# UnixWare 7.x, OpenUNIX 8
77bb0bca 474*-*-sysv5*)
d7d2cc6e 475 check_for_libcrypt_later=1
476 AC_DEFINE(UNIXWARE_LONG_PASSWORDS, 1, [Support passwords > 8 chars])
ed6553e2 477 AC_DEFINE(USE_PIPES)
7ed101c0 478 AC_DEFINE(SETEUID_BREAKS_SETUID)
479 AC_DEFINE(BROKEN_SETREUID)
480 AC_DEFINE(BROKEN_SETREGID)
3466e002 481 AC_DEFINE(PASSWD_NEEDS_USERNAME)
822015dd 482 case "$host" in
483 *-*-sysv5SCO_SV*) # SCO OpenServer 6.x
484 TEST_SHELL=/u95/bin/sh
3466e002 485 AC_DEFINE(BROKEN_LIBIAF, 1,
486 [ia_uinfo routines not supported by OS yet])
822015dd 487 ;;
e45da4d6 488 *) AC_DEFINE(LOCKED_PASSWD_STRING, "*LK*")
489 ;;
822015dd 490 esac
77bb0bca 491 ;;
9d6b1b96 492*-*-sysv*)
9d6b1b96 493 ;;
79a7ba96 494# SCO UNIX and OEM versions of SCO UNIX
77bb0bca 495*-*-sco3.2v4*)
11cf4f1f 496 AC_MSG_ERROR("This Platform is no longer supported.")
77bb0bca 497 ;;
79a7ba96 498# SCO OpenServer 5.x
77bb0bca 499*-*-sco3.2v5*)
21710e39 500 if test -z "$GCC"; then
501 CFLAGS="$CFLAGS -belf"
502 fi
ed6553e2 503 LIBS="$LIBS -lprot -lx -ltinfo -lm"
509b1f88 504 no_dev_ptmx=1
ed6553e2 505 AC_DEFINE(USE_PIPES)
6e879cb4 506 AC_DEFINE(HAVE_SECUREWARE)
d287c664 507 AC_DEFINE(DISABLE_SHADOW)
94d8258b 508 AC_DEFINE(DISABLE_FD_PASSING)
7ed101c0 509 AC_DEFINE(SETEUID_BREAKS_SETUID)
510 AC_DEFINE(BROKEN_SETREUID)
511 AC_DEFINE(BROKEN_SETREGID)
bcebad47 512 AC_DEFINE(WITH_ABBREV_NO_TTY)
34f2baf0 513 AC_DEFINE(BROKEN_UPDWTMPX)
3466e002 514 AC_DEFINE(PASSWD_NEEDS_USERNAME)
aca75d94 515 AC_CHECK_FUNCS(getluid setluid)
533875af 516 MANTYPE=man
a3245b92 517 TEST_SHELL=ksh
509b1f88 518 ;;
ccbb983c 519*-*-unicosmk*)
3466e002 520 AC_DEFINE(NO_SSH_LASTLOG, 1,
521 [Define if you don't want to use lastlog in session.c])
c1ad5966 522 AC_DEFINE(SETEUID_BREAKS_SETUID)
523 AC_DEFINE(BROKEN_SETREUID)
524 AC_DEFINE(BROKEN_SETREGID)
ccbb983c 525 AC_DEFINE(USE_PIPES)
526 AC_DEFINE(DISABLE_FD_PASSING)
527 LDFLAGS="$LDFLAGS"
528 LIBS="$LIBS -lgen -lrsc -lshare -luex -lacm"
529 MANTYPE=cat
d262b7f2 530 ;;
7b9a8c6e 531*-*-unicosmp*)
c1ad5966 532 AC_DEFINE(SETEUID_BREAKS_SETUID)
533 AC_DEFINE(BROKEN_SETREUID)
534 AC_DEFINE(BROKEN_SETREGID)
7b9a8c6e 535 AC_DEFINE(WITH_ABBREV_NO_TTY)
536 AC_DEFINE(USE_PIPES)
537 AC_DEFINE(DISABLE_FD_PASSING)
538 LDFLAGS="$LDFLAGS"
c1ad5966 539 LIBS="$LIBS -lgen -lacid -ldb"
7b9a8c6e 540 MANTYPE=cat
541 ;;
ca5c7d6a 542*-*-unicos*)
c1ad5966 543 AC_DEFINE(SETEUID_BREAKS_SETUID)
544 AC_DEFINE(BROKEN_SETREUID)
545 AC_DEFINE(BROKEN_SETREGID)
ca5c7d6a 546 AC_DEFINE(USE_PIPES)
94d8258b 547 AC_DEFINE(DISABLE_FD_PASSING)
ef51930f 548 AC_DEFINE(NO_SSH_LASTLOG)
ccbb983c 549 LDFLAGS="$LDFLAGS -Wl,-Dmsglevel=334:fatal"
550 LIBS="$LIBS -lgen -lrsc -lshare -luex -lacm"
551 MANTYPE=cat
a704dd54 552 ;;
4d33e531 553*-dec-osf*)
99c8ddac 554 AC_MSG_CHECKING(for Digital Unix SIA)
555 no_osfsia=""
556 AC_ARG_WITH(osfsia,
557 [ --with-osfsia Enable Digital Unix SIA],
558 [
559 if test "x$withval" = "xno" ; then
560 AC_MSG_RESULT(disabled)
561 no_osfsia=1
562 fi
563 ],
564 )
565 if test -z "$no_osfsia" ; then
4d33e531 566 if test -f /etc/sia/matrix.conf; then
567 AC_MSG_RESULT(yes)
3466e002 568 AC_DEFINE(HAVE_OSF_SIA, 1,
569 [Define if you have Digital Unix Security
570 Integration Architecture])
571 AC_DEFINE(DISABLE_LOGIN, 1,
572 [Define if you don't want to use your
573 system's login() call])
58d0df4e 574 AC_DEFINE(DISABLE_FD_PASSING)
4d33e531 575 LIBS="$LIBS -lsecurity -ldb -lm -laud"
576 else
577 AC_MSG_RESULT(no)
3466e002 578 AC_DEFINE(LOCKED_PASSWD_SUBSTR, "Nologin",
579 [String used in /etc/passwd to denote locked account])
4d33e531 580 fi
581 fi
a6e67b60 582 AC_DEFINE(BROKEN_GETADDRINFO)
f4f2ff4f 583 AC_DEFINE(SETEUID_BREAKS_SETUID)
08da2d08 584 AC_DEFINE(BROKEN_SETREUID)
585 AC_DEFINE(BROKEN_SETREGID)
4d33e531 586 ;;
41cb4569 587
9c54c067 588*-*-nto-qnx*)
41cb4569 589 AC_DEFINE(USE_PIPES)
590 AC_DEFINE(NO_X11_UNIX_SOCKETS)
3466e002 591 AC_DEFINE(MISSING_NFDBITS, 1, [Define on *nto-qnx systems])
592 AC_DEFINE(MISSING_HOWMANY, 1, [Define on *nto-qnx systems])
593 AC_DEFINE(MISSING_FD_MASK, 1, [Define on *nto-qnx systems])
9c54c067 594 AC_DEFINE(DISABLE_LASTLOG)
49c64dd6 595 AC_DEFINE(SSHD_ACQUIRES_CTTY)
0c7e8877 596 enable_etc_default_login=no # has incompatible /etc/default/login
41cb4569 597 ;;
35fc74ed 598
599*-*-ultrix*)
3466e002 600 AC_DEFINE(BROKEN_GETGROUPS, 1, [getgroups(0,NULL) will return -1])
601 AC_DEFINE(BROKEN_MMAP, 1, [Ultrix mmap can't map files])
4b2cf3f1 602 AC_DEFINE(NEED_SETPGRP)
b5765e1d 603 AC_DEFINE(HAVE_SYS_SYSLOG_H, 1, [Force use of sys/syslog.h on Ultrix])
604 ;;
157b6700 605
606*-*-lynxos)
607 CFLAGS="$CFLAGS -D__NO_INCLUDE_WARN__"
3466e002 608 AC_DEFINE(MISSING_HOWMANY)
157b6700 609 AC_DEFINE(BROKEN_SETVBUF, 1, [LynxOS has broken setvbuf() implementation])
610 ;;
a7effaac 611esac
612
8e7b16f8 613# Allow user to specify flags
614AC_ARG_WITH(cflags,
615 [ --with-cflags Specify additional flags to pass to compiler],
616 [
6cf0200f 617 if test -n "$withval" && test "x$withval" != "xno" && \
618 test "x${withval}" != "xyes"; then
8e7b16f8 619 CFLAGS="$CFLAGS $withval"
620 fi
82f4e93d 621 ]
8e7b16f8 622)
0c2fb82f 623AC_ARG_WITH(cppflags,
624 [ --with-cppflags Specify additional flags to pass to preprocessor] ,
625 [
6cf0200f 626 if test -n "$withval" && test "x$withval" != "xno" && \
627 test "x${withval}" != "xyes"; then
0c2fb82f 628 CPPFLAGS="$CPPFLAGS $withval"
629 fi
630 ]
631)
8e7b16f8 632AC_ARG_WITH(ldflags,
97b378bf 633 [ --with-ldflags Specify additional flags to pass to linker],
8e7b16f8 634 [
6cf0200f 635 if test -n "$withval" && test "x$withval" != "xno" && \
636 test "x${withval}" != "xyes"; then
8e7b16f8 637 LDFLAGS="$LDFLAGS $withval"
638 fi
82f4e93d 639 ]
8e7b16f8 640)
641AC_ARG_WITH(libs,
642 [ --with-libs Specify additional libraries to link with],
643 [
6cf0200f 644 if test -n "$withval" && test "x$withval" != "xno" && \
645 test "x${withval}" != "xyes"; then
8e7b16f8 646 LIBS="$LIBS $withval"
647 fi
82f4e93d 648 ]
8e7b16f8 649)
ed89c848 650AC_ARG_WITH(Werror,
651 [ --with-Werror Build main code with -Werror],
652 [
653 if test -n "$withval" && test "x$withval" != "xno"; then
654 werror_flags="-Werror"
1012885d 655 if test "x${withval}" != "xyes"; then
ed89c848 656 werror_flags="$withval"
657 fi
658 fi
659 ]
660)
8e7b16f8 661
c5829391 662AC_MSG_CHECKING(compiler and flags for sanity)
479cece8 663AC_RUN_IFELSE(
664 [AC_LANG_SOURCE([
c5829391 665#include <stdio.h>
666int main(){exit(0);}
479cece8 667 ])],
c5829391 668 [ AC_MSG_RESULT(yes) ],
669 [
670 AC_MSG_RESULT(no)
671 AC_MSG_ERROR([*** compiler cannot create working executables, check config.log ***])
1a01a50c 672 ],
673 [ AC_MSG_WARN([cross compiling: not checking compiler sanity]) ]
c5829391 674)
675
b04a9f8c 676dnl Checks for header files.
677AC_CHECK_HEADERS( \
678 bstring.h \
679 crypt.h \
2f360c89 680 crypto/sha2.h \
b04a9f8c 681 dirent.h \
682 endian.h \
683 features.h \
684 floatingpoint.h \
685 getopt.h \
686 glob.h \
687 ia.h \
4c653d8e 688 iaf.h \
b04a9f8c 689 limits.h \
690 login.h \
b04a9f8c 691 maillock.h \
692 ndir.h \
e02505e2 693 net/if_tun.h \
b04a9f8c 694 netdb.h \
695 netgroup.h \
b04a9f8c 696 pam/pam_appl.h \
697 paths.h \
698 pty.h \
699 readpassphrase.h \
700 rpc/types.h \
701 security/pam_appl.h \
f73e2ad7 702 sha2.h \
b04a9f8c 703 shadow.h \
704 stddef.h \
705 stdint.h \
0957c2cf 706 string.h \
b04a9f8c 707 strings.h \
708 sys/audit.h \
709 sys/bitypes.h \
710 sys/bsdtty.h \
711 sys/cdefs.h \
712 sys/dir.h \
713 sys/mman.h \
714 sys/ndir.h \
715 sys/prctl.h \
716 sys/pstat.h \
717 sys/select.h \
718 sys/stat.h \
719 sys/stream.h \
720 sys/stropts.h \
721 sys/strtio.h \
722 sys/sysmacros.h \
723 sys/time.h \
724 sys/timers.h \
725 sys/un.h \
726 time.h \
727 tmpdir.h \
728 ttyent.h \
25dd2ce6 729 unistd.h \
b04a9f8c 730 usersec.h \
731 util.h \
732 utime.h \
733 utmp.h \
734 utmpx.h \
ea76f54c 735 vis.h \
b04a9f8c 736)
ddceb1c8 737
823221b2 738# lastlog.h requires sys/time.h to be included first on Solaris
739AC_CHECK_HEADERS(lastlog.h, [], [], [
740#ifdef HAVE_SYS_TIME_H
741# include <sys/time.h>
742#endif
743])
744
765a24cd 745# sys/ptms.h requires sys/stream.h to be included first on Solaris
746AC_CHECK_HEADERS(sys/ptms.h, [], [], [
747#ifdef HAVE_SYS_STREAM_H
748# include <sys/stream.h>
749#endif
750])
751
3919d576 752# login_cap.h requires sys/types.h on NetBSD
753AC_CHECK_HEADERS(login_cap.h, [], [], [
754#include <sys/types.h>
755])
756
a0391976 757# Checks for libraries.
98a7c37b 758AC_CHECK_FUNC(yp_match, , AC_CHECK_LIB(nsl, yp_match))
759AC_CHECK_FUNC(setsockopt, , AC_CHECK_LIB(socket, setsockopt))
2c523de9 760
446227d6 761dnl IRIX and Solaris 2.5.1 have dirname() in libgen
762AC_CHECK_FUNCS(dirname, [AC_CHECK_HEADERS(libgen.h)] ,[
763 AC_CHECK_LIB(gen, dirname,[
764 AC_CACHE_CHECK([for broken dirname],
765 ac_cv_have_broken_dirname, [
766 save_LIBS="$LIBS"
767 LIBS="$LIBS -lgen"
b0e7249f 768 AC_RUN_IFELSE(
769 [AC_LANG_SOURCE([[
446227d6 770#include <libgen.h>
771#include <string.h>
772
773int main(int argc, char **argv) {
774 char *s, buf[32];
775
776 strncpy(buf,"/etc", 32);
777 s = dirname(buf);
778 if (!s || strncmp(s, "/", 32) != 0) {
779 exit(1);
780 } else {
781 exit(0);
782 }
783}
b0e7249f 784 ]])],
785 [ ac_cv_have_broken_dirname="no" ],
786 [ ac_cv_have_broken_dirname="yes" ],
446227d6 787 [ ac_cv_have_broken_dirname="no" ],
446227d6 788 )
789 LIBS="$save_LIBS"
790 ])
791 if test "x$ac_cv_have_broken_dirname" = "xno" ; then
792 LIBS="$LIBS -lgen"
793 AC_DEFINE(HAVE_DIRNAME)
794 AC_CHECK_HEADERS(libgen.h)
795 fi
796 ])
797])
798
799AC_CHECK_FUNC(getspnam, ,
800 AC_CHECK_LIB(gen, getspnam, LIBS="$LIBS -lgen"))
3466e002 801AC_SEARCH_LIBS(basename, gen, AC_DEFINE(HAVE_BASENAME, 1,
802 [Define if you have the basename function.]))
446227d6 803
98a7c37b 804dnl zlib is required
805AC_ARG_WITH(zlib,
806 [ --with-zlib=PATH Use zlib in PATH],
6dd05556 807 [ if test "x$withval" = "xno" ; then
808 AC_MSG_ERROR([*** zlib is required ***])
809 elif test "x$withval" != "xyes"; then
98a7c37b 810 if test -d "$withval/lib"; then
811 if test -n "${need_dash_r}"; then
5a162955 812 LDFLAGS="-L${withval}/lib -R${withval}/lib ${LDFLAGS}"
98a7c37b 813 else
5a162955 814 LDFLAGS="-L${withval}/lib ${LDFLAGS}"
98a7c37b 815 fi
816 else
817 if test -n "${need_dash_r}"; then
5a162955 818 LDFLAGS="-L${withval} -R${withval} ${LDFLAGS}"
98a7c37b 819 else
5a162955 820 LDFLAGS="-L${withval} ${LDFLAGS}"
98a7c37b 821 fi
822 fi
823 if test -d "$withval/include"; then
5a162955 824 CPPFLAGS="-I${withval}/include ${CPPFLAGS}"
98a7c37b 825 else
5a162955 826 CPPFLAGS="-I${withval} ${CPPFLAGS}"
98a7c37b 827 fi
6dd05556 828 fi ]
98a7c37b 829)
830
0a15d73b 831AC_CHECK_LIB(z, deflate, ,
832 [
833 saved_CPPFLAGS="$CPPFLAGS"
834 saved_LDFLAGS="$LDFLAGS"
835 save_LIBS="$LIBS"
836 dnl Check default zlib install dir
837 if test -n "${need_dash_r}"; then
838 LDFLAGS="-L/usr/local/lib -R/usr/local/lib ${saved_LDFLAGS}"
839 else
840 LDFLAGS="-L/usr/local/lib ${saved_LDFLAGS}"
841 fi
842 CPPFLAGS="-I/usr/local/include ${saved_CPPFLAGS}"
843 LIBS="$LIBS -lz"
844 AC_TRY_LINK_FUNC(deflate, AC_DEFINE(HAVE_LIBZ),
845 [
846 AC_MSG_ERROR([*** zlib missing - please install first or check config.log ***])
847 ]
848 )
849 ]
850)
4ad65809 851AC_CHECK_HEADER([zlib.h], ,AC_MSG_ERROR([*** zlib.h missing - please install first or check config.log ***]))
8068d564 852
853AC_ARG_WITH(zlib-version-check,
854 [ --without-zlib-version-check Disable zlib version check],
855 [ if test "x$withval" = "xno" ; then
856 zlib_check_nonfatal=1
857 fi
858 ]
859)
860
5c7fc85d 861AC_MSG_CHECKING(for possibly buggy zlib)
479cece8 862AC_RUN_IFELSE([AC_LANG_SOURCE([[
5c7fc85d 863#include <stdio.h>
4ad65809 864#include <zlib.h>
865int main()
866{
5c7fc85d 867 int a=0, b=0, c=0, d=0, n, v;
868 n = sscanf(ZLIB_VERSION, "%d.%d.%d.%d", &a, &b, &c, &d);
869 if (n != 3 && n != 4)
4ad65809 870 exit(1);
5c7fc85d 871 v = a*1000000 + b*10000 + c*100 + d;
872 fprintf(stderr, "found zlib version %s (%d)\n", ZLIB_VERSION, v);
873
874 /* 1.1.4 is OK */
875 if (a == 1 && b == 1 && c >= 4)
4ad65809 876 exit(0);
5c7fc85d 877
0072b59d 878 /* 1.2.3 and up are OK */
879 if (v >= 1020300)
5c7fc85d 880 exit(0);
881
4ad65809 882 exit(2);
883}
479cece8 884 ]])],
5c7fc85d 885 AC_MSG_RESULT(no),
886 [ AC_MSG_RESULT(yes)
8068d564 887 if test -z "$zlib_check_nonfatal" ; then
888 AC_MSG_ERROR([*** zlib too old - check config.log ***
889Your reported zlib version has known security problems. It's possible your
890vendor has fixed these problems without changing the version number. If you
891are sure this is the case, you can disable the check by running
892"./configure --without-zlib-version-check".
6090bcfe 893If you are in doubt, upgrade zlib to version 1.2.3 or greater.
5c7fc85d 894See http://www.gzip.org/zlib/ for details.])
8068d564 895 else
896 AC_MSG_WARN([zlib version may have security problems])
897 fi
1a01a50c 898 ],
899 [ AC_MSG_WARN([cross compiling: not checking zlib version]) ]
4ad65809 900)
48e7916f 901
2c523de9 902dnl UnixWare 2.x
aff51935 903AC_CHECK_FUNC(strcasecmp,
2c523de9 904 [], [ AC_CHECK_LIB(resolv, strcasecmp, LIBS="$LIBS -lresolv") ]
905)
23361281 906AC_CHECK_FUNCS(utimes,
cda1ebcb 907 [], [ AC_CHECK_LIB(c89, utimes, [AC_DEFINE(HAVE_UTIMES)
908 LIBS="$LIBS -lc89"]) ]
2c523de9 909)
4cca272e 910
7c6d759d 911dnl Checks for libutil functions
912AC_CHECK_HEADERS(libutil.h)
3466e002 913AC_SEARCH_LIBS(login, util bsd, [AC_DEFINE(HAVE_LOGIN, 1,
914 [Define if your libraries define login()])])
7c6d759d 915AC_CHECK_FUNCS(logout updwtmp logwtmp)
916
a738c3b0 917AC_FUNC_STRFTIME
918
84ceda19 919# Check for ALTDIRFUNC glob() extension
920AC_MSG_CHECKING(for GLOB_ALTDIRFUNC support)
921AC_EGREP_CPP(FOUNDIT,
922 [
923 #include <glob.h>
924 #ifdef GLOB_ALTDIRFUNC
925 FOUNDIT
926 #endif
aff51935 927 ],
84ceda19 928 [
3466e002 929 AC_DEFINE(GLOB_HAS_ALTDIRFUNC, 1,
930 [Define if your system glob() function has
931 the GLOB_ALTDIRFUNC extension])
84ceda19 932 AC_MSG_RESULT(yes)
933 ],
934 [
935 AC_MSG_RESULT(no)
936 ]
937)
4cca272e 938
40849fdb 939# Check for g.gl_matchc glob() extension
940AC_MSG_CHECKING(for gl_matchc field in glob_t)
d90b9f9a 941AC_TRY_COMPILE(
13ff27b7 942 [ #include <glob.h> ],
943 [glob_t g; g.gl_matchc = 1;],
aff51935 944 [
3466e002 945 AC_DEFINE(GLOB_HAS_GL_MATCHC, 1,
946 [Define if your system glob() function has
947 gl_matchc options in glob_t])
aff51935 948 AC_MSG_RESULT(yes)
949 ],
950 [
951 AC_MSG_RESULT(no)
952 ]
40849fdb 953)
954
edbe6722 955AC_MSG_CHECKING([whether struct dirent allocates space for d_name])
1a01a50c 956AC_RUN_IFELSE(
479cece8 957 [AC_LANG_SOURCE([[
edbe6722 958#include <sys/types.h>
959#include <dirent.h>
aec4cb4f 960int main(void){struct dirent d;exit(sizeof(d.d_name)<=sizeof(char));}
479cece8 961 ]])],
aff51935 962 [AC_MSG_RESULT(yes)],
edbe6722 963 [
964 AC_MSG_RESULT(no)
3466e002 965 AC_DEFINE(BROKEN_ONE_BYTE_DIRENT_D_NAME, 1,
d08db6d1 966 [Define if your struct dirent expects you to
3466e002 967 allocate extra space for d_name])
1a01a50c 968 ],
82f4e93d 969 [
1a01a50c 970 AC_MSG_WARN([cross compiling: assuming BROKEN_ONE_BYTE_DIRENT_D_NAME])
971 AC_DEFINE(BROKEN_ONE_BYTE_DIRENT_D_NAME)
edbe6722 972 ]
973)
974
419e26e7 975AC_MSG_CHECKING([for /proc/pid/fd directory])
976if test -d "/proc/$$/fd" ; then
3466e002 977 AC_DEFINE(HAVE_PROC_PID, 1, [Define if you have /proc/$pid/fd])
419e26e7 978 AC_MSG_RESULT(yes)
979else
980 AC_MSG_RESULT(no)
981fi
982
278588d8 983# Check whether user wants S/Key support
aff51935 984SKEY_MSG="no"
278588d8 985AC_ARG_WITH(skey,
6ff3d0dc 986 [ --with-skey[[=PATH]] Enable S/Key support (optionally in PATH)],
278588d8 987 [
988 if test "x$withval" != "xno" ; then
989
990 if test "x$withval" != "xyes" ; then
991 CPPFLAGS="$CPPFLAGS -I${withval}/include"
992 LDFLAGS="$LDFLAGS -L${withval}/lib"
993 fi
994
3466e002 995 AC_DEFINE(SKEY, 1, [Define if you want S/Key support])
278588d8 996 LIBS="-lskey $LIBS"
aff51935 997 SKEY_MSG="yes"
82f4e93d 998
ddceb1c8 999 AC_MSG_CHECKING([for s/key support])
b0e7249f 1000 AC_LINK_IFELSE(
1001 [AC_LANG_SOURCE([[
ddceb1c8 1002#include <stdio.h>
1003#include <skey.h>
aec4cb4f 1004int main() { char *ff = skey_keyinfo(""); ff=""; exit(0); }
b0e7249f 1005 ]])],
ddceb1c8 1006 [AC_MSG_RESULT(yes)],
278588d8 1007 [
ddceb1c8 1008 AC_MSG_RESULT(no)
278588d8 1009 AC_MSG_ERROR([** Incomplete or missing s/key libraries.])
1010 ])
141fc639 1011 AC_MSG_CHECKING(if skeychallenge takes 4 arguments)
1012 AC_TRY_COMPILE(
1013 [#include <stdio.h>
1014 #include <skey.h>],
1015 [(void)skeychallenge(NULL,"name","",0);],
1016 [AC_MSG_RESULT(yes)
3466e002 1017 AC_DEFINE(SKEYCHALLENGE_4ARG, 1,
1018 [Define if your skeychallenge()
1019 function takes 4 arguments (NetBSD)])],
141fc639 1020 [AC_MSG_RESULT(no)]
1021 )
278588d8 1022 fi
1023 ]
1024)
1025
1026# Check whether user wants TCP wrappers support
98a7c37b 1027TCPW_MSG="no"
278588d8 1028AC_ARG_WITH(tcp-wrappers,
6ff3d0dc 1029 [ --with-tcp-wrappers[[=PATH]] Enable tcpwrappers support (optionally in PATH)],
278588d8 1030 [
1031 if test "x$withval" != "xno" ; then
1032 saved_LIBS="$LIBS"
98a7c37b 1033 saved_LDFLAGS="$LDFLAGS"
1034 saved_CPPFLAGS="$CPPFLAGS"
4b492aab 1035 if test -n "${withval}" && \
6cf0200f 1036 test "x${withval}" != "xyes"; then
98a7c37b 1037 if test -d "${withval}/lib"; then
1038 if test -n "${need_dash_r}"; then
5a162955 1039 LDFLAGS="-L${withval}/lib -R${withval}/lib ${LDFLAGS}"
98a7c37b 1040 else
5a162955 1041 LDFLAGS="-L${withval}/lib ${LDFLAGS}"
98a7c37b 1042 fi
1043 else
1044 if test -n "${need_dash_r}"; then
5a162955 1045 LDFLAGS="-L${withval} -R${withval} ${LDFLAGS}"
98a7c37b 1046 else
5a162955 1047 LDFLAGS="-L${withval} ${LDFLAGS}"
98a7c37b 1048 fi
1049 fi
1050 if test -d "${withval}/include"; then
5a162955 1051 CPPFLAGS="-I${withval}/include ${CPPFLAGS}"
98a7c37b 1052 else
5a162955 1053 CPPFLAGS="-I${withval} ${CPPFLAGS}"
98a7c37b 1054 fi
98a7c37b 1055 fi
ddceb1c8 1056 LIBWRAP="-lwrap"
1057 LIBS="$LIBWRAP $LIBS"
278588d8 1058 AC_MSG_CHECKING(for libwrap)
1059 AC_TRY_LINK(
1060 [
77f09220 1061#include <sys/types.h>
1062#include <sys/socket.h>
1063#include <netinet/in.h>
278588d8 1064#include <tcpd.h>
1065 int deny_severity = 0, allow_severity = 0;
1066 ],
1067 [hosts_access(0);],
1068 [
1069 AC_MSG_RESULT(yes)
3466e002 1070 AC_DEFINE(LIBWRAP, 1,
1071 [Define if you want
1072 TCP Wrappers support])
ddceb1c8 1073 AC_SUBST(LIBWRAP)
98a7c37b 1074 TCPW_MSG="yes"
278588d8 1075 ],
1076 [
1077 AC_MSG_ERROR([*** libwrap missing])
1078 ]
1079 )
ddceb1c8 1080 LIBS="$saved_LIBS"
278588d8 1081 fi
1082 ]
1083)
1084
59031773 1085# Check whether user wants libedit support
1086LIBEDIT_MSG="no"
1087AC_ARG_WITH(libedit,
6ff3d0dc 1088 [ --with-libedit[[=PATH]] Enable libedit support for sftp],
59031773 1089 [ if test "x$withval" != "xno" ; then
737edf04 1090 if test "x$withval" != "xyes"; then
bb116c8e 1091 CPPFLAGS="$CPPFLAGS -I${withval}/include"
1092 if test -n "${need_dash_r}"; then
1093 LDFLAGS="-L${withval}/lib -R${withval}/lib ${LDFLAGS}"
1094 else
1095 LDFLAGS="-L${withval}/lib ${LDFLAGS}"
1096 fi
737edf04 1097 fi
59031773 1098 AC_CHECK_LIB(edit, el_init,
3466e002 1099 [ AC_DEFINE(USE_LIBEDIT, 1, [Use libedit for sftp])
59031773 1100 LIBEDIT="-ledit -lcurses"
1101 LIBEDIT_MSG="yes"
1102 AC_SUBST(LIBEDIT)
1103 ],
737edf04 1104 [ AC_MSG_ERROR(libedit not found) ],
1105 [ -lcurses ]
59031773 1106 )
f47ddccb 1107 AC_MSG_CHECKING(if libedit version is compatible)
d92622f9 1108 AC_COMPILE_IFELSE(
1109 [AC_LANG_SOURCE([[
1110#include <histedit.h>
f47ddccb 1111int main(void)
1112{
1113 int i = H_SETSIZE;
1114 el_init("", NULL, NULL, NULL);
1115 exit(0);
1116}
d92622f9 1117 ]])],
f47ddccb 1118 [ AC_MSG_RESULT(yes) ],
1119 [ AC_MSG_RESULT(no)
1120 AC_MSG_ERROR(libedit version is not compatible) ]
1121 )
59031773 1122 fi ]
1123)
1124
7b578f7d 1125AUDIT_MODULE=none
1126AC_ARG_WITH(audit,
1127 [ --with-audit=module Enable EXPERIMENTAL audit support (modules=debug,bsm)],
1128 [
1129 AC_MSG_CHECKING(for supported audit module)
1130 case "$withval" in
1131 bsm)
1132 AC_MSG_RESULT(bsm)
1133 AUDIT_MODULE=bsm
1134 dnl Checks for headers, libs and functions
1135 AC_CHECK_HEADERS(bsm/audit.h, [],
1136 [AC_MSG_ERROR(BSM enabled and bsm/audit.h not found)])
1137 AC_CHECK_LIB(bsm, getaudit, [],
1138 [AC_MSG_ERROR(BSM enabled and required library not found)])
1139 AC_CHECK_FUNCS(getaudit, [],
1140 [AC_MSG_ERROR(BSM enabled and required function not found)])
1141 # These are optional
7939c496 1142 AC_CHECK_FUNCS(getaudit_addr)
3466e002 1143 AC_DEFINE(USE_BSM_AUDIT, 1, [Use BSM audit module])
7b578f7d 1144 ;;
1145 debug)
1146 AUDIT_MODULE=debug
1147 AC_MSG_RESULT(debug)
3466e002 1148 AC_DEFINE(SSH_AUDIT_EVENTS, 1, Use audit debugging module)
7b578f7d 1149 ;;
a2b3321d 1150 no)
d92622f9 1151 AC_MSG_RESULT(no)
a2b3321d 1152 ;;
7b578f7d 1153 *)
1154 AC_MSG_ERROR([Unknown audit module $withval])
1155 ;;
1156 esac ]
1157)
1158
19160674 1159dnl Checks for library functions. Please keep in alphabetical order
b04a9f8c 1160AC_CHECK_FUNCS( \
1161 arc4random \
9a406e1e 1162 asprintf \
b04a9f8c 1163 b64_ntop \
1164 __b64_ntop \
1165 b64_pton \
1166 __b64_pton \
1167 bcopy \
1168 bindresvport_sa \
1169 clock \
1170 closefrom \
1171 dirfd \
b04a9f8c 1172 fchmod \
1173 fchown \
1174 freeaddrinfo \
1175 futimes \
1176 getaddrinfo \
1177 getcwd \
1178 getgrouplist \
1179 getnameinfo \
1180 getopt \
1181 getpeereid \
1182 _getpty \
1183 getrlimit \
1184 getttyent \
1185 glob \
1186 inet_aton \
1187 inet_ntoa \
1188 inet_ntop \
1189 innetgr \
1190 login_getcapbool \
1191 md5_crypt \
1192 memmove \
1193 mkdtemp \
1194 mmap \
1195 ngetaddrinfo \
1196 nsleep \
1197 ogetaddrinfo \
1198 openlog_r \
1199 openpty \
1200 prctl \
1201 pstat \
1202 readpassphrase \
1203 realpath \
1204 recvmsg \
1205 rresvport_af \
1206 sendmsg \
1207 setdtablesize \
1208 setegid \
1209 setenv \
1210 seteuid \
1211 setgroups \
1212 setlogin \
1213 setpcred \
1214 setproctitle \
1215 setregid \
1216 setreuid \
1217 setrlimit \
1218 setsid \
1219 setvbuf \
1220 sigaction \
1221 sigvec \
1222 snprintf \
1223 socketpair \
1224 strdup \
1225 strerror \
1226 strlcat \
1227 strlcpy \
1228 strmode \
1229 strnvis \
1230 strtonum \
1e29a0c8 1231 strtoll \
b04a9f8c 1232 strtoul \
1233 sysconf \
1234 tcgetpgrp \
1235 truncate \
1236 unsetenv \
1237 updwtmpx \
9a406e1e 1238 vasprintf \
b04a9f8c 1239 vhangup \
1240 vsnprintf \
1241 waitpid \
19160674 1242)
98a7c37b 1243
1a086f97 1244# IRIX has a const char return value for gai_strerror()
1245AC_CHECK_FUNCS(gai_strerror,[
1246 AC_DEFINE(HAVE_GAI_STRERROR)
1247 AC_TRY_COMPILE([
1248#include <sys/types.h>
1249#include <sys/socket.h>
1250#include <netdb.h>
1251
1252const char *gai_strerror(int);],[
1253char *str;
1254
1255str = gai_strerror(0);],[
1256 AC_DEFINE(HAVE_CONST_GAI_STRERROR_PROTO, 1,
1257 [Define if gai_strerror() returns const char *])])])
1258
3466e002 1259AC_SEARCH_LIBS(nanosleep, rt posix4, AC_DEFINE(HAVE_NANOSLEEP, 1,
1260 [Some systems put nanosleep outside of libc]))
92b1decf 1261
309709db 1262dnl Make sure prototypes are defined for these before using them.
309709db 1263AC_CHECK_DECL(getrusage, [AC_CHECK_FUNCS(getrusage)])
0957c2cf 1264AC_CHECK_DECL(strsep,
1265 [AC_CHECK_FUNCS(strsep)],
1266 [],
1267 [
1268#ifdef HAVE_STRING_H
1269# include <string.h>
1270#endif
1271 ])
08412d26 1272
3490699c 1273dnl tcsendbreak might be a macro
1274AC_CHECK_DECL(tcsendbreak,
1275 [AC_DEFINE(HAVE_TCSENDBREAK)],
aff51935 1276 [AC_CHECK_FUNCS(tcsendbreak)],
3490699c 1277 [#include <termios.h>]
1278)
1279
41e0e158 1280AC_CHECK_DECLS(h_errno, , ,[#include <netdb.h>])
1281
3f176010 1282AC_CHECK_FUNCS(setresuid, [
1283 dnl Some platorms have setresuid that isn't implemented, test for this
1284 AC_MSG_CHECKING(if setresuid seems to work)
479cece8 1285 AC_RUN_IFELSE(
1286 [AC_LANG_SOURCE([[
9a3fe0e2 1287#include <stdlib.h>
1288#include <errno.h>
1289int main(){errno=0; setresuid(0,0,0); if (errno==ENOSYS) exit(1); else exit(0);}
479cece8 1290 ]])],
3f176010 1291 [AC_MSG_RESULT(yes)],
3466e002 1292 [AC_DEFINE(BROKEN_SETRESUID, 1,
1293 [Define if your setresuid() is broken])
1a01a50c 1294 AC_MSG_RESULT(not implemented)],
1295 [AC_MSG_WARN([cross compiling: not checking setresuid])]
3f176010 1296 )
1297])
9a3fe0e2 1298
3f176010 1299AC_CHECK_FUNCS(setresgid, [
1300 dnl Some platorms have setresgid that isn't implemented, test for this
1301 AC_MSG_CHECKING(if setresgid seems to work)
479cece8 1302 AC_RUN_IFELSE(
1303 [AC_LANG_SOURCE([[
9a3fe0e2 1304#include <stdlib.h>
1305#include <errno.h>
1306int main(){errno=0; setresgid(0,0,0); if (errno==ENOSYS) exit(1); else exit(0);}
479cece8 1307 ]])],
3f176010 1308 [AC_MSG_RESULT(yes)],
3466e002 1309 [AC_DEFINE(BROKEN_SETRESGID, 1,
1310 [Define if your setresgid() is broken])
1a01a50c 1311 AC_MSG_RESULT(not implemented)],
1312 [AC_MSG_WARN([cross compiling: not checking setresuid])]
3f176010 1313 )
1314])
9a3fe0e2 1315
2e73a022 1316dnl Checks for time functions
1d7b9b20 1317AC_CHECK_FUNCS(gettimeofday time)
2e73a022 1318dnl Checks for utmp functions
b03bd394 1319AC_CHECK_FUNCS(endutent getutent getutid getutline pututline setutent)
1d7b9b20 1320AC_CHECK_FUNCS(utmpname)
2e73a022 1321dnl Checks for utmpx functions
b03bd394 1322AC_CHECK_FUNCS(endutxent getutxent getutxid getutxline pututxline )
1d7b9b20 1323AC_CHECK_FUNCS(setutxent utmpxname)
76cd7316 1324
aff51935 1325AC_CHECK_FUNC(daemon,
3466e002 1326 [AC_DEFINE(HAVE_DAEMON, 1, [Define if your libraries define daemon()])],
1327 [AC_CHECK_LIB(bsd, daemon,
1328 [LIBS="$LIBS -lbsd"; AC_DEFINE(HAVE_DAEMON)])]
beb43d31 1329)
1330
aff51935 1331AC_CHECK_FUNC(getpagesize,
3466e002 1332 [AC_DEFINE(HAVE_GETPAGESIZE, 1,
1333 [Define if your libraries define getpagesize()])],
1334 [AC_CHECK_LIB(ucb, getpagesize,
1335 [LIBS="$LIBS -lucb"; AC_DEFINE(HAVE_GETPAGESIZE)])]
aa6bd60a 1336)
1337
2647ae26 1338# Check for broken snprintf
1339if test "x$ac_cv_func_snprintf" = "xyes" ; then
1340 AC_MSG_CHECKING([whether snprintf correctly terminates long strings])
1a01a50c 1341 AC_RUN_IFELSE(
479cece8 1342 [AC_LANG_SOURCE([[
2647ae26 1343#include <stdio.h>
aec4cb4f 1344int main(void){char b[5];snprintf(b,5,"123456789");exit(b[4]!='\0');}
479cece8 1345 ]])],
aff51935 1346 [AC_MSG_RESULT(yes)],
2647ae26 1347 [
1348 AC_MSG_RESULT(no)
3466e002 1349 AC_DEFINE(BROKEN_SNPRINTF, 1,
1350 [Define if your snprintf is busted])
2647ae26 1351 AC_MSG_WARN([****** Your snprintf() function is broken, complain to your vendor])
1a01a50c 1352 ],
1353 [ AC_MSG_WARN([cross compiling: Assuming working snprintf()]) ]
2647ae26 1354 )
1355fi
1356
9a406e1e 1357# If we don't have a working asprintf, then we strongly depend on vsnprintf
1358# returning the right thing on overflow: the number of characters it tried to
1359# create (as per SUSv3)
1360if test "x$ac_cv_func_asprintf" != "xyes" && \
1361 test "x$ac_cv_func_vsnprintf" = "xyes" ; then
1362 AC_MSG_CHECKING([whether vsnprintf returns correct values on overflow])
1363 AC_RUN_IFELSE(
1364 [AC_LANG_SOURCE([[
1365#include <sys/types.h>
1366#include <stdio.h>
1367#include <stdarg.h>
1368
1369int x_snprintf(char *str,size_t count,const char *fmt,...)
1370{
1371 size_t ret; va_list ap;
1372 va_start(ap, fmt); ret = vsnprintf(str, count, fmt, ap); va_end(ap);
1373 return ret;
1374}
1375int main(void)
1376{
1377 char x[1];
1378 exit(x_snprintf(x, 1, "%s %d", "hello", 12345) == 11 ? 0 : 1);
1379} ]])],
1380 [AC_MSG_RESULT(yes)],
1381 [
1382 AC_MSG_RESULT(no)
1383 AC_DEFINE(BROKEN_SNPRINTF, 1,
1384 [Define if your snprintf is busted])
1385 AC_MSG_WARN([****** Your vsnprintf() function is broken, complain to your vendor])
1386 ],
1387 [ AC_MSG_WARN([cross compiling: Assuming working vsnprintf()]) ]
1388 )
1389fi
1390
31b0732a 1391# On systems where [v]snprintf is broken, but is declared in stdio,
1392# check that the fmt argument is const char * or just char *.
1393# This is only useful for when BROKEN_SNPRINTF
1394AC_MSG_CHECKING([whether snprintf can declare const char *fmt])
1395AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#include <stdio.h>
1396 int snprintf(char *a, size_t b, const char *c, ...) { return 0; }
1397 int main(void) { snprintf(0, 0, 0); }
1398 ]])],
1399 [AC_MSG_RESULT(yes)
1400 AC_DEFINE(SNPRINTF_CONST, [const],
1401 [Define as const if snprintf() can declare const char *fmt])],
1402 [AC_MSG_RESULT(no)
1403 AC_DEFINE(SNPRINTF_CONST, [/* not const */])])
1404
2f6f9cff 1405# Check for missing getpeereid (or equiv) support
1406NO_PEERCHECK=""
1407if test "x$ac_cv_func_getpeereid" != "xyes" ; then
1408 AC_MSG_CHECKING([whether system supports SO_PEERCRED getsockopt])
1409 AC_TRY_COMPILE(
1410 [#include <sys/types.h>
1411 #include <sys/socket.h>],
1412 [int i = SO_PEERCRED;],
62eb7db4 1413 [ AC_MSG_RESULT(yes)
3466e002 1414 AC_DEFINE(HAVE_SO_PEERCRED, 1, [Have PEERCRED socket option])
62eb7db4 1415 ],
2f6f9cff 1416 [AC_MSG_RESULT(no)
1417 NO_PEERCHECK=1]
1418 )
1419fi
1420
70e7d0b0 1421dnl see whether mkstemp() requires XXXXXX
1422if test "x$ac_cv_func_mkdtemp" = "xyes" ; then
1423AC_MSG_CHECKING([for (overly) strict mkstemp])
b0e7249f 1424AC_RUN_IFELSE(
1425 [AC_LANG_SOURCE([[
70e7d0b0 1426#include <stdlib.h>
1427main() { char template[]="conftest.mkstemp-test";
1428if (mkstemp(template) == -1)
1429 exit(1);
1430unlink(template); exit(0);
1431}
b0e7249f 1432 ]])],
70e7d0b0 1433 [
1434 AC_MSG_RESULT(no)
1435 ],
aff51935 1436 [
70e7d0b0 1437 AC_MSG_RESULT(yes)
3466e002 1438 AC_DEFINE(HAVE_STRICT_MKSTEMP, 1, [Silly mkstemp()])
70e7d0b0 1439 ],
1440 [
1441 AC_MSG_RESULT(yes)
1442 AC_DEFINE(HAVE_STRICT_MKSTEMP)
aff51935 1443 ]
70e7d0b0 1444)
1445fi
1446
eacb954e 1447dnl make sure that openpty does not reacquire controlling terminal
1448if test ! -z "$check_for_openpty_ctty_bug"; then
1449 AC_MSG_CHECKING(if openpty correctly handles controlling tty)
b0e7249f 1450 AC_RUN_IFELSE(
1451 [AC_LANG_SOURCE([[
eacb954e 1452#include <stdio.h>
1453#include <sys/fcntl.h>
1454#include <sys/types.h>
1455#include <sys/wait.h>
1456
1457int
1458main()
1459{
1460 pid_t pid;
1461 int fd, ptyfd, ttyfd, status;
1462
1463 pid = fork();
1464 if (pid < 0) { /* failed */
1465 exit(1);
1466 } else if (pid > 0) { /* parent */
1467 waitpid(pid, &status, 0);
aff51935 1468 if (WIFEXITED(status))
eacb954e 1469 exit(WEXITSTATUS(status));
1470 else
1471 exit(2);
1472 } else { /* child */
1473 close(0); close(1); close(2);
1474 setsid();
1475 openpty(&ptyfd, &ttyfd, NULL, NULL, NULL);
1476 fd = open("/dev/tty", O_RDWR | O_NOCTTY);
1477 if (fd >= 0)
1478 exit(3); /* Acquired ctty: broken */
1479 else
1480 exit(0); /* Did not acquire ctty: OK */
1481 }
1482}
b0e7249f 1483 ]])],
eacb954e 1484 [
1485 AC_MSG_RESULT(yes)
1486 ],
1487 [
1488 AC_MSG_RESULT(no)
1489 AC_DEFINE(SSHD_ACQUIRES_CTTY)
b0e7249f 1490 ],
1491 [
1492 AC_MSG_RESULT(cross-compiling, assuming yes)
eacb954e 1493 ]
1494 )
1495fi
1496
4b492aab 1497if test "x$ac_cv_func_getaddrinfo" = "xyes" && \
1498 test "x$check_for_hpux_broken_getaddrinfo" = "x1"; then
2fe51906 1499 AC_MSG_CHECKING(if getaddrinfo seems to work)
b0e7249f 1500 AC_RUN_IFELSE(
1501 [AC_LANG_SOURCE([[
2fe51906 1502#include <stdio.h>
1503#include <sys/socket.h>
1504#include <netdb.h>
1505#include <errno.h>
1506#include <netinet/in.h>
1507
1508#define TEST_PORT "2222"
1509
1510int
1511main(void)
1512{
1513 int err, sock;
1514 struct addrinfo *gai_ai, *ai, hints;
1515 char ntop[NI_MAXHOST], strport[NI_MAXSERV], *name = NULL;
1516
1517 memset(&hints, 0, sizeof(hints));
1518 hints.ai_family = PF_UNSPEC;
1519 hints.ai_socktype = SOCK_STREAM;
1520 hints.ai_flags = AI_PASSIVE;
1521
1522 err = getaddrinfo(name, TEST_PORT, &hints, &gai_ai);
1523 if (err != 0) {
1524 fprintf(stderr, "getaddrinfo failed (%s)", gai_strerror(err));
1525 exit(1);
1526 }
1527
1528 for (ai = gai_ai; ai != NULL; ai = ai->ai_next) {
1529 if (ai->ai_family != AF_INET6)
1530 continue;
1531
1532 err = getnameinfo(ai->ai_addr, ai->ai_addrlen, ntop,
1533 sizeof(ntop), strport, sizeof(strport),
1534 NI_NUMERICHOST|NI_NUMERICSERV);
1535
1536 if (err != 0) {
1537 if (err == EAI_SYSTEM)
1538 perror("getnameinfo EAI_SYSTEM");
1539 else
1540 fprintf(stderr, "getnameinfo failed: %s\n",
1541 gai_strerror(err));
1542 exit(2);
1543 }
1544
1545 sock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
1546 if (sock < 0)
1547 perror("socket");
1548 if (bind(sock, ai->ai_addr, ai->ai_addrlen) < 0) {
1549 if (errno == EBADF)
1550 exit(3);
1551 }
1552 }
1553 exit(0);
1554}
b0e7249f 1555 ]])],
2fe51906 1556 [
1557 AC_MSG_RESULT(yes)
1558 ],
1559 [
1560 AC_MSG_RESULT(no)
1561 AC_DEFINE(BROKEN_GETADDRINFO)
b0e7249f 1562 ],
1563 [
1564 AC_MSG_RESULT(cross-compiling, assuming yes)
2fe51906 1565 ]
1566 )
1567fi
1568
4b492aab 1569if test "x$ac_cv_func_getaddrinfo" = "xyes" && \
1570 test "x$check_for_aix_broken_getaddrinfo" = "x1"; then
5ccf88cb 1571 AC_MSG_CHECKING(if getaddrinfo seems to work)
b0e7249f 1572 AC_RUN_IFELSE(
1573 [AC_LANG_SOURCE([[
5ccf88cb 1574#include <stdio.h>
1575#include <sys/socket.h>
1576#include <netdb.h>
1577#include <errno.h>
1578#include <netinet/in.h>
1579
1580#define TEST_PORT "2222"
1581
1582int
1583main(void)
1584{
1585 int err, sock;
1586 struct addrinfo *gai_ai, *ai, hints;
1587 char ntop[NI_MAXHOST], strport[NI_MAXSERV], *name = NULL;
1588
1589 memset(&hints, 0, sizeof(hints));
1590 hints.ai_family = PF_UNSPEC;
1591 hints.ai_socktype = SOCK_STREAM;
1592 hints.ai_flags = AI_PASSIVE;
1593
1594 err = getaddrinfo(name, TEST_PORT, &hints, &gai_ai);
1595 if (err != 0) {
1596 fprintf(stderr, "getaddrinfo failed (%s)", gai_strerror(err));
1597 exit(1);
1598 }
1599
1600 for (ai = gai_ai; ai != NULL; ai = ai->ai_next) {
1601 if (ai->ai_family != AF_INET && ai->ai_family != AF_INET6)
1602 continue;
1603
1604 err = getnameinfo(ai->ai_addr, ai->ai_addrlen, ntop,
1605 sizeof(ntop), strport, sizeof(strport),
1606 NI_NUMERICHOST|NI_NUMERICSERV);
1607
1608 if (ai->ai_family == AF_INET && err != 0) {
1609 perror("getnameinfo");
1610 exit(2);
1611 }
1612 }
1613 exit(0);
1614}
b0e7249f 1615 ]])],
5ccf88cb 1616 [
1617 AC_MSG_RESULT(yes)
3466e002 1618 AC_DEFINE(AIX_GETNAMEINFO_HACK, 1,
1619 [Define if you have a getaddrinfo that fails
1620 for the all-zeros IPv6 address])
5ccf88cb 1621 ],
1622 [
1623 AC_MSG_RESULT(no)
1624 AC_DEFINE(BROKEN_GETADDRINFO)
b0e7249f 1625 ],
1626 AC_MSG_RESULT(cross-compiling, assuming no)
5ccf88cb 1627 ]
1628 )
1629fi
1630
b29fd59f 1631if test "x$check_for_conflicting_getspnam" = "x1"; then
1632 AC_MSG_CHECKING(for conflicting getspnam in shadow.h)
1633 AC_COMPILE_IFELSE(
1634 [
1635#include <shadow.h>
1636int main(void) {exit(0);}
1637 ],
1638 [
1639 AC_MSG_RESULT(no)
1640 ],
1641 [
1642 AC_MSG_RESULT(yes)
1643 AC_DEFINE(GETSPNAM_CONFLICTING_DEFS, 1,
1644 [Conflicting defs for getspnam])
1645 ]
1646 )
1647fi
1648
7f8f5e00 1649AC_FUNC_GETPGRP
1650
717057b6 1651# Check for PAM libs
cbd7492e 1652PAM_MSG="no"
a0391976 1653AC_ARG_WITH(pam,
717057b6 1654 [ --with-pam Enable PAM support ],
a0391976 1655 [
717057b6 1656 if test "x$withval" != "xno" ; then
2511d104 1657 if test "x$ac_cv_header_security_pam_appl_h" != "xyes" && \
1658 test "x$ac_cv_header_pam_pam_appl_h" != "xyes" ; then
717057b6 1659 AC_MSG_ERROR([PAM headers not found])
1660 fi
a0391976 1661
717057b6 1662 AC_CHECK_LIB(dl, dlopen, , )
1663 AC_CHECK_LIB(pam, pam_set_item, , AC_MSG_ERROR([*** libpam missing]))
1664 AC_CHECK_FUNCS(pam_getenvlist)
749560dd 1665 AC_CHECK_FUNCS(pam_putenv)
2b763e31 1666
717057b6 1667 PAM_MSG="yes"
4cb5ffa0 1668
3466e002 1669 AC_DEFINE(USE_PAM, 1,
1670 [Define if you want to enable PAM support])
98f2d9d5 1671 if test $ac_cv_lib_dl_dlopen = yes; then
1672 LIBPAM="-lpam -ldl"
1673 else
1674 LIBPAM="-lpam"
1675 fi
1676 AC_SUBST(LIBPAM)
717057b6 1677 fi
1678 ]
1679)
cbd7492e 1680
717057b6 1681# Check for older PAM
1682if test "x$PAM_MSG" = "xyes" ; then
a0391976 1683 # Check PAM strerror arguments (old PAM)
1684 AC_MSG_CHECKING([whether pam_strerror takes only one argument])
1685 AC_TRY_COMPILE(
1686 [
18ba2aab 1687#include <stdlib.h>
2511d104 1688#if defined(HAVE_SECURITY_PAM_APPL_H)
18ba2aab 1689#include <security/pam_appl.h>
2511d104 1690#elif defined (HAVE_PAM_PAM_APPL_H)
1691#include <pam/pam_appl.h>
1692#endif
aff51935 1693 ],
1694 [(void)pam_strerror((pam_handle_t *)NULL, -1);],
a0391976 1695 [AC_MSG_RESULT(no)],
1696 [
3466e002 1697 AC_DEFINE(HAVE_OLD_PAM, 1,
1698 [Define if you have an old version of PAM
1699 which takes only one argument to pam_strerror])
a0391976 1700 AC_MSG_RESULT(yes)
cbd7492e 1701 PAM_MSG="yes (old library)"
a0391976 1702 ]
717057b6 1703 )
a0391976 1704fi
1705
5b991353 1706# Search for OpenSSL
1707saved_CPPFLAGS="$CPPFLAGS"
1708saved_LDFLAGS="$LDFLAGS"
a0391976 1709AC_ARG_WITH(ssl-dir,
1710 [ --with-ssl-dir=PATH Specify path to OpenSSL installation ],
1711 [
e9e4a1c7 1712 if test "x$withval" != "xno" ; then
99eb0f64 1713 case "$withval" in
1714 # Relative paths
1715 ./*|../*) withval="`pwd`/$withval"
1716 esac
5b991353 1717 if test -d "$withval/lib"; then
1718 if test -n "${need_dash_r}"; then
1719 LDFLAGS="-L${withval}/lib -R${withval}/lib ${LDFLAGS}"
1720 else
1721 LDFLAGS="-L${withval}/lib ${LDFLAGS}"
d6f13fbb 1722 fi
1723 else
5b991353 1724 if test -n "${need_dash_r}"; then
1725 LDFLAGS="-L${withval} -R${withval} ${LDFLAGS}"
1726 else
1727 LDFLAGS="-L${withval} ${LDFLAGS}"
d6f13fbb 1728 fi
1729 fi
5b991353 1730 if test -d "$withval/include"; then
1731 CPPFLAGS="-I${withval}/include ${CPPFLAGS}"
d6f13fbb 1732 else
5b991353 1733 CPPFLAGS="-I${withval} ${CPPFLAGS}"
58d100bf 1734 fi
a0391976 1735 fi
5b991353 1736 ]
1737)
5486a457 1738LIBS="-lcrypto $LIBS"
3466e002 1739AC_TRY_LINK_FUNC(RAND_add, AC_DEFINE(HAVE_OPENSSL, 1,
1740 [Define if your ssl headers are included
1741 with #include <openssl/header.h>]),
d45e3d76 1742 [
5b991353 1743 dnl Check default openssl install dir
1744 if test -n "${need_dash_r}"; then
1745 LDFLAGS="-L/usr/local/ssl/lib -R/usr/local/ssl/lib ${saved_LDFLAGS}"
d45e3d76 1746 else
5b991353 1747 LDFLAGS="-L/usr/local/ssl/lib ${saved_LDFLAGS}"
d45e3d76 1748 fi
5b991353 1749 CPPFLAGS="-I/usr/local/ssl/include ${saved_CPPFLAGS}"
1750 AC_TRY_LINK_FUNC(RAND_add, AC_DEFINE(HAVE_OPENSSL),
1751 [
1752 AC_MSG_ERROR([*** Can't find recent OpenSSL libcrypto (see config.log for details) ***])
1753 ]
1754 )
1755 ]
1756)
1757
cd018561 1758# Determine OpenSSL header version
1759AC_MSG_CHECKING([OpenSSL header version])
1a01a50c 1760AC_RUN_IFELSE(
479cece8 1761 [AC_LANG_SOURCE([[
cd018561 1762#include <stdio.h>
1763#include <string.h>
1764#include <openssl/opensslv.h>
1765#define DATA "conftest.sslincver"
1766int main(void) {
aff51935 1767 FILE *fd;
1768 int rc;
cd018561 1769
aff51935 1770 fd = fopen(DATA,"w");
1771 if(fd == NULL)
1772 exit(1);
cd018561 1773
1774 if ((rc = fprintf(fd ,"%x (%s)\n", OPENSSL_VERSION_NUMBER, OPENSSL_VERSION_TEXT)) <0)
1775 exit(1);
1776
1777 exit(0);
1778}
479cece8 1779 ]])],
cd018561 1780 [
1781 ssl_header_ver=`cat conftest.sslincver`
1782 AC_MSG_RESULT($ssl_header_ver)
1783 ],
1784 [
1785 AC_MSG_RESULT(not found)
1786 AC_MSG_ERROR(OpenSSL version header not found.)
1a01a50c 1787 ],
1788 [
1789 AC_MSG_WARN([cross compiling: not checking])
cd018561 1790 ]
1791)
1792
1793# Determine OpenSSL library version
1794AC_MSG_CHECKING([OpenSSL library version])
1a01a50c 1795AC_RUN_IFELSE(
479cece8 1796 [AC_LANG_SOURCE([[
cd018561 1797#include <stdio.h>
1798#include <string.h>
1799#include <openssl/opensslv.h>
1800#include <openssl/crypto.h>
1801#define DATA "conftest.ssllibver"
1802int main(void) {
aff51935 1803 FILE *fd;
1804 int rc;
cd018561 1805
aff51935 1806 fd = fopen(DATA,"w");
1807 if(fd == NULL)
1808 exit(1);
cd018561 1809
1810 if ((rc = fprintf(fd ,"%x (%s)\n", SSLeay(), SSLeay_version(SSLEAY_VERSION))) <0)
1811 exit(1);
1812
1813 exit(0);
1814}
479cece8 1815 ]])],
cd018561 1816 [
1817 ssl_library_ver=`cat conftest.ssllibver`
1818 AC_MSG_RESULT($ssl_library_ver)
1819 ],
1820 [
1821 AC_MSG_RESULT(not found)
1822 AC_MSG_ERROR(OpenSSL library not found.)
1a01a50c 1823 ],
1824 [
1825 AC_MSG_WARN([cross compiling: not checking])
cd018561 1826 ]
1827)
58d100bf 1828
9780116c 1829# Sanity check OpenSSL headers
1830AC_MSG_CHECKING([whether OpenSSL's headers match the library])
1a01a50c 1831AC_RUN_IFELSE(
479cece8 1832 [AC_LANG_SOURCE([[
9780116c 1833#include <string.h>
1834#include <openssl/opensslv.h>
aec4cb4f 1835int main(void) { exit(SSLeay() == OPENSSL_VERSION_NUMBER ? 0 : 1); }
479cece8 1836 ]])],
9780116c 1837 [
1838 AC_MSG_RESULT(yes)
1839 ],
1840 [
1841 AC_MSG_RESULT(no)
e15ba28b 1842 AC_MSG_ERROR([Your OpenSSL headers do not match your library.
1843Check config.log for details.
1844Also see contrib/findssl.sh for help identifying header/library mismatches.])
1a01a50c 1845 ],
1846 [
1847 AC_MSG_WARN([cross compiling: not checking])
9780116c 1848 ]
1849)
1850
c7ad0d99 1851AC_ARG_WITH(ssl-engine,
1852 [ --with-ssl-engine Enable OpenSSL (hardware) ENGINE support ],
1853 [ if test "x$withval" != "xno" ; then
1854 AC_MSG_CHECKING(for OpenSSL ENGINE support)
1855 AC_TRY_COMPILE(
1856 [ #include <openssl/engine.h>],
1857 [
1858int main(void){ENGINE_load_builtin_engines();ENGINE_register_all_complete();}
1859 ],
1860 [ AC_MSG_RESULT(yes)
1861 AC_DEFINE(USE_OPENSSL_ENGINE, 1,
1862 [Enable OpenSSL engine support])
1863 ],
1864 [ AC_MSG_ERROR(OpenSSL ENGINE support not found)]
1865 )
1866 fi ]
1867)
1868
e5146707 1869# Check for OpenSSL without EVP_aes_{192,256}_cbc
1870AC_MSG_CHECKING([whether OpenSSL has crippled AES support])
1871AC_COMPILE_IFELSE(
1872 [AC_LANG_SOURCE([[
1873#include <string.h>
1874#include <openssl/evp.h>
300ea548 1875int main(void) { exit(EVP_aes_192_cbc() == NULL || EVP_aes_256_cbc() == NULL);}
e5146707 1876 ]])],
1877 [
1878 AC_MSG_RESULT(no)
1879 ],
1880 [
1881 AC_MSG_RESULT(yes)
1882 AC_DEFINE(OPENSSL_LOBOTOMISED_AES, 1,
1883 [libcrypto is missing AES 192 and 256 bit functions])
1884 ]
1885)
1886
5486a457 1887# Some systems want crypt() from libcrypt, *not* the version in OpenSSL,
1888# because the system crypt() is more featureful.
1889if test "x$check_for_libcrypt_before" = "x1"; then
1890 AC_CHECK_LIB(crypt, crypt)
1891fi
1892
aff51935 1893# Some Linux systems (Slackware) need crypt() from libcrypt, *not* the
8087c5ee 1894# version in OpenSSL.
05114c74 1895if test "x$check_for_libcrypt_later" = "x1"; then
20cad736 1896 AC_CHECK_LIB(crypt, crypt, LIBS="$LIBS -lcrypt")
717057b6 1897fi
1898
13ff27b7 1899# Search for SHA256 support in libc and/or OpenSSL
1900AC_CHECK_FUNCS(SHA256_Update EVP_sha256)
1901
4c653d8e 1902AC_CHECK_LIB(iaf, ia_openinfo)
f1b0ecc3 1903
1904### Configure cryptographic random number support
1905
1906# Check wheter OpenSSL seeds itself
1907AC_MSG_CHECKING([whether OpenSSL's PRNG is internally seeded])
1a01a50c 1908AC_RUN_IFELSE(
479cece8 1909 [AC_LANG_SOURCE([[
f1b0ecc3 1910#include <string.h>
1911#include <openssl/rand.h>
aec4cb4f 1912int main(void) { exit(RAND_status() == 1 ? 0 : 1); }
479cece8 1913 ]])],
f1b0ecc3 1914 [
1915 OPENSSL_SEEDS_ITSELF=yes
1916 AC_MSG_RESULT(yes)
1917 ],
1918 [
1919 AC_MSG_RESULT(no)
1920 # Default to use of the rand helper if OpenSSL doesn't
1921 # seed itself
1922 USE_RAND_HELPER=yes
1a01a50c 1923 ],
1924 [
1925 AC_MSG_WARN([cross compiling: assuming yes])
1926 # This is safe, since all recent OpenSSL versions will
82f4e93d 1927 # complain at runtime if not seeded correctly.
1a01a50c 1928 OPENSSL_SEEDS_ITSELF=yes
f1b0ecc3 1929 ]
1930)
1931
1932
1933# Do we want to force the use of the rand helper?
1934AC_ARG_WITH(rand-helper,
1935 [ --with-rand-helper Use subprocess to gather strong randomness ],
1936 [
1937 if test "x$withval" = "xno" ; then
aff51935 1938 # Force use of OpenSSL's internal RNG, even if
f1b0ecc3 1939 # the previous test showed it to be unseeded.
1940 if test -z "$OPENSSL_SEEDS_ITSELF" ; then
1941 AC_MSG_WARN([*** Forcing use of OpenSSL's non-self-seeding PRNG])
1942 OPENSSL_SEEDS_ITSELF=yes
1943 USE_RAND_HELPER=""
1944 fi
1945 else
1946 USE_RAND_HELPER=yes
1947 fi
1948 ],
82f4e93d 1949)
f1b0ecc3 1950
1951# Which randomness source do we use?
4b492aab 1952if test ! -z "$OPENSSL_SEEDS_ITSELF" && test -z "$USE_RAND_HELPER" ; then
f1b0ecc3 1953 # OpenSSL only
3466e002 1954 AC_DEFINE(OPENSSL_PRNG_ONLY, 1,
1955 [Define if you want OpenSSL's internally seeded PRNG only])
f1b0ecc3 1956 RAND_MSG="OpenSSL internal ONLY"
1957 INSTALL_SSH_RAND_HELPER=""
70e2f2f3 1958elif test ! -z "$USE_RAND_HELPER" ; then
1959 # install rand helper
f1b0ecc3 1960 RAND_MSG="ssh-rand-helper"
1961 INSTALL_SSH_RAND_HELPER="yes"
1962fi
1963AC_SUBST(INSTALL_SSH_RAND_HELPER)
1964
1965### Configuration of ssh-rand-helper
1966
1967# PRNGD TCP socket
1968AC_ARG_WITH(prngd-port,
1969 [ --with-prngd-port=PORT read entropy from PRNGD/EGD TCP localhost:PORT],
1970 [
eb5d7ff6 1971 case "$withval" in
1972 no)
1973 withval=""
1974 ;;
1975 [[0-9]]*)
1976 ;;
1977 *)
1978 AC_MSG_ERROR(You must specify a numeric port number for --with-prngd-port)
1979 ;;
1980 esac
1981 if test ! -z "$withval" ; then
f1b0ecc3 1982 PRNGD_PORT="$withval"
3466e002 1983 AC_DEFINE_UNQUOTED(PRNGD_PORT, $PRNGD_PORT,
1984 [Port number of PRNGD/EGD random number socket])
f1b0ecc3 1985 fi
1986 ]
1987)
1988
1989# PRNGD Unix domain socket
1990AC_ARG_WITH(prngd-socket,
1991 [ --with-prngd-socket=FILE read entropy from PRNGD/EGD socket FILE (default=/var/run/egd-pool)],
1992 [
eb5d7ff6 1993 case "$withval" in
1994 yes)
f1b0ecc3 1995 withval="/var/run/egd-pool"
eb5d7ff6 1996 ;;
1997 no)
1998 withval=""
1999 ;;
2000 /*)
2001 ;;
2002 *)
2003 AC_MSG_ERROR(You must specify an absolute path to the entropy socket)
2004 ;;
2005 esac
2006
2007 if test ! -z "$withval" ; then
f1b0ecc3 2008 if test ! -z "$PRNGD_PORT" ; then
2009 AC_MSG_ERROR(You may not specify both a PRNGD/EGD port and socket)
2010 fi
906e811b 2011 if test ! -r "$withval" ; then
f1b0ecc3 2012 AC_MSG_WARN(Entropy socket is not readable)
2013 fi
2014 PRNGD_SOCKET="$withval"
3466e002 2015 AC_DEFINE_UNQUOTED(PRNGD_SOCKET, "$PRNGD_SOCKET",
2016 [Location of PRNGD/EGD random number socket])
f1b0ecc3 2017 fi
ddceb1c8 2018 ],
2019 [
2020 # Check for existing socket only if we don't have a random device already
2021 if test "$USE_RAND_HELPER" = yes ; then
2022 AC_MSG_CHECKING(for PRNGD/EGD socket)
2023 # Insert other locations here
2024 for sock in /var/run/egd-pool /dev/egd-pool /etc/entropy; do
2025 if test -r $sock && $TEST_MINUS_S_SH -c "test -S $sock -o -p $sock" ; then
2026 PRNGD_SOCKET="$sock"
2027 AC_DEFINE_UNQUOTED(PRNGD_SOCKET, "$PRNGD_SOCKET")
2028 break;
2029 fi
2030 done
2031 if test ! -z "$PRNGD_SOCKET" ; then
2032 AC_MSG_RESULT($PRNGD_SOCKET)
2033 else
2034 AC_MSG_RESULT(not found)
2035 fi
2036 fi
f1b0ecc3 2037 ]
2038)
2039
2040# Change default command timeout for hashing entropy source
2041entropy_timeout=200
2042AC_ARG_WITH(entropy-timeout,
2043 [ --with-entropy-timeout Specify entropy gathering command timeout (msec)],
2044 [
6cf0200f 2045 if test -n "$withval" && test "x$withval" != "xno" && \
2046 test "x${withval}" != "xyes"; then
f1b0ecc3 2047 entropy_timeout=$withval
2048 fi
82f4e93d 2049 ]
f1b0ecc3 2050)
3466e002 2051AC_DEFINE_UNQUOTED(ENTROPY_TIMEOUT_MSEC, $entropy_timeout,
2052 [Builtin PRNG command timeout])
f1b0ecc3 2053
fd3cbf67 2054SSH_PRIVSEP_USER=sshd
9a0fbcb3 2055AC_ARG_WITH(privsep-user,
5222e7ef 2056 [ --with-privsep-user=user Specify non-privileged user for privilege separation],
9a0fbcb3 2057 [
6cf0200f 2058 if test -n "$withval" && test "x$withval" != "xno" && \
2059 test "x${withval}" != "xyes"; then
fd3cbf67 2060 SSH_PRIVSEP_USER=$withval
9a0fbcb3 2061 fi
82f4e93d 2062 ]
9a0fbcb3 2063)
3466e002 2064AC_DEFINE_UNQUOTED(SSH_PRIVSEP_USER, "$SSH_PRIVSEP_USER",
2065 [non-privileged user for privilege separation])
fd3cbf67 2066AC_SUBST(SSH_PRIVSEP_USER)
9a0fbcb3 2067
81dadca3 2068# We do this little dance with the search path to insure
2069# that programs that we select for use by installed programs
2070# (which may be run by the super-user) come from trusted
2071# locations before they come from the user's private area.
2072# This should help avoid accidentally configuring some
2073# random version of a program in someone's personal bin.
2074
2075OPATH=$PATH
2076PATH=/bin:/usr/bin
f95c8ce8 2077test -h /bin 2> /dev/null && PATH=/usr/bin
81dadca3 2078test -d /sbin && PATH=$PATH:/sbin
2079test -d /usr/sbin && PATH=$PATH:/usr/sbin
2080PATH=$PATH:/etc:$OPATH
2081
aff51935 2082# These programs are used by the command hashing source to gather entropy
f1b0ecc3 2083OSSH_PATH_ENTROPY_PROG(PROG_LS, ls)
2084OSSH_PATH_ENTROPY_PROG(PROG_NETSTAT, netstat)
2085OSSH_PATH_ENTROPY_PROG(PROG_ARP, arp)
2086OSSH_PATH_ENTROPY_PROG(PROG_IFCONFIG, ifconfig)
2087OSSH_PATH_ENTROPY_PROG(PROG_JSTAT, jstat)
2088OSSH_PATH_ENTROPY_PROG(PROG_PS, ps)
2089OSSH_PATH_ENTROPY_PROG(PROG_SAR, sar)
2090OSSH_PATH_ENTROPY_PROG(PROG_W, w)
2091OSSH_PATH_ENTROPY_PROG(PROG_WHO, who)
2092OSSH_PATH_ENTROPY_PROG(PROG_LAST, last)
2093OSSH_PATH_ENTROPY_PROG(PROG_LASTLOG, lastlog)
2094OSSH_PATH_ENTROPY_PROG(PROG_DF, df)
2095OSSH_PATH_ENTROPY_PROG(PROG_VMSTAT, vmstat)
2096OSSH_PATH_ENTROPY_PROG(PROG_UPTIME, uptime)
2097OSSH_PATH_ENTROPY_PROG(PROG_IPCS, ipcs)
2098OSSH_PATH_ENTROPY_PROG(PROG_TAIL, tail)
81dadca3 2099# restore PATH
2100PATH=$OPATH
f1b0ecc3 2101
2102# Where does ssh-rand-helper get its randomness from?
2103INSTALL_SSH_PRNG_CMDS=""
2104if test ! -z "$INSTALL_SSH_RAND_HELPER" ; then
2105 if test ! -z "$PRNGD_PORT" ; then
2106 RAND_HELPER_MSG="TCP localhost:$PRNGD_PORT"
2107 elif test ! -z "$PRNGD_SOCKET" ; then
2108 RAND_HELPER_MSG="Unix domain socket \"$PRNGD_SOCKET\""
2109 else
2110 RAND_HELPER_MSG="Command hashing (timeout $entropy_timeout)"
2111 RAND_HELPER_CMDHASH=yes
2112 INSTALL_SSH_PRNG_CMDS="yes"
2113 fi
2114fi
2115AC_SUBST(INSTALL_SSH_PRNG_CMDS)
2116
2117
66d6c27e 2118# Cheap hack to ensure NEWS-OS libraries are arranged right.
2119if test ! -z "$SONY" ; then
2120 LIBS="$LIBS -liberty";
2121fi
2122
9a406e1e 2123# Check for long long datatypes
2124AC_CHECK_TYPES([long long, unsigned long long, long double])
2125
2126# Check datatype sizes
976f7e19 2127AC_CHECK_SIZEOF(char, 1)
2b942fe0 2128AC_CHECK_SIZEOF(short int, 2)
2129AC_CHECK_SIZEOF(int, 4)
2130AC_CHECK_SIZEOF(long int, 4)
2131AC_CHECK_SIZEOF(long long int, 8)
2132
52f1ccb2 2133# Sanity check long long for some platforms (AIX)
2134if test "x$ac_cv_sizeof_long_long_int" = "x4" ; then
2135 ac_cv_sizeof_long_long_int=0
2136fi
2137
90f15776 2138# compute LLONG_MIN and LLONG_MAX if we don't know them.
2139if test -z "$have_llong_max"; then
2140 AC_MSG_CHECKING([for max value of long long])
2141 AC_RUN_IFELSE(
2142 [AC_LANG_SOURCE([[
2143#include <stdio.h>
2144/* Why is this so damn hard? */
2145#ifdef __GNUC__
2146# undef __GNUC__
2147#endif
2148#define __USE_ISOC99
2149#include <limits.h>
2150#define DATA "conftest.llminmax"
055252ed 2151#define my_abs(a) ((a) < 0 ? ((a) * -1) : (a))
2152
2153/*
2154 * printf in libc on some platforms (eg old Tru64) does not understand %lld so
2155 * we do this the hard way.
2156 */
2157static int
2158fprint_ll(FILE *f, long long n)
2159{
2160 unsigned int i;
2161 int l[sizeof(long long) * 8];
2162
2163 if (n < 0)
2164 if (fprintf(f, "-") < 0)
2165 return -1;
2166 for (i = 0; n != 0; i++) {
2167 l[i] = my_abs(n % 10);
2168 n /= 10;
2169 }
2170 do {
2171 if (fprintf(f, "%d", l[--i]) < 0)
2172 return -1;
2173 } while (i != 0);
2174 if (fprintf(f, " ") < 0)
2175 return -1;
2176 return 0;
2177}
2178
90f15776 2179int main(void) {
2180 FILE *f;
2181 long long i, llmin, llmax = 0;
2182
2183 if((f = fopen(DATA,"w")) == NULL)
2184 exit(1);
2185
2186#if defined(LLONG_MIN) && defined(LLONG_MAX)
2187 fprintf(stderr, "Using system header for LLONG_MIN and LLONG_MAX\n");
2188 llmin = LLONG_MIN;
2189 llmax = LLONG_MAX;
2190#else
2191 fprintf(stderr, "Calculating LLONG_MIN and LLONG_MAX\n");
2192 /* This will work on one's complement and two's complement */
2193 for (i = 1; i > llmax; i <<= 1, i++)
2194 llmax = i;
2195 llmin = llmax + 1LL; /* wrap */
2196#endif
2197
2198 /* Sanity check */
2199 if (llmin + 1 < llmin || llmin - 1 < llmin || llmax + 1 > llmax
055252ed 2200 || llmax - 1 > llmax || llmin == llmax || llmin == 0
2201 || llmax == 0 || llmax < LONG_MAX || llmin > LONG_MIN) {
90f15776 2202 fprintf(f, "unknown unknown\n");
2203 exit(2);
2204 }
2205
055252ed 2206 if (fprint_ll(f, llmin) < 0)
90f15776 2207 exit(3);
055252ed 2208 if (fprint_ll(f, llmax) < 0)
2209 exit(4);
2210 if (fclose(f) < 0)
2211 exit(5);
90f15776 2212 exit(0);
2213}
2214 ]])],
2215 [
2216 llong_min=`$AWK '{print $1}' conftest.llminmax`
2217 llong_max=`$AWK '{print $2}' conftest.llminmax`
2218
90f15776 2219 AC_MSG_RESULT($llong_max)
2220 AC_DEFINE_UNQUOTED(LLONG_MAX, [${llong_max}LL],
2221 [max value of long long calculated by configure])
2222 AC_MSG_CHECKING([for min value of long long])
2223 AC_MSG_RESULT($llong_min)
2224 AC_DEFINE_UNQUOTED(LLONG_MIN, [${llong_min}LL],
2225 [min value of long long calculated by configure])
2226 ],
2227 [
2228 AC_MSG_RESULT(not found)
2229 ],
2230 [
2231 AC_MSG_WARN([cross compiling: not checking])
2232 ]
2233 )
2234fi
2235
2236
a0391976 2237# More checks for data types
14a9a859 2238AC_CACHE_CHECK([for u_int type], ac_cv_have_u_int, [
2239 AC_TRY_COMPILE(
aff51935 2240 [ #include <sys/types.h> ],
2241 [ u_int a; a = 1;],
14a9a859 2242 [ ac_cv_have_u_int="yes" ],
2243 [ ac_cv_have_u_int="no" ]
2244 )
2245])
2246if test "x$ac_cv_have_u_int" = "xyes" ; then
3466e002 2247 AC_DEFINE(HAVE_U_INT, 1, [define if you have u_int data type])
14a9a859 2248 have_u_int=1
2249fi
2250
58d100bf 2251AC_CACHE_CHECK([for intXX_t types], ac_cv_have_intxx_t, [
2252 AC_TRY_COMPILE(
aff51935 2253 [ #include <sys/types.h> ],
2254 [ int8_t a; int16_t b; int32_t c; a = b = c = 1;],
58d100bf 2255 [ ac_cv_have_intxx_t="yes" ],
2256 [ ac_cv_have_intxx_t="no" ]
2257 )
2258])
2259if test "x$ac_cv_have_intxx_t" = "xyes" ; then
3466e002 2260 AC_DEFINE(HAVE_INTXX_T, 1, [define if you have intxx_t data type])
58d100bf 2261 have_intxx_t=1
2262fi
41cb4569 2263
2264if (test -z "$have_intxx_t" && \
aff51935 2265 test "x$ac_cv_header_stdint_h" = "xyes")
41cb4569 2266then
2267 AC_MSG_CHECKING([for intXX_t types in stdint.h])
2268 AC_TRY_COMPILE(
aff51935 2269 [ #include <stdint.h> ],
2270 [ int8_t a; int16_t b; int32_t c; a = b = c = 1;],
41cb4569 2271 [
2272 AC_DEFINE(HAVE_INTXX_T)
2273 AC_MSG_RESULT(yes)
2274 ],
2275 [ AC_MSG_RESULT(no) ]
2276 )
2277fi
2278
bd590612 2279AC_CACHE_CHECK([for int64_t type], ac_cv_have_int64_t, [
2280 AC_TRY_COMPILE(
1cbbe6c8 2281 [
2282#include <sys/types.h>
2283#ifdef HAVE_STDINT_H
2284# include <stdint.h>
2285#endif
2286#include <sys/socket.h>
2287#ifdef HAVE_SYS_BITYPES_H
2288# include <sys/bitypes.h>
2289#endif
aff51935 2290 ],
2291 [ int64_t a; a = 1;],
bd590612 2292 [ ac_cv_have_int64_t="yes" ],
2293 [ ac_cv_have_int64_t="no" ]
2294 )
2295])
2296if test "x$ac_cv_have_int64_t" = "xyes" ; then
3466e002 2297 AC_DEFINE(HAVE_INT64_T, 1, [define if you have int64_t data type])
ddceb1c8 2298fi
2299
58d100bf 2300AC_CACHE_CHECK([for u_intXX_t types], ac_cv_have_u_intxx_t, [
2301 AC_TRY_COMPILE(
aff51935 2302 [ #include <sys/types.h> ],
2303 [ u_int8_t a; u_int16_t b; u_int32_t c; a = b = c = 1;],
58d100bf 2304 [ ac_cv_have_u_intxx_t="yes" ],
2305 [ ac_cv_have_u_intxx_t="no" ]
2306 )
2307])
2308if test "x$ac_cv_have_u_intxx_t" = "xyes" ; then
3466e002 2309 AC_DEFINE(HAVE_U_INTXX_T, 1, [define if you have u_intxx_t data type])
58d100bf 2310 have_u_intxx_t=1
2311fi
2b942fe0 2312
41cb4569 2313if test -z "$have_u_intxx_t" ; then
2314 AC_MSG_CHECKING([for u_intXX_t types in sys/socket.h])
2315 AC_TRY_COMPILE(
aff51935 2316 [ #include <sys/socket.h> ],
2317 [ u_int8_t a; u_int16_t b; u_int32_t c; a = b = c = 1;],
41cb4569 2318 [
2319 AC_DEFINE(HAVE_U_INTXX_T)
2320 AC_MSG_RESULT(yes)
2321 ],
2322 [ AC_MSG_RESULT(no) ]
2323 )
2324fi
2325
bd590612 2326AC_CACHE_CHECK([for u_int64_t types], ac_cv_have_u_int64_t, [
2327 AC_TRY_COMPILE(
aff51935 2328 [ #include <sys/types.h> ],
2329 [ u_int64_t a; a = 1;],
bd590612 2330 [ ac_cv_have_u_int64_t="yes" ],
2331 [ ac_cv_have_u_int64_t="no" ]
2332 )
2333])
2334if test "x$ac_cv_have_u_int64_t" = "xyes" ; then
3466e002 2335 AC_DEFINE(HAVE_U_INT64_T, 1, [define if you have u_int64_t data type])
bd590612 2336 have_u_int64_t=1
2337fi
2338
ddceb1c8 2339if test -z "$have_u_int64_t" ; then
2340 AC_MSG_CHECKING([for u_int64_t type in sys/bitypes.h])
2341 AC_TRY_COMPILE(
aff51935 2342 [ #include <sys/bitypes.h> ],
ddceb1c8 2343 [ u_int64_t a; a = 1],
2344 [
2345 AC_DEFINE(HAVE_U_INT64_T)
2346 AC_MSG_RESULT(yes)
2347 ],
2348 [ AC_MSG_RESULT(no) ]
2349 )
2350fi
2351
41cb4569 2352if test -z "$have_u_intxx_t" ; then
2353 AC_CACHE_CHECK([for uintXX_t types], ac_cv_have_uintxx_t, [
2354 AC_TRY_COMPILE(
2355 [
2356#include <sys/types.h>
aff51935 2357 ],
2358 [ uint8_t a; uint16_t b; uint32_t c; a = b = c = 1; ],
41cb4569 2359 [ ac_cv_have_uintxx_t="yes" ],
2360 [ ac_cv_have_uintxx_t="no" ]
2361 )
2362 ])
2363 if test "x$ac_cv_have_uintxx_t" = "xyes" ; then
3466e002 2364 AC_DEFINE(HAVE_UINTXX_T, 1,
2365 [define if you have uintxx_t data type])
41cb4569 2366 fi
2367fi
2368
2369if test -z "$have_uintxx_t" ; then
2370 AC_MSG_CHECKING([for uintXX_t types in stdint.h])
2371 AC_TRY_COMPILE(
aff51935 2372 [ #include <stdint.h> ],
2373 [ uint8_t a; uint16_t b; uint32_t c; a = b = c = 1;],
41cb4569 2374 [
2375 AC_DEFINE(HAVE_UINTXX_T)
2376 AC_MSG_RESULT(yes)
2377 ],
2378 [ AC_MSG_RESULT(no) ]
2379 )
2380fi
2381
e5fe9a1f 2382if (test -z "$have_u_intxx_t" || test -z "$have_intxx_t" && \
aff51935 2383 test "x$ac_cv_header_sys_bitypes_h" = "xyes")
5cdfe03f 2384then
2385 AC_MSG_CHECKING([for intXX_t and u_intXX_t types in sys/bitypes.h])
2386 AC_TRY_COMPILE(
58d100bf 2387 [
2388#include <sys/bitypes.h>
aff51935 2389 ],
5cdfe03f 2390 [
837c30b8 2391 int8_t a; int16_t b; int32_t c;
2392 u_int8_t e; u_int16_t f; u_int32_t g;
2393 a = b = c = e = f = g = 1;
aff51935 2394 ],
5cdfe03f 2395 [
2396 AC_DEFINE(HAVE_U_INTXX_T)
2397 AC_DEFINE(HAVE_INTXX_T)
2398 AC_MSG_RESULT(yes)
2399 ],
2400 [AC_MSG_RESULT(no)]
aff51935 2401 )
5cdfe03f 2402fi
2403
0362750e 2404
2405AC_CACHE_CHECK([for u_char], ac_cv_have_u_char, [
2406 AC_TRY_COMPILE(
2407 [
2408#include <sys/types.h>
2409 ],
2410 [ u_char foo; foo = 125; ],
2411 [ ac_cv_have_u_char="yes" ],
2412 [ ac_cv_have_u_char="no" ]
2413 )
2414])
2415if test "x$ac_cv_have_u_char" = "xyes" ; then
3466e002 2416 AC_DEFINE(HAVE_U_CHAR, 1, [define if you have u_char data type])
0362750e 2417fi
2418
98a7c37b 2419TYPE_SOCKLEN_T
2b942fe0 2420
2d16d9a3 2421AC_CHECK_TYPES(sig_atomic_t,,,[#include <signal.h>])
ddceb1c8 2422
777ece68 2423AC_CHECK_TYPES(in_addr_t,,,
2424[#include <sys/types.h>
2425#include <netinet/in.h>])
7b578f7d 2426
58d100bf 2427AC_CACHE_CHECK([for size_t], ac_cv_have_size_t, [
2428 AC_TRY_COMPILE(
2429 [
18ba2aab 2430#include <sys/types.h>
58d100bf 2431 ],
2432 [ size_t foo; foo = 1235; ],
2433 [ ac_cv_have_size_t="yes" ],
2434 [ ac_cv_have_size_t="no" ]
2435 )
2436])
2437if test "x$ac_cv_have_size_t" = "xyes" ; then
3466e002 2438 AC_DEFINE(HAVE_SIZE_T, 1, [define if you have size_t data type])
58d100bf 2439fi
ea1970a3 2440
c04f75f1 2441AC_CACHE_CHECK([for ssize_t], ac_cv_have_ssize_t, [
2442 AC_TRY_COMPILE(
2443 [
2444#include <sys/types.h>
2445 ],
2446 [ ssize_t foo; foo = 1235; ],
2447 [ ac_cv_have_ssize_t="yes" ],
2448 [ ac_cv_have_ssize_t="no" ]
2449 )
2450])
2451if test "x$ac_cv_have_ssize_t" = "xyes" ; then
3466e002 2452 AC_DEFINE(HAVE_SSIZE_T, 1, [define if you have ssize_t data type])
c04f75f1 2453fi
2454
f1c4659d 2455AC_CACHE_CHECK([for clock_t], ac_cv_have_clock_t, [
2456 AC_TRY_COMPILE(
2457 [
2458#include <time.h>
2459 ],
2460 [ clock_t foo; foo = 1235; ],
2461 [ ac_cv_have_clock_t="yes" ],
2462 [ ac_cv_have_clock_t="no" ]
2463 )
2464])
2465if test "x$ac_cv_have_clock_t" = "xyes" ; then
3466e002 2466 AC_DEFINE(HAVE_CLOCK_T, 1, [define if you have clock_t data type])
f1c4659d 2467fi
2468
1c04b088 2469AC_CACHE_CHECK([for sa_family_t], ac_cv_have_sa_family_t, [
2470 AC_TRY_COMPILE(
2471 [
2472#include <sys/types.h>
2473#include <sys/socket.h>
2474 ],
2475 [ sa_family_t foo; foo = 1235; ],
2476 [ ac_cv_have_sa_family_t="yes" ],
77bb0bca 2477 [ AC_TRY_COMPILE(
2478 [
2479#include <sys/types.h>
2480#include <sys/socket.h>
2481#include <netinet/in.h>
2482 ],
2483 [ sa_family_t foo; foo = 1235; ],
2484 [ ac_cv_have_sa_family_t="yes" ],
2485
1c04b088 2486 [ ac_cv_have_sa_family_t="no" ]
77bb0bca 2487 )]
1c04b088 2488 )
2489])
2490if test "x$ac_cv_have_sa_family_t" = "xyes" ; then
3466e002 2491 AC_DEFINE(HAVE_SA_FAMILY_T, 1,
2492 [define if you have sa_family_t data type])
1c04b088 2493fi
2494
729bfe59 2495AC_CACHE_CHECK([for pid_t], ac_cv_have_pid_t, [
2496 AC_TRY_COMPILE(
2497 [
2498#include <sys/types.h>
2499 ],
2500 [ pid_t foo; foo = 1235; ],
2501 [ ac_cv_have_pid_t="yes" ],
2502 [ ac_cv_have_pid_t="no" ]
2503 )
2504])
2505if test "x$ac_cv_have_pid_t" = "xyes" ; then
3466e002 2506 AC_DEFINE(HAVE_PID_T, 1, [define if you have pid_t data type])
729bfe59 2507fi
2508
2509AC_CACHE_CHECK([for mode_t], ac_cv_have_mode_t, [
2510 AC_TRY_COMPILE(
2511 [
2512#include <sys/types.h>
2513 ],
2514 [ mode_t foo; foo = 1235; ],
2515 [ ac_cv_have_mode_t="yes" ],
2516 [ ac_cv_have_mode_t="no" ]
2517 )
2518])
2519if test "x$ac_cv_have_mode_t" = "xyes" ; then
3466e002 2520 AC_DEFINE(HAVE_MODE_T, 1, [define if you have mode_t data type])
729bfe59 2521fi
2522
e3a93db0 2523
58d100bf 2524AC_CACHE_CHECK([for struct sockaddr_storage], ac_cv_have_struct_sockaddr_storage, [
2525 AC_TRY_COMPILE(
2526 [
18ba2aab 2527#include <sys/types.h>
2528#include <sys/socket.h>
58d100bf 2529 ],
2530 [ struct sockaddr_storage s; ],
2531 [ ac_cv_have_struct_sockaddr_storage="yes" ],
2532 [ ac_cv_have_struct_sockaddr_storage="no" ]
2533 )
2534])
2535if test "x$ac_cv_have_struct_sockaddr_storage" = "xyes" ; then
3466e002 2536 AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE, 1,
2537 [define if you have struct sockaddr_storage data type])
58d100bf 2538fi
48e671d5 2539
58d100bf 2540AC_CACHE_CHECK([for struct sockaddr_in6], ac_cv_have_struct_sockaddr_in6, [
2541 AC_TRY_COMPILE(
2542 [
cbd7492e 2543#include <sys/types.h>
58d100bf 2544#include <netinet/in.h>
2545 ],
2546 [ struct sockaddr_in6 s; s.sin6_family = 0; ],
2547 [ ac_cv_have_struct_sockaddr_in6="yes" ],
2548 [ ac_cv_have_struct_sockaddr_in6="no" ]
2549 )
2550])
2551if test "x$ac_cv_have_struct_sockaddr_in6" = "xyes" ; then
3466e002 2552 AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6, 1,
2553 [define if you have struct sockaddr_in6 data type])
58d100bf 2554fi
48e671d5 2555
58d100bf 2556AC_CACHE_CHECK([for struct in6_addr], ac_cv_have_struct_in6_addr, [
2557 AC_TRY_COMPILE(
2558 [
cbd7492e 2559#include <sys/types.h>
58d100bf 2560#include <netinet/in.h>
2561 ],
2562 [ struct in6_addr s; s.s6_addr[0] = 0; ],
2563 [ ac_cv_have_struct_in6_addr="yes" ],
2564 [ ac_cv_have_struct_in6_addr="no" ]
2565 )
2566])
2567if test "x$ac_cv_have_struct_in6_addr" = "xyes" ; then
3466e002 2568 AC_DEFINE(HAVE_STRUCT_IN6_ADDR, 1,
2569 [define if you have struct in6_addr data type])
58d100bf 2570fi
48e671d5 2571
58d100bf 2572AC_CACHE_CHECK([for struct addrinfo], ac_cv_have_struct_addrinfo, [
2573 AC_TRY_COMPILE(
2574 [
18ba2aab 2575#include <sys/types.h>
2576#include <sys/socket.h>
2577#include <netdb.h>
58d100bf 2578 ],
2579 [ struct addrinfo s; s.ai_flags = AI_PASSIVE; ],
2580 [ ac_cv_have_struct_addrinfo="yes" ],
2581 [ ac_cv_have_struct_addrinfo="no" ]
2582 )
2583])
2584if test "x$ac_cv_have_struct_addrinfo" = "xyes" ; then
3466e002 2585 AC_DEFINE(HAVE_STRUCT_ADDRINFO, 1,
2586 [define if you have struct addrinfo data type])
58d100bf 2587fi
2588
89c7e31c 2589AC_CACHE_CHECK([for struct timeval], ac_cv_have_struct_timeval, [
2590 AC_TRY_COMPILE(
aff51935 2591 [ #include <sys/time.h> ],
2592 [ struct timeval tv; tv.tv_sec = 1;],
89c7e31c 2593 [ ac_cv_have_struct_timeval="yes" ],
2594 [ ac_cv_have_struct_timeval="no" ]
2595 )
2596])
2597if test "x$ac_cv_have_struct_timeval" = "xyes" ; then
3466e002 2598 AC_DEFINE(HAVE_STRUCT_TIMEVAL, 1, [define if you have struct timeval])
89c7e31c 2599 have_struct_timeval=1
2600fi
2601
5271b55c 2602AC_CHECK_TYPES(struct timespec)
2603
85abc74b 2604# We need int64_t or else certian parts of the compile will fail.
4b492aab 2605if test "x$ac_cv_have_int64_t" = "xno" && \
2606 test "x$ac_cv_sizeof_long_int" != "x8" && \
2607 test "x$ac_cv_sizeof_long_long_int" = "x0" ; then
85abc74b 2608 echo "OpenSSH requires int64_t support. Contact your vendor or install"
2609 echo "an alternative compiler (I.E., GCC) before continuing."
2610 echo ""
2611 exit 1;
733cf7f4 2612else
2613dnl test snprintf (broken on SCO w/gcc)
1a01a50c 2614 AC_RUN_IFELSE(
479cece8 2615 [AC_LANG_SOURCE([[
733cf7f4 2616#include <stdio.h>
2617#include <string.h>
2618#ifdef HAVE_SNPRINTF
2619main()
2620{
2621 char buf[50];
2622 char expected_out[50];
2623 int mazsize = 50 ;
2624#if (SIZEOF_LONG_INT == 8)
2625 long int num = 0x7fffffffffffffff;
2626#else
763a1a18 2627 long long num = 0x7fffffffffffffffll;
733cf7f4 2628#endif
2629 strcpy(expected_out, "9223372036854775807");
2630 snprintf(buf, mazsize, "%lld", num);
2631 if(strcmp(buf, expected_out) != 0)
aff51935 2632 exit(1);
733cf7f4 2633 exit(0);
2634}
2635#else
2636main() { exit(0); }
2637#endif
479cece8 2638 ]])], [ true ], [ AC_DEFINE(BROKEN_SNPRINTF) ],
1a01a50c 2639 AC_MSG_WARN([cross compiling: Assuming working snprintf()])
733cf7f4 2640 )
2c523de9 2641fi
2642
77bb0bca 2643dnl Checks for structure members
58d100bf 2644OSSH_CHECK_HEADER_FOR_FIELD(ut_host, utmp.h, HAVE_HOST_IN_UTMP)
2645OSSH_CHECK_HEADER_FOR_FIELD(ut_host, utmpx.h, HAVE_HOST_IN_UTMPX)
2646OSSH_CHECK_HEADER_FOR_FIELD(syslen, utmpx.h, HAVE_SYSLEN_IN_UTMPX)
2647OSSH_CHECK_HEADER_FOR_FIELD(ut_pid, utmp.h, HAVE_PID_IN_UTMP)
2648OSSH_CHECK_HEADER_FOR_FIELD(ut_type, utmp.h, HAVE_TYPE_IN_UTMP)
25422c70 2649OSSH_CHECK_HEADER_FOR_FIELD(ut_type, utmpx.h, HAVE_TYPE_IN_UTMPX)
58d100bf 2650OSSH_CHECK_HEADER_FOR_FIELD(ut_tv, utmp.h, HAVE_TV_IN_UTMP)
2651OSSH_CHECK_HEADER_FOR_FIELD(ut_id, utmp.h, HAVE_ID_IN_UTMP)
daaff4d5 2652OSSH_CHECK_HEADER_FOR_FIELD(ut_id, utmpx.h, HAVE_ID_IN_UTMPX)
58d100bf 2653OSSH_CHECK_HEADER_FOR_FIELD(ut_addr, utmp.h, HAVE_ADDR_IN_UTMP)
2654OSSH_CHECK_HEADER_FOR_FIELD(ut_addr, utmpx.h, HAVE_ADDR_IN_UTMPX)
2655OSSH_CHECK_HEADER_FOR_FIELD(ut_addr_v6, utmp.h, HAVE_ADDR_V6_IN_UTMP)
2656OSSH_CHECK_HEADER_FOR_FIELD(ut_addr_v6, utmpx.h, HAVE_ADDR_V6_IN_UTMPX)
1d7b9b20 2657OSSH_CHECK_HEADER_FOR_FIELD(ut_exit, utmp.h, HAVE_EXIT_IN_UTMP)
2658OSSH_CHECK_HEADER_FOR_FIELD(ut_time, utmp.h, HAVE_TIME_IN_UTMP)
2659OSSH_CHECK_HEADER_FOR_FIELD(ut_time, utmpx.h, HAVE_TIME_IN_UTMPX)
2660OSSH_CHECK_HEADER_FOR_FIELD(ut_tv, utmpx.h, HAVE_TV_IN_UTMPX)
98a7c37b 2661
2662AC_CHECK_MEMBERS([struct stat.st_blksize])
ccc45ee0 2663AC_CHECK_MEMBER([struct __res_state.retrans], [], [AC_DEFINE(__res_state, state,
2664 [Define if we don't have struct __res_state in resolv.h])],
2665[
2666#include <stdio.h>
2667#if HAVE_SYS_TYPES_H
2668# include <sys/types.h>
2669#endif
2670#include <netinet/in.h>
2671#include <arpa/nameser.h>
2672#include <resolv.h>
2673])
1d7b9b20 2674
58d100bf 2675AC_CACHE_CHECK([for ss_family field in struct sockaddr_storage],
2676 ac_cv_have_ss_family_in_struct_ss, [
2677 AC_TRY_COMPILE(
2678 [
18ba2aab 2679#include <sys/types.h>
2680#include <sys/socket.h>
58d100bf 2681 ],
2682 [ struct sockaddr_storage s; s.ss_family = 1; ],
2683 [ ac_cv_have_ss_family_in_struct_ss="yes" ],
2684 [ ac_cv_have_ss_family_in_struct_ss="no" ],
2685 )
2686])
2687if test "x$ac_cv_have_ss_family_in_struct_ss" = "xyes" ; then
3466e002 2688 AC_DEFINE(HAVE_SS_FAMILY_IN_SS, 1, [Fields in struct sockaddr_storage])
58d100bf 2689fi
2690
58d100bf 2691AC_CACHE_CHECK([for __ss_family field in struct sockaddr_storage],
2692 ac_cv_have___ss_family_in_struct_ss, [
2693 AC_TRY_COMPILE(
2694 [
18ba2aab 2695#include <sys/types.h>
2696#include <sys/socket.h>
58d100bf 2697 ],
2698 [ struct sockaddr_storage s; s.__ss_family = 1; ],
2699 [ ac_cv_have___ss_family_in_struct_ss="yes" ],
2700 [ ac_cv_have___ss_family_in_struct_ss="no" ]
2701 )
2702])
2703if test "x$ac_cv_have___ss_family_in_struct_ss" = "xyes" ; then
3466e002 2704 AC_DEFINE(HAVE___SS_FAMILY_IN_SS, 1,
2705 [Fields in struct sockaddr_storage])
58d100bf 2706fi
2707
2e73a022 2708AC_CACHE_CHECK([for pw_class field in struct passwd],
2709 ac_cv_have_pw_class_in_struct_passwd, [
2710 AC_TRY_COMPILE(
2711 [
2e73a022 2712#include <pwd.h>
2713 ],
97994d32 2714 [ struct passwd p; p.pw_class = 0; ],
2e73a022 2715 [ ac_cv_have_pw_class_in_struct_passwd="yes" ],
2716 [ ac_cv_have_pw_class_in_struct_passwd="no" ]
2717 )
2718])
2719if test "x$ac_cv_have_pw_class_in_struct_passwd" = "xyes" ; then
3466e002 2720 AC_DEFINE(HAVE_PW_CLASS_IN_PASSWD, 1,
2721 [Define if your password has a pw_class field])
2e73a022 2722fi
2723
7751d4eb 2724AC_CACHE_CHECK([for pw_expire field in struct passwd],
2725 ac_cv_have_pw_expire_in_struct_passwd, [
2726 AC_TRY_COMPILE(
2727 [
2728#include <pwd.h>
2729 ],
2730 [ struct passwd p; p.pw_expire = 0; ],
2731 [ ac_cv_have_pw_expire_in_struct_passwd="yes" ],
2732 [ ac_cv_have_pw_expire_in_struct_passwd="no" ]
2733 )
2734])
2735if test "x$ac_cv_have_pw_expire_in_struct_passwd" = "xyes" ; then
3466e002 2736 AC_DEFINE(HAVE_PW_EXPIRE_IN_PASSWD, 1,
2737 [Define if your password has a pw_expire field])
7751d4eb 2738fi
2739
2740AC_CACHE_CHECK([for pw_change field in struct passwd],
2741 ac_cv_have_pw_change_in_struct_passwd, [
2742 AC_TRY_COMPILE(
2743 [
2744#include <pwd.h>
2745 ],
2746 [ struct passwd p; p.pw_change = 0; ],
2747 [ ac_cv_have_pw_change_in_struct_passwd="yes" ],
2748 [ ac_cv_have_pw_change_in_struct_passwd="no" ]
2749 )
2750])
2751if test "x$ac_cv_have_pw_change_in_struct_passwd" = "xyes" ; then
3466e002 2752 AC_DEFINE(HAVE_PW_CHANGE_IN_PASSWD, 1,
2753 [Define if your password has a pw_change field])
7751d4eb 2754fi
58d100bf 2755
637f9177 2756dnl make sure we're using the real structure members and not defines
6f34652e 2757AC_CACHE_CHECK([for msg_accrights field in struct msghdr],
2758 ac_cv_have_accrights_in_msghdr, [
1a01a50c 2759 AC_COMPILE_IFELSE(
6f34652e 2760 [
f95c8ce8 2761#include <sys/types.h>
6f34652e 2762#include <sys/socket.h>
2763#include <sys/uio.h>
637f9177 2764int main() {
2765#ifdef msg_accrights
1a01a50c 2766#error "msg_accrights is a macro"
637f9177 2767exit(1);
2768#endif
2769struct msghdr m;
2770m.msg_accrights = 0;
2771exit(0);
2772}
6f34652e 2773 ],
6f34652e 2774 [ ac_cv_have_accrights_in_msghdr="yes" ],
2775 [ ac_cv_have_accrights_in_msghdr="no" ]
2776 )
2777])
2778if test "x$ac_cv_have_accrights_in_msghdr" = "xyes" ; then
3466e002 2779 AC_DEFINE(HAVE_ACCRIGHTS_IN_MSGHDR, 1,
2780 [Define if your system uses access rights style
2781 file descriptor passing])
6f34652e 2782fi
2783
7176df4f 2784AC_CACHE_CHECK([for msg_control field in struct msghdr],
2785 ac_cv_have_control_in_msghdr, [
1a01a50c 2786 AC_COMPILE_IFELSE(
7176df4f 2787 [
f95c8ce8 2788#include <sys/types.h>
7176df4f 2789#include <sys/socket.h>
2790#include <sys/uio.h>
637f9177 2791int main() {
2792#ifdef msg_control
1a01a50c 2793#error "msg_control is a macro"
637f9177 2794exit(1);
2795#endif
2796struct msghdr m;
2797m.msg_control = 0;
2798exit(0);
2799}
7176df4f 2800 ],
7176df4f 2801 [ ac_cv_have_control_in_msghdr="yes" ],
2802 [ ac_cv_have_control_in_msghdr="no" ]
2803 )
2804])
2805if test "x$ac_cv_have_control_in_msghdr" = "xyes" ; then
3466e002 2806 AC_DEFINE(HAVE_CONTROL_IN_MSGHDR, 1,
2807 [Define if your system uses ancillary data style
2808 file descriptor passing])
7176df4f 2809fi
2810
58d100bf 2811AC_CACHE_CHECK([if libc defines __progname], ac_cv_libc_defines___progname, [
aff51935 2812 AC_TRY_LINK([],
2813 [ extern char *__progname; printf("%s", __progname); ],
58d100bf 2814 [ ac_cv_libc_defines___progname="yes" ],
2815 [ ac_cv_libc_defines___progname="no" ]
2816 )
2817])
2818if test "x$ac_cv_libc_defines___progname" = "xyes" ; then
3466e002 2819 AC_DEFINE(HAVE___PROGNAME, 1, [Define if libc defines __progname])
58d100bf 2820fi
8946db53 2821
c921ee00 2822AC_CACHE_CHECK([whether $CC implements __FUNCTION__], ac_cv_cc_implements___FUNCTION__, [
2823 AC_TRY_LINK([
2824#include <stdio.h>
aff51935 2825],
2826 [ printf("%s", __FUNCTION__); ],
c921ee00 2827 [ ac_cv_cc_implements___FUNCTION__="yes" ],
2828 [ ac_cv_cc_implements___FUNCTION__="no" ]
2829 )
2830])
2831if test "x$ac_cv_cc_implements___FUNCTION__" = "xyes" ; then
3466e002 2832 AC_DEFINE(HAVE___FUNCTION__, 1,
2833 [Define if compiler implements __FUNCTION__])
c921ee00 2834fi
2835
2836AC_CACHE_CHECK([whether $CC implements __func__], ac_cv_cc_implements___func__, [
2837 AC_TRY_LINK([
2838#include <stdio.h>
aff51935 2839],
2840 [ printf("%s", __func__); ],
c921ee00 2841 [ ac_cv_cc_implements___func__="yes" ],
2842 [ ac_cv_cc_implements___func__="no" ]
2843 )
2844])
2845if test "x$ac_cv_cc_implements___func__" = "xyes" ; then
3466e002 2846 AC_DEFINE(HAVE___func__, 1, [Define if compiler implements __func__])
c921ee00 2847fi
2848
9a406e1e 2849AC_CACHE_CHECK([whether va_copy exists], ac_cv_have_va_copy, [
2850 AC_TRY_LINK(
2851 [#include <stdarg.h>
2852 va_list x,y;],
2853 [va_copy(x,y);],
2854 [ ac_cv_have_va_copy="yes" ],
2855 [ ac_cv_have_va_copy="no" ]
2856 )
2857])
2858if test "x$ac_cv_have_va_copy" = "xyes" ; then
2859 AC_DEFINE(HAVE_VA_COPY, 1, [Define if va_copy exists])
2860fi
2861
2862AC_CACHE_CHECK([whether __va_copy exists], ac_cv_have___va_copy, [
2863 AC_TRY_LINK(
2864 [#include <stdarg.h>
2865 va_list x,y;],
2866 [__va_copy(x,y);],
2867 [ ac_cv_have___va_copy="yes" ],
2868 [ ac_cv_have___va_copy="no" ]
2869 )
2870])
2871if test "x$ac_cv_have___va_copy" = "xyes" ; then
2872 AC_DEFINE(HAVE___VA_COPY, 1, [Define if __va_copy exists])
2873fi
2874
1812a662 2875AC_CACHE_CHECK([whether getopt has optreset support],
2876 ac_cv_have_getopt_optreset, [
2877 AC_TRY_LINK(
2878 [
2879#include <getopt.h>
2880 ],
2881 [ extern int optreset; optreset = 0; ],
2882 [ ac_cv_have_getopt_optreset="yes" ],
2883 [ ac_cv_have_getopt_optreset="no" ]
2884 )
2885])
2886if test "x$ac_cv_have_getopt_optreset" = "xyes" ; then
3466e002 2887 AC_DEFINE(HAVE_GETOPT_OPTRESET, 1,
2888 [Define if your getopt(3) defines and uses optreset])
1812a662 2889fi
a0391976 2890
819b676f 2891AC_CACHE_CHECK([if libc defines sys_errlist], ac_cv_libc_defines_sys_errlist, [
aff51935 2892 AC_TRY_LINK([],
2893 [ extern const char *const sys_errlist[]; printf("%s", sys_errlist[0]);],
819b676f 2894 [ ac_cv_libc_defines_sys_errlist="yes" ],
2895 [ ac_cv_libc_defines_sys_errlist="no" ]
2896 )
2897])
2898if test "x$ac_cv_libc_defines_sys_errlist" = "xyes" ; then
3466e002 2899 AC_DEFINE(HAVE_SYS_ERRLIST, 1,
2900 [Define if your system defines sys_errlist[]])
819b676f 2901fi
2902
2903
416ed5a7 2904AC_CACHE_CHECK([if libc defines sys_nerr], ac_cv_libc_defines_sys_nerr, [
aff51935 2905 AC_TRY_LINK([],
2906 [ extern int sys_nerr; printf("%i", sys_nerr);],
416ed5a7 2907 [ ac_cv_libc_defines_sys_nerr="yes" ],
2908 [ ac_cv_libc_defines_sys_nerr="no" ]
2909 )
2910])
2911if test "x$ac_cv_libc_defines_sys_nerr" = "xyes" ; then
3466e002 2912 AC_DEFINE(HAVE_SYS_NERR, 1, [Define if your system defines sys_nerr])
416ed5a7 2913fi
2914
aff51935 2915SCARD_MSG="no"
295c8801 2916# Check whether user wants sectok support
2917AC_ARG_WITH(sectok,
2918 [ --with-sectok Enable smartcard support using libsectok],
d0b19c95 2919 [
2920 if test "x$withval" != "xno" ; then
2921 if test "x$withval" != "xyes" ; then
2922 CPPFLAGS="$CPPFLAGS -I${withval}"
2923 LDFLAGS="$LDFLAGS -L${withval}"
2924 if test ! -z "$need_dash_r" ; then
2925 LDFLAGS="$LDFLAGS -R${withval}"
2926 fi
2927 if test ! -z "$blibpath" ; then
2928 blibpath="$blibpath:${withval}"
2929 fi
2930 fi
2931 AC_CHECK_HEADERS(sectok.h)
2932 if test "$ac_cv_header_sectok_h" != yes; then
2933 AC_MSG_ERROR(Can't find sectok.h)
2934 fi
2935 AC_CHECK_LIB(sectok, sectok_open)
2936 if test "$ac_cv_lib_sectok_sectok_open" != yes; then
2937 AC_MSG_ERROR(Can't find libsectok)
2938 fi
3466e002 2939 AC_DEFINE(SMARTCARD, 1,
2940 [Define if you want smartcard support])
2941 AC_DEFINE(USE_SECTOK, 1,
2942 [Define if you want smartcard support
2943 using sectok])
aff51935 2944 SCARD_MSG="yes, using sectok"
295c8801 2945 fi
2946 ]
2947)
2948
2949# Check whether user wants OpenSC support
987b458f 2950OPENSC_CONFIG="no"
295c8801 2951AC_ARG_WITH(opensc,
e47fb473 2952 [ --with-opensc[[=PFX]] Enable smartcard support using OpenSC (optionally in PATH)],
987b458f 2953 [
2954 if test "x$withval" != "xno" ; then
2955 if test "x$withval" != "xyes" ; then
2956 OPENSC_CONFIG=$withval/bin/opensc-config
2957 else
2958 AC_PATH_PROG(OPENSC_CONFIG, opensc-config, no)
2959 fi
2960 if test "$OPENSC_CONFIG" != "no"; then
2961 LIBOPENSC_CFLAGS=`$OPENSC_CONFIG --cflags`
2962 LIBOPENSC_LIBS=`$OPENSC_CONFIG --libs`
2963 CPPFLAGS="$CPPFLAGS $LIBOPENSC_CFLAGS"
2964 LDFLAGS="$LDFLAGS $LIBOPENSC_LIBS"
2965 AC_DEFINE(SMARTCARD)
3466e002 2966 AC_DEFINE(USE_OPENSC, 1,
2967 [Define if you want smartcard support
2968 using OpenSC])
987b458f 2969 SCARD_MSG="yes, using OpenSC"
2970 fi
2971 fi
2972 ]
2973)
d0b19c95 2974
c31dc31c 2975# Check libraries needed by DNS fingerprint support
aff51935 2976AC_SEARCH_LIBS(getrrsetbyname, resolv,
3466e002 2977 [AC_DEFINE(HAVE_GETRRSETBYNAME, 1,
2978 [Define if getrrsetbyname() exists])],
3e05e934 2979 [
c31dc31c 2980 # Needed by our getrrsetbyname()
2981 AC_SEARCH_LIBS(res_query, resolv)
2982 AC_SEARCH_LIBS(dn_expand, resolv)
dabb524a 2983 AC_MSG_CHECKING(if res_query will link)
2984 AC_TRY_LINK_FUNC(res_query, AC_MSG_RESULT(yes),
2985 [AC_MSG_RESULT(no)
2986 saved_LIBS="$LIBS"
2987 LIBS="$LIBS -lresolv"
2988 AC_MSG_CHECKING(for res_query in -lresolv)
2989 AC_LINK_IFELSE([
2990#include <resolv.h>
2991int main()
2992{
2993 res_query (0, 0, 0, 0, 0);
2994 return 0;
2995}
2996 ],
2997 [LIBS="$LIBS -lresolv"
2998 AC_MSG_RESULT(yes)],
2999 [LIBS="$saved_LIBS"
3000 AC_MSG_RESULT(no)])
3001 ])
c31dc31c 3002 AC_CHECK_FUNCS(_getshort _getlong)
1c829da5 3003 AC_CHECK_DECLS([_getshort, _getlong], , ,
b5765e1d 3004 [#include <sys/types.h>
3005 #include <arpa/nameser.h>])
c31dc31c 3006 AC_CHECK_MEMBER(HEADER.ad,
3466e002 3007 [AC_DEFINE(HAVE_HEADER_AD, 1,
3008 [Define if HEADER.ad exists in arpa/nameser.h])],,
c31dc31c 3009 [#include <arpa/nameser.h>])
3010 ])
3e05e934 3011
ef4d1846 3012# Check whether user wants SELinux support
3013SELINUX_MSG="no"
3014LIBSELINUX=""
3015AC_ARG_WITH(selinux,
3016 [ --with-selinux Enable SELinux support],
3017 [ if test "x$withval" != "xno" ; then
3018 AC_DEFINE(WITH_SELINUX,1,[Define if you want SELinux support.])
3019 SELINUX_MSG="yes"
3020 AC_CHECK_HEADER([selinux/selinux.h], ,
3021 AC_MSG_ERROR(SELinux support requires selinux.h header))
3022 AC_CHECK_LIB(selinux, setexeccon, [ LIBSELINUX="-lselinux" ],
3023 AC_MSG_ERROR(SELinux support requires libselinux library))
3024 AC_CHECK_FUNCS(getseuserbyname get_default_context_with_level)
3025 fi ]
3026)
3027AC_SUBST(LIBSELINUX)
3028
12928e80 3029# Check whether user wants Kerberos 5 support
aff51935 3030KRB5_MSG="no"
12928e80 3031AC_ARG_WITH(kerberos5,
aff51935 3032 [ --with-kerberos5=PATH Enable Kerberos 5 support],
5585c441 3033 [ if test "x$withval" != "xno" ; then
3034 if test "x$withval" = "xyes" ; then
3035 KRB5ROOT="/usr/local"
3036 else
3037 KRB5ROOT=${withval}
3038 fi
3039
3466e002 3040 AC_DEFINE(KRB5, 1, [Define if you want Kerberos 5 support])
5585c441 3041 KRB5_MSG="yes"
3042
3043 AC_MSG_CHECKING(for krb5-config)
3044 if test -x $KRB5ROOT/bin/krb5-config ; then
3045 KRB5CONF=$KRB5ROOT/bin/krb5-config
3046 AC_MSG_RESULT($KRB5CONF)
3047
3048 AC_MSG_CHECKING(for gssapi support)
3049 if $KRB5CONF | grep gssapi >/dev/null ; then
3050 AC_MSG_RESULT(yes)
3466e002 3051 AC_DEFINE(GSSAPI, 1,
3052 [Define this if you want GSSAPI
3053 support in the version 2 protocol])
071970fb 3054 k5confopts=gssapi
aff51935 3055 else
5585c441 3056 AC_MSG_RESULT(no)
071970fb 3057 k5confopts=""
aff51935 3058 fi
071970fb 3059 K5CFLAGS="`$KRB5CONF --cflags $k5confopts`"
3060 K5LIBS="`$KRB5CONF --libs $k5confopts`"
5585c441 3061 CPPFLAGS="$CPPFLAGS $K5CFLAGS"
5585c441 3062 AC_MSG_CHECKING(whether we are using Heimdal)
3063 AC_TRY_COMPILE([ #include <krb5.h> ],
3064 [ char *tmp = heimdal_version; ],
3065 [ AC_MSG_RESULT(yes)
3466e002 3066 AC_DEFINE(HEIMDAL, 1,
3067 [Define this if you are using the
3068 Heimdal version of Kerberos V5]) ],
5585c441 3069 AC_MSG_RESULT(no)
3070 )
3071 else
3072 AC_MSG_RESULT(no)
12928e80 3073 CPPFLAGS="$CPPFLAGS -I${KRB5ROOT}/include"
aff51935 3074 LDFLAGS="$LDFLAGS -L${KRB5ROOT}/lib"
aff51935 3075 AC_MSG_CHECKING(whether we are using Heimdal)
3076 AC_TRY_COMPILE([ #include <krb5.h> ],
3077 [ char *tmp = heimdal_version; ],
3078 [ AC_MSG_RESULT(yes)
3079 AC_DEFINE(HEIMDAL)
41707f74 3080 K5LIBS="-lkrb5 -ldes"
3081 K5LIBS="$K5LIBS -lcom_err -lasn1"
82f4e93d 3082 AC_CHECK_LIB(roken, net_write,
41707f74 3083 [K5LIBS="$K5LIBS -lroken"])
aff51935 3084 ],
3085 [ AC_MSG_RESULT(no)
3086 K5LIBS="-lkrb5 -lk5crypto -lcom_err"
3087 ]
3088 )
4e00038c 3089 AC_SEARCH_LIBS(dn_expand, resolv)
12928e80 3090
749560dd 3091 AC_CHECK_LIB(gssapi,gss_init_sec_context,
3092 [ AC_DEFINE(GSSAPI)
3093 K5LIBS="-lgssapi $K5LIBS" ],
3094 [ AC_CHECK_LIB(gssapi_krb5,gss_init_sec_context,
3095 [ AC_DEFINE(GSSAPI)
aff51935 3096 K5LIBS="-lgssapi_krb5 $K5LIBS" ],
749560dd 3097 AC_MSG_WARN([Cannot find any suitable gss-api library - build may fail]),
3098 $K5LIBS)
3099 ],
3100 $K5LIBS)
82f4e93d 3101
749560dd 3102 AC_CHECK_HEADER(gssapi.h, ,
3103 [ unset ac_cv_header_gssapi_h
aff51935 3104 CPPFLAGS="$CPPFLAGS -I${KRB5ROOT}/include/gssapi"
749560dd 3105 AC_CHECK_HEADERS(gssapi.h, ,
3106 AC_MSG_WARN([Cannot find any suitable gss-api header - build may fail])
aff51935 3107 )
749560dd 3108 ]
3109 )
3110
3111 oldCPP="$CPPFLAGS"
3112 CPPFLAGS="$CPPFLAGS -I${KRB5ROOT}/include/gssapi"
3113 AC_CHECK_HEADER(gssapi_krb5.h, ,
3114 [ CPPFLAGS="$oldCPP" ])
3115
aff51935 3116 fi
5585c441 3117 if test ! -z "$need_dash_r" ; then
3118 LDFLAGS="$LDFLAGS -R${KRB5ROOT}/lib"
3119 fi
3120 if test ! -z "$blibpath" ; then
3121 blibpath="$blibpath:${KRB5ROOT}/lib"
3122 fi
071970fb 3123
f5555364 3124 AC_CHECK_HEADERS(gssapi.h gssapi/gssapi.h)
3125 AC_CHECK_HEADERS(gssapi_krb5.h gssapi/gssapi_krb5.h)
3126 AC_CHECK_HEADERS(gssapi_generic.h gssapi/gssapi_generic.h)
071970fb 3127
f5555364 3128 LIBS="$LIBS $K5LIBS"
3466e002 3129 AC_SEARCH_LIBS(k_hasafs, kafs, AC_DEFINE(USE_AFS, 1,
3130 [Define this if you want to use libkafs' AFS support]))
f5555364 3131 fi
071970fb 3132 ]
12928e80 3133)
b5b68128 3134
a0391976 3135# Looking for programs, paths and files
a0391976 3136
ecac8ee5 3137PRIVSEP_PATH=/var/empty
3138AC_ARG_WITH(privsep-path,
cda1ebcb 3139 [ --with-privsep-path=xxx Path for privilege separation chroot (default=/var/empty)],
ecac8ee5 3140 [
6cf0200f 3141 if test -n "$withval" && test "x$withval" != "xno" && \
3142 test "x${withval}" != "xyes"; then
ecac8ee5 3143 PRIVSEP_PATH=$withval
3144 fi
3145 ]
3146)
3147AC_SUBST(PRIVSEP_PATH)
3148
a0391976 3149AC_ARG_WITH(xauth,
3150 [ --with-xauth=PATH Specify path to xauth program ],
3151 [
6cf0200f 3152 if test -n "$withval" && test "x$withval" != "xno" && \
3153 test "x${withval}" != "xyes"; then
cbd7492e 3154 xauth_path=$withval
a0391976 3155 fi
3156 ],
3157 [
2bf42e4a 3158 TestPath="$PATH"
3159 TestPath="${TestPath}${PATH_SEPARATOR}/usr/X/bin"
3160 TestPath="${TestPath}${PATH_SEPARATOR}/usr/bin/X11"
3161 TestPath="${TestPath}${PATH_SEPARATOR}/usr/X11R6/bin"
3162 TestPath="${TestPath}${PATH_SEPARATOR}/usr/openwin/bin"
3163 AC_PATH_PROG(xauth_path, xauth, , $TestPath)
e5fe9a1f 3164 if (test ! -z "$xauth_path" && test -x "/usr/openwin/bin/xauth") ; then
a0391976 3165 xauth_path="/usr/openwin/bin/xauth"
3166 fi
3167 ]
3168)
3169
65a4b4af 3170STRIP_OPT=-s
3171AC_ARG_ENABLE(strip,
3172 [ --disable-strip Disable calling strip(1) on install],
3173 [
3174 if test "x$enableval" = "xno" ; then
3175 STRIP_OPT=
3176 fi
3177 ]
3178)
3179AC_SUBST(STRIP_OPT)
3180
b3ec54b4 3181if test -z "$xauth_path" ; then
3182 XAUTH_PATH="undefined"
3183 AC_SUBST(XAUTH_PATH)
3184else
3466e002 3185 AC_DEFINE_UNQUOTED(XAUTH_PATH, "$xauth_path",
3186 [Define if xauth is found in your path])
b3ec54b4 3187 XAUTH_PATH=$xauth_path
3188 AC_SUBST(XAUTH_PATH)
a0391976 3189fi
a0391976 3190
3191# Check for mail directory (last resort if we cannot get it from headers)
3192if test ! -z "$MAIL" ; then
3193 maildir=`dirname $MAIL`
3466e002 3194 AC_DEFINE_UNQUOTED(MAIL_DIRECTORY, "$maildir",
3195 [Set this to your mail directory if you don't have maillock.h])
a0391976 3196fi
3197
479cece8 3198if test ! -z "$cross_compiling" && test "x$cross_compiling" = "xyes"; then
1a01a50c 3199 AC_MSG_WARN([cross compiling: Disabling /dev/ptmx test])
3200 disable_ptmx_check=yes
3201fi
a0391976 3202if test -z "$no_dev_ptmx" ; then
6e879cb4 3203 if test "x$disable_ptmx_check" != "xyes" ; then
aff51935 3204 AC_CHECK_FILE("/dev/ptmx",
6e879cb4 3205 [
3466e002 3206 AC_DEFINE_UNQUOTED(HAVE_DEV_PTMX, 1,
3207 [Define if you have /dev/ptmx])
6e879cb4 3208 have_dev_ptmx=1
3209 ]
3210 )
3211 fi
3276571c 3212fi
1a01a50c 3213
479cece8 3214if test ! -z "$cross_compiling" && test "x$cross_compiling" != "xyes"; then
1a01a50c 3215 AC_CHECK_FILE("/dev/ptc",
3216 [
3466e002 3217 AC_DEFINE_UNQUOTED(HAVE_DEV_PTS_AND_PTC, 1,
3218 [Define if you have /dev/ptc])
1a01a50c 3219 have_dev_ptc=1
3220 ]
3221 )
3222else
3223 AC_MSG_WARN([cross compiling: Disabling /dev/ptc test])
3224fi
3276571c 3225
a0391976 3226# Options from here on. Some of these are preset by platform above
fdf6b7aa 3227AC_ARG_WITH(mantype,
5d97cfbf 3228 [ --with-mantype=man|cat|doc Set man page type],
c54a6257 3229 [
5d97cfbf 3230 case "$withval" in
3231 man|cat|doc)
3232 MANTYPE=$withval
3233 ;;
3234 *)
3235 AC_MSG_ERROR(invalid man type: $withval)
3236 ;;
3237 esac
c54a6257 3238 ]
3239)
e0c4d3ac 3240if test -z "$MANTYPE"; then
2bf42e4a 3241 TestPath="/usr/bin${PATH_SEPARATOR}/usr/ucb"
3242 AC_PATH_PROGS(NROFF, nroff awf, /bin/false, $TestPath)
e0c4d3ac 3243 if ${NROFF} -mdoc ${srcdir}/ssh.1 >/dev/null 2>&1; then
3244 MANTYPE=doc
3245 elif ${NROFF} -man ${srcdir}/ssh.1 >/dev/null 2>&1; then
3246 MANTYPE=man
3247 else
3248 MANTYPE=cat
3249 fi
3250fi
c54a6257 3251AC_SUBST(MANTYPE)
e0c4d3ac 3252if test "$MANTYPE" = "doc"; then
3253 mansubdir=man;
3254else
3255 mansubdir=$MANTYPE;
3256fi
3257AC_SUBST(mansubdir)
0bc5b6fb 3258
a0391976 3259# Check whether to enable MD5 passwords
aff51935 3260MD5_MSG="no"
2ddcfdf3 3261AC_ARG_WITH(md5-passwords,
caf3bc51 3262 [ --with-md5-passwords Enable use of MD5 passwords],
0bc5b6fb 3263 [
bcf36c78 3264 if test "x$withval" != "xno" ; then
3466e002 3265 AC_DEFINE(HAVE_MD5_PASSWORDS, 1,
3266 [Define if you want to allow MD5 passwords])
aff51935 3267 MD5_MSG="yes"
0bc5b6fb 3268 fi
3269 ]
caf3bc51 3270)
3271
a0391976 3272# Whether to disable shadow password support
a7effaac 3273AC_ARG_WITH(shadow,
3274 [ --without-shadow Disable shadow password support],
3275 [
82f4e93d 3276 if test "x$withval" = "xno" ; then
a7effaac 3277 AC_DEFINE(DISABLE_SHADOW)
4cb5ffa0 3278 disable_shadow=yes
a7effaac 3279 fi
3280 ]
3281)
3282
4cb5ffa0 3283if test -z "$disable_shadow" ; then
3284 AC_MSG_CHECKING([if the systems has expire shadow information])
3285 AC_TRY_COMPILE(
3286 [
3287#include <sys/types.h>
3288#include <shadow.h>
3289 struct spwd sp;
3290 ],[ sp.sp_expire = sp.sp_lstchg = sp.sp_inact = 0; ],
3291 [ sp_expire_available=yes ], []
3292 )
3293
3294 if test "x$sp_expire_available" = "xyes" ; then
3295 AC_MSG_RESULT(yes)
3466e002 3296 AC_DEFINE(HAS_SHADOW_EXPIRE, 1,
3297 [Define if you want to use shadow password expire field])
4cb5ffa0 3298 else
3299 AC_MSG_RESULT(no)
3300 fi
3301fi
3302
a0391976 3303# Use ip address instead of hostname in $DISPLAY
44839801 3304if test ! -z "$IPADDR_IN_DISPLAY" ; then
3305 DISPLAY_HACK_MSG="yes"
3466e002 3306 AC_DEFINE(IPADDR_IN_DISPLAY, 1,
3307 [Define if you need to use IP address
3308 instead of hostname in $DISPLAY])
44839801 3309else
aff51935 3310 DISPLAY_HACK_MSG="no"
44839801 3311 AC_ARG_WITH(ipaddr-display,
3312 [ --with-ipaddr-display Use ip address instead of hostname in \$DISPLAY],
3313 [
82f4e93d 3314 if test "x$withval" != "xno" ; then
44839801 3315 AC_DEFINE(IPADDR_IN_DISPLAY)
aff51935 3316 DISPLAY_HACK_MSG="yes"
44839801 3317 fi
3318 ]
3319 )
3320fi
a7effaac 3321
95b99395 3322# check for /etc/default/login and use it if present.
daa41e62 3323AC_ARG_ENABLE(etc-default-login,
6ff3d0dc 3324 [ --disable-etc-default-login Disable using PATH from /etc/default/login [no]],
694d0cef 3325 [ if test "x$enableval" = "xno"; then
3326 AC_MSG_NOTICE([/etc/default/login handling disabled])
3327 etc_default_login=no
3328 else
3329 etc_default_login=yes
3330 fi ],
b0e7249f 3331 [ if test ! -z "$cross_compiling" && test "x$cross_compiling" = "xyes";
3332 then
3333 AC_MSG_WARN([cross compiling: not checking /etc/default/login])
3334 etc_default_login=no
3335 else
3336 etc_default_login=yes
3337 fi ]
694d0cef 3338)
95b99395 3339
694d0cef 3340if test "x$etc_default_login" != "xno"; then
3341 AC_CHECK_FILE("/etc/default/login",
3342 [ external_path_file=/etc/default/login ])
b0e7249f 3343 if test "x$external_path_file" = "x/etc/default/login"; then
3466e002 3344 AC_DEFINE(HAVE_ETC_DEFAULT_LOGIN, 1,
3345 [Define if your system has /etc/default/login])
1a01a50c 3346 fi
694d0cef 3347fi
95b99395 3348
8d184c09 3349dnl BSD systems use /etc/login.conf so --with-default-path= has no effect
4b492aab 3350if test $ac_cv_func_login_getcapbool = "yes" && \
3351 test $ac_cv_header_login_cap_h = "yes" ; then
95b99395 3352 external_path_file=/etc/login.conf
8d184c09 3353fi
95b99395 3354
a0391976 3355# Whether to mess with the default path
aff51935 3356SERVER_PATH_MSG="(default)"
c43d69a9 3357AC_ARG_WITH(default-path,
75817f90 3358 [ --with-default-path= Specify default \$PATH environment for server],
cb807f40 3359 [
95b99395 3360 if test "x$external_path_file" = "x/etc/login.conf" ; then
8d184c09 3361 AC_MSG_WARN([
3362--with-default-path=PATH has no effect on this system.
3363Edit /etc/login.conf instead.])
82f4e93d 3364 elif test "x$withval" != "xno" ; then
89bbd457 3365 if test ! -z "$external_path_file" ; then
95b99395 3366 AC_MSG_WARN([
3367--with-default-path=PATH will only be used if PATH is not defined in
3368$external_path_file .])
3369 fi
b2d818e6 3370 user_path="$withval"
aff51935 3371 SERVER_PATH_MSG="$withval"
cb807f40 3372 fi
b2d818e6 3373 ],
95b99395 3374 [ if test "x$external_path_file" = "x/etc/login.conf" ; then
3375 AC_MSG_WARN([Make sure the path to scp is in /etc/login.conf])
8d184c09 3376 else
89bbd457 3377 if test ! -z "$external_path_file" ; then
95b99395 3378 AC_MSG_WARN([
3379If PATH is defined in $external_path_file, ensure the path to scp is included,
3380otherwise scp will not work.])
3381 fi
b0e7249f 3382 AC_RUN_IFELSE(
3383 [AC_LANG_SOURCE([[
b2d818e6 3384/* find out what STDPATH is */
3385#include <stdio.h>
b2d818e6 3386#ifdef HAVE_PATHS_H
3387# include <paths.h>
3388#endif
3389#ifndef _PATH_STDPATH
d9a4e55b 3390# ifdef _PATH_USERPATH /* Irix */
3391# define _PATH_STDPATH _PATH_USERPATH
3392# else
3393# define _PATH_STDPATH "/usr/bin:/bin:/usr/sbin:/sbin"
3394# endif
b2d818e6 3395#endif
3396#include <sys/types.h>
3397#include <sys/stat.h>
3398#include <fcntl.h>
3399#define DATA "conftest.stdpath"
3400
3401main()
3402{
3403 FILE *fd;
3404 int rc;
82f4e93d 3405
b2d818e6 3406 fd = fopen(DATA,"w");
3407 if(fd == NULL)
3408 exit(1);
82f4e93d 3409
b2d818e6 3410 if ((rc = fprintf(fd,"%s", _PATH_STDPATH)) < 0)
3411 exit(1);
3412
3413 exit(0);
3414}
b0e7249f 3415 ]])],
3416 [ user_path=`cat conftest.stdpath` ],
b2d818e6 3417 [ user_path="/usr/bin:/bin:/usr/sbin:/sbin" ],
3418 [ user_path="/usr/bin:/bin:/usr/sbin:/sbin" ]
3419 )
3420# make sure $bindir is in USER_PATH so scp will work
3421 t_bindir=`eval echo ${bindir}`
3422 case $t_bindir in
3423 NONE/*) t_bindir=`echo $t_bindir | sed "s~NONE~$prefix~"` ;;
3424 esac
3425 case $t_bindir in
3426 NONE/*) t_bindir=`echo $t_bindir | sed "s~NONE~$ac_default_prefix~"` ;;
3427 esac
3428 echo $user_path | grep ":$t_bindir" > /dev/null 2>&1
3429 if test $? -ne 0 ; then
3430 echo $user_path | grep "^$t_bindir" > /dev/null 2>&1
3431 if test $? -ne 0 ; then
3432 user_path=$user_path:$t_bindir
3433 AC_MSG_RESULT(Adding $t_bindir to USER_PATH so scp will work)
3434 fi
3435 fi
8d184c09 3436 fi ]
cb807f40 3437)
95b99395 3438if test "x$external_path_file" != "x/etc/login.conf" ; then
3466e002 3439 AC_DEFINE_UNQUOTED(USER_PATH, "$user_path", [Specify default $PATH])
8d184c09 3440 AC_SUBST(user_path)
3441fi
cb807f40 3442
06617857 3443# Set superuser path separately to user path
06617857 3444AC_ARG_WITH(superuser-path,
3445 [ --with-superuser-path= Specify different path for super-user],
3446 [
6cf0200f 3447 if test -n "$withval" && test "x$withval" != "xno" && \
3448 test "x${withval}" != "xyes"; then
3466e002 3449 AC_DEFINE_UNQUOTED(SUPERUSER_PATH, "$withval",
3450 [Define if you want a different $PATH
3451 for the superuser])
06617857 3452 superuser_path=$withval
3453 fi
3454 ]
3455)
3456
3457
58d100bf 3458AC_MSG_CHECKING([if we need to convert IPv4 in IPv6-mapped addresses])
aff51935 3459IPV4_IN6_HACK_MSG="no"
80faa19f 3460AC_ARG_WITH(4in6,
3461 [ --with-4in6 Check for and convert IPv4 in IPv6 mapped addresses],
3462 [
3463 if test "x$withval" != "xno" ; then
3464 AC_MSG_RESULT(yes)
3466e002 3465 AC_DEFINE(IPV4_IN_IPV6, 1,
3466 [Detect IPv4 in IPv6 mapped addresses
3467 and treat as IPv4])
aff51935 3468 IPV4_IN6_HACK_MSG="yes"
80faa19f 3469 else
3470 AC_MSG_RESULT(no)
3471 fi
3472 ],[
3473 if test "x$inet6_default_4in6" = "xyes"; then
3474 AC_MSG_RESULT([yes (default)])
3475 AC_DEFINE(IPV4_IN_IPV6)
aff51935 3476 IPV4_IN6_HACK_MSG="yes"
80faa19f 3477 else
3478 AC_MSG_RESULT([no (default)])
3479 fi
3480 ]
3481)
3482
af774732 3483# Whether to enable BSD auth support
f1b0ecc3 3484BSD_AUTH_MSG=no
af774732 3485AC_ARG_WITH(bsd-auth,
3486 [ --with-bsd-auth Enable BSD auth support],
3487 [
82f4e93d 3488 if test "x$withval" != "xno" ; then
3466e002 3489 AC_DEFINE(BSD_AUTH, 1,
3490 [Define if you have BSD auth support])
f1b0ecc3 3491 BSD_AUTH_MSG=yes
af774732 3492 fi
3493 ]
3494)
3495
a0391976 3496# Where to place sshd.pid
19d9ac2a 3497piddir=/var/run
81dadca3 3498# make sure the directory exists
82f4e93d 3499if test ! -d $piddir ; then
81dadca3 3500 piddir=`eval echo ${sysconfdir}`
3501 case $piddir in
aff51935 3502 NONE/*) piddir=`echo $piddir | sed "s~NONE~$ac_default_prefix~"` ;;
81dadca3 3503 esac
3504fi
3505
47e45e44 3506AC_ARG_WITH(pid-dir,
3507 [ --with-pid-dir=PATH Specify location of ssh.pid file],
3508 [
6cf0200f 3509 if test -n "$withval" && test "x$withval" != "xno" && \
3510 test "x${withval}" != "xyes"; then
19d9ac2a 3511 piddir=$withval
82f4e93d 3512 if test ! -d $piddir ; then
81dadca3 3513 AC_MSG_WARN([** no $piddir directory on this system **])
3514 fi
47e45e44 3515 fi
3516 ]
3517)
b7a87eea 3518
3466e002 3519AC_DEFINE_UNQUOTED(_PATH_SSH_PIDDIR, "$piddir", [Specify location of ssh.pid])
19d9ac2a 3520AC_SUBST(piddir)
47e45e44 3521
1d7b9b20 3522dnl allow user to disable some login recording features
3523AC_ARG_ENABLE(lastlog,
bfd550a2 3524 [ --disable-lastlog disable use of lastlog even if detected [no]],
ddb154b3 3525 [
3526 if test "x$enableval" = "xno" ; then
3527 AC_DEFINE(DISABLE_LASTLOG)
3528 fi
3529 ]
1d7b9b20 3530)
3531AC_ARG_ENABLE(utmp,
bfd550a2 3532 [ --disable-utmp disable use of utmp even if detected [no]],
ddb154b3 3533 [
3534 if test "x$enableval" = "xno" ; then
3535 AC_DEFINE(DISABLE_UTMP)
3536 fi
3537 ]
1d7b9b20 3538)
3539AC_ARG_ENABLE(utmpx,
bfd550a2 3540 [ --disable-utmpx disable use of utmpx even if detected [no]],
ddb154b3 3541 [
3542 if test "x$enableval" = "xno" ; then
3466e002 3543 AC_DEFINE(DISABLE_UTMPX, 1,
3544 [Define if you don't want to use utmpx])
ddb154b3 3545 fi
3546 ]
1d7b9b20 3547)
3548AC_ARG_ENABLE(wtmp,
bfd550a2 3549 [ --disable-wtmp disable use of wtmp even if detected [no]],
ddb154b3 3550 [
3551 if test "x$enableval" = "xno" ; then
3552 AC_DEFINE(DISABLE_WTMP)
3553 fi
3554 ]
1d7b9b20 3555)
3556AC_ARG_ENABLE(wtmpx,
bfd550a2 3557 [ --disable-wtmpx disable use of wtmpx even if detected [no]],
ddb154b3 3558 [
3559 if test "x$enableval" = "xno" ; then
3466e002 3560 AC_DEFINE(DISABLE_WTMPX, 1,
3561 [Define if you don't want to use wtmpx])
ddb154b3 3562 fi
3563 ]
1d7b9b20 3564)
3565AC_ARG_ENABLE(libutil,
bfd550a2 3566 [ --disable-libutil disable use of libutil (login() etc.) [no]],
ddb154b3 3567 [
3568 if test "x$enableval" = "xno" ; then
3569 AC_DEFINE(DISABLE_LOGIN)
3570 fi
3571 ]
1d7b9b20 3572)
3573AC_ARG_ENABLE(pututline,
bfd550a2 3574 [ --disable-pututline disable use of pututline() etc. ([uw]tmp) [no]],
ddb154b3 3575 [
3576 if test "x$enableval" = "xno" ; then
3466e002 3577 AC_DEFINE(DISABLE_PUTUTLINE, 1,
3578 [Define if you don't want to use pututline()
3579 etc. to write [uw]tmp])
ddb154b3 3580 fi
3581 ]
1d7b9b20 3582)
3583AC_ARG_ENABLE(pututxline,
bfd550a2 3584 [ --disable-pututxline disable use of pututxline() etc. ([uw]tmpx) [no]],
ddb154b3 3585 [
3586 if test "x$enableval" = "xno" ; then
3466e002 3587 AC_DEFINE(DISABLE_PUTUTXLINE, 1,
3588 [Define if you don't want to use pututxline()
3589 etc. to write [uw]tmpx])
ddb154b3 3590 fi
3591 ]
1d7b9b20 3592)
3593AC_ARG_WITH(lastlog,
bfd550a2 3594 [ --with-lastlog=FILE|DIR specify lastlog location [common locations]],
8c89dd2b 3595 [
82f4e93d 3596 if test "x$withval" = "xno" ; then
8c89dd2b 3597 AC_DEFINE(DISABLE_LASTLOG)
6cf0200f 3598 elif test -n "$withval" && test "x${withval}" != "xyes"; then
8c89dd2b 3599 conf_lastlog_location=$withval
3600 fi
3601 ]
3602)
1d7b9b20 3603
3604dnl lastlog, [uw]tmpx? detection
3605dnl NOTE: set the paths in the platform section to avoid the
3606dnl need for command-line parameters
3607dnl lastlog and [uw]tmp are subject to a file search if all else fails
3608
3609dnl lastlog detection
3610dnl NOTE: the code itself will detect if lastlog is a directory
3611AC_MSG_CHECKING([if your system defines LASTLOG_FILE])
3612AC_TRY_COMPILE([
3613#include <sys/types.h>
3614#include <utmp.h>
3615#ifdef HAVE_LASTLOG_H
3616# include <lastlog.h>
3617#endif
d7c0f3d5 3618#ifdef HAVE_PATHS_H
1d7b9b20 3619# include <paths.h>
41cb4569 3620#endif
3621#ifdef HAVE_LOGIN_H
3622# include <login.h>
1d7b9b20 3623#endif
3624 ],
3625 [ char *lastlog = LASTLOG_FILE; ],
3626 [ AC_MSG_RESULT(yes) ],
d7c0f3d5 3627 [
3628 AC_MSG_RESULT(no)
3629 AC_MSG_CHECKING([if your system defines _PATH_LASTLOG])
3630 AC_TRY_COMPILE([
3631#include <sys/types.h>
3632#include <utmp.h>
3633#ifdef HAVE_LASTLOG_H
3634# include <lastlog.h>
3635#endif
3636#ifdef HAVE_PATHS_H
3637# include <paths.h>
3638#endif
3639 ],
3640 [ char *lastlog = _PATH_LASTLOG; ],
3641 [ AC_MSG_RESULT(yes) ],
3642 [
f282b668 3643 AC_MSG_RESULT(no)
d7c0f3d5 3644 system_lastlog_path=no
3645 ])
3646 ]
1d7b9b20 3647)
d7c0f3d5 3648
1d7b9b20 3649if test -z "$conf_lastlog_location"; then
3650 if test x"$system_lastlog_path" = x"no" ; then
3651 for f in /var/log/lastlog /usr/adm/lastlog /var/adm/lastlog /etc/security/lastlog ; do
e5fe9a1f 3652 if (test -d "$f" || test -f "$f") ; then
1d7b9b20 3653 conf_lastlog_location=$f
3654 fi
3655 done
3656 if test -z "$conf_lastlog_location"; then
f8119cef 3657 AC_MSG_WARN([** Cannot find lastlog **])
3658 dnl Don't define DISABLE_LASTLOG - that means we don't try wtmp/wtmpx
1d7b9b20 3659 fi
3660 fi
3661fi
3662
3663if test -n "$conf_lastlog_location"; then
3466e002 3664 AC_DEFINE_UNQUOTED(CONF_LASTLOG_FILE, "$conf_lastlog_location",
3665 [Define if you want to specify the path to your lastlog file])
82f4e93d 3666fi
1d7b9b20 3667
3668dnl utmp detection
3669AC_MSG_CHECKING([if your system defines UTMP_FILE])
3670AC_TRY_COMPILE([
3671#include <sys/types.h>
3672#include <utmp.h>
d7c0f3d5 3673#ifdef HAVE_PATHS_H
1d7b9b20 3674# include <paths.h>
3675#endif
3676 ],
3677 [ char *utmp = UTMP_FILE; ],
3678 [ AC_MSG_RESULT(yes) ],
3679 [ AC_MSG_RESULT(no)
3680 system_utmp_path=no ]
3681)
3682if test -z "$conf_utmp_location"; then
3683 if test x"$system_utmp_path" = x"no" ; then
3684 for f in /etc/utmp /usr/adm/utmp /var/run/utmp; do
3685 if test -f $f ; then
3686 conf_utmp_location=$f
3687 fi
3688 done
3689 if test -z "$conf_utmp_location"; then
3690 AC_DEFINE(DISABLE_UTMP)
3691 fi
3692 fi
3693fi
3694if test -n "$conf_utmp_location"; then
3466e002 3695 AC_DEFINE_UNQUOTED(CONF_UTMP_FILE, "$conf_utmp_location",
3696 [Define if you want to specify the path to your utmp file])
82f4e93d 3697fi
1d7b9b20 3698
3699dnl wtmp detection
3700AC_MSG_CHECKING([if your system defines WTMP_FILE])
3701AC_TRY_COMPILE([
3702#include <sys/types.h>
3703#include <utmp.h>
d7c0f3d5 3704#ifdef HAVE_PATHS_H
1d7b9b20 3705# include <paths.h>
3706#endif
3707 ],
3708 [ char *wtmp = WTMP_FILE; ],
3709 [ AC_MSG_RESULT(yes) ],
3710 [ AC_MSG_RESULT(no)
3711 system_wtmp_path=no ]
3712)
3713if test -z "$conf_wtmp_location"; then
3714 if test x"$system_wtmp_path" = x"no" ; then
3715 for f in /usr/adm/wtmp /var/log/wtmp; do
3716 if test -f $f ; then
3717 conf_wtmp_location=$f
3718 fi
3719 done
3720 if test -z "$conf_wtmp_location"; then
3721 AC_DEFINE(DISABLE_WTMP)
3722 fi
3723 fi
3724fi
3725if test -n "$conf_wtmp_location"; then
3466e002 3726 AC_DEFINE_UNQUOTED(CONF_WTMP_FILE, "$conf_wtmp_location",
3727 [Define if you want to specify the path to your wtmp file])
82f4e93d 3728fi
1d7b9b20 3729
3730
3731dnl utmpx detection - I don't know any system so perverse as to require
3732dnl utmpx, but not define UTMPX_FILE (ditto wtmpx.) No doubt it's out
3733dnl there, though.
3734AC_MSG_CHECKING([if your system defines UTMPX_FILE])
3735AC_TRY_COMPILE([
3736#include <sys/types.h>
3737#include <utmp.h>
3738#ifdef HAVE_UTMPX_H
3739#include <utmpx.h>
3740#endif
d7c0f3d5 3741#ifdef HAVE_PATHS_H
1d7b9b20 3742# include <paths.h>
3743#endif
3744 ],
3745 [ char *utmpx = UTMPX_FILE; ],
3746 [ AC_MSG_RESULT(yes) ],
3747 [ AC_MSG_RESULT(no)
3748 system_utmpx_path=no ]
3749)
3750if test -z "$conf_utmpx_location"; then
3751 if test x"$system_utmpx_path" = x"no" ; then
3752 AC_DEFINE(DISABLE_UTMPX)
3753 fi
3754else
3466e002 3755 AC_DEFINE_UNQUOTED(CONF_UTMPX_FILE, "$conf_utmpx_location",
3756 [Define if you want to specify the path to your utmpx file])
82f4e93d 3757fi
1d7b9b20 3758
3759dnl wtmpx detection
3760AC_MSG_CHECKING([if your system defines WTMPX_FILE])
3761AC_TRY_COMPILE([
3762#include <sys/types.h>
3763#include <utmp.h>
3764#ifdef HAVE_UTMPX_H
3765#include <utmpx.h>
3766#endif
d7c0f3d5 3767#ifdef HAVE_PATHS_H
1d7b9b20 3768# include <paths.h>
3769#endif
3770 ],
3771 [ char *wtmpx = WTMPX_FILE; ],
3772 [ AC_MSG_RESULT(yes) ],
3773 [ AC_MSG_RESULT(no)
3774 system_wtmpx_path=no ]
3775)
3776if test -z "$conf_wtmpx_location"; then
3777 if test x"$system_wtmpx_path" = x"no" ; then
3778 AC_DEFINE(DISABLE_WTMPX)
3779 fi
3780else
3466e002 3781 AC_DEFINE_UNQUOTED(CONF_WTMPX_FILE, "$conf_wtmpx_location",
3782 [Define if you want to specify the path to your wtmpx file])
82f4e93d 3783fi
1d7b9b20 3784
b7a87eea 3785
bd499f9e 3786if test ! -z "$blibpath" ; then
68ece370 3787 LDFLAGS="$LDFLAGS $blibflags$blibpath"
3788 AC_MSG_WARN([Please check and edit blibpath in LDFLAGS in Makefile])
bd499f9e 3789fi
3790
ddceb1c8 3791dnl remove pam and dl because they are in $LIBPAM
3792if test "$PAM_MSG" = yes ; then
98f2d9d5 3793 LIBS=`echo $LIBS | sed 's/-lpam //'`
3794fi
3795if test "$ac_cv_lib_pam_pam_set_item" = yes ; then
3796 LIBS=`echo $LIBS | sed 's/-ldl //'`
ddceb1c8 3797fi
3798
ed89c848 3799dnl Adding -Werror to CFLAGS early prevents configure tests from running.
3800dnl Add now.
3801CFLAGS="$CFLAGS $werror_flags"
3802
3c62e7eb 3803AC_EXEEXT
d7cfdd7c 3804AC_CONFIG_FILES([Makefile buildpkg.sh opensshd.init openbsd-compat/Makefile \
46096a5b 3805 openbsd-compat/regress/Makefile scard/Makefile ssh_prng_cmds survey.sh])
98a7c37b 3806AC_OUTPUT
d3083fbd 3807
cbd7492e 3808# Print summary of options
3809
cbd7492e 3810# Someone please show me a better way :)
3811A=`eval echo ${prefix}` ; A=`eval echo ${A}`
3812B=`eval echo ${bindir}` ; B=`eval echo ${B}`
3813C=`eval echo ${sbindir}` ; C=`eval echo ${C}`
3814D=`eval echo ${sysconfdir}` ; D=`eval echo ${D}`
f5665f6f 3815E=`eval echo ${libexecdir}/ssh-askpass` ; E=`eval echo ${E}`
e0c4d3ac 3816F=`eval echo ${mandir}/${mansubdir}X` ; F=`eval echo ${F}`
cbd7492e 3817G=`eval echo ${piddir}` ; G=`eval echo ${G}`
ecac8ee5 3818H=`eval echo ${PRIVSEP_PATH}` ; H=`eval echo ${H}`
3819I=`eval echo ${user_path}` ; I=`eval echo ${I}`
3820J=`eval echo ${superuser_path}` ; J=`eval echo ${J}`
cbd7492e 3821
3822echo ""
26de7942 3823echo "OpenSSH has been configured with the following options:"
ecac8ee5 3824echo " User binaries: $B"
3825echo " System binaries: $C"
3826echo " Configuration files: $D"
3827echo " Askpass program: $E"
3828echo " Manual pages: $F"
3829echo " PID file: $G"
3830echo " Privilege separation chroot path: $H"
95b99395 3831if test "x$external_path_file" = "x/etc/login.conf" ; then
3832echo " At runtime, sshd will use the path defined in $external_path_file"
3833echo " Make sure the path to scp is present, otherwise scp will not work"
8d184c09 3834else
ecac8ee5 3835echo " sshd default user PATH: $I"
89bbd457 3836 if test ! -z "$external_path_file"; then
95b99395 3837echo " (If PATH is set in $external_path_file it will be used instead. If"
3838echo " used, ensure the path to scp is present, otherwise scp will not work.)"
3839 fi
8d184c09 3840fi
06617857 3841if test ! -z "$superuser_path" ; then
ecac8ee5 3842echo " sshd superuser user PATH: $J"
3843fi
3844echo " Manpage format: $MANTYPE"
3e05e934 3845echo " PAM support: $PAM_MSG"
ecac8ee5 3846echo " KerberosV support: $KRB5_MSG"
ef4d1846 3847echo " SELinux support: $SELINUX_MSG"
ecac8ee5 3848echo " Smartcard support: $SCARD_MSG"
ecac8ee5 3849echo " S/KEY support: $SKEY_MSG"
3850echo " TCP Wrappers support: $TCPW_MSG"
3851echo " MD5 password support: $MD5_MSG"
59031773 3852echo " libedit support: $LIBEDIT_MSG"
3deb1408 3853echo " IP address in \$DISPLAY hack: $DISPLAY_HACK_MSG"
ecac8ee5 3854echo " Translate v4 in v6 hack: $IPV4_IN6_HACK_MSG"
3855echo " BSD Auth support: $BSD_AUTH_MSG"
3856echo " Random number source: $RAND_MSG"
f1b0ecc3 3857if test ! -z "$USE_RAND_HELPER" ; then
ecac8ee5 3858echo " ssh-rand-helper collects from: $RAND_HELPER_MSG"
af774732 3859fi
3860
cbd7492e 3861echo ""
3862
0c2fb82f 3863echo " Host: ${host}"
3864echo " Compiler: ${CC}"
3865echo " Compiler flags: ${CFLAGS}"
3866echo "Preprocessor flags: ${CPPFLAGS}"
3867echo " Linker flags: ${LDFLAGS}"
ddceb1c8 3868echo " Libraries: ${LIBWRAP} ${LIBPAM} ${LIBS}"
cbd7492e 3869
3870echo ""
3871
9cefe228 3872if test "x$MAKE_PACKAGE_SUPPORTED" = "xyes" ; then
b3146b5f 3873 echo "SVR4 style packages are supported with \"make package\""
3874 echo ""
9cefe228 3875fi
3876
adeebd37 3877if test "x$PAM_MSG" = "xyes" ; then
f1b0ecc3 3878 echo "PAM is enabled. You may need to install a PAM control file "
3879 echo "for sshd, otherwise password authentication may fail. "
aff51935 3880 echo "Example PAM control files can be found in the contrib/ "
f1b0ecc3 3881 echo "subdirectory"
adeebd37 3882 echo ""
3883fi
3884
f1b0ecc3 3885if test ! -z "$RAND_HELPER_CMDHASH" ; then
3886 echo "WARNING: you are using the builtin random number collection "
3887 echo "service. Please read WARNING.RNG and request that your OS "
3888 echo "vendor includes kernel-based random number collection in "
3889 echo "future versions of your OS."
2c523de9 3890 echo ""
3891fi
af774732 3892
2f6f9cff 3893if test ! -z "$NO_PEERCHECK" ; then
3894 echo "WARNING: the operating system that you are using does not "
3895 echo "appear to support either the getpeereid() API nor the "
3896 echo "SO_PEERCRED getsockopt() option. These facilities are used to "
3897 echo "enforce security checks to prevent unauthorised connections to "
3898 echo "ssh-agent. Their absence increases the risk that a malicious "
3899 echo "user can connect to your agent. "
3900 echo ""
3901fi
3902
7b578f7d 3903if test "$AUDIT_MODULE" = "bsm" ; then
3904 echo "WARNING: BSM audit support is currently considered EXPERIMENTAL."
3905 echo "See the Solaris section in README.platform for details."
3906fi
This page took 1.087148 seconds and 5 git commands to generate.