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