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