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