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