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