]> andersk Git - openssh.git/blame - configure.ac
- dtucker@cvs.openbsd.org 2009/11/10 04:30:45
[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
70e7d0b0 1626dnl see whether mkstemp() requires XXXXXX
1627if test "x$ac_cv_func_mkdtemp" = "xyes" ; then
1628AC_MSG_CHECKING([for (overly) strict mkstemp])
b0e7249f 1629AC_RUN_IFELSE(
1630 [AC_LANG_SOURCE([[
70e7d0b0 1631#include <stdlib.h>
1632main() { char template[]="conftest.mkstemp-test";
1633if (mkstemp(template) == -1)
1634 exit(1);
1635unlink(template); exit(0);
1636}
b0e7249f 1637 ]])],
70e7d0b0 1638 [
1639 AC_MSG_RESULT(no)
1640 ],
aff51935 1641 [
70e7d0b0 1642 AC_MSG_RESULT(yes)
3466e002 1643 AC_DEFINE(HAVE_STRICT_MKSTEMP, 1, [Silly mkstemp()])
70e7d0b0 1644 ],
1645 [
1646 AC_MSG_RESULT(yes)
1647 AC_DEFINE(HAVE_STRICT_MKSTEMP)
aff51935 1648 ]
70e7d0b0 1649)
1650fi
1651
eacb954e 1652dnl make sure that openpty does not reacquire controlling terminal
1653if test ! -z "$check_for_openpty_ctty_bug"; then
1654 AC_MSG_CHECKING(if openpty correctly handles controlling tty)
b0e7249f 1655 AC_RUN_IFELSE(
1656 [AC_LANG_SOURCE([[
eacb954e 1657#include <stdio.h>
1658#include <sys/fcntl.h>
1659#include <sys/types.h>
1660#include <sys/wait.h>
1661
1662int
1663main()
1664{
1665 pid_t pid;
1666 int fd, ptyfd, ttyfd, status;
1667
1668 pid = fork();
1669 if (pid < 0) { /* failed */
1670 exit(1);
1671 } else if (pid > 0) { /* parent */
1672 waitpid(pid, &status, 0);
aff51935 1673 if (WIFEXITED(status))
eacb954e 1674 exit(WEXITSTATUS(status));
1675 else
1676 exit(2);
1677 } else { /* child */
1678 close(0); close(1); close(2);
1679 setsid();
1680 openpty(&ptyfd, &ttyfd, NULL, NULL, NULL);
1681 fd = open("/dev/tty", O_RDWR | O_NOCTTY);
1682 if (fd >= 0)
1683 exit(3); /* Acquired ctty: broken */
1684 else
1685 exit(0); /* Did not acquire ctty: OK */
1686 }
1687}
b0e7249f 1688 ]])],
eacb954e 1689 [
1690 AC_MSG_RESULT(yes)
1691 ],
1692 [
1693 AC_MSG_RESULT(no)
1694 AC_DEFINE(SSHD_ACQUIRES_CTTY)
b0e7249f 1695 ],
1696 [
1697 AC_MSG_RESULT(cross-compiling, assuming yes)
eacb954e 1698 ]
1699 )
1700fi
1701
4b492aab 1702if test "x$ac_cv_func_getaddrinfo" = "xyes" && \
1703 test "x$check_for_hpux_broken_getaddrinfo" = "x1"; then
2fe51906 1704 AC_MSG_CHECKING(if getaddrinfo seems to work)
b0e7249f 1705 AC_RUN_IFELSE(
1706 [AC_LANG_SOURCE([[
2fe51906 1707#include <stdio.h>
1708#include <sys/socket.h>
1709#include <netdb.h>
1710#include <errno.h>
1711#include <netinet/in.h>
1712
1713#define TEST_PORT "2222"
1714
1715int
1716main(void)
1717{
1718 int err, sock;
1719 struct addrinfo *gai_ai, *ai, hints;
1720 char ntop[NI_MAXHOST], strport[NI_MAXSERV], *name = NULL;
1721
1722 memset(&hints, 0, sizeof(hints));
1723 hints.ai_family = PF_UNSPEC;
1724 hints.ai_socktype = SOCK_STREAM;
1725 hints.ai_flags = AI_PASSIVE;
1726
1727 err = getaddrinfo(name, TEST_PORT, &hints, &gai_ai);
1728 if (err != 0) {
1729 fprintf(stderr, "getaddrinfo failed (%s)", gai_strerror(err));
1730 exit(1);
1731 }
1732
1733 for (ai = gai_ai; ai != NULL; ai = ai->ai_next) {
1734 if (ai->ai_family != AF_INET6)
1735 continue;
1736
1737 err = getnameinfo(ai->ai_addr, ai->ai_addrlen, ntop,
1738 sizeof(ntop), strport, sizeof(strport),
1739 NI_NUMERICHOST|NI_NUMERICSERV);
1740
1741 if (err != 0) {
1742 if (err == EAI_SYSTEM)
1743 perror("getnameinfo EAI_SYSTEM");
1744 else
1745 fprintf(stderr, "getnameinfo failed: %s\n",
1746 gai_strerror(err));
1747 exit(2);
1748 }
1749
1750 sock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
1751 if (sock < 0)
1752 perror("socket");
1753 if (bind(sock, ai->ai_addr, ai->ai_addrlen) < 0) {
1754 if (errno == EBADF)
1755 exit(3);
1756 }
1757 }
1758 exit(0);
1759}
b0e7249f 1760 ]])],
2fe51906 1761 [
1762 AC_MSG_RESULT(yes)
1763 ],
1764 [
1765 AC_MSG_RESULT(no)
1766 AC_DEFINE(BROKEN_GETADDRINFO)
b0e7249f 1767 ],
1768 [
1769 AC_MSG_RESULT(cross-compiling, assuming yes)
2fe51906 1770 ]
1771 )
1772fi
1773
4b492aab 1774if test "x$ac_cv_func_getaddrinfo" = "xyes" && \
1775 test "x$check_for_aix_broken_getaddrinfo" = "x1"; then
5ccf88cb 1776 AC_MSG_CHECKING(if getaddrinfo seems to work)
b0e7249f 1777 AC_RUN_IFELSE(
1778 [AC_LANG_SOURCE([[
5ccf88cb 1779#include <stdio.h>
1780#include <sys/socket.h>
1781#include <netdb.h>
1782#include <errno.h>
1783#include <netinet/in.h>
1784
1785#define TEST_PORT "2222"
1786
1787int
1788main(void)
1789{
1790 int err, sock;
1791 struct addrinfo *gai_ai, *ai, hints;
1792 char ntop[NI_MAXHOST], strport[NI_MAXSERV], *name = NULL;
1793
1794 memset(&hints, 0, sizeof(hints));
1795 hints.ai_family = PF_UNSPEC;
1796 hints.ai_socktype = SOCK_STREAM;
1797 hints.ai_flags = AI_PASSIVE;
1798
1799 err = getaddrinfo(name, TEST_PORT, &hints, &gai_ai);
1800 if (err != 0) {
1801 fprintf(stderr, "getaddrinfo failed (%s)", gai_strerror(err));
1802 exit(1);
1803 }
1804
1805 for (ai = gai_ai; ai != NULL; ai = ai->ai_next) {
1806 if (ai->ai_family != AF_INET && ai->ai_family != AF_INET6)
1807 continue;
1808
1809 err = getnameinfo(ai->ai_addr, ai->ai_addrlen, ntop,
1810 sizeof(ntop), strport, sizeof(strport),
1811 NI_NUMERICHOST|NI_NUMERICSERV);
1812
1813 if (ai->ai_family == AF_INET && err != 0) {
1814 perror("getnameinfo");
1815 exit(2);
1816 }
1817 }
1818 exit(0);
1819}
b0e7249f 1820 ]])],
5ccf88cb 1821 [
1822 AC_MSG_RESULT(yes)
3466e002 1823 AC_DEFINE(AIX_GETNAMEINFO_HACK, 1,
1824 [Define if you have a getaddrinfo that fails
1825 for the all-zeros IPv6 address])
5ccf88cb 1826 ],
1827 [
1828 AC_MSG_RESULT(no)
1829 AC_DEFINE(BROKEN_GETADDRINFO)
b0e7249f 1830 ],
ecd9ec09 1831 [
b0e7249f 1832 AC_MSG_RESULT(cross-compiling, assuming no)
5ccf88cb 1833 ]
1834 )
1835fi
1836
b29fd59f 1837if test "x$check_for_conflicting_getspnam" = "x1"; then
1838 AC_MSG_CHECKING(for conflicting getspnam in shadow.h)
1839 AC_COMPILE_IFELSE(
1840 [
1841#include <shadow.h>
1842int main(void) {exit(0);}
1843 ],
1844 [
1845 AC_MSG_RESULT(no)
1846 ],
1847 [
1848 AC_MSG_RESULT(yes)
1849 AC_DEFINE(GETSPNAM_CONFLICTING_DEFS, 1,
1850 [Conflicting defs for getspnam])
1851 ]
1852 )
1853fi
1854
7f8f5e00 1855AC_FUNC_GETPGRP
1856
5b991353 1857# Search for OpenSSL
1858saved_CPPFLAGS="$CPPFLAGS"
1859saved_LDFLAGS="$LDFLAGS"
a0391976 1860AC_ARG_WITH(ssl-dir,
1861 [ --with-ssl-dir=PATH Specify path to OpenSSL installation ],
1862 [
e9e4a1c7 1863 if test "x$withval" != "xno" ; then
99eb0f64 1864 case "$withval" in
1865 # Relative paths
1866 ./*|../*) withval="`pwd`/$withval"
1867 esac
5b991353 1868 if test -d "$withval/lib"; then
1869 if test -n "${need_dash_r}"; then
1870 LDFLAGS="-L${withval}/lib -R${withval}/lib ${LDFLAGS}"
1871 else
1872 LDFLAGS="-L${withval}/lib ${LDFLAGS}"
d6f13fbb 1873 fi
1874 else
5b991353 1875 if test -n "${need_dash_r}"; then
1876 LDFLAGS="-L${withval} -R${withval} ${LDFLAGS}"
1877 else
1878 LDFLAGS="-L${withval} ${LDFLAGS}"
d6f13fbb 1879 fi
1880 fi
5b991353 1881 if test -d "$withval/include"; then
1882 CPPFLAGS="-I${withval}/include ${CPPFLAGS}"
d6f13fbb 1883 else
5b991353 1884 CPPFLAGS="-I${withval} ${CPPFLAGS}"
58d100bf 1885 fi
a0391976 1886 fi
5b991353 1887 ]
1888)
5486a457 1889LIBS="-lcrypto $LIBS"
3466e002 1890AC_TRY_LINK_FUNC(RAND_add, AC_DEFINE(HAVE_OPENSSL, 1,
1891 [Define if your ssl headers are included
1892 with #include <openssl/header.h>]),
d45e3d76 1893 [
5b991353 1894 dnl Check default openssl install dir
1895 if test -n "${need_dash_r}"; then
1896 LDFLAGS="-L/usr/local/ssl/lib -R/usr/local/ssl/lib ${saved_LDFLAGS}"
d45e3d76 1897 else
5b991353 1898 LDFLAGS="-L/usr/local/ssl/lib ${saved_LDFLAGS}"
d45e3d76 1899 fi
5b991353 1900 CPPFLAGS="-I/usr/local/ssl/include ${saved_CPPFLAGS}"
8295689f 1901 AC_CHECK_HEADER([openssl/opensslv.h], ,
1902 AC_MSG_ERROR([*** OpenSSL headers missing - please install first or check config.log ***]))
5b991353 1903 AC_TRY_LINK_FUNC(RAND_add, AC_DEFINE(HAVE_OPENSSL),
1904 [
1905 AC_MSG_ERROR([*** Can't find recent OpenSSL libcrypto (see config.log for details) ***])
1906 ]
1907 )
1908 ]
1909)
1910
cd018561 1911# Determine OpenSSL header version
1912AC_MSG_CHECKING([OpenSSL header version])
1a01a50c 1913AC_RUN_IFELSE(
479cece8 1914 [AC_LANG_SOURCE([[
cd018561 1915#include <stdio.h>
1916#include <string.h>
1917#include <openssl/opensslv.h>
1918#define DATA "conftest.sslincver"
1919int main(void) {
aff51935 1920 FILE *fd;
1921 int rc;
cd018561 1922
aff51935 1923 fd = fopen(DATA,"w");
1924 if(fd == NULL)
1925 exit(1);
cd018561 1926
1927 if ((rc = fprintf(fd ,"%x (%s)\n", OPENSSL_VERSION_NUMBER, OPENSSL_VERSION_TEXT)) <0)
1928 exit(1);
1929
1930 exit(0);
1931}
479cece8 1932 ]])],
cd018561 1933 [
1934 ssl_header_ver=`cat conftest.sslincver`
1935 AC_MSG_RESULT($ssl_header_ver)
1936 ],
1937 [
1938 AC_MSG_RESULT(not found)
1939 AC_MSG_ERROR(OpenSSL version header not found.)
1a01a50c 1940 ],
1941 [
1942 AC_MSG_WARN([cross compiling: not checking])
cd018561 1943 ]
1944)
1945
1946# Determine OpenSSL library version
1947AC_MSG_CHECKING([OpenSSL library version])
1a01a50c 1948AC_RUN_IFELSE(
479cece8 1949 [AC_LANG_SOURCE([[
cd018561 1950#include <stdio.h>
1951#include <string.h>
1952#include <openssl/opensslv.h>
1953#include <openssl/crypto.h>
1954#define DATA "conftest.ssllibver"
1955int main(void) {
aff51935 1956 FILE *fd;
1957 int rc;
cd018561 1958
aff51935 1959 fd = fopen(DATA,"w");
1960 if(fd == NULL)
1961 exit(1);
cd018561 1962
1963 if ((rc = fprintf(fd ,"%x (%s)\n", SSLeay(), SSLeay_version(SSLEAY_VERSION))) <0)
1964 exit(1);
1965
1966 exit(0);
1967}
479cece8 1968 ]])],
cd018561 1969 [
1970 ssl_library_ver=`cat conftest.ssllibver`
1971 AC_MSG_RESULT($ssl_library_ver)
1972 ],
1973 [
1974 AC_MSG_RESULT(not found)
1975 AC_MSG_ERROR(OpenSSL library not found.)
1a01a50c 1976 ],
1977 [
1978 AC_MSG_WARN([cross compiling: not checking])
cd018561 1979 ]
1980)
58d100bf 1981
1d42bcce 1982AC_ARG_WITH(openssl-header-check,
1983 [ --without-openssl-header-check Disable OpenSSL version consistency check],
1984 [ if test "x$withval" = "xno" ; then
1985 openssl_check_nonfatal=1
1986 fi
1987 ]
1988)
1989
9780116c 1990# Sanity check OpenSSL headers
1991AC_MSG_CHECKING([whether OpenSSL's headers match the library])
1a01a50c 1992AC_RUN_IFELSE(
479cece8 1993 [AC_LANG_SOURCE([[
9780116c 1994#include <string.h>
1995#include <openssl/opensslv.h>
aec4cb4f 1996int main(void) { exit(SSLeay() == OPENSSL_VERSION_NUMBER ? 0 : 1); }
479cece8 1997 ]])],
9780116c 1998 [
1999 AC_MSG_RESULT(yes)
2000 ],
2001 [
2002 AC_MSG_RESULT(no)
1d42bcce 2003 if test "x$openssl_check_nonfatal" = "x"; then
2004 AC_MSG_ERROR([Your OpenSSL headers do not match your
2005library. Check config.log for details.
2006If you are sure your installation is consistent, you can disable the check
2007by running "./configure --without-openssl-header-check".
2008Also see contrib/findssl.sh for help identifying header/library mismatches.
2009])
2010 else
2011 AC_MSG_WARN([Your OpenSSL headers do not match your
2012library. Check config.log for details.
e15ba28b 2013Also see contrib/findssl.sh for help identifying header/library mismatches.])
1d42bcce 2014 fi
1a01a50c 2015 ],
2016 [
2017 AC_MSG_WARN([cross compiling: not checking])
9780116c 2018 ]
2019)
2020
282d6408 2021AC_MSG_CHECKING([if programs using OpenSSL functions will link])
2022AC_LINK_IFELSE(
2023 [AC_LANG_SOURCE([[
2024#include <openssl/evp.h>
2025int main(void) { SSLeay_add_all_algorithms(); }
2026 ]])],
2027 [
2028 AC_MSG_RESULT(yes)
2029 ],
2030 [
2031 AC_MSG_RESULT(no)
2032 saved_LIBS="$LIBS"
2033 LIBS="$LIBS -ldl"
2034 AC_MSG_CHECKING([if programs using OpenSSL need -ldl])
2035 AC_LINK_IFELSE(
2036 [AC_LANG_SOURCE([[
2037#include <openssl/evp.h>
2038int main(void) { SSLeay_add_all_algorithms(); }
2039 ]])],
2040 [
2041 AC_MSG_RESULT(yes)
2042 ],
2043 [
2044 AC_MSG_RESULT(no)
2045 LIBS="$saved_LIBS"
2046 ]
2047 )
2048 ]
2049)
2050
c7ad0d99 2051AC_ARG_WITH(ssl-engine,
2052 [ --with-ssl-engine Enable OpenSSL (hardware) ENGINE support ],
2053 [ if test "x$withval" != "xno" ; then
2054 AC_MSG_CHECKING(for OpenSSL ENGINE support)
2055 AC_TRY_COMPILE(
2056 [ #include <openssl/engine.h>],
2057 [
24b2647b 2058ENGINE_load_builtin_engines();ENGINE_register_all_complete();
c7ad0d99 2059 ],
2060 [ AC_MSG_RESULT(yes)
2061 AC_DEFINE(USE_OPENSSL_ENGINE, 1,
2062 [Enable OpenSSL engine support])
2063 ],
2064 [ AC_MSG_ERROR(OpenSSL ENGINE support not found)]
2065 )
2066 fi ]
2067)
2068
e5146707 2069# Check for OpenSSL without EVP_aes_{192,256}_cbc
2070AC_MSG_CHECKING([whether OpenSSL has crippled AES support])
3e05aa50 2071AC_LINK_IFELSE(
e5146707 2072 [AC_LANG_SOURCE([[
2073#include <string.h>
2074#include <openssl/evp.h>
300ea548 2075int main(void) { exit(EVP_aes_192_cbc() == NULL || EVP_aes_256_cbc() == NULL);}
e5146707 2076 ]])],
2077 [
2078 AC_MSG_RESULT(no)
2079 ],
2080 [
2081 AC_MSG_RESULT(yes)
2082 AC_DEFINE(OPENSSL_LOBOTOMISED_AES, 1,
2083 [libcrypto is missing AES 192 and 256 bit functions])
2084 ]
2085)
2086
14e380c6 2087AC_MSG_CHECKING([if EVP_DigestUpdate returns an int])
2088AC_LINK_IFELSE(
2089 [AC_LANG_SOURCE([[
2090#include <string.h>
2091#include <openssl/evp.h>
2092int main(void) { if(EVP_DigestUpdate(NULL, NULL,0)) exit(0); }
2093 ]])],
2094 [
2095 AC_MSG_RESULT(yes)
2096 ],
2097 [
2098 AC_MSG_RESULT(no)
2099 AC_DEFINE(OPENSSL_EVP_DIGESTUPDATE_VOID, 1,
2100 [Define if EVP_DigestUpdate returns void])
2101 ]
2102)
2103
5486a457 2104# Some systems want crypt() from libcrypt, *not* the version in OpenSSL,
2105# because the system crypt() is more featureful.
2106if test "x$check_for_libcrypt_before" = "x1"; then
2107 AC_CHECK_LIB(crypt, crypt)
2108fi
2109
aff51935 2110# Some Linux systems (Slackware) need crypt() from libcrypt, *not* the
8087c5ee 2111# version in OpenSSL.
05114c74 2112if test "x$check_for_libcrypt_later" = "x1"; then
20cad736 2113 AC_CHECK_LIB(crypt, crypt, LIBS="$LIBS -lcrypt")
717057b6 2114fi
2115
13ff27b7 2116# Search for SHA256 support in libc and/or OpenSSL
2117AC_CHECK_FUNCS(SHA256_Update EVP_sha256)
2118
a03acb8f 2119saved_LIBS="$LIBS"
2120AC_CHECK_LIB(iaf, ia_openinfo, [
2121 LIBS="$LIBS -liaf"
d837615a 2122 AC_CHECK_FUNCS(set_id, [SSHDLIBS="$SSHDLIBS -liaf"
2123 AC_DEFINE(HAVE_LIBIAF, 1,
2124 [Define if system has libiaf that supports set_id])
2125 ])
a03acb8f 2126])
2127LIBS="$saved_LIBS"
f1b0ecc3 2128
2129### Configure cryptographic random number support
2130
2131# Check wheter OpenSSL seeds itself
2132AC_MSG_CHECKING([whether OpenSSL's PRNG is internally seeded])
1a01a50c 2133AC_RUN_IFELSE(
479cece8 2134 [AC_LANG_SOURCE([[
f1b0ecc3 2135#include <string.h>
2136#include <openssl/rand.h>
aec4cb4f 2137int main(void) { exit(RAND_status() == 1 ? 0 : 1); }
479cece8 2138 ]])],
f1b0ecc3 2139 [
2140 OPENSSL_SEEDS_ITSELF=yes
2141 AC_MSG_RESULT(yes)
2142 ],
2143 [
2144 AC_MSG_RESULT(no)
2145 # Default to use of the rand helper if OpenSSL doesn't
2146 # seed itself
2147 USE_RAND_HELPER=yes
1a01a50c 2148 ],
2149 [
2150 AC_MSG_WARN([cross compiling: assuming yes])
2151 # This is safe, since all recent OpenSSL versions will
82f4e93d 2152 # complain at runtime if not seeded correctly.
1a01a50c 2153 OPENSSL_SEEDS_ITSELF=yes
f1b0ecc3 2154 ]
2155)
2156
a086f73b 2157# Check for PAM libs
2158PAM_MSG="no"
2159AC_ARG_WITH(pam,
2160 [ --with-pam Enable PAM support ],
2161 [
2162 if test "x$withval" != "xno" ; then
2163 if test "x$ac_cv_header_security_pam_appl_h" != "xyes" && \
2164 test "x$ac_cv_header_pam_pam_appl_h" != "xyes" ; then
2165 AC_MSG_ERROR([PAM headers not found])
2166 fi
2167
2168 saved_LIBS="$LIBS"
2169 AC_CHECK_LIB(dl, dlopen, , )
2170 AC_CHECK_LIB(pam, pam_set_item, , AC_MSG_ERROR([*** libpam missing]))
2171 AC_CHECK_FUNCS(pam_getenvlist)
2172 AC_CHECK_FUNCS(pam_putenv)
2173 LIBS="$saved_LIBS"
2174
2175 PAM_MSG="yes"
2176
e54defb4 2177 SSHDLIBS="$SSHDLIBS -lpam"
a086f73b 2178 AC_DEFINE(USE_PAM, 1,
2179 [Define if you want to enable PAM support])
282d6408 2180
a086f73b 2181 if test $ac_cv_lib_dl_dlopen = yes; then
282d6408 2182 case "$LIBS" in
2183 *-ldl*)
2184 # libdl already in LIBS
2185 ;;
2186 *)
e54defb4 2187 SSHDLIBS="$SSHDLIBS -ldl"
282d6408 2188 ;;
2189 esac
a086f73b 2190 fi
a086f73b 2191 fi
2192 ]
2193)
2194
2195# Check for older PAM
2196if test "x$PAM_MSG" = "xyes" ; then
2197 # Check PAM strerror arguments (old PAM)
2198 AC_MSG_CHECKING([whether pam_strerror takes only one argument])
2199 AC_TRY_COMPILE(
2200 [
2201#include <stdlib.h>
2202#if defined(HAVE_SECURITY_PAM_APPL_H)
2203#include <security/pam_appl.h>
2204#elif defined (HAVE_PAM_PAM_APPL_H)
2205#include <pam/pam_appl.h>
2206#endif
2207 ],
2208 [(void)pam_strerror((pam_handle_t *)NULL, -1);],
2209 [AC_MSG_RESULT(no)],
2210 [
2211 AC_DEFINE(HAVE_OLD_PAM, 1,
2212 [Define if you have an old version of PAM
2213 which takes only one argument to pam_strerror])
2214 AC_MSG_RESULT(yes)
2215 PAM_MSG="yes (old library)"
2216 ]
2217 )
2218fi
f1b0ecc3 2219
2220# Do we want to force the use of the rand helper?
2221AC_ARG_WITH(rand-helper,
2222 [ --with-rand-helper Use subprocess to gather strong randomness ],
2223 [
2224 if test "x$withval" = "xno" ; then
aff51935 2225 # Force use of OpenSSL's internal RNG, even if
f1b0ecc3 2226 # the previous test showed it to be unseeded.
2227 if test -z "$OPENSSL_SEEDS_ITSELF" ; then
2228 AC_MSG_WARN([*** Forcing use of OpenSSL's non-self-seeding PRNG])
2229 OPENSSL_SEEDS_ITSELF=yes
2230 USE_RAND_HELPER=""
2231 fi
2232 else
2233 USE_RAND_HELPER=yes
2234 fi
2235 ],
82f4e93d 2236)
f1b0ecc3 2237
2238# Which randomness source do we use?
4b492aab 2239if test ! -z "$OPENSSL_SEEDS_ITSELF" && test -z "$USE_RAND_HELPER" ; then
f1b0ecc3 2240 # OpenSSL only
3466e002 2241 AC_DEFINE(OPENSSL_PRNG_ONLY, 1,
2242 [Define if you want OpenSSL's internally seeded PRNG only])
f1b0ecc3 2243 RAND_MSG="OpenSSL internal ONLY"
2244 INSTALL_SSH_RAND_HELPER=""
70e2f2f3 2245elif test ! -z "$USE_RAND_HELPER" ; then
2246 # install rand helper
f1b0ecc3 2247 RAND_MSG="ssh-rand-helper"
2248 INSTALL_SSH_RAND_HELPER="yes"
2249fi
2250AC_SUBST(INSTALL_SSH_RAND_HELPER)
2251
2252### Configuration of ssh-rand-helper
2253
2254# PRNGD TCP socket
2255AC_ARG_WITH(prngd-port,
2256 [ --with-prngd-port=PORT read entropy from PRNGD/EGD TCP localhost:PORT],
2257 [
eb5d7ff6 2258 case "$withval" in
2259 no)
2260 withval=""
2261 ;;
2262 [[0-9]]*)
2263 ;;
2264 *)
2265 AC_MSG_ERROR(You must specify a numeric port number for --with-prngd-port)
2266 ;;
2267 esac
2268 if test ! -z "$withval" ; then
f1b0ecc3 2269 PRNGD_PORT="$withval"
3466e002 2270 AC_DEFINE_UNQUOTED(PRNGD_PORT, $PRNGD_PORT,
2271 [Port number of PRNGD/EGD random number socket])
f1b0ecc3 2272 fi
2273 ]
2274)
2275
2276# PRNGD Unix domain socket
2277AC_ARG_WITH(prngd-socket,
2278 [ --with-prngd-socket=FILE read entropy from PRNGD/EGD socket FILE (default=/var/run/egd-pool)],
2279 [
eb5d7ff6 2280 case "$withval" in
2281 yes)
f1b0ecc3 2282 withval="/var/run/egd-pool"
eb5d7ff6 2283 ;;
2284 no)
2285 withval=""
2286 ;;
2287 /*)
2288 ;;
2289 *)
2290 AC_MSG_ERROR(You must specify an absolute path to the entropy socket)
2291 ;;
2292 esac
2293
2294 if test ! -z "$withval" ; then
f1b0ecc3 2295 if test ! -z "$PRNGD_PORT" ; then
2296 AC_MSG_ERROR(You may not specify both a PRNGD/EGD port and socket)
2297 fi
906e811b 2298 if test ! -r "$withval" ; then
f1b0ecc3 2299 AC_MSG_WARN(Entropy socket is not readable)
2300 fi
2301 PRNGD_SOCKET="$withval"
3466e002 2302 AC_DEFINE_UNQUOTED(PRNGD_SOCKET, "$PRNGD_SOCKET",
2303 [Location of PRNGD/EGD random number socket])
f1b0ecc3 2304 fi
ddceb1c8 2305 ],
2306 [
2307 # Check for existing socket only if we don't have a random device already
2308 if test "$USE_RAND_HELPER" = yes ; then
2309 AC_MSG_CHECKING(for PRNGD/EGD socket)
2310 # Insert other locations here
2311 for sock in /var/run/egd-pool /dev/egd-pool /etc/entropy; do
2312 if test -r $sock && $TEST_MINUS_S_SH -c "test -S $sock -o -p $sock" ; then
2313 PRNGD_SOCKET="$sock"
2314 AC_DEFINE_UNQUOTED(PRNGD_SOCKET, "$PRNGD_SOCKET")
2315 break;
2316 fi
2317 done
2318 if test ! -z "$PRNGD_SOCKET" ; then
2319 AC_MSG_RESULT($PRNGD_SOCKET)
2320 else
2321 AC_MSG_RESULT(not found)
2322 fi
2323 fi
f1b0ecc3 2324 ]
2325)
2326
2327# Change default command timeout for hashing entropy source
2328entropy_timeout=200
2329AC_ARG_WITH(entropy-timeout,
2330 [ --with-entropy-timeout Specify entropy gathering command timeout (msec)],
2331 [
6cf0200f 2332 if test -n "$withval" && test "x$withval" != "xno" && \
2333 test "x${withval}" != "xyes"; then
f1b0ecc3 2334 entropy_timeout=$withval
2335 fi
82f4e93d 2336 ]
f1b0ecc3 2337)
3466e002 2338AC_DEFINE_UNQUOTED(ENTROPY_TIMEOUT_MSEC, $entropy_timeout,
2339 [Builtin PRNG command timeout])
f1b0ecc3 2340
fd3cbf67 2341SSH_PRIVSEP_USER=sshd
9a0fbcb3 2342AC_ARG_WITH(privsep-user,
5222e7ef 2343 [ --with-privsep-user=user Specify non-privileged user for privilege separation],
9a0fbcb3 2344 [
6cf0200f 2345 if test -n "$withval" && test "x$withval" != "xno" && \
2346 test "x${withval}" != "xyes"; then
fd3cbf67 2347 SSH_PRIVSEP_USER=$withval
9a0fbcb3 2348 fi
82f4e93d 2349 ]
9a0fbcb3 2350)
3466e002 2351AC_DEFINE_UNQUOTED(SSH_PRIVSEP_USER, "$SSH_PRIVSEP_USER",
2352 [non-privileged user for privilege separation])
fd3cbf67 2353AC_SUBST(SSH_PRIVSEP_USER)
9a0fbcb3 2354
81dadca3 2355# We do this little dance with the search path to insure
2356# that programs that we select for use by installed programs
2357# (which may be run by the super-user) come from trusted
2358# locations before they come from the user's private area.
2359# This should help avoid accidentally configuring some
2360# random version of a program in someone's personal bin.
2361
2362OPATH=$PATH
2363PATH=/bin:/usr/bin
f95c8ce8 2364test -h /bin 2> /dev/null && PATH=/usr/bin
81dadca3 2365test -d /sbin && PATH=$PATH:/sbin
2366test -d /usr/sbin && PATH=$PATH:/usr/sbin
2367PATH=$PATH:/etc:$OPATH
2368
aff51935 2369# These programs are used by the command hashing source to gather entropy
f1b0ecc3 2370OSSH_PATH_ENTROPY_PROG(PROG_LS, ls)
2371OSSH_PATH_ENTROPY_PROG(PROG_NETSTAT, netstat)
2372OSSH_PATH_ENTROPY_PROG(PROG_ARP, arp)
2373OSSH_PATH_ENTROPY_PROG(PROG_IFCONFIG, ifconfig)
2374OSSH_PATH_ENTROPY_PROG(PROG_JSTAT, jstat)
2375OSSH_PATH_ENTROPY_PROG(PROG_PS, ps)
2376OSSH_PATH_ENTROPY_PROG(PROG_SAR, sar)
2377OSSH_PATH_ENTROPY_PROG(PROG_W, w)
2378OSSH_PATH_ENTROPY_PROG(PROG_WHO, who)
2379OSSH_PATH_ENTROPY_PROG(PROG_LAST, last)
2380OSSH_PATH_ENTROPY_PROG(PROG_LASTLOG, lastlog)
2381OSSH_PATH_ENTROPY_PROG(PROG_DF, df)
2382OSSH_PATH_ENTROPY_PROG(PROG_VMSTAT, vmstat)
2383OSSH_PATH_ENTROPY_PROG(PROG_UPTIME, uptime)
2384OSSH_PATH_ENTROPY_PROG(PROG_IPCS, ipcs)
2385OSSH_PATH_ENTROPY_PROG(PROG_TAIL, tail)
81dadca3 2386# restore PATH
2387PATH=$OPATH
f1b0ecc3 2388
2389# Where does ssh-rand-helper get its randomness from?
2390INSTALL_SSH_PRNG_CMDS=""
2391if test ! -z "$INSTALL_SSH_RAND_HELPER" ; then
2392 if test ! -z "$PRNGD_PORT" ; then
2393 RAND_HELPER_MSG="TCP localhost:$PRNGD_PORT"
2394 elif test ! -z "$PRNGD_SOCKET" ; then
2395 RAND_HELPER_MSG="Unix domain socket \"$PRNGD_SOCKET\""
2396 else
2397 RAND_HELPER_MSG="Command hashing (timeout $entropy_timeout)"
2398 RAND_HELPER_CMDHASH=yes
2399 INSTALL_SSH_PRNG_CMDS="yes"
2400 fi
2401fi
2402AC_SUBST(INSTALL_SSH_PRNG_CMDS)
2403
2404
66d6c27e 2405# Cheap hack to ensure NEWS-OS libraries are arranged right.
2406if test ! -z "$SONY" ; then
2407 LIBS="$LIBS -liberty";
2408fi
2409
9a406e1e 2410# Check for long long datatypes
2411AC_CHECK_TYPES([long long, unsigned long long, long double])
2412
2413# Check datatype sizes
976f7e19 2414AC_CHECK_SIZEOF(char, 1)
2b942fe0 2415AC_CHECK_SIZEOF(short int, 2)
2416AC_CHECK_SIZEOF(int, 4)
2417AC_CHECK_SIZEOF(long int, 4)
2418AC_CHECK_SIZEOF(long long int, 8)
2419
52f1ccb2 2420# Sanity check long long for some platforms (AIX)
2421if test "x$ac_cv_sizeof_long_long_int" = "x4" ; then
2422 ac_cv_sizeof_long_long_int=0
2423fi
2424
90f15776 2425# compute LLONG_MIN and LLONG_MAX if we don't know them.
2426if test -z "$have_llong_max"; then
2427 AC_MSG_CHECKING([for max value of long long])
2428 AC_RUN_IFELSE(
2429 [AC_LANG_SOURCE([[
2430#include <stdio.h>
2431/* Why is this so damn hard? */
2432#ifdef __GNUC__
2433# undef __GNUC__
2434#endif
2435#define __USE_ISOC99
2436#include <limits.h>
2437#define DATA "conftest.llminmax"
055252ed 2438#define my_abs(a) ((a) < 0 ? ((a) * -1) : (a))
2439
2440/*
2441 * printf in libc on some platforms (eg old Tru64) does not understand %lld so
2442 * we do this the hard way.
2443 */
2444static int
2445fprint_ll(FILE *f, long long n)
2446{
2447 unsigned int i;
2448 int l[sizeof(long long) * 8];
2449
2450 if (n < 0)
2451 if (fprintf(f, "-") < 0)
2452 return -1;
2453 for (i = 0; n != 0; i++) {
2454 l[i] = my_abs(n % 10);
2455 n /= 10;
2456 }
2457 do {
2458 if (fprintf(f, "%d", l[--i]) < 0)
2459 return -1;
2460 } while (i != 0);
2461 if (fprintf(f, " ") < 0)
2462 return -1;
2463 return 0;
2464}
2465
90f15776 2466int main(void) {
2467 FILE *f;
2468 long long i, llmin, llmax = 0;
2469
2470 if((f = fopen(DATA,"w")) == NULL)
2471 exit(1);
2472
2473#if defined(LLONG_MIN) && defined(LLONG_MAX)
2474 fprintf(stderr, "Using system header for LLONG_MIN and LLONG_MAX\n");
2475 llmin = LLONG_MIN;
2476 llmax = LLONG_MAX;
2477#else
2478 fprintf(stderr, "Calculating LLONG_MIN and LLONG_MAX\n");
2479 /* This will work on one's complement and two's complement */
2480 for (i = 1; i > llmax; i <<= 1, i++)
2481 llmax = i;
2482 llmin = llmax + 1LL; /* wrap */
2483#endif
2484
2485 /* Sanity check */
2486 if (llmin + 1 < llmin || llmin - 1 < llmin || llmax + 1 > llmax
055252ed 2487 || llmax - 1 > llmax || llmin == llmax || llmin == 0
2488 || llmax == 0 || llmax < LONG_MAX || llmin > LONG_MIN) {
90f15776 2489 fprintf(f, "unknown unknown\n");
2490 exit(2);
2491 }
2492
055252ed 2493 if (fprint_ll(f, llmin) < 0)
90f15776 2494 exit(3);
055252ed 2495 if (fprint_ll(f, llmax) < 0)
2496 exit(4);
2497 if (fclose(f) < 0)
2498 exit(5);
90f15776 2499 exit(0);
2500}
2501 ]])],
2502 [
2503 llong_min=`$AWK '{print $1}' conftest.llminmax`
2504 llong_max=`$AWK '{print $2}' conftest.llminmax`
2505
90f15776 2506 AC_MSG_RESULT($llong_max)
2507 AC_DEFINE_UNQUOTED(LLONG_MAX, [${llong_max}LL],
2508 [max value of long long calculated by configure])
2509 AC_MSG_CHECKING([for min value of long long])
2510 AC_MSG_RESULT($llong_min)
2511 AC_DEFINE_UNQUOTED(LLONG_MIN, [${llong_min}LL],
2512 [min value of long long calculated by configure])
2513 ],
2514 [
2515 AC_MSG_RESULT(not found)
2516 ],
2517 [
2518 AC_MSG_WARN([cross compiling: not checking])
2519 ]
2520 )
2521fi
2522
2523
a0391976 2524# More checks for data types
14a9a859 2525AC_CACHE_CHECK([for u_int type], ac_cv_have_u_int, [
2526 AC_TRY_COMPILE(
aff51935 2527 [ #include <sys/types.h> ],
2528 [ u_int a; a = 1;],
14a9a859 2529 [ ac_cv_have_u_int="yes" ],
2530 [ ac_cv_have_u_int="no" ]
2531 )
2532])
2533if test "x$ac_cv_have_u_int" = "xyes" ; then
3466e002 2534 AC_DEFINE(HAVE_U_INT, 1, [define if you have u_int data type])
14a9a859 2535 have_u_int=1
2536fi
2537
58d100bf 2538AC_CACHE_CHECK([for intXX_t types], ac_cv_have_intxx_t, [
2539 AC_TRY_COMPILE(
aff51935 2540 [ #include <sys/types.h> ],
2541 [ int8_t a; int16_t b; int32_t c; a = b = c = 1;],
58d100bf 2542 [ ac_cv_have_intxx_t="yes" ],
2543 [ ac_cv_have_intxx_t="no" ]
2544 )
2545])
2546if test "x$ac_cv_have_intxx_t" = "xyes" ; then
3466e002 2547 AC_DEFINE(HAVE_INTXX_T, 1, [define if you have intxx_t data type])
58d100bf 2548 have_intxx_t=1
2549fi
41cb4569 2550
2551if (test -z "$have_intxx_t" && \
aff51935 2552 test "x$ac_cv_header_stdint_h" = "xyes")
41cb4569 2553then
2554 AC_MSG_CHECKING([for intXX_t types in stdint.h])
2555 AC_TRY_COMPILE(
aff51935 2556 [ #include <stdint.h> ],
2557 [ int8_t a; int16_t b; int32_t c; a = b = c = 1;],
41cb4569 2558 [
2559 AC_DEFINE(HAVE_INTXX_T)
2560 AC_MSG_RESULT(yes)
2561 ],
2562 [ AC_MSG_RESULT(no) ]
2563 )
2564fi
2565
bd590612 2566AC_CACHE_CHECK([for int64_t type], ac_cv_have_int64_t, [
2567 AC_TRY_COMPILE(
1cbbe6c8 2568 [
2569#include <sys/types.h>
2570#ifdef HAVE_STDINT_H
2571# include <stdint.h>
2572#endif
2573#include <sys/socket.h>
2574#ifdef HAVE_SYS_BITYPES_H
2575# include <sys/bitypes.h>
2576#endif
aff51935 2577 ],
2578 [ int64_t a; a = 1;],
bd590612 2579 [ ac_cv_have_int64_t="yes" ],
2580 [ ac_cv_have_int64_t="no" ]
2581 )
2582])
2583if test "x$ac_cv_have_int64_t" = "xyes" ; then
3466e002 2584 AC_DEFINE(HAVE_INT64_T, 1, [define if you have int64_t data type])
ddceb1c8 2585fi
2586
58d100bf 2587AC_CACHE_CHECK([for u_intXX_t types], ac_cv_have_u_intxx_t, [
2588 AC_TRY_COMPILE(
aff51935 2589 [ #include <sys/types.h> ],
2590 [ u_int8_t a; u_int16_t b; u_int32_t c; a = b = c = 1;],
58d100bf 2591 [ ac_cv_have_u_intxx_t="yes" ],
2592 [ ac_cv_have_u_intxx_t="no" ]
2593 )
2594])
2595if test "x$ac_cv_have_u_intxx_t" = "xyes" ; then
3466e002 2596 AC_DEFINE(HAVE_U_INTXX_T, 1, [define if you have u_intxx_t data type])
58d100bf 2597 have_u_intxx_t=1
2598fi
2b942fe0 2599
41cb4569 2600if test -z "$have_u_intxx_t" ; then
2601 AC_MSG_CHECKING([for u_intXX_t types in sys/socket.h])
2602 AC_TRY_COMPILE(
aff51935 2603 [ #include <sys/socket.h> ],
2604 [ u_int8_t a; u_int16_t b; u_int32_t c; a = b = c = 1;],
41cb4569 2605 [
2606 AC_DEFINE(HAVE_U_INTXX_T)
2607 AC_MSG_RESULT(yes)
2608 ],
2609 [ AC_MSG_RESULT(no) ]
2610 )
2611fi
2612
bd590612 2613AC_CACHE_CHECK([for u_int64_t types], ac_cv_have_u_int64_t, [
2614 AC_TRY_COMPILE(
aff51935 2615 [ #include <sys/types.h> ],
2616 [ u_int64_t a; a = 1;],
bd590612 2617 [ ac_cv_have_u_int64_t="yes" ],
2618 [ ac_cv_have_u_int64_t="no" ]
2619 )
2620])
2621if test "x$ac_cv_have_u_int64_t" = "xyes" ; then
3466e002 2622 AC_DEFINE(HAVE_U_INT64_T, 1, [define if you have u_int64_t data type])
bd590612 2623 have_u_int64_t=1
2624fi
2625
ddceb1c8 2626if test -z "$have_u_int64_t" ; then
2627 AC_MSG_CHECKING([for u_int64_t type in sys/bitypes.h])
2628 AC_TRY_COMPILE(
aff51935 2629 [ #include <sys/bitypes.h> ],
ddceb1c8 2630 [ u_int64_t a; a = 1],
2631 [
2632 AC_DEFINE(HAVE_U_INT64_T)
2633 AC_MSG_RESULT(yes)
2634 ],
2635 [ AC_MSG_RESULT(no) ]
2636 )
2637fi
2638
41cb4569 2639if test -z "$have_u_intxx_t" ; then
2640 AC_CACHE_CHECK([for uintXX_t types], ac_cv_have_uintxx_t, [
2641 AC_TRY_COMPILE(
2642 [
2643#include <sys/types.h>
aff51935 2644 ],
2645 [ uint8_t a; uint16_t b; uint32_t c; a = b = c = 1; ],
41cb4569 2646 [ ac_cv_have_uintxx_t="yes" ],
2647 [ ac_cv_have_uintxx_t="no" ]
2648 )
2649 ])
2650 if test "x$ac_cv_have_uintxx_t" = "xyes" ; then
3466e002 2651 AC_DEFINE(HAVE_UINTXX_T, 1,
2652 [define if you have uintxx_t data type])
41cb4569 2653 fi
2654fi
2655
2656if test -z "$have_uintxx_t" ; then
2657 AC_MSG_CHECKING([for uintXX_t types in stdint.h])
2658 AC_TRY_COMPILE(
aff51935 2659 [ #include <stdint.h> ],
2660 [ uint8_t a; uint16_t b; uint32_t c; a = b = c = 1;],
41cb4569 2661 [
2662 AC_DEFINE(HAVE_UINTXX_T)
2663 AC_MSG_RESULT(yes)
2664 ],
2665 [ AC_MSG_RESULT(no) ]
2666 )
2667fi
2668
e5fe9a1f 2669if (test -z "$have_u_intxx_t" || test -z "$have_intxx_t" && \
aff51935 2670 test "x$ac_cv_header_sys_bitypes_h" = "xyes")
5cdfe03f 2671then
2672 AC_MSG_CHECKING([for intXX_t and u_intXX_t types in sys/bitypes.h])
2673 AC_TRY_COMPILE(
58d100bf 2674 [
2675#include <sys/bitypes.h>
aff51935 2676 ],
5cdfe03f 2677 [
837c30b8 2678 int8_t a; int16_t b; int32_t c;
2679 u_int8_t e; u_int16_t f; u_int32_t g;
2680 a = b = c = e = f = g = 1;
aff51935 2681 ],
5cdfe03f 2682 [
2683 AC_DEFINE(HAVE_U_INTXX_T)
2684 AC_DEFINE(HAVE_INTXX_T)
2685 AC_MSG_RESULT(yes)
2686 ],
2687 [AC_MSG_RESULT(no)]
aff51935 2688 )
5cdfe03f 2689fi
2690
0362750e 2691
2692AC_CACHE_CHECK([for u_char], ac_cv_have_u_char, [
2693 AC_TRY_COMPILE(
2694 [
2695#include <sys/types.h>
2696 ],
2697 [ u_char foo; foo = 125; ],
2698 [ ac_cv_have_u_char="yes" ],
2699 [ ac_cv_have_u_char="no" ]
2700 )
2701])
2702if test "x$ac_cv_have_u_char" = "xyes" ; then
3466e002 2703 AC_DEFINE(HAVE_U_CHAR, 1, [define if you have u_char data type])
0362750e 2704fi
2705
98a7c37b 2706TYPE_SOCKLEN_T
2b942fe0 2707
2d16d9a3 2708AC_CHECK_TYPES(sig_atomic_t,,,[#include <signal.h>])
22f5e872 2709AC_CHECK_TYPES([fsblkcnt_t, fsfilcnt_t],,,[
2710#include <sys/types.h>
2711#ifdef HAVE_SYS_BITYPES_H
2712#include <sys/bitypes.h>
2713#endif
2714#ifdef HAVE_SYS_STATFS_H
2715#include <sys/statfs.h>
2716#endif
2717#ifdef HAVE_SYS_STATVFS_H
2718#include <sys/statvfs.h>
2719#endif
2720])
ddceb1c8 2721
86783a32 2722AC_CHECK_TYPES([in_addr_t, in_port_t],,,
777ece68 2723[#include <sys/types.h>
2724#include <netinet/in.h>])
7b578f7d 2725
58d100bf 2726AC_CACHE_CHECK([for size_t], ac_cv_have_size_t, [
2727 AC_TRY_COMPILE(
2728 [
18ba2aab 2729#include <sys/types.h>
58d100bf 2730 ],
2731 [ size_t foo; foo = 1235; ],
2732 [ ac_cv_have_size_t="yes" ],
2733 [ ac_cv_have_size_t="no" ]
2734 )
2735])
2736if test "x$ac_cv_have_size_t" = "xyes" ; then
3466e002 2737 AC_DEFINE(HAVE_SIZE_T, 1, [define if you have size_t data type])
58d100bf 2738fi
ea1970a3 2739
c04f75f1 2740AC_CACHE_CHECK([for ssize_t], ac_cv_have_ssize_t, [
2741 AC_TRY_COMPILE(
2742 [
2743#include <sys/types.h>
2744 ],
2745 [ ssize_t foo; foo = 1235; ],
2746 [ ac_cv_have_ssize_t="yes" ],
2747 [ ac_cv_have_ssize_t="no" ]
2748 )
2749])
2750if test "x$ac_cv_have_ssize_t" = "xyes" ; then
3466e002 2751 AC_DEFINE(HAVE_SSIZE_T, 1, [define if you have ssize_t data type])
c04f75f1 2752fi
2753
f1c4659d 2754AC_CACHE_CHECK([for clock_t], ac_cv_have_clock_t, [
2755 AC_TRY_COMPILE(
2756 [
2757#include <time.h>
2758 ],
2759 [ clock_t foo; foo = 1235; ],
2760 [ ac_cv_have_clock_t="yes" ],
2761 [ ac_cv_have_clock_t="no" ]
2762 )
2763])
2764if test "x$ac_cv_have_clock_t" = "xyes" ; then
3466e002 2765 AC_DEFINE(HAVE_CLOCK_T, 1, [define if you have clock_t data type])
f1c4659d 2766fi
2767
1c04b088 2768AC_CACHE_CHECK([for sa_family_t], ac_cv_have_sa_family_t, [
2769 AC_TRY_COMPILE(
2770 [
2771#include <sys/types.h>
2772#include <sys/socket.h>
2773 ],
2774 [ sa_family_t foo; foo = 1235; ],
2775 [ ac_cv_have_sa_family_t="yes" ],
77bb0bca 2776 [ AC_TRY_COMPILE(
2777 [
2778#include <sys/types.h>
2779#include <sys/socket.h>
2780#include <netinet/in.h>
2781 ],
2782 [ sa_family_t foo; foo = 1235; ],
2783 [ ac_cv_have_sa_family_t="yes" ],
2784
1c04b088 2785 [ ac_cv_have_sa_family_t="no" ]
77bb0bca 2786 )]
1c04b088 2787 )
2788])
2789if test "x$ac_cv_have_sa_family_t" = "xyes" ; then
3466e002 2790 AC_DEFINE(HAVE_SA_FAMILY_T, 1,
2791 [define if you have sa_family_t data type])
1c04b088 2792fi
2793
729bfe59 2794AC_CACHE_CHECK([for pid_t], ac_cv_have_pid_t, [
2795 AC_TRY_COMPILE(
2796 [
2797#include <sys/types.h>
2798 ],
2799 [ pid_t foo; foo = 1235; ],
2800 [ ac_cv_have_pid_t="yes" ],
2801 [ ac_cv_have_pid_t="no" ]
2802 )
2803])
2804if test "x$ac_cv_have_pid_t" = "xyes" ; then
3466e002 2805 AC_DEFINE(HAVE_PID_T, 1, [define if you have pid_t data type])
729bfe59 2806fi
2807
2808AC_CACHE_CHECK([for mode_t], ac_cv_have_mode_t, [
2809 AC_TRY_COMPILE(
2810 [
2811#include <sys/types.h>
2812 ],
2813 [ mode_t foo; foo = 1235; ],
2814 [ ac_cv_have_mode_t="yes" ],
2815 [ ac_cv_have_mode_t="no" ]
2816 )
2817])
2818if test "x$ac_cv_have_mode_t" = "xyes" ; then
3466e002 2819 AC_DEFINE(HAVE_MODE_T, 1, [define if you have mode_t data type])
729bfe59 2820fi
2821
e3a93db0 2822
58d100bf 2823AC_CACHE_CHECK([for struct sockaddr_storage], ac_cv_have_struct_sockaddr_storage, [
2824 AC_TRY_COMPILE(
2825 [
18ba2aab 2826#include <sys/types.h>
2827#include <sys/socket.h>
58d100bf 2828 ],
2829 [ struct sockaddr_storage s; ],
2830 [ ac_cv_have_struct_sockaddr_storage="yes" ],
2831 [ ac_cv_have_struct_sockaddr_storage="no" ]
2832 )
2833])
2834if test "x$ac_cv_have_struct_sockaddr_storage" = "xyes" ; then
3466e002 2835 AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE, 1,
2836 [define if you have struct sockaddr_storage data type])
58d100bf 2837fi
48e671d5 2838
58d100bf 2839AC_CACHE_CHECK([for struct sockaddr_in6], ac_cv_have_struct_sockaddr_in6, [
2840 AC_TRY_COMPILE(
2841 [
cbd7492e 2842#include <sys/types.h>
58d100bf 2843#include <netinet/in.h>
2844 ],
2845 [ struct sockaddr_in6 s; s.sin6_family = 0; ],
2846 [ ac_cv_have_struct_sockaddr_in6="yes" ],
2847 [ ac_cv_have_struct_sockaddr_in6="no" ]
2848 )
2849])
2850if test "x$ac_cv_have_struct_sockaddr_in6" = "xyes" ; then
3466e002 2851 AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6, 1,
2852 [define if you have struct sockaddr_in6 data type])
58d100bf 2853fi
48e671d5 2854
58d100bf 2855AC_CACHE_CHECK([for struct in6_addr], ac_cv_have_struct_in6_addr, [
2856 AC_TRY_COMPILE(
2857 [
cbd7492e 2858#include <sys/types.h>
58d100bf 2859#include <netinet/in.h>
2860 ],
2861 [ struct in6_addr s; s.s6_addr[0] = 0; ],
2862 [ ac_cv_have_struct_in6_addr="yes" ],
2863 [ ac_cv_have_struct_in6_addr="no" ]
2864 )
2865])
2866if test "x$ac_cv_have_struct_in6_addr" = "xyes" ; then
3466e002 2867 AC_DEFINE(HAVE_STRUCT_IN6_ADDR, 1,
2868 [define if you have struct in6_addr data type])
95e16084 2869
2870dnl Now check for sin6_scope_id
2871 AC_CHECK_MEMBERS([struct sockaddr_in6.sin6_scope_id],,,
2872 [
2873#ifdef HAVE_SYS_TYPES_H
2874#include <sys/types.h>
2875#endif
2876#include <netinet/in.h>
2877 ])
58d100bf 2878fi
48e671d5 2879
58d100bf 2880AC_CACHE_CHECK([for struct addrinfo], ac_cv_have_struct_addrinfo, [
2881 AC_TRY_COMPILE(
2882 [
18ba2aab 2883#include <sys/types.h>
2884#include <sys/socket.h>
2885#include <netdb.h>
58d100bf 2886 ],
2887 [ struct addrinfo s; s.ai_flags = AI_PASSIVE; ],
2888 [ ac_cv_have_struct_addrinfo="yes" ],
2889 [ ac_cv_have_struct_addrinfo="no" ]
2890 )
2891])
2892if test "x$ac_cv_have_struct_addrinfo" = "xyes" ; then
3466e002 2893 AC_DEFINE(HAVE_STRUCT_ADDRINFO, 1,
2894 [define if you have struct addrinfo data type])
58d100bf 2895fi
2896
89c7e31c 2897AC_CACHE_CHECK([for struct timeval], ac_cv_have_struct_timeval, [
2898 AC_TRY_COMPILE(
aff51935 2899 [ #include <sys/time.h> ],
2900 [ struct timeval tv; tv.tv_sec = 1;],
89c7e31c 2901 [ ac_cv_have_struct_timeval="yes" ],
2902 [ ac_cv_have_struct_timeval="no" ]
2903 )
2904])
2905if test "x$ac_cv_have_struct_timeval" = "xyes" ; then
3466e002 2906 AC_DEFINE(HAVE_STRUCT_TIMEVAL, 1, [define if you have struct timeval])
89c7e31c 2907 have_struct_timeval=1
2908fi
2909
5271b55c 2910AC_CHECK_TYPES(struct timespec)
2911
85abc74b 2912# We need int64_t or else certian parts of the compile will fail.
4b492aab 2913if test "x$ac_cv_have_int64_t" = "xno" && \
2914 test "x$ac_cv_sizeof_long_int" != "x8" && \
2915 test "x$ac_cv_sizeof_long_long_int" = "x0" ; then
85abc74b 2916 echo "OpenSSH requires int64_t support. Contact your vendor or install"
2917 echo "an alternative compiler (I.E., GCC) before continuing."
2918 echo ""
2919 exit 1;
733cf7f4 2920else
2921dnl test snprintf (broken on SCO w/gcc)
1a01a50c 2922 AC_RUN_IFELSE(
479cece8 2923 [AC_LANG_SOURCE([[
733cf7f4 2924#include <stdio.h>
2925#include <string.h>
2926#ifdef HAVE_SNPRINTF
2927main()
2928{
2929 char buf[50];
2930 char expected_out[50];
2931 int mazsize = 50 ;
2932#if (SIZEOF_LONG_INT == 8)
2933 long int num = 0x7fffffffffffffff;
2934#else
763a1a18 2935 long long num = 0x7fffffffffffffffll;
733cf7f4 2936#endif
2937 strcpy(expected_out, "9223372036854775807");
2938 snprintf(buf, mazsize, "%lld", num);
2939 if(strcmp(buf, expected_out) != 0)
aff51935 2940 exit(1);
733cf7f4 2941 exit(0);
2942}
2943#else
2944main() { exit(0); }
2945#endif
479cece8 2946 ]])], [ true ], [ AC_DEFINE(BROKEN_SNPRINTF) ],
1a01a50c 2947 AC_MSG_WARN([cross compiling: Assuming working snprintf()])
733cf7f4 2948 )
2c523de9 2949fi
2950
77bb0bca 2951dnl Checks for structure members
58d100bf 2952OSSH_CHECK_HEADER_FOR_FIELD(ut_host, utmp.h, HAVE_HOST_IN_UTMP)
2953OSSH_CHECK_HEADER_FOR_FIELD(ut_host, utmpx.h, HAVE_HOST_IN_UTMPX)
2954OSSH_CHECK_HEADER_FOR_FIELD(syslen, utmpx.h, HAVE_SYSLEN_IN_UTMPX)
2955OSSH_CHECK_HEADER_FOR_FIELD(ut_pid, utmp.h, HAVE_PID_IN_UTMP)
2956OSSH_CHECK_HEADER_FOR_FIELD(ut_type, utmp.h, HAVE_TYPE_IN_UTMP)
25422c70 2957OSSH_CHECK_HEADER_FOR_FIELD(ut_type, utmpx.h, HAVE_TYPE_IN_UTMPX)
58d100bf 2958OSSH_CHECK_HEADER_FOR_FIELD(ut_tv, utmp.h, HAVE_TV_IN_UTMP)
2959OSSH_CHECK_HEADER_FOR_FIELD(ut_id, utmp.h, HAVE_ID_IN_UTMP)
daaff4d5 2960OSSH_CHECK_HEADER_FOR_FIELD(ut_id, utmpx.h, HAVE_ID_IN_UTMPX)
58d100bf 2961OSSH_CHECK_HEADER_FOR_FIELD(ut_addr, utmp.h, HAVE_ADDR_IN_UTMP)
2962OSSH_CHECK_HEADER_FOR_FIELD(ut_addr, utmpx.h, HAVE_ADDR_IN_UTMPX)
2963OSSH_CHECK_HEADER_FOR_FIELD(ut_addr_v6, utmp.h, HAVE_ADDR_V6_IN_UTMP)
2964OSSH_CHECK_HEADER_FOR_FIELD(ut_addr_v6, utmpx.h, HAVE_ADDR_V6_IN_UTMPX)
1d7b9b20 2965OSSH_CHECK_HEADER_FOR_FIELD(ut_exit, utmp.h, HAVE_EXIT_IN_UTMP)
2966OSSH_CHECK_HEADER_FOR_FIELD(ut_time, utmp.h, HAVE_TIME_IN_UTMP)
2967OSSH_CHECK_HEADER_FOR_FIELD(ut_time, utmpx.h, HAVE_TIME_IN_UTMPX)
2968OSSH_CHECK_HEADER_FOR_FIELD(ut_tv, utmpx.h, HAVE_TV_IN_UTMPX)
98a7c37b 2969
2970AC_CHECK_MEMBERS([struct stat.st_blksize])
ccc45ee0 2971AC_CHECK_MEMBER([struct __res_state.retrans], [], [AC_DEFINE(__res_state, state,
2972 [Define if we don't have struct __res_state in resolv.h])],
2973[
2974#include <stdio.h>
2975#if HAVE_SYS_TYPES_H
2976# include <sys/types.h>
2977#endif
2978#include <netinet/in.h>
2979#include <arpa/nameser.h>
2980#include <resolv.h>
2981])
1d7b9b20 2982
58d100bf 2983AC_CACHE_CHECK([for ss_family field in struct sockaddr_storage],
2984 ac_cv_have_ss_family_in_struct_ss, [
2985 AC_TRY_COMPILE(
2986 [
18ba2aab 2987#include <sys/types.h>
2988#include <sys/socket.h>
58d100bf 2989 ],
2990 [ struct sockaddr_storage s; s.ss_family = 1; ],
2991 [ ac_cv_have_ss_family_in_struct_ss="yes" ],
2992 [ ac_cv_have_ss_family_in_struct_ss="no" ],
2993 )
2994])
2995if test "x$ac_cv_have_ss_family_in_struct_ss" = "xyes" ; then
3466e002 2996 AC_DEFINE(HAVE_SS_FAMILY_IN_SS, 1, [Fields in struct sockaddr_storage])
58d100bf 2997fi
2998
58d100bf 2999AC_CACHE_CHECK([for __ss_family field in struct sockaddr_storage],
3000 ac_cv_have___ss_family_in_struct_ss, [
3001 AC_TRY_COMPILE(
3002 [
18ba2aab 3003#include <sys/types.h>
3004#include <sys/socket.h>
58d100bf 3005 ],
3006 [ struct sockaddr_storage s; s.__ss_family = 1; ],
3007 [ ac_cv_have___ss_family_in_struct_ss="yes" ],
3008 [ ac_cv_have___ss_family_in_struct_ss="no" ]
3009 )
3010])
3011if test "x$ac_cv_have___ss_family_in_struct_ss" = "xyes" ; then
3466e002 3012 AC_DEFINE(HAVE___SS_FAMILY_IN_SS, 1,
3013 [Fields in struct sockaddr_storage])
58d100bf 3014fi
3015
2e73a022 3016AC_CACHE_CHECK([for pw_class field in struct passwd],
3017 ac_cv_have_pw_class_in_struct_passwd, [
3018 AC_TRY_COMPILE(
3019 [
2e73a022 3020#include <pwd.h>
3021 ],
97994d32 3022 [ struct passwd p; p.pw_class = 0; ],
2e73a022 3023 [ ac_cv_have_pw_class_in_struct_passwd="yes" ],
3024 [ ac_cv_have_pw_class_in_struct_passwd="no" ]
3025 )
3026])
3027if test "x$ac_cv_have_pw_class_in_struct_passwd" = "xyes" ; then
3466e002 3028 AC_DEFINE(HAVE_PW_CLASS_IN_PASSWD, 1,
3029 [Define if your password has a pw_class field])
2e73a022 3030fi
3031
7751d4eb 3032AC_CACHE_CHECK([for pw_expire field in struct passwd],
3033 ac_cv_have_pw_expire_in_struct_passwd, [
3034 AC_TRY_COMPILE(
3035 [
3036#include <pwd.h>
3037 ],
3038 [ struct passwd p; p.pw_expire = 0; ],
3039 [ ac_cv_have_pw_expire_in_struct_passwd="yes" ],
3040 [ ac_cv_have_pw_expire_in_struct_passwd="no" ]
3041 )
3042])
3043if test "x$ac_cv_have_pw_expire_in_struct_passwd" = "xyes" ; then
3466e002 3044 AC_DEFINE(HAVE_PW_EXPIRE_IN_PASSWD, 1,
3045 [Define if your password has a pw_expire field])
7751d4eb 3046fi
3047
3048AC_CACHE_CHECK([for pw_change field in struct passwd],
3049 ac_cv_have_pw_change_in_struct_passwd, [
3050 AC_TRY_COMPILE(
3051 [
3052#include <pwd.h>
3053 ],
3054 [ struct passwd p; p.pw_change = 0; ],
3055 [ ac_cv_have_pw_change_in_struct_passwd="yes" ],
3056 [ ac_cv_have_pw_change_in_struct_passwd="no" ]
3057 )
3058])
3059if test "x$ac_cv_have_pw_change_in_struct_passwd" = "xyes" ; then
3466e002 3060 AC_DEFINE(HAVE_PW_CHANGE_IN_PASSWD, 1,
3061 [Define if your password has a pw_change field])
7751d4eb 3062fi
58d100bf 3063
637f9177 3064dnl make sure we're using the real structure members and not defines
6f34652e 3065AC_CACHE_CHECK([for msg_accrights field in struct msghdr],
3066 ac_cv_have_accrights_in_msghdr, [
1a01a50c 3067 AC_COMPILE_IFELSE(
6f34652e 3068 [
f95c8ce8 3069#include <sys/types.h>
6f34652e 3070#include <sys/socket.h>
3071#include <sys/uio.h>
637f9177 3072int main() {
3073#ifdef msg_accrights
1a01a50c 3074#error "msg_accrights is a macro"
637f9177 3075exit(1);
3076#endif
3077struct msghdr m;
3078m.msg_accrights = 0;
3079exit(0);
3080}
6f34652e 3081 ],
6f34652e 3082 [ ac_cv_have_accrights_in_msghdr="yes" ],
3083 [ ac_cv_have_accrights_in_msghdr="no" ]
3084 )
3085])
3086if test "x$ac_cv_have_accrights_in_msghdr" = "xyes" ; then
3466e002 3087 AC_DEFINE(HAVE_ACCRIGHTS_IN_MSGHDR, 1,
3088 [Define if your system uses access rights style
3089 file descriptor passing])
6f34652e 3090fi
3091
87562a58 3092AC_MSG_CHECKING(if struct statvfs.f_fsid is integral type)
7a4f468b 3093AC_TRY_COMPILE([
3094#include <sys/types.h>
87562a58 3095#include <sys/stat.h>
3096#ifdef HAVE_SYS_TIME_H
3097# include <sys/time.h>
3098#endif
3099#ifdef HAVE_SYS_MOUNT_H
3100#include <sys/mount.h>
3101#endif
3102#ifdef HAVE_SYS_STATVFS_H
3103#include <sys/statvfs.h>
3104#endif
3105], [struct statvfs s; s.f_fsid = 0;],
3106[ AC_MSG_RESULT(yes) ],
3107[ AC_MSG_RESULT(no)
3108
3109 AC_MSG_CHECKING(if fsid_t has member val)
3110 AC_TRY_COMPILE([
3111#include <sys/types.h>
7a4f468b 3112#include <sys/statvfs.h>],
87562a58 3113 [fsid_t t; t.val[0] = 0;],
7a4f468b 3114 [ AC_MSG_RESULT(yes)
87562a58 3115 AC_DEFINE(FSID_HAS_VAL, 1, fsid_t has member val) ],
3116 [ AC_MSG_RESULT(no) ])
3117
3118 AC_MSG_CHECKING(if f_fsid has member __val)
3119 AC_TRY_COMPILE([
3120#include <sys/types.h>
3121#include <sys/statvfs.h>],
3122 [fsid_t t; t.__val[0] = 0;],
3123 [ AC_MSG_RESULT(yes)
3124 AC_DEFINE(FSID_HAS___VAL, 1, fsid_t has member __val) ],
3125 [ AC_MSG_RESULT(no) ])
3126])
7a4f468b 3127
7176df4f 3128AC_CACHE_CHECK([for msg_control field in struct msghdr],
3129 ac_cv_have_control_in_msghdr, [
1a01a50c 3130 AC_COMPILE_IFELSE(
7176df4f 3131 [
f95c8ce8 3132#include <sys/types.h>
7176df4f 3133#include <sys/socket.h>
3134#include <sys/uio.h>
637f9177 3135int main() {
3136#ifdef msg_control
1a01a50c 3137#error "msg_control is a macro"
637f9177 3138exit(1);
3139#endif
3140struct msghdr m;
3141m.msg_control = 0;
3142exit(0);
3143}
7176df4f 3144 ],
7176df4f 3145 [ ac_cv_have_control_in_msghdr="yes" ],
3146 [ ac_cv_have_control_in_msghdr="no" ]
3147 )
3148])
3149if test "x$ac_cv_have_control_in_msghdr" = "xyes" ; then
3466e002 3150 AC_DEFINE(HAVE_CONTROL_IN_MSGHDR, 1,
3151 [Define if your system uses ancillary data style
3152 file descriptor passing])
7176df4f 3153fi
3154
58d100bf 3155AC_CACHE_CHECK([if libc defines __progname], ac_cv_libc_defines___progname, [
aff51935 3156 AC_TRY_LINK([],
3157 [ extern char *__progname; printf("%s", __progname); ],
58d100bf 3158 [ ac_cv_libc_defines___progname="yes" ],
3159 [ ac_cv_libc_defines___progname="no" ]
3160 )
3161])
3162if test "x$ac_cv_libc_defines___progname" = "xyes" ; then
3466e002 3163 AC_DEFINE(HAVE___PROGNAME, 1, [Define if libc defines __progname])
58d100bf 3164fi
8946db53 3165
c921ee00 3166AC_CACHE_CHECK([whether $CC implements __FUNCTION__], ac_cv_cc_implements___FUNCTION__, [
3167 AC_TRY_LINK([
3168#include <stdio.h>
aff51935 3169],
3170 [ printf("%s", __FUNCTION__); ],
c921ee00 3171 [ ac_cv_cc_implements___FUNCTION__="yes" ],
3172 [ ac_cv_cc_implements___FUNCTION__="no" ]
3173 )
3174])
3175if test "x$ac_cv_cc_implements___FUNCTION__" = "xyes" ; then
3466e002 3176 AC_DEFINE(HAVE___FUNCTION__, 1,
3177 [Define if compiler implements __FUNCTION__])
c921ee00 3178fi
3179
3180AC_CACHE_CHECK([whether $CC implements __func__], ac_cv_cc_implements___func__, [
3181 AC_TRY_LINK([
3182#include <stdio.h>
aff51935 3183],
3184 [ printf("%s", __func__); ],
c921ee00 3185 [ ac_cv_cc_implements___func__="yes" ],
3186 [ ac_cv_cc_implements___func__="no" ]
3187 )
3188])
3189if test "x$ac_cv_cc_implements___func__" = "xyes" ; then
3466e002 3190 AC_DEFINE(HAVE___func__, 1, [Define if compiler implements __func__])
c921ee00 3191fi
3192
9a406e1e 3193AC_CACHE_CHECK([whether va_copy exists], ac_cv_have_va_copy, [
3194 AC_TRY_LINK(
3195 [#include <stdarg.h>
3196 va_list x,y;],
3197 [va_copy(x,y);],
3198 [ ac_cv_have_va_copy="yes" ],
3199 [ ac_cv_have_va_copy="no" ]
3200 )
3201])
3202if test "x$ac_cv_have_va_copy" = "xyes" ; then
3203 AC_DEFINE(HAVE_VA_COPY, 1, [Define if va_copy exists])
3204fi
3205
3206AC_CACHE_CHECK([whether __va_copy exists], ac_cv_have___va_copy, [
3207 AC_TRY_LINK(
3208 [#include <stdarg.h>
3209 va_list x,y;],
3210 [__va_copy(x,y);],
3211 [ ac_cv_have___va_copy="yes" ],
3212 [ ac_cv_have___va_copy="no" ]
3213 )
3214])
3215if test "x$ac_cv_have___va_copy" = "xyes" ; then
3216 AC_DEFINE(HAVE___VA_COPY, 1, [Define if __va_copy exists])
3217fi
3218
1812a662 3219AC_CACHE_CHECK([whether getopt has optreset support],
3220 ac_cv_have_getopt_optreset, [
3221 AC_TRY_LINK(
3222 [
3223#include <getopt.h>
3224 ],
3225 [ extern int optreset; optreset = 0; ],
3226 [ ac_cv_have_getopt_optreset="yes" ],
3227 [ ac_cv_have_getopt_optreset="no" ]
3228 )
3229])
3230if test "x$ac_cv_have_getopt_optreset" = "xyes" ; then
3466e002 3231 AC_DEFINE(HAVE_GETOPT_OPTRESET, 1,
3232 [Define if your getopt(3) defines and uses optreset])
1812a662 3233fi
a0391976 3234
819b676f 3235AC_CACHE_CHECK([if libc defines sys_errlist], ac_cv_libc_defines_sys_errlist, [
aff51935 3236 AC_TRY_LINK([],
3237 [ extern const char *const sys_errlist[]; printf("%s", sys_errlist[0]);],
819b676f 3238 [ ac_cv_libc_defines_sys_errlist="yes" ],
3239 [ ac_cv_libc_defines_sys_errlist="no" ]
3240 )
3241])
3242if test "x$ac_cv_libc_defines_sys_errlist" = "xyes" ; then
3466e002 3243 AC_DEFINE(HAVE_SYS_ERRLIST, 1,
3244 [Define if your system defines sys_errlist[]])
819b676f 3245fi
3246
3247
416ed5a7 3248AC_CACHE_CHECK([if libc defines sys_nerr], ac_cv_libc_defines_sys_nerr, [
aff51935 3249 AC_TRY_LINK([],
3250 [ extern int sys_nerr; printf("%i", sys_nerr);],
416ed5a7 3251 [ ac_cv_libc_defines_sys_nerr="yes" ],
3252 [ ac_cv_libc_defines_sys_nerr="no" ]
3253 )
3254])
3255if test "x$ac_cv_libc_defines_sys_nerr" = "xyes" ; then
3466e002 3256 AC_DEFINE(HAVE_SYS_NERR, 1, [Define if your system defines sys_nerr])
416ed5a7 3257fi
3258
aff51935 3259SCARD_MSG="no"
295c8801 3260# Check whether user wants sectok support
3261AC_ARG_WITH(sectok,
3262 [ --with-sectok Enable smartcard support using libsectok],
d0b19c95 3263 [
3264 if test "x$withval" != "xno" ; then
3265 if test "x$withval" != "xyes" ; then
3266 CPPFLAGS="$CPPFLAGS -I${withval}"
3267 LDFLAGS="$LDFLAGS -L${withval}"
3268 if test ! -z "$need_dash_r" ; then
3269 LDFLAGS="$LDFLAGS -R${withval}"
3270 fi
3271 if test ! -z "$blibpath" ; then
3272 blibpath="$blibpath:${withval}"
3273 fi
3274 fi
3275 AC_CHECK_HEADERS(sectok.h)
3276 if test "$ac_cv_header_sectok_h" != yes; then
3277 AC_MSG_ERROR(Can't find sectok.h)
3278 fi
3279 AC_CHECK_LIB(sectok, sectok_open)
3280 if test "$ac_cv_lib_sectok_sectok_open" != yes; then
3281 AC_MSG_ERROR(Can't find libsectok)
3282 fi
3466e002 3283 AC_DEFINE(SMARTCARD, 1,
3284 [Define if you want smartcard support])
3285 AC_DEFINE(USE_SECTOK, 1,
3286 [Define if you want smartcard support
3287 using sectok])
aff51935 3288 SCARD_MSG="yes, using sectok"
295c8801 3289 fi
3290 ]
3291)
3292
3293# Check whether user wants OpenSC support
987b458f 3294OPENSC_CONFIG="no"
295c8801 3295AC_ARG_WITH(opensc,
e47fb473 3296 [ --with-opensc[[=PFX]] Enable smartcard support using OpenSC (optionally in PATH)],
987b458f 3297 [
3298 if test "x$withval" != "xno" ; then
6b52ddbd 3299 AC_PATH_PROG(PKGCONFIG, pkg-config, no)
3300 AC_MSG_CHECKING(how to get opensc config)
3301 if test "x$withval" != "xyes" -a "x$PKGCONFIG" = "xno"; then
3302 OPENSC_CONFIG="$withval/bin/opensc-config"
3303 elif test -f "$withval/src/libopensc/libopensc.pc"; then
3304 OPENSC_CONFIG="$PKGCONFIG $withval/src/libopensc/libopensc.pc"
3305 elif test "x$PKGCONFIG" != "xno"; then
3306 OPENSC_CONFIG="$PKGCONFIG libopensc"
987b458f 3307 else
6b52ddbd 3308 AC_PATH_PROG(OPENSC_CONFIG, opensc-config, no)
987b458f 3309 fi
6b52ddbd 3310 AC_MSG_RESULT($OPENSC_CONFIG)
987b458f 3311 if test "$OPENSC_CONFIG" != "no"; then
3312 LIBOPENSC_CFLAGS=`$OPENSC_CONFIG --cflags`
3313 LIBOPENSC_LIBS=`$OPENSC_CONFIG --libs`
3314 CPPFLAGS="$CPPFLAGS $LIBOPENSC_CFLAGS"
530456f4 3315 LIBS="$LIBS $LIBOPENSC_LIBS"
987b458f 3316 AC_DEFINE(SMARTCARD)
3466e002 3317 AC_DEFINE(USE_OPENSC, 1,
3318 [Define if you want smartcard support
3319 using OpenSC])
987b458f 3320 SCARD_MSG="yes, using OpenSC"
3321 fi
3322 fi
3323 ]
3324)
d0b19c95 3325
c31dc31c 3326# Check libraries needed by DNS fingerprint support
aff51935 3327AC_SEARCH_LIBS(getrrsetbyname, resolv,
3466e002 3328 [AC_DEFINE(HAVE_GETRRSETBYNAME, 1,
3329 [Define if getrrsetbyname() exists])],
3e05e934 3330 [
c31dc31c 3331 # Needed by our getrrsetbyname()
3332 AC_SEARCH_LIBS(res_query, resolv)
3333 AC_SEARCH_LIBS(dn_expand, resolv)
dabb524a 3334 AC_MSG_CHECKING(if res_query will link)
a37250f4 3335 AC_LINK_IFELSE([
3336#include "confdefs.h"
3337#include <sys/types.h>
3338#include <netinet/in.h>
3339#include <arpa/nameser.h>
3340#include <netdb.h>
3341#include <resolv.h>
3342int main()
3343{
3344 res_query (0, 0, 0, 0, 0);
3345 return 0;
3346}
3347 ],
3348 AC_MSG_RESULT(yes),
dabb524a 3349 [AC_MSG_RESULT(no)
3350 saved_LIBS="$LIBS"
3351 LIBS="$LIBS -lresolv"
3352 AC_MSG_CHECKING(for res_query in -lresolv)
3353 AC_LINK_IFELSE([
a37250f4 3354#include "confdefs.h"
3355#include <sys/types.h>
3356#include <netinet/in.h>
3357#include <arpa/nameser.h>
3358#include <netdb.h>
dabb524a 3359#include <resolv.h>
3360int main()
3361{
3362 res_query (0, 0, 0, 0, 0);
3363 return 0;
3364}
3365 ],
a37250f4 3366 [AC_MSG_RESULT(yes)],
dabb524a 3367 [LIBS="$saved_LIBS"
3368 AC_MSG_RESULT(no)])
3369 ])
c31dc31c 3370 AC_CHECK_FUNCS(_getshort _getlong)
1c829da5 3371 AC_CHECK_DECLS([_getshort, _getlong], , ,
b5765e1d 3372 [#include <sys/types.h>
3373 #include <arpa/nameser.h>])
c31dc31c 3374 AC_CHECK_MEMBER(HEADER.ad,
3466e002 3375 [AC_DEFINE(HAVE_HEADER_AD, 1,
3376 [Define if HEADER.ad exists in arpa/nameser.h])],,
c31dc31c 3377 [#include <arpa/nameser.h>])
3378 ])
3e05e934 3379
560acf80 3380AC_MSG_CHECKING(if struct __res_state _res is an extern)
3381AC_LINK_IFELSE([
3382#include <stdio.h>
3383#if HAVE_SYS_TYPES_H
3384# include <sys/types.h>
3385#endif
3386#include <netinet/in.h>
3387#include <arpa/nameser.h>
3388#include <resolv.h>
3389extern struct __res_state _res;
3390int main() { return 0; }
3391 ],
3392 [AC_MSG_RESULT(yes)
3393 AC_DEFINE(HAVE__RES_EXTERN, 1,
3394 [Define if you have struct __res_state _res as an extern])
3395 ],
3396 [ AC_MSG_RESULT(no) ]
3397)
3398
ef4d1846 3399# Check whether user wants SELinux support
3400SELINUX_MSG="no"
3401LIBSELINUX=""
3402AC_ARG_WITH(selinux,
bb23b54f 3403 [ --with-selinux Enable SELinux support],
ef4d1846 3404 [ if test "x$withval" != "xno" ; then
e54defb4 3405 save_LIBS="$LIBS"
ef4d1846 3406 AC_DEFINE(WITH_SELINUX,1,[Define if you want SELinux support.])
3407 SELINUX_MSG="yes"
3408 AC_CHECK_HEADER([selinux/selinux.h], ,
3409 AC_MSG_ERROR(SELinux support requires selinux.h header))
3410 AC_CHECK_LIB(selinux, setexeccon, [ LIBSELINUX="-lselinux" ],
3411 AC_MSG_ERROR(SELinux support requires libselinux library))
e54defb4 3412 SSHDLIBS="$SSHDLIBS $LIBSELINUX"
ef4d1846 3413 AC_CHECK_FUNCS(getseuserbyname get_default_context_with_level)
5ba277eb 3414 LIBS="$save_LIBS"
ef4d1846 3415 fi ]
3416)
ef4d1846 3417
12928e80 3418# Check whether user wants Kerberos 5 support
aff51935 3419KRB5_MSG="no"
12928e80 3420AC_ARG_WITH(kerberos5,
aff51935 3421 [ --with-kerberos5=PATH Enable Kerberos 5 support],
5585c441 3422 [ if test "x$withval" != "xno" ; then
3423 if test "x$withval" = "xyes" ; then
3424 KRB5ROOT="/usr/local"
3425 else
3426 KRB5ROOT=${withval}
3427 fi
3428
3466e002 3429 AC_DEFINE(KRB5, 1, [Define if you want Kerberos 5 support])
5585c441 3430 KRB5_MSG="yes"
3431
3acad382 3432 AC_PATH_PROG([KRB5CONF],[krb5-config],
3433 [$KRB5ROOT/bin/krb5-config],
3434 [$KRB5ROOT/bin:$PATH])
3435 if test -x $KRB5CONF ; then
5585c441 3436
3437 AC_MSG_CHECKING(for gssapi support)
3438 if $KRB5CONF | grep gssapi >/dev/null ; then
3439 AC_MSG_RESULT(yes)
3466e002 3440 AC_DEFINE(GSSAPI, 1,
3441 [Define this if you want GSSAPI
3442 support in the version 2 protocol])
071970fb 3443 k5confopts=gssapi
aff51935 3444 else
5585c441 3445 AC_MSG_RESULT(no)
071970fb 3446 k5confopts=""
aff51935 3447 fi
071970fb 3448 K5CFLAGS="`$KRB5CONF --cflags $k5confopts`"
3449 K5LIBS="`$KRB5CONF --libs $k5confopts`"
5585c441 3450 CPPFLAGS="$CPPFLAGS $K5CFLAGS"
5585c441 3451 AC_MSG_CHECKING(whether we are using Heimdal)
3452 AC_TRY_COMPILE([ #include <krb5.h> ],
3453 [ char *tmp = heimdal_version; ],
3454 [ AC_MSG_RESULT(yes)
3466e002 3455 AC_DEFINE(HEIMDAL, 1,
3456 [Define this if you are using the
3457 Heimdal version of Kerberos V5]) ],
5585c441 3458 AC_MSG_RESULT(no)
3459 )
3460 else
12928e80 3461 CPPFLAGS="$CPPFLAGS -I${KRB5ROOT}/include"
aff51935 3462 LDFLAGS="$LDFLAGS -L${KRB5ROOT}/lib"
aff51935 3463 AC_MSG_CHECKING(whether we are using Heimdal)
3464 AC_TRY_COMPILE([ #include <krb5.h> ],
3465 [ char *tmp = heimdal_version; ],
3466 [ AC_MSG_RESULT(yes)
3467 AC_DEFINE(HEIMDAL)
41707f74 3468 K5LIBS="-lkrb5 -ldes"
3469 K5LIBS="$K5LIBS -lcom_err -lasn1"
82f4e93d 3470 AC_CHECK_LIB(roken, net_write,
41707f74 3471 [K5LIBS="$K5LIBS -lroken"])
aff51935 3472 ],
3473 [ AC_MSG_RESULT(no)
3474 K5LIBS="-lkrb5 -lk5crypto -lcom_err"
3475 ]
3476 )
4e00038c 3477 AC_SEARCH_LIBS(dn_expand, resolv)
12928e80 3478
596a825b 3479 AC_CHECK_LIB(gssapi_krb5, gss_init_sec_context,
749560dd 3480 [ AC_DEFINE(GSSAPI)
596a825b 3481 K5LIBS="-lgssapi_krb5 $K5LIBS" ],
3482 [ AC_CHECK_LIB(gssapi, gss_init_sec_context,
749560dd 3483 [ AC_DEFINE(GSSAPI)
596a825b 3484 K5LIBS="-lgssapi $K5LIBS" ],
749560dd 3485 AC_MSG_WARN([Cannot find any suitable gss-api library - build may fail]),
3486 $K5LIBS)
3487 ],
3488 $K5LIBS)
82f4e93d 3489
749560dd 3490 AC_CHECK_HEADER(gssapi.h, ,
3491 [ unset ac_cv_header_gssapi_h
aff51935 3492 CPPFLAGS="$CPPFLAGS -I${KRB5ROOT}/include/gssapi"
749560dd 3493 AC_CHECK_HEADERS(gssapi.h, ,
3494 AC_MSG_WARN([Cannot find any suitable gss-api header - build may fail])
aff51935 3495 )
749560dd 3496 ]
3497 )
3498
3499 oldCPP="$CPPFLAGS"
3500 CPPFLAGS="$CPPFLAGS -I${KRB5ROOT}/include/gssapi"
3501 AC_CHECK_HEADER(gssapi_krb5.h, ,
3502 [ CPPFLAGS="$oldCPP" ])
3503
aff51935 3504 fi
5585c441 3505 if test ! -z "$need_dash_r" ; then
3506 LDFLAGS="$LDFLAGS -R${KRB5ROOT}/lib"
3507 fi
3508 if test ! -z "$blibpath" ; then
3509 blibpath="$blibpath:${KRB5ROOT}/lib"
3510 fi
071970fb 3511
f5555364 3512 AC_CHECK_HEADERS(gssapi.h gssapi/gssapi.h)
3513 AC_CHECK_HEADERS(gssapi_krb5.h gssapi/gssapi_krb5.h)
3514 AC_CHECK_HEADERS(gssapi_generic.h gssapi/gssapi_generic.h)
071970fb 3515
f5555364 3516 LIBS="$LIBS $K5LIBS"
3466e002 3517 AC_SEARCH_LIBS(k_hasafs, kafs, AC_DEFINE(USE_AFS, 1,
3518 [Define this if you want to use libkafs' AFS support]))
f5555364 3519 fi
071970fb 3520 ]
12928e80 3521)
b5b68128 3522
a0391976 3523# Looking for programs, paths and files
a0391976 3524
ecac8ee5 3525PRIVSEP_PATH=/var/empty
3526AC_ARG_WITH(privsep-path,
cda1ebcb 3527 [ --with-privsep-path=xxx Path for privilege separation chroot (default=/var/empty)],
ecac8ee5 3528 [
6cf0200f 3529 if test -n "$withval" && test "x$withval" != "xno" && \
3530 test "x${withval}" != "xyes"; then
ecac8ee5 3531 PRIVSEP_PATH=$withval
3532 fi
3533 ]
3534)
3535AC_SUBST(PRIVSEP_PATH)
3536
a0391976 3537AC_ARG_WITH(xauth,
3538 [ --with-xauth=PATH Specify path to xauth program ],
3539 [
6cf0200f 3540 if test -n "$withval" && test "x$withval" != "xno" && \
3541 test "x${withval}" != "xyes"; then
cbd7492e 3542 xauth_path=$withval
a0391976 3543 fi
3544 ],
3545 [
2bf42e4a 3546 TestPath="$PATH"
3547 TestPath="${TestPath}${PATH_SEPARATOR}/usr/X/bin"
3548 TestPath="${TestPath}${PATH_SEPARATOR}/usr/bin/X11"
3549 TestPath="${TestPath}${PATH_SEPARATOR}/usr/X11R6/bin"
3550 TestPath="${TestPath}${PATH_SEPARATOR}/usr/openwin/bin"
3551 AC_PATH_PROG(xauth_path, xauth, , $TestPath)
e5fe9a1f 3552 if (test ! -z "$xauth_path" && test -x "/usr/openwin/bin/xauth") ; then
a0391976 3553 xauth_path="/usr/openwin/bin/xauth"
3554 fi
3555 ]
3556)
3557
65a4b4af 3558STRIP_OPT=-s
3559AC_ARG_ENABLE(strip,
3560 [ --disable-strip Disable calling strip(1) on install],
3561 [
3562 if test "x$enableval" = "xno" ; then
3563 STRIP_OPT=
3564 fi
3565 ]
3566)
3567AC_SUBST(STRIP_OPT)
3568
b3ec54b4 3569if test -z "$xauth_path" ; then
3570 XAUTH_PATH="undefined"
3571 AC_SUBST(XAUTH_PATH)
3572else
3466e002 3573 AC_DEFINE_UNQUOTED(XAUTH_PATH, "$xauth_path",
3574 [Define if xauth is found in your path])
b3ec54b4 3575 XAUTH_PATH=$xauth_path
3576 AC_SUBST(XAUTH_PATH)
a0391976 3577fi
a0391976 3578
3579# Check for mail directory (last resort if we cannot get it from headers)
3580if test ! -z "$MAIL" ; then
3581 maildir=`dirname $MAIL`
3466e002 3582 AC_DEFINE_UNQUOTED(MAIL_DIRECTORY, "$maildir",
3583 [Set this to your mail directory if you don't have maillock.h])
a0391976 3584fi
3585
479cece8 3586if test ! -z "$cross_compiling" && test "x$cross_compiling" = "xyes"; then
1a01a50c 3587 AC_MSG_WARN([cross compiling: Disabling /dev/ptmx test])
3588 disable_ptmx_check=yes
3589fi
a0391976 3590if test -z "$no_dev_ptmx" ; then
6e879cb4 3591 if test "x$disable_ptmx_check" != "xyes" ; then
aff51935 3592 AC_CHECK_FILE("/dev/ptmx",
6e879cb4 3593 [
3466e002 3594 AC_DEFINE_UNQUOTED(HAVE_DEV_PTMX, 1,
3595 [Define if you have /dev/ptmx])
6e879cb4 3596 have_dev_ptmx=1
3597 ]
3598 )
3599 fi
3276571c 3600fi
1a01a50c 3601
479cece8 3602if test ! -z "$cross_compiling" && test "x$cross_compiling" != "xyes"; then
1a01a50c 3603 AC_CHECK_FILE("/dev/ptc",
3604 [
3466e002 3605 AC_DEFINE_UNQUOTED(HAVE_DEV_PTS_AND_PTC, 1,
3606 [Define if you have /dev/ptc])
1a01a50c 3607 have_dev_ptc=1
3608 ]
3609 )
3610else
3611 AC_MSG_WARN([cross compiling: Disabling /dev/ptc test])
3612fi
3276571c 3613
a0391976 3614# Options from here on. Some of these are preset by platform above
fdf6b7aa 3615AC_ARG_WITH(mantype,
5d97cfbf 3616 [ --with-mantype=man|cat|doc Set man page type],
c54a6257 3617 [
5d97cfbf 3618 case "$withval" in
3619 man|cat|doc)
3620 MANTYPE=$withval
3621 ;;
3622 *)
3623 AC_MSG_ERROR(invalid man type: $withval)
3624 ;;
3625 esac
c54a6257 3626 ]
3627)
e0c4d3ac 3628if test -z "$MANTYPE"; then
2bf42e4a 3629 TestPath="/usr/bin${PATH_SEPARATOR}/usr/ucb"
3630 AC_PATH_PROGS(NROFF, nroff awf, /bin/false, $TestPath)
e0c4d3ac 3631 if ${NROFF} -mdoc ${srcdir}/ssh.1 >/dev/null 2>&1; then
3632 MANTYPE=doc
3633 elif ${NROFF} -man ${srcdir}/ssh.1 >/dev/null 2>&1; then
3634 MANTYPE=man
3635 else
3636 MANTYPE=cat
3637 fi
3638fi
c54a6257 3639AC_SUBST(MANTYPE)
e0c4d3ac 3640if test "$MANTYPE" = "doc"; then
3641 mansubdir=man;
3642else
3643 mansubdir=$MANTYPE;
3644fi
3645AC_SUBST(mansubdir)
0bc5b6fb 3646
a0391976 3647# Check whether to enable MD5 passwords
aff51935 3648MD5_MSG="no"
2ddcfdf3 3649AC_ARG_WITH(md5-passwords,
caf3bc51 3650 [ --with-md5-passwords Enable use of MD5 passwords],
0bc5b6fb 3651 [
bcf36c78 3652 if test "x$withval" != "xno" ; then
3466e002 3653 AC_DEFINE(HAVE_MD5_PASSWORDS, 1,
3654 [Define if you want to allow MD5 passwords])
aff51935 3655 MD5_MSG="yes"
0bc5b6fb 3656 fi
3657 ]
caf3bc51 3658)
3659
a0391976 3660# Whether to disable shadow password support
a7effaac 3661AC_ARG_WITH(shadow,
3662 [ --without-shadow Disable shadow password support],
3663 [
82f4e93d 3664 if test "x$withval" = "xno" ; then
a7effaac 3665 AC_DEFINE(DISABLE_SHADOW)
4cb5ffa0 3666 disable_shadow=yes
a7effaac 3667 fi
3668 ]
3669)
3670
4cb5ffa0 3671if test -z "$disable_shadow" ; then
3672 AC_MSG_CHECKING([if the systems has expire shadow information])
3673 AC_TRY_COMPILE(
3674 [
3675#include <sys/types.h>
3676#include <shadow.h>
3677 struct spwd sp;
3678 ],[ sp.sp_expire = sp.sp_lstchg = sp.sp_inact = 0; ],
3679 [ sp_expire_available=yes ], []
3680 )
3681
3682 if test "x$sp_expire_available" = "xyes" ; then
3683 AC_MSG_RESULT(yes)
3466e002 3684 AC_DEFINE(HAS_SHADOW_EXPIRE, 1,
3685 [Define if you want to use shadow password expire field])
4cb5ffa0 3686 else
3687 AC_MSG_RESULT(no)
3688 fi
3689fi
3690
a0391976 3691# Use ip address instead of hostname in $DISPLAY
44839801 3692if test ! -z "$IPADDR_IN_DISPLAY" ; then
3693 DISPLAY_HACK_MSG="yes"
3466e002 3694 AC_DEFINE(IPADDR_IN_DISPLAY, 1,
3695 [Define if you need to use IP address
3696 instead of hostname in $DISPLAY])
44839801 3697else
aff51935 3698 DISPLAY_HACK_MSG="no"
44839801 3699 AC_ARG_WITH(ipaddr-display,
3700 [ --with-ipaddr-display Use ip address instead of hostname in \$DISPLAY],
3701 [
82f4e93d 3702 if test "x$withval" != "xno" ; then
44839801 3703 AC_DEFINE(IPADDR_IN_DISPLAY)
aff51935 3704 DISPLAY_HACK_MSG="yes"
44839801 3705 fi
3706 ]
3707 )
3708fi
a7effaac 3709
95b99395 3710# check for /etc/default/login and use it if present.
daa41e62 3711AC_ARG_ENABLE(etc-default-login,
6ff3d0dc 3712 [ --disable-etc-default-login Disable using PATH from /etc/default/login [no]],
694d0cef 3713 [ if test "x$enableval" = "xno"; then
3714 AC_MSG_NOTICE([/etc/default/login handling disabled])
3715 etc_default_login=no
3716 else
3717 etc_default_login=yes
3718 fi ],
b0e7249f 3719 [ if test ! -z "$cross_compiling" && test "x$cross_compiling" = "xyes";
3720 then
3721 AC_MSG_WARN([cross compiling: not checking /etc/default/login])
3722 etc_default_login=no
3723 else
3724 etc_default_login=yes
3725 fi ]
694d0cef 3726)
95b99395 3727
694d0cef 3728if test "x$etc_default_login" != "xno"; then
3729 AC_CHECK_FILE("/etc/default/login",
3730 [ external_path_file=/etc/default/login ])
b0e7249f 3731 if test "x$external_path_file" = "x/etc/default/login"; then
3466e002 3732 AC_DEFINE(HAVE_ETC_DEFAULT_LOGIN, 1,
3733 [Define if your system has /etc/default/login])
1a01a50c 3734 fi
694d0cef 3735fi
95b99395 3736
8d184c09 3737dnl BSD systems use /etc/login.conf so --with-default-path= has no effect
4b492aab 3738if test $ac_cv_func_login_getcapbool = "yes" && \
3739 test $ac_cv_header_login_cap_h = "yes" ; then
95b99395 3740 external_path_file=/etc/login.conf
8d184c09 3741fi
95b99395 3742
a0391976 3743# Whether to mess with the default path
aff51935 3744SERVER_PATH_MSG="(default)"
c43d69a9 3745AC_ARG_WITH(default-path,
75817f90 3746 [ --with-default-path= Specify default \$PATH environment for server],
cb807f40 3747 [
95b99395 3748 if test "x$external_path_file" = "x/etc/login.conf" ; then
8d184c09 3749 AC_MSG_WARN([
3750--with-default-path=PATH has no effect on this system.
3751Edit /etc/login.conf instead.])
82f4e93d 3752 elif test "x$withval" != "xno" ; then
89bbd457 3753 if test ! -z "$external_path_file" ; then
95b99395 3754 AC_MSG_WARN([
3755--with-default-path=PATH will only be used if PATH is not defined in
3756$external_path_file .])
3757 fi
b2d818e6 3758 user_path="$withval"
aff51935 3759 SERVER_PATH_MSG="$withval"
cb807f40 3760 fi
b2d818e6 3761 ],
95b99395 3762 [ if test "x$external_path_file" = "x/etc/login.conf" ; then
3763 AC_MSG_WARN([Make sure the path to scp is in /etc/login.conf])
8d184c09 3764 else
89bbd457 3765 if test ! -z "$external_path_file" ; then
95b99395 3766 AC_MSG_WARN([
3767If PATH is defined in $external_path_file, ensure the path to scp is included,
3768otherwise scp will not work.])
3769 fi
b0e7249f 3770 AC_RUN_IFELSE(
3771 [AC_LANG_SOURCE([[
b2d818e6 3772/* find out what STDPATH is */
3773#include <stdio.h>
b2d818e6 3774#ifdef HAVE_PATHS_H
3775# include <paths.h>
3776#endif
3777#ifndef _PATH_STDPATH
d9a4e55b 3778# ifdef _PATH_USERPATH /* Irix */
3779# define _PATH_STDPATH _PATH_USERPATH
3780# else
3781# define _PATH_STDPATH "/usr/bin:/bin:/usr/sbin:/sbin"
3782# endif
b2d818e6 3783#endif
3784#include <sys/types.h>
3785#include <sys/stat.h>
3786#include <fcntl.h>
3787#define DATA "conftest.stdpath"
3788
3789main()
3790{
3791 FILE *fd;
3792 int rc;
82f4e93d 3793
b2d818e6 3794 fd = fopen(DATA,"w");
3795 if(fd == NULL)
3796 exit(1);
82f4e93d 3797
b2d818e6 3798 if ((rc = fprintf(fd,"%s", _PATH_STDPATH)) < 0)
3799 exit(1);
3800
3801 exit(0);
3802}
b0e7249f 3803 ]])],
3804 [ user_path=`cat conftest.stdpath` ],
b2d818e6 3805 [ user_path="/usr/bin:/bin:/usr/sbin:/sbin" ],
3806 [ user_path="/usr/bin:/bin:/usr/sbin:/sbin" ]
3807 )
3808# make sure $bindir is in USER_PATH so scp will work
3809 t_bindir=`eval echo ${bindir}`
3810 case $t_bindir in
3811 NONE/*) t_bindir=`echo $t_bindir | sed "s~NONE~$prefix~"` ;;
3812 esac
3813 case $t_bindir in
3814 NONE/*) t_bindir=`echo $t_bindir | sed "s~NONE~$ac_default_prefix~"` ;;
3815 esac
3816 echo $user_path | grep ":$t_bindir" > /dev/null 2>&1
3817 if test $? -ne 0 ; then
3818 echo $user_path | grep "^$t_bindir" > /dev/null 2>&1
3819 if test $? -ne 0 ; then
3820 user_path=$user_path:$t_bindir
3821 AC_MSG_RESULT(Adding $t_bindir to USER_PATH so scp will work)
3822 fi
3823 fi
8d184c09 3824 fi ]
cb807f40 3825)
95b99395 3826if test "x$external_path_file" != "x/etc/login.conf" ; then
3466e002 3827 AC_DEFINE_UNQUOTED(USER_PATH, "$user_path", [Specify default $PATH])
8d184c09 3828 AC_SUBST(user_path)
3829fi
cb807f40 3830
06617857 3831# Set superuser path separately to user path
06617857 3832AC_ARG_WITH(superuser-path,
3833 [ --with-superuser-path= Specify different path for super-user],
3834 [
6cf0200f 3835 if test -n "$withval" && test "x$withval" != "xno" && \
3836 test "x${withval}" != "xyes"; then
3466e002 3837 AC_DEFINE_UNQUOTED(SUPERUSER_PATH, "$withval",
3838 [Define if you want a different $PATH
3839 for the superuser])
06617857 3840 superuser_path=$withval
3841 fi
3842 ]
3843)
3844
3845
58d100bf 3846AC_MSG_CHECKING([if we need to convert IPv4 in IPv6-mapped addresses])
aff51935 3847IPV4_IN6_HACK_MSG="no"
80faa19f 3848AC_ARG_WITH(4in6,
3849 [ --with-4in6 Check for and convert IPv4 in IPv6 mapped addresses],
3850 [
3851 if test "x$withval" != "xno" ; then
3852 AC_MSG_RESULT(yes)
3466e002 3853 AC_DEFINE(IPV4_IN_IPV6, 1,
3854 [Detect IPv4 in IPv6 mapped addresses
3855 and treat as IPv4])
aff51935 3856 IPV4_IN6_HACK_MSG="yes"
80faa19f 3857 else
3858 AC_MSG_RESULT(no)
3859 fi
3860 ],[
3861 if test "x$inet6_default_4in6" = "xyes"; then
3862 AC_MSG_RESULT([yes (default)])
3863 AC_DEFINE(IPV4_IN_IPV6)
aff51935 3864 IPV4_IN6_HACK_MSG="yes"
80faa19f 3865 else
3866 AC_MSG_RESULT([no (default)])
3867 fi
3868 ]
3869)
3870
af774732 3871# Whether to enable BSD auth support
f1b0ecc3 3872BSD_AUTH_MSG=no
af774732 3873AC_ARG_WITH(bsd-auth,
3874 [ --with-bsd-auth Enable BSD auth support],
3875 [
82f4e93d 3876 if test "x$withval" != "xno" ; then
3466e002 3877 AC_DEFINE(BSD_AUTH, 1,
3878 [Define if you have BSD auth support])
f1b0ecc3 3879 BSD_AUTH_MSG=yes
af774732 3880 fi
3881 ]
3882)
3883
a0391976 3884# Where to place sshd.pid
19d9ac2a 3885piddir=/var/run
81dadca3 3886# make sure the directory exists
82f4e93d 3887if test ! -d $piddir ; then
81dadca3 3888 piddir=`eval echo ${sysconfdir}`
3889 case $piddir in
aff51935 3890 NONE/*) piddir=`echo $piddir | sed "s~NONE~$ac_default_prefix~"` ;;
81dadca3 3891 esac
3892fi
3893
47e45e44 3894AC_ARG_WITH(pid-dir,
3895 [ --with-pid-dir=PATH Specify location of ssh.pid file],
3896 [
6cf0200f 3897 if test -n "$withval" && test "x$withval" != "xno" && \
3898 test "x${withval}" != "xyes"; then
19d9ac2a 3899 piddir=$withval
82f4e93d 3900 if test ! -d $piddir ; then
81dadca3 3901 AC_MSG_WARN([** no $piddir directory on this system **])
3902 fi
47e45e44 3903 fi
3904 ]
3905)
b7a87eea 3906
3466e002 3907AC_DEFINE_UNQUOTED(_PATH_SSH_PIDDIR, "$piddir", [Specify location of ssh.pid])
19d9ac2a 3908AC_SUBST(piddir)
47e45e44 3909
1d7b9b20 3910dnl allow user to disable some login recording features
3911AC_ARG_ENABLE(lastlog,
bfd550a2 3912 [ --disable-lastlog disable use of lastlog even if detected [no]],
ddb154b3 3913 [
3914 if test "x$enableval" = "xno" ; then
3915 AC_DEFINE(DISABLE_LASTLOG)
3916 fi
3917 ]
1d7b9b20 3918)
3919AC_ARG_ENABLE(utmp,
bfd550a2 3920 [ --disable-utmp disable use of utmp even if detected [no]],
ddb154b3 3921 [
3922 if test "x$enableval" = "xno" ; then
3923 AC_DEFINE(DISABLE_UTMP)
3924 fi
3925 ]
1d7b9b20 3926)
3927AC_ARG_ENABLE(utmpx,
bfd550a2 3928 [ --disable-utmpx disable use of utmpx even if detected [no]],
ddb154b3 3929 [
3930 if test "x$enableval" = "xno" ; then
3466e002 3931 AC_DEFINE(DISABLE_UTMPX, 1,
3932 [Define if you don't want to use utmpx])
ddb154b3 3933 fi
3934 ]
1d7b9b20 3935)
3936AC_ARG_ENABLE(wtmp,
bfd550a2 3937 [ --disable-wtmp disable use of wtmp even if detected [no]],
ddb154b3 3938 [
3939 if test "x$enableval" = "xno" ; then
3940 AC_DEFINE(DISABLE_WTMP)
3941 fi
3942 ]
1d7b9b20 3943)
3944AC_ARG_ENABLE(wtmpx,
bfd550a2 3945 [ --disable-wtmpx disable use of wtmpx even if detected [no]],
ddb154b3 3946 [
3947 if test "x$enableval" = "xno" ; then
3466e002 3948 AC_DEFINE(DISABLE_WTMPX, 1,
3949 [Define if you don't want to use wtmpx])
ddb154b3 3950 fi
3951 ]
1d7b9b20 3952)
3953AC_ARG_ENABLE(libutil,
bfd550a2 3954 [ --disable-libutil disable use of libutil (login() etc.) [no]],
ddb154b3 3955 [
3956 if test "x$enableval" = "xno" ; then
3957 AC_DEFINE(DISABLE_LOGIN)
3958 fi
3959 ]
1d7b9b20 3960)
3961AC_ARG_ENABLE(pututline,
bfd550a2 3962 [ --disable-pututline disable use of pututline() etc. ([uw]tmp) [no]],
ddb154b3 3963 [
3964 if test "x$enableval" = "xno" ; then
3466e002 3965 AC_DEFINE(DISABLE_PUTUTLINE, 1,
3966 [Define if you don't want to use pututline()
3967 etc. to write [uw]tmp])
ddb154b3 3968 fi
3969 ]
1d7b9b20 3970)
3971AC_ARG_ENABLE(pututxline,
bfd550a2 3972 [ --disable-pututxline disable use of pututxline() etc. ([uw]tmpx) [no]],
ddb154b3 3973 [
3974 if test "x$enableval" = "xno" ; then
3466e002 3975 AC_DEFINE(DISABLE_PUTUTXLINE, 1,
3976 [Define if you don't want to use pututxline()
3977 etc. to write [uw]tmpx])
ddb154b3 3978 fi
3979 ]
1d7b9b20 3980)
3981AC_ARG_WITH(lastlog,
bfd550a2 3982 [ --with-lastlog=FILE|DIR specify lastlog location [common locations]],
8c89dd2b 3983 [
82f4e93d 3984 if test "x$withval" = "xno" ; then
8c89dd2b 3985 AC_DEFINE(DISABLE_LASTLOG)
6cf0200f 3986 elif test -n "$withval" && test "x${withval}" != "xyes"; then
8c89dd2b 3987 conf_lastlog_location=$withval
3988 fi
3989 ]
3990)
1d7b9b20 3991
3992dnl lastlog, [uw]tmpx? detection
3993dnl NOTE: set the paths in the platform section to avoid the
3994dnl need for command-line parameters
3995dnl lastlog and [uw]tmp are subject to a file search if all else fails
3996
3997dnl lastlog detection
3998dnl NOTE: the code itself will detect if lastlog is a directory
3999AC_MSG_CHECKING([if your system defines LASTLOG_FILE])
4000AC_TRY_COMPILE([
4001#include <sys/types.h>
4002#include <utmp.h>
4003#ifdef HAVE_LASTLOG_H
4004# include <lastlog.h>
4005#endif
d7c0f3d5 4006#ifdef HAVE_PATHS_H
1d7b9b20 4007# include <paths.h>
41cb4569 4008#endif
4009#ifdef HAVE_LOGIN_H
4010# include <login.h>
1d7b9b20 4011#endif
4012 ],
4013 [ char *lastlog = LASTLOG_FILE; ],
4014 [ AC_MSG_RESULT(yes) ],
d7c0f3d5 4015 [
4016 AC_MSG_RESULT(no)
4017 AC_MSG_CHECKING([if your system defines _PATH_LASTLOG])
4018 AC_TRY_COMPILE([
4019#include <sys/types.h>
4020#include <utmp.h>
4021#ifdef HAVE_LASTLOG_H
4022# include <lastlog.h>
4023#endif
4024#ifdef HAVE_PATHS_H
4025# include <paths.h>
4026#endif
4027 ],
4028 [ char *lastlog = _PATH_LASTLOG; ],
4029 [ AC_MSG_RESULT(yes) ],
4030 [
f282b668 4031 AC_MSG_RESULT(no)
d7c0f3d5 4032 system_lastlog_path=no
4033 ])
4034 ]
1d7b9b20 4035)
d7c0f3d5 4036
1d7b9b20 4037if test -z "$conf_lastlog_location"; then
4038 if test x"$system_lastlog_path" = x"no" ; then
4039 for f in /var/log/lastlog /usr/adm/lastlog /var/adm/lastlog /etc/security/lastlog ; do
e5fe9a1f 4040 if (test -d "$f" || test -f "$f") ; then
1d7b9b20 4041 conf_lastlog_location=$f
4042 fi
4043 done
4044 if test -z "$conf_lastlog_location"; then
f8119cef 4045 AC_MSG_WARN([** Cannot find lastlog **])
4046 dnl Don't define DISABLE_LASTLOG - that means we don't try wtmp/wtmpx
1d7b9b20 4047 fi
4048 fi
4049fi
4050
4051if test -n "$conf_lastlog_location"; then
3466e002 4052 AC_DEFINE_UNQUOTED(CONF_LASTLOG_FILE, "$conf_lastlog_location",
4053 [Define if you want to specify the path to your lastlog file])
82f4e93d 4054fi
1d7b9b20 4055
4056dnl utmp detection
4057AC_MSG_CHECKING([if your system defines UTMP_FILE])
4058AC_TRY_COMPILE([
4059#include <sys/types.h>
4060#include <utmp.h>
d7c0f3d5 4061#ifdef HAVE_PATHS_H
1d7b9b20 4062# include <paths.h>
4063#endif
4064 ],
4065 [ char *utmp = UTMP_FILE; ],
4066 [ AC_MSG_RESULT(yes) ],
4067 [ AC_MSG_RESULT(no)
4068 system_utmp_path=no ]
4069)
4070if test -z "$conf_utmp_location"; then
4071 if test x"$system_utmp_path" = x"no" ; then
4072 for f in /etc/utmp /usr/adm/utmp /var/run/utmp; do
4073 if test -f $f ; then
4074 conf_utmp_location=$f
4075 fi
4076 done
4077 if test -z "$conf_utmp_location"; then
4078 AC_DEFINE(DISABLE_UTMP)
4079 fi
4080 fi
4081fi
4082if test -n "$conf_utmp_location"; then
3466e002 4083 AC_DEFINE_UNQUOTED(CONF_UTMP_FILE, "$conf_utmp_location",
4084 [Define if you want to specify the path to your utmp file])
82f4e93d 4085fi
1d7b9b20 4086
4087dnl wtmp detection
4088AC_MSG_CHECKING([if your system defines WTMP_FILE])
4089AC_TRY_COMPILE([
4090#include <sys/types.h>
4091#include <utmp.h>
d7c0f3d5 4092#ifdef HAVE_PATHS_H
1d7b9b20 4093# include <paths.h>
4094#endif
4095 ],
4096 [ char *wtmp = WTMP_FILE; ],
4097 [ AC_MSG_RESULT(yes) ],
4098 [ AC_MSG_RESULT(no)
4099 system_wtmp_path=no ]
4100)
4101if test -z "$conf_wtmp_location"; then
4102 if test x"$system_wtmp_path" = x"no" ; then
4103 for f in /usr/adm/wtmp /var/log/wtmp; do
4104 if test -f $f ; then
4105 conf_wtmp_location=$f
4106 fi
4107 done
4108 if test -z "$conf_wtmp_location"; then
4109 AC_DEFINE(DISABLE_WTMP)
4110 fi
4111 fi
4112fi
4113if test -n "$conf_wtmp_location"; then
3466e002 4114 AC_DEFINE_UNQUOTED(CONF_WTMP_FILE, "$conf_wtmp_location",
4115 [Define if you want to specify the path to your wtmp file])
82f4e93d 4116fi
1d7b9b20 4117
4118
4119dnl utmpx detection - I don't know any system so perverse as to require
4120dnl utmpx, but not define UTMPX_FILE (ditto wtmpx.) No doubt it's out
4121dnl there, though.
4122AC_MSG_CHECKING([if your system defines UTMPX_FILE])
4123AC_TRY_COMPILE([
4124#include <sys/types.h>
4125#include <utmp.h>
4126#ifdef HAVE_UTMPX_H
4127#include <utmpx.h>
4128#endif
d7c0f3d5 4129#ifdef HAVE_PATHS_H
1d7b9b20 4130# include <paths.h>
4131#endif
4132 ],
4133 [ char *utmpx = UTMPX_FILE; ],
4134 [ AC_MSG_RESULT(yes) ],
4135 [ AC_MSG_RESULT(no)
4136 system_utmpx_path=no ]
4137)
4138if test -z "$conf_utmpx_location"; then
4139 if test x"$system_utmpx_path" = x"no" ; then
4140 AC_DEFINE(DISABLE_UTMPX)
4141 fi
4142else
3466e002 4143 AC_DEFINE_UNQUOTED(CONF_UTMPX_FILE, "$conf_utmpx_location",
4144 [Define if you want to specify the path to your utmpx file])
82f4e93d 4145fi
1d7b9b20 4146
4147dnl wtmpx detection
4148AC_MSG_CHECKING([if your system defines WTMPX_FILE])
4149AC_TRY_COMPILE([
4150#include <sys/types.h>
4151#include <utmp.h>
4152#ifdef HAVE_UTMPX_H
4153#include <utmpx.h>
4154#endif
d7c0f3d5 4155#ifdef HAVE_PATHS_H
1d7b9b20 4156# include <paths.h>
4157#endif
4158 ],
4159 [ char *wtmpx = WTMPX_FILE; ],
4160 [ AC_MSG_RESULT(yes) ],
4161 [ AC_MSG_RESULT(no)
4162 system_wtmpx_path=no ]
4163)
4164if test -z "$conf_wtmpx_location"; then
4165 if test x"$system_wtmpx_path" = x"no" ; then
4166 AC_DEFINE(DISABLE_WTMPX)
4167 fi
4168else
3466e002 4169 AC_DEFINE_UNQUOTED(CONF_WTMPX_FILE, "$conf_wtmpx_location",
4170 [Define if you want to specify the path to your wtmpx file])
82f4e93d 4171fi
1d7b9b20 4172
b7a87eea 4173
bd499f9e 4174if test ! -z "$blibpath" ; then
68ece370 4175 LDFLAGS="$LDFLAGS $blibflags$blibpath"
4176 AC_MSG_WARN([Please check and edit blibpath in LDFLAGS in Makefile])
bd499f9e 4177fi
4178
ed89c848 4179dnl Adding -Werror to CFLAGS early prevents configure tests from running.
4180dnl Add now.
4181CFLAGS="$CFLAGS $werror_flags"
4182
edee47f5 4183if grep "#define BROKEN_GETADDRINFO 1" confdefs.h >/dev/null || \
4184 test "x$ac_cv_func_getaddrinfo" != "xyes" ; then
4185 AC_SUBST(TEST_SSH_IPV6, no)
4186else
4187 AC_SUBST(TEST_SSH_IPV6, yes)
4188fi
4189
3c62e7eb 4190AC_EXEEXT
29eadd7c 4191AC_CONFIG_FILES([Makefile buildpkg.sh opensshd.init openssh.xml \
4192 openbsd-compat/Makefile openbsd-compat/regress/Makefile \
4193 scard/Makefile ssh_prng_cmds survey.sh])
98a7c37b 4194AC_OUTPUT
d3083fbd 4195
cbd7492e 4196# Print summary of options
4197
cbd7492e 4198# Someone please show me a better way :)
4199A=`eval echo ${prefix}` ; A=`eval echo ${A}`
4200B=`eval echo ${bindir}` ; B=`eval echo ${B}`
4201C=`eval echo ${sbindir}` ; C=`eval echo ${C}`
4202D=`eval echo ${sysconfdir}` ; D=`eval echo ${D}`
f5665f6f 4203E=`eval echo ${libexecdir}/ssh-askpass` ; E=`eval echo ${E}`
e0c4d3ac 4204F=`eval echo ${mandir}/${mansubdir}X` ; F=`eval echo ${F}`
cbd7492e 4205G=`eval echo ${piddir}` ; G=`eval echo ${G}`
ecac8ee5 4206H=`eval echo ${PRIVSEP_PATH}` ; H=`eval echo ${H}`
4207I=`eval echo ${user_path}` ; I=`eval echo ${I}`
4208J=`eval echo ${superuser_path}` ; J=`eval echo ${J}`
cbd7492e 4209
4210echo ""
26de7942 4211echo "OpenSSH has been configured with the following options:"
ecac8ee5 4212echo " User binaries: $B"
4213echo " System binaries: $C"
4214echo " Configuration files: $D"
4215echo " Askpass program: $E"
4216echo " Manual pages: $F"
4217echo " PID file: $G"
4218echo " Privilege separation chroot path: $H"
95b99395 4219if test "x$external_path_file" = "x/etc/login.conf" ; then
4220echo " At runtime, sshd will use the path defined in $external_path_file"
4221echo " Make sure the path to scp is present, otherwise scp will not work"
8d184c09 4222else
ecac8ee5 4223echo " sshd default user PATH: $I"
89bbd457 4224 if test ! -z "$external_path_file"; then
95b99395 4225echo " (If PATH is set in $external_path_file it will be used instead. If"
4226echo " used, ensure the path to scp is present, otherwise scp will not work.)"
4227 fi
8d184c09 4228fi
06617857 4229if test ! -z "$superuser_path" ; then
ecac8ee5 4230echo " sshd superuser user PATH: $J"
4231fi
4232echo " Manpage format: $MANTYPE"
3e05e934 4233echo " PAM support: $PAM_MSG"
5b84789f 4234echo " OSF SIA support: $SIA_MSG"
ecac8ee5 4235echo " KerberosV support: $KRB5_MSG"
ef4d1846 4236echo " SELinux support: $SELINUX_MSG"
ecac8ee5 4237echo " Smartcard support: $SCARD_MSG"
ecac8ee5 4238echo " S/KEY support: $SKEY_MSG"
4239echo " TCP Wrappers support: $TCPW_MSG"
4240echo " MD5 password support: $MD5_MSG"
59031773 4241echo " libedit support: $LIBEDIT_MSG"
5b84789f 4242echo " Solaris process contract support: $SPC_MSG"
3deb1408 4243echo " IP address in \$DISPLAY hack: $DISPLAY_HACK_MSG"
ecac8ee5 4244echo " Translate v4 in v6 hack: $IPV4_IN6_HACK_MSG"
4245echo " BSD Auth support: $BSD_AUTH_MSG"
4246echo " Random number source: $RAND_MSG"
f1b0ecc3 4247if test ! -z "$USE_RAND_HELPER" ; then
ecac8ee5 4248echo " ssh-rand-helper collects from: $RAND_HELPER_MSG"
af774732 4249fi
4250
cbd7492e 4251echo ""
4252
0c2fb82f 4253echo " Host: ${host}"
4254echo " Compiler: ${CC}"
4255echo " Compiler flags: ${CFLAGS}"
4256echo "Preprocessor flags: ${CPPFLAGS}"
4257echo " Linker flags: ${LDFLAGS}"
e54defb4 4258echo " Libraries: ${LIBS}"
4259if test ! -z "${SSHDLIBS}"; then
4260echo " +for sshd: ${SSHDLIBS}"
4261fi
cbd7492e 4262
4263echo ""
4264
9cefe228 4265if test "x$MAKE_PACKAGE_SUPPORTED" = "xyes" ; then
b3146b5f 4266 echo "SVR4 style packages are supported with \"make package\""
4267 echo ""
9cefe228 4268fi
4269
adeebd37 4270if test "x$PAM_MSG" = "xyes" ; then
f1b0ecc3 4271 echo "PAM is enabled. You may need to install a PAM control file "
4272 echo "for sshd, otherwise password authentication may fail. "
aff51935 4273 echo "Example PAM control files can be found in the contrib/ "
f1b0ecc3 4274 echo "subdirectory"
adeebd37 4275 echo ""
4276fi
4277
f1b0ecc3 4278if test ! -z "$RAND_HELPER_CMDHASH" ; then
4279 echo "WARNING: you are using the builtin random number collection "
4280 echo "service. Please read WARNING.RNG and request that your OS "
4281 echo "vendor includes kernel-based random number collection in "
4282 echo "future versions of your OS."
2c523de9 4283 echo ""
4284fi
af774732 4285
2f6f9cff 4286if test ! -z "$NO_PEERCHECK" ; then
1961d660 4287 echo "WARNING: the operating system that you are using does not"
4288 echo "appear to support getpeereid(), getpeerucred() or the"
4289 echo "SO_PEERCRED getsockopt() option. These facilities are used to"
4290 echo "enforce security checks to prevent unauthorised connections to"
4291 echo "ssh-agent. Their absence increases the risk that a malicious"
4292 echo "user can connect to your agent."
2f6f9cff 4293 echo ""
4294fi
4295
7b578f7d 4296if test "$AUDIT_MODULE" = "bsm" ; then
4297 echo "WARNING: BSM audit support is currently considered EXPERIMENTAL."
4298 echo "See the Solaris section in README.platform for details."
4299fi
This page took 1.129817 seconds and 5 git commands to generate.