blob: b4d6598d5a735ab17a2aef7cd1828ad974303f0a [file] [log] [blame]
Adam Langleyd0592972015-03-30 14:49:51 -07001# $Id: configure.ac,v 1.583 2014/08/26 20:32:01 djm Exp $
Greg Hartmanbd77cf72015-02-25 13:21:06 -08002#
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.
16
17AC_INIT([OpenSSH], [Portable], [openssh-unix-dev@mindrot.org])
Adam Langleyd0592972015-03-30 14:49:51 -070018AC_REVISION($Revision: 1.583 $)
Greg Hartmanbd77cf72015-02-25 13:21:06 -080019AC_CONFIG_SRCDIR([ssh.c])
20AC_LANG([C])
21
22AC_CONFIG_HEADER([config.h])
23AC_PROG_CC
24AC_CANONICAL_HOST
25AC_C_BIGENDIAN
26
27# Checks for programs.
28AC_PROG_AWK
29AC_PROG_CPP
30AC_PROG_RANLIB
31AC_PROG_INSTALL
32AC_PROG_EGREP
33AC_PATH_PROG([AR], [ar])
34AC_PATH_PROG([CAT], [cat])
35AC_PATH_PROG([KILL], [kill])
36AC_PATH_PROGS([PERL], [perl5 perl])
37AC_PATH_PROG([SED], [sed])
38AC_SUBST([PERL])
39AC_PATH_PROG([ENT], [ent])
40AC_SUBST([ENT])
41AC_PATH_PROG([TEST_MINUS_S_SH], [bash])
42AC_PATH_PROG([TEST_MINUS_S_SH], [ksh])
43AC_PATH_PROG([TEST_MINUS_S_SH], [sh])
44AC_PATH_PROG([SH], [sh])
45AC_PATH_PROG([GROFF], [groff])
46AC_PATH_PROG([NROFF], [nroff])
47AC_PATH_PROG([MANDOC], [mandoc])
48AC_SUBST([TEST_SHELL], [sh])
49
50dnl select manpage formatter
51if test "x$MANDOC" != "x" ; then
52 MANFMT="$MANDOC"
53elif test "x$NROFF" != "x" ; then
54 MANFMT="$NROFF -mandoc"
55elif test "x$GROFF" != "x" ; then
56 MANFMT="$GROFF -mandoc -Tascii"
57else
58 AC_MSG_WARN([no manpage formatted found])
59 MANFMT="false"
60fi
61AC_SUBST([MANFMT])
62
63dnl for buildpkg.sh
64AC_PATH_PROG([PATH_GROUPADD_PROG], [groupadd], [groupadd],
65 [/usr/sbin${PATH_SEPARATOR}/etc])
66AC_PATH_PROG([PATH_USERADD_PROG], [useradd], [useradd],
67 [/usr/sbin${PATH_SEPARATOR}/etc])
68AC_CHECK_PROG([MAKE_PACKAGE_SUPPORTED], [pkgmk], [yes], [no])
69if test -x /sbin/sh; then
70 AC_SUBST([STARTUP_SCRIPT_SHELL], [/sbin/sh])
71else
72 AC_SUBST([STARTUP_SCRIPT_SHELL], [/bin/sh])
73fi
74
75# System features
76AC_SYS_LARGEFILE
77
78if test -z "$AR" ; then
79 AC_MSG_ERROR([*** 'ar' missing, please install or fix your \$PATH ***])
80fi
81
82# Use LOGIN_PROGRAM from environment if possible
83if test ! -z "$LOGIN_PROGRAM" ; then
84 AC_DEFINE_UNQUOTED([LOGIN_PROGRAM_FALLBACK], ["$LOGIN_PROGRAM"],
85 [If your header files don't define LOGIN_PROGRAM,
86 then use this (detected) from environment and PATH])
87else
88 # Search for login
89 AC_PATH_PROG([LOGIN_PROGRAM_FALLBACK], [login])
90 if test ! -z "$LOGIN_PROGRAM_FALLBACK" ; then
91 AC_DEFINE_UNQUOTED([LOGIN_PROGRAM_FALLBACK], ["$LOGIN_PROGRAM_FALLBACK"])
92 fi
93fi
94
95AC_PATH_PROG([PATH_PASSWD_PROG], [passwd])
96if test ! -z "$PATH_PASSWD_PROG" ; then
97 AC_DEFINE_UNQUOTED([_PATH_PASSWD_PROG], ["$PATH_PASSWD_PROG"],
98 [Full path of your "passwd" program])
99fi
100
101if test -z "$LD" ; then
102 LD=$CC
103fi
104AC_SUBST([LD])
105
106AC_C_INLINE
107
108AC_CHECK_DECL([LLONG_MAX], [have_llong_max=1], , [#include <limits.h>])
109AC_CHECK_DECL([SYSTR_POLICY_KILL], [have_systr_policy_kill=1], , [
110 #include <sys/types.h>
111 #include <sys/param.h>
112 #include <dev/systrace.h>
113])
114AC_CHECK_DECL([RLIMIT_NPROC],
115 [AC_DEFINE([HAVE_RLIMIT_NPROC], [], [sys/resource.h has RLIMIT_NPROC])], , [
116 #include <sys/types.h>
117 #include <sys/resource.h>
118])
Adam Langleyd0592972015-03-30 14:49:51 -0700119AC_CHECK_DECL([PR_SET_NO_NEW_PRIVS], [have_linux_no_new_privs=1], , [
120 #include <sys/types.h>
121 #include <linux/prctl.h>
122])
123
124openssl=yes
125ssh1=yes
126AC_ARG_WITH([openssl],
127 [ --without-openssl Disable use of OpenSSL; use only limited internal crypto **EXPERIMENTAL** ],
128 [ if test "x$withval" = "xno" ; then
129 openssl=no
130 ssh1=no
131 fi
132 ]
133)
134AC_MSG_CHECKING([whether OpenSSL will be used for cryptography])
135if test "x$openssl" = "xyes" ; then
136 AC_MSG_RESULT([yes])
137 AC_DEFINE_UNQUOTED([WITH_OPENSSL], [1], [use libcrypto for cryptography])
138else
139 AC_MSG_RESULT([no])
140fi
141
142AC_ARG_WITH([ssh1],
143 [ --without-ssh1 Disable support for SSH protocol 1],
144 [
145 if test "x$withval" = "xno" ; then
146 ssh1=no
147 elif test "x$openssl" = "xno" ; then
148 AC_MSG_ERROR([Cannot enable SSH protocol 1 with OpenSSL disabled])
149 fi
150 ]
151)
152AC_MSG_CHECKING([whether SSH protocol 1 support is enabled])
153if test "x$ssh1" = "xyes" ; then
154 AC_MSG_RESULT([yes])
155 AC_DEFINE_UNQUOTED([WITH_SSH1], [1], [include SSH protocol version 1 support])
156else
157 AC_MSG_RESULT([no])
158fi
Greg Hartmanbd77cf72015-02-25 13:21:06 -0800159
160use_stack_protector=1
Adam Langleyd0592972015-03-30 14:49:51 -0700161use_toolchain_hardening=1
Greg Hartmanbd77cf72015-02-25 13:21:06 -0800162AC_ARG_WITH([stackprotect],
163 [ --without-stackprotect Don't use compiler's stack protection], [
164 if test "x$withval" = "xno"; then
165 use_stack_protector=0
166 fi ])
Adam Langleyd0592972015-03-30 14:49:51 -0700167AC_ARG_WITH([hardening],
168 [ --without-hardening Don't use toolchain hardening flags], [
169 if test "x$withval" = "xno"; then
170 use_toolchain_hardening=0
171 fi ])
Greg Hartmanbd77cf72015-02-25 13:21:06 -0800172
Adam Langleyd0592972015-03-30 14:49:51 -0700173# We use -Werror for the tests only so that we catch warnings like "this is
174# on by default" for things like -fPIE.
175AC_MSG_CHECKING([if $CC supports -Werror])
176saved_CFLAGS="$CFLAGS"
177CFLAGS="$CFLAGS -Werror"
178AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int main(void) { return 0; }]])],
179 [ AC_MSG_RESULT([yes])
180 WERROR="-Werror"],
181 [ AC_MSG_RESULT([no])
182 WERROR="" ]
183)
184CFLAGS="$saved_CFLAGS"
Greg Hartmanbd77cf72015-02-25 13:21:06 -0800185
186if test "$GCC" = "yes" || test "$GCC" = "egcs"; then
Adam Langleyd0592972015-03-30 14:49:51 -0700187 OSSH_CHECK_CFLAG_COMPILE([-Qunused-arguments])
188 OSSH_CHECK_CFLAG_COMPILE([-Wunknown-warning-option])
Greg Hartmanbd77cf72015-02-25 13:21:06 -0800189 OSSH_CHECK_CFLAG_COMPILE([-Wall])
190 OSSH_CHECK_CFLAG_COMPILE([-Wpointer-arith])
191 OSSH_CHECK_CFLAG_COMPILE([-Wuninitialized])
192 OSSH_CHECK_CFLAG_COMPILE([-Wsign-compare])
193 OSSH_CHECK_CFLAG_COMPILE([-Wformat-security])
Adam Langleyd0592972015-03-30 14:49:51 -0700194 OSSH_CHECK_CFLAG_COMPILE([-Wsizeof-pointer-memaccess])
Greg Hartmanbd77cf72015-02-25 13:21:06 -0800195 OSSH_CHECK_CFLAG_COMPILE([-Wpointer-sign], [-Wno-pointer-sign])
196 OSSH_CHECK_CFLAG_COMPILE([-Wunused-result], [-Wno-unused-result])
197 OSSH_CHECK_CFLAG_COMPILE([-fno-strict-aliasing])
Adam Langleyd0592972015-03-30 14:49:51 -0700198 OSSH_CHECK_CFLAG_COMPILE([-D_FORTIFY_SOURCE=2])
199 if test "x$use_toolchain_hardening" = "x1"; then
200 OSSH_CHECK_LDFLAG_LINK([-Wl,-z,relro])
201 OSSH_CHECK_LDFLAG_LINK([-Wl,-z,now])
202 OSSH_CHECK_LDFLAG_LINK([-Wl,-z,noexecstack])
203 # NB. -ftrapv expects certain support functions to be present in
204 # the compiler library (libgcc or similar) to detect integer operations
205 # that can overflow. We must check that the result of enabling it
206 # actually links. The test program compiled/linked includes a number
207 # of integer operations that should exercise this.
208 OSSH_CHECK_CFLAG_LINK([-ftrapv])
209 fi
Greg Hartmanbd77cf72015-02-25 13:21:06 -0800210 AC_MSG_CHECKING([gcc version])
211 GCC_VER=`$CC -v 2>&1 | $AWK '/gcc version /{print $3}'`
212 case $GCC_VER in
213 1.*) no_attrib_nonnull=1 ;;
214 2.8* | 2.9*)
215 no_attrib_nonnull=1
216 ;;
217 2.*) no_attrib_nonnull=1 ;;
218 *) ;;
219 esac
220 AC_MSG_RESULT([$GCC_VER])
221
222 AC_MSG_CHECKING([if $CC accepts -fno-builtin-memset])
223 saved_CFLAGS="$CFLAGS"
224 CFLAGS="$CFLAGS -fno-builtin-memset"
225 AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include <string.h> ]],
226 [[ char b[10]; memset(b, 0, sizeof(b)); ]])],
227 [ AC_MSG_RESULT([yes]) ],
228 [ AC_MSG_RESULT([no])
229 CFLAGS="$saved_CFLAGS" ]
230 )
231
232 # -fstack-protector-all doesn't always work for some GCC versions
233 # and/or platforms, so we test if we can. If it's not supported
234 # on a given platform gcc will emit a warning so we use -Werror.
235 if test "x$use_stack_protector" = "x1"; then
Adam Langleyd0592972015-03-30 14:49:51 -0700236 for t in -fstack-protector-strong -fstack-protector-all \
237 -fstack-protector; do
Greg Hartmanbd77cf72015-02-25 13:21:06 -0800238 AC_MSG_CHECKING([if $CC supports $t])
239 saved_CFLAGS="$CFLAGS"
240 saved_LDFLAGS="$LDFLAGS"
241 CFLAGS="$CFLAGS $t -Werror"
242 LDFLAGS="$LDFLAGS $t -Werror"
243 AC_LINK_IFELSE(
244 [AC_LANG_PROGRAM([[ #include <stdio.h> ]],
245 [[
246 char x[256];
247 snprintf(x, sizeof(x), "XXX");
248 ]])],
249 [ AC_MSG_RESULT([yes])
250 CFLAGS="$saved_CFLAGS $t"
251 LDFLAGS="$saved_LDFLAGS $t"
252 AC_MSG_CHECKING([if $t works])
253 AC_RUN_IFELSE(
254 [AC_LANG_PROGRAM([[ #include <stdio.h> ]],
255 [[
256 char x[256];
257 snprintf(x, sizeof(x), "XXX");
258 ]])],
259 [ AC_MSG_RESULT([yes])
260 break ],
261 [ AC_MSG_RESULT([no]) ],
262 [ AC_MSG_WARN([cross compiling: cannot test])
263 break ]
264 )
265 ],
266 [ AC_MSG_RESULT([no]) ]
267 )
268 CFLAGS="$saved_CFLAGS"
269 LDFLAGS="$saved_LDFLAGS"
270 done
271 fi
272
273 if test -z "$have_llong_max"; then
274 # retry LLONG_MAX with -std=gnu99, needed on some Linuxes
275 unset ac_cv_have_decl_LLONG_MAX
276 saved_CFLAGS="$CFLAGS"
277 CFLAGS="$CFLAGS -std=gnu99"
278 AC_CHECK_DECL([LLONG_MAX],
279 [have_llong_max=1],
280 [CFLAGS="$saved_CFLAGS"],
281 [#include <limits.h>]
282 )
283 fi
284fi
285
Adam Langleyd0592972015-03-30 14:49:51 -0700286AC_MSG_CHECKING([if compiler allows __attribute__ on return types])
287AC_COMPILE_IFELSE(
288 [AC_LANG_PROGRAM([[
289#include <stdlib.h>
290__attribute__((__unused__)) static void foo(void){return;}]],
291 [[ exit(0); ]])],
292 [ AC_MSG_RESULT([yes]) ],
293 [ AC_MSG_RESULT([no])
294 AC_DEFINE(NO_ATTRIBUTE_ON_RETURN_TYPE, 1,
295 [compiler does not accept __attribute__ on return types]) ]
296)
297
Greg Hartmanbd77cf72015-02-25 13:21:06 -0800298if test "x$no_attrib_nonnull" != "x1" ; then
299 AC_DEFINE([HAVE_ATTRIBUTE__NONNULL__], [1], [Have attribute nonnull])
300fi
301
302AC_ARG_WITH([rpath],
303 [ --without-rpath Disable auto-added -R linker paths],
304 [
305 if test "x$withval" = "xno" ; then
306 need_dash_r=""
307 fi
308 if test "x$withval" = "xyes" ; then
309 need_dash_r=1
310 fi
311 ]
312)
313
314# Allow user to specify flags
315AC_ARG_WITH([cflags],
316 [ --with-cflags Specify additional flags to pass to compiler],
317 [
318 if test -n "$withval" && test "x$withval" != "xno" && \
319 test "x${withval}" != "xyes"; then
320 CFLAGS="$CFLAGS $withval"
321 fi
322 ]
323)
324AC_ARG_WITH([cppflags],
325 [ --with-cppflags Specify additional flags to pass to preprocessor] ,
326 [
327 if test -n "$withval" && test "x$withval" != "xno" && \
328 test "x${withval}" != "xyes"; then
329 CPPFLAGS="$CPPFLAGS $withval"
330 fi
331 ]
332)
333AC_ARG_WITH([ldflags],
334 [ --with-ldflags Specify additional flags to pass to linker],
335 [
336 if test -n "$withval" && test "x$withval" != "xno" && \
337 test "x${withval}" != "xyes"; then
338 LDFLAGS="$LDFLAGS $withval"
339 fi
340 ]
341)
342AC_ARG_WITH([libs],
343 [ --with-libs Specify additional libraries to link with],
344 [
345 if test -n "$withval" && test "x$withval" != "xno" && \
346 test "x${withval}" != "xyes"; then
347 LIBS="$LIBS $withval"
348 fi
349 ]
350)
351AC_ARG_WITH([Werror],
352 [ --with-Werror Build main code with -Werror],
353 [
354 if test -n "$withval" && test "x$withval" != "xno"; then
355 werror_flags="-Werror"
356 if test "x${withval}" != "xyes"; then
357 werror_flags="$withval"
358 fi
359 fi
360 ]
361)
362
363AC_CHECK_HEADERS([ \
Adam Langleyd0592972015-03-30 14:49:51 -0700364 blf.h \
Greg Hartmanbd77cf72015-02-25 13:21:06 -0800365 bstring.h \
366 crypt.h \
367 crypto/sha2.h \
368 dirent.h \
369 endian.h \
Adam Langleyd0592972015-03-30 14:49:51 -0700370 elf.h \
Greg Hartmanbd77cf72015-02-25 13:21:06 -0800371 features.h \
372 fcntl.h \
373 floatingpoint.h \
374 getopt.h \
375 glob.h \
376 ia.h \
377 iaf.h \
Adam Langleyd0592972015-03-30 14:49:51 -0700378 inttypes.h \
Greg Hartmanbd77cf72015-02-25 13:21:06 -0800379 limits.h \
Adam Langleyd0592972015-03-30 14:49:51 -0700380 locale.h \
Greg Hartmanbd77cf72015-02-25 13:21:06 -0800381 login.h \
382 maillock.h \
383 ndir.h \
384 net/if_tun.h \
385 netdb.h \
386 netgroup.h \
387 pam/pam_appl.h \
388 paths.h \
389 poll.h \
390 pty.h \
391 readpassphrase.h \
392 rpc/types.h \
393 security/pam_appl.h \
394 sha2.h \
395 shadow.h \
396 stddef.h \
397 stdint.h \
398 string.h \
399 strings.h \
400 sys/audit.h \
401 sys/bitypes.h \
402 sys/bsdtty.h \
Adam Langleyd0592972015-03-30 14:49:51 -0700403 sys/capability.h \
Greg Hartmanbd77cf72015-02-25 13:21:06 -0800404 sys/cdefs.h \
405 sys/dir.h \
406 sys/mman.h \
407 sys/ndir.h \
408 sys/poll.h \
409 sys/prctl.h \
410 sys/pstat.h \
411 sys/select.h \
412 sys/stat.h \
413 sys/stream.h \
414 sys/stropts.h \
415 sys/strtio.h \
416 sys/statvfs.h \
417 sys/sysmacros.h \
418 sys/time.h \
419 sys/timers.h \
Greg Hartmanbd77cf72015-02-25 13:21:06 -0800420 time.h \
421 tmpdir.h \
422 ttyent.h \
423 ucred.h \
424 unistd.h \
425 usersec.h \
426 util.h \
427 utime.h \
428 utmp.h \
429 utmpx.h \
430 vis.h \
431])
432
433# lastlog.h requires sys/time.h to be included first on Solaris
434AC_CHECK_HEADERS([lastlog.h], [], [], [
435#ifdef HAVE_SYS_TIME_H
436# include <sys/time.h>
437#endif
438])
439
440# sys/ptms.h requires sys/stream.h to be included first on Solaris
441AC_CHECK_HEADERS([sys/ptms.h], [], [], [
442#ifdef HAVE_SYS_STREAM_H
443# include <sys/stream.h>
444#endif
445])
446
447# login_cap.h requires sys/types.h on NetBSD
448AC_CHECK_HEADERS([login_cap.h], [], [], [
449#include <sys/types.h>
450])
451
452# older BSDs need sys/param.h before sys/mount.h
453AC_CHECK_HEADERS([sys/mount.h], [], [], [
454#include <sys/param.h>
455])
456
Adam Langleyd0592972015-03-30 14:49:51 -0700457# Android requires sys/socket.h to be included before sys/un.h
458AC_CHECK_HEADERS([sys/un.h], [], [], [
459#include <sys/types.h>
460#include <sys/socket.h>
461])
462
Greg Hartmanbd77cf72015-02-25 13:21:06 -0800463# Messages for features tested for in target-specific section
464SIA_MSG="no"
465SPC_MSG="no"
466SP_MSG="no"
467
468# Check for some target-specific stuff
469case "$host" in
470*-*-aix*)
471 # Some versions of VAC won't allow macro redefinitions at
472 # -qlanglevel=ansi, and autoconf 2.60 sometimes insists on using that
473 # particularly with older versions of vac or xlc.
474 # It also throws errors about null macro argments, but these are
475 # not fatal.
476 AC_MSG_CHECKING([if compiler allows macro redefinitions])
477 AC_COMPILE_IFELSE(
478 [AC_LANG_PROGRAM([[
479#define testmacro foo
480#define testmacro bar]],
481 [[ exit(0); ]])],
482 [ AC_MSG_RESULT([yes]) ],
483 [ AC_MSG_RESULT([no])
484 CC="`echo $CC | sed 's/-qlanglvl\=ansi//g'`"
485 LD="`echo $LD | sed 's/-qlanglvl\=ansi//g'`"
486 CFLAGS="`echo $CFLAGS | sed 's/-qlanglvl\=ansi//g'`"
487 CPPFLAGS="`echo $CPPFLAGS | sed 's/-qlanglvl\=ansi//g'`"
488 ]
489 )
490
491 AC_MSG_CHECKING([how to specify blibpath for linker ($LD)])
492 if (test -z "$blibpath"); then
493 blibpath="/usr/lib:/lib"
494 fi
495 saved_LDFLAGS="$LDFLAGS"
496 if test "$GCC" = "yes"; then
497 flags="-Wl,-blibpath: -Wl,-rpath, -blibpath:"
498 else
499 flags="-blibpath: -Wl,-blibpath: -Wl,-rpath,"
500 fi
501 for tryflags in $flags ;do
502 if (test -z "$blibflags"); then
503 LDFLAGS="$saved_LDFLAGS $tryflags$blibpath"
504 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
505 [blibflags=$tryflags], [])
506 fi
507 done
508 if (test -z "$blibflags"); then
509 AC_MSG_RESULT([not found])
510 AC_MSG_ERROR([*** must be able to specify blibpath on AIX - check config.log])
511 else
512 AC_MSG_RESULT([$blibflags])
513 fi
514 LDFLAGS="$saved_LDFLAGS"
515 dnl Check for authenticate. Might be in libs.a on older AIXes
516 AC_CHECK_FUNC([authenticate], [AC_DEFINE([WITH_AIXAUTHENTICATE], [1],
517 [Define if you want to enable AIX4's authenticate function])],
518 [AC_CHECK_LIB([s], [authenticate],
519 [ AC_DEFINE([WITH_AIXAUTHENTICATE])
520 LIBS="$LIBS -ls"
521 ])
522 ])
523 dnl Check for various auth function declarations in headers.
524 AC_CHECK_DECLS([authenticate, loginrestrictions, loginsuccess,
525 passwdexpired, setauthdb], , , [#include <usersec.h>])
526 dnl Check if loginfailed is declared and takes 4 arguments (AIX >= 5.2)
527 AC_CHECK_DECLS([loginfailed],
528 [AC_MSG_CHECKING([if loginfailed takes 4 arguments])
529 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <usersec.h> ]],
530 [[ (void)loginfailed("user","host","tty",0); ]])],
531 [AC_MSG_RESULT([yes])
532 AC_DEFINE([AIX_LOGINFAILED_4ARG], [1],
533 [Define if your AIX loginfailed() function
534 takes 4 arguments (AIX >= 5.2)])], [AC_MSG_RESULT([no])
535 ])],
536 [],
537 [#include <usersec.h>]
538 )
539 AC_CHECK_FUNCS([getgrset setauthdb])
540 AC_CHECK_DECL([F_CLOSEM],
541 AC_DEFINE([HAVE_FCNTL_CLOSEM], [1], [Use F_CLOSEM fcntl for closefrom]),
542 [],
543 [ #include <limits.h>
544 #include <fcntl.h> ]
545 )
546 check_for_aix_broken_getaddrinfo=1
547 AC_DEFINE([BROKEN_REALPATH], [1], [Define if you have a broken realpath.])
548 AC_DEFINE([SETEUID_BREAKS_SETUID], [1],
549 [Define if your platform breaks doing a seteuid before a setuid])
550 AC_DEFINE([BROKEN_SETREUID], [1], [Define if your setreuid() is broken])
551 AC_DEFINE([BROKEN_SETREGID], [1], [Define if your setregid() is broken])
552 dnl AIX handles lastlog as part of its login message
553 AC_DEFINE([DISABLE_LASTLOG], [1], [Define if you don't want to use lastlog])
554 AC_DEFINE([LOGIN_NEEDS_UTMPX], [1],
555 [Some systems need a utmpx entry for /bin/login to work])
556 AC_DEFINE([SPT_TYPE], [SPT_REUSEARGV],
557 [Define to a Set Process Title type if your system is
558 supported by bsd-setproctitle.c])
559 AC_DEFINE([SSHPAM_CHAUTHTOK_NEEDS_RUID], [1],
560 [AIX 5.2 and 5.3 (and presumably newer) require this])
561 AC_DEFINE([PTY_ZEROREAD], [1], [read(1) can return 0 for a non-closed fd])
Adam Langleyd0592972015-03-30 14:49:51 -0700562 AC_DEFINE([PLATFORM_SYS_DIR_UID], 2, [System dirs owned by bin (uid 2)])
563 ;;
564*-*-android*)
565 AC_DEFINE([DISABLE_UTMP], [1], [Define if you don't want to use utmp])
566 AC_DEFINE([DISABLE_WTMP], [1], [Define if you don't want to use wtmp])
Greg Hartmanbd77cf72015-02-25 13:21:06 -0800567 ;;
568*-*-cygwin*)
569 check_for_libcrypt_later=1
570 LIBS="$LIBS /usr/lib/textreadmode.o"
571 AC_DEFINE([HAVE_CYGWIN], [1], [Define if you are on Cygwin])
572 AC_DEFINE([USE_PIPES], [1], [Use PIPES instead of a socketpair()])
573 AC_DEFINE([DISABLE_SHADOW], [1],
574 [Define if you want to disable shadow passwords])
575 AC_DEFINE([NO_X11_UNIX_SOCKETS], [1],
576 [Define if X11 doesn't support AF_UNIX sockets on that system])
577 AC_DEFINE([NO_IPPORT_RESERVED_CONCEPT], [1],
578 [Define if the concept of ports only accessible to
579 superusers isn't known])
580 AC_DEFINE([DISABLE_FD_PASSING], [1],
581 [Define if your platform needs to skip post auth
582 file descriptor passing])
583 AC_DEFINE([SSH_IOBUFSZ], [65535], [Windows is sensitive to read buffer size])
Adam Langleyd0592972015-03-30 14:49:51 -0700584 AC_DEFINE([FILESYSTEM_NO_BACKSLASH], [1], [File names may not contain backslash characters])
585 # Cygwin defines optargs, optargs as declspec(dllimport) for historical
586 # reasons which cause compile warnings, so we disable those warnings.
587 OSSH_CHECK_CFLAG_COMPILE([-Wno-attributes])
Greg Hartmanbd77cf72015-02-25 13:21:06 -0800588 ;;
589*-*-dgux*)
590 AC_DEFINE([IP_TOS_IS_BROKEN], [1],
591 [Define if your system choked on IP TOS setting])
592 AC_DEFINE([SETEUID_BREAKS_SETUID])
593 AC_DEFINE([BROKEN_SETREUID])
594 AC_DEFINE([BROKEN_SETREGID])
595 ;;
596*-*-darwin*)
Adam Langleyd0592972015-03-30 14:49:51 -0700597 use_pie=auto
Greg Hartmanbd77cf72015-02-25 13:21:06 -0800598 AC_MSG_CHECKING([if we have working getaddrinfo])
599 AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <mach-o/dyld.h>
600main() { if (NSVersionOfRunTimeLibrary("System") >= (60 << 16))
601 exit(0);
602 else
603 exit(1);
604}
605 ]])],
606 [AC_MSG_RESULT([working])],
607 [AC_MSG_RESULT([buggy])
608 AC_DEFINE([BROKEN_GETADDRINFO], [1],
609 [getaddrinfo is broken (if present)])
610 ],
611 [AC_MSG_RESULT([assume it is working])])
612 AC_DEFINE([SETEUID_BREAKS_SETUID])
613 AC_DEFINE([BROKEN_SETREUID])
614 AC_DEFINE([BROKEN_SETREGID])
615 AC_DEFINE([BROKEN_GLOB], [1], [OS X glob does not do what we expect])
616 AC_DEFINE_UNQUOTED([BIND_8_COMPAT], [1],
617 [Define if your resolver libs need this for getrrsetbyname])
618 AC_DEFINE([SSH_TUN_FREEBSD], [1], [Open tunnel devices the FreeBSD way])
619 AC_DEFINE([SSH_TUN_COMPAT_AF], [1],
620 [Use tunnel device compatibility to OpenBSD])
621 AC_DEFINE([SSH_TUN_PREPEND_AF], [1],
622 [Prepend the address family to IP tunnel traffic])
623 m4_pattern_allow([AU_IPv])
624 AC_CHECK_DECL([AU_IPv4], [],
625 AC_DEFINE([AU_IPv4], [0], [System only supports IPv4 audit records])
626 [#include <bsm/audit.h>]
627 AC_DEFINE([LASTLOG_WRITE_PUTUTXLINE], [1],
628 [Define if pututxline updates lastlog too])
629 )
630 AC_DEFINE([SPT_TYPE], [SPT_REUSEARGV],
631 [Define to a Set Process Title type if your system is
632 supported by bsd-setproctitle.c])
633 AC_CHECK_FUNCS([sandbox_init])
634 AC_CHECK_HEADERS([sandbox.h])
635 ;;
636*-*-dragonfly*)
637 SSHDLIBS="$SSHDLIBS -lcrypt"
Adam Langleyd0592972015-03-30 14:49:51 -0700638 TEST_MALLOC_OPTIONS="AFGJPRX"
Greg Hartmanbd77cf72015-02-25 13:21:06 -0800639 ;;
640*-*-haiku*)
641 LIBS="$LIBS -lbsd "
642 AC_CHECK_LIB([network], [socket])
643 AC_DEFINE([HAVE_U_INT64_T])
644 MANTYPE=man
645 ;;
646*-*-hpux*)
647 # first we define all of the options common to all HP-UX releases
648 CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1"
649 IPADDR_IN_DISPLAY=yes
650 AC_DEFINE([USE_PIPES])
651 AC_DEFINE([LOGIN_NO_ENDOPT], [1],
652 [Define if your login program cannot handle end of options ("--")])
653 AC_DEFINE([LOGIN_NEEDS_UTMPX])
654 AC_DEFINE([LOCKED_PASSWD_STRING], ["*"],
655 [String used in /etc/passwd to denote locked account])
656 AC_DEFINE([SPT_TYPE], [SPT_PSTAT])
Adam Langleyd0592972015-03-30 14:49:51 -0700657 AC_DEFINE([PLATFORM_SYS_DIR_UID], 2, [System dirs owned by bin (uid 2)])
Greg Hartmanbd77cf72015-02-25 13:21:06 -0800658 maildir="/var/mail"
659 LIBS="$LIBS -lsec"
660 AC_CHECK_LIB([xnet], [t_error], ,
661 [AC_MSG_ERROR([*** -lxnet needed on HP-UX - check config.log ***])])
662
663 # next, we define all of the options specific to major releases
664 case "$host" in
665 *-*-hpux10*)
666 if test -z "$GCC"; then
667 CFLAGS="$CFLAGS -Ae"
668 fi
669 ;;
670 *-*-hpux11*)
671 AC_DEFINE([PAM_SUN_CODEBASE], [1],
672 [Define if you are using Solaris-derived PAM which
673 passes pam_messages to the conversation function
674 with an extra level of indirection])
675 AC_DEFINE([DISABLE_UTMP], [1],
676 [Define if you don't want to use utmp])
677 AC_DEFINE([USE_BTMP], [1], [Use btmp to log bad logins])
678 check_for_hpux_broken_getaddrinfo=1
679 check_for_conflicting_getspnam=1
680 ;;
681 esac
682
683 # lastly, we define options specific to minor releases
684 case "$host" in
685 *-*-hpux10.26)
686 AC_DEFINE([HAVE_SECUREWARE], [1],
687 [Define if you have SecureWare-based
688 protected password database])
689 disable_ptmx_check=yes
690 LIBS="$LIBS -lsecpw"
691 ;;
692 esac
693 ;;
694*-*-irix5*)
695 PATH="$PATH:/usr/etc"
696 AC_DEFINE([BROKEN_INET_NTOA], [1],
697 [Define if you system's inet_ntoa is busted
698 (e.g. Irix gcc issue)])
699 AC_DEFINE([SETEUID_BREAKS_SETUID])
700 AC_DEFINE([BROKEN_SETREUID])
701 AC_DEFINE([BROKEN_SETREGID])
702 AC_DEFINE([WITH_ABBREV_NO_TTY], [1],
703 [Define if you shouldn't strip 'tty' from your
704 ttyname in [uw]tmp])
705 AC_DEFINE([LOCKED_PASSWD_STRING], ["*LK*"])
706 ;;
707*-*-irix6*)
708 PATH="$PATH:/usr/etc"
709 AC_DEFINE([WITH_IRIX_ARRAY], [1],
710 [Define if you have/want arrays
711 (cluster-wide session managment, not C arrays)])
712 AC_DEFINE([WITH_IRIX_PROJECT], [1],
713 [Define if you want IRIX project management])
714 AC_DEFINE([WITH_IRIX_AUDIT], [1],
715 [Define if you want IRIX audit trails])
716 AC_CHECK_FUNC([jlimit_startjob], [AC_DEFINE([WITH_IRIX_JOBS], [1],
717 [Define if you want IRIX kernel jobs])])
718 AC_DEFINE([BROKEN_INET_NTOA])
719 AC_DEFINE([SETEUID_BREAKS_SETUID])
720 AC_DEFINE([BROKEN_SETREUID])
721 AC_DEFINE([BROKEN_SETREGID])
722 AC_DEFINE([BROKEN_UPDWTMPX], [1], [updwtmpx is broken (if present)])
723 AC_DEFINE([WITH_ABBREV_NO_TTY])
724 AC_DEFINE([LOCKED_PASSWD_STRING], ["*LK*"])
725 ;;
726*-*-k*bsd*-gnu | *-*-kopensolaris*-gnu)
727 check_for_libcrypt_later=1
728 AC_DEFINE([PAM_TTY_KLUDGE])
729 AC_DEFINE([LOCKED_PASSWD_PREFIX], ["!"])
730 AC_DEFINE([SPT_TYPE], [SPT_REUSEARGV])
731 AC_DEFINE([_PATH_BTMP], ["/var/log/btmp"], [log for bad login attempts])
732 AC_DEFINE([USE_BTMP], [1], [Use btmp to log bad logins])
733 ;;
734*-*-linux*)
735 no_dev_ptmx=1
Adam Langleyd0592972015-03-30 14:49:51 -0700736 use_pie=auto
Greg Hartmanbd77cf72015-02-25 13:21:06 -0800737 check_for_libcrypt_later=1
738 check_for_openpty_ctty_bug=1
739 AC_DEFINE([PAM_TTY_KLUDGE], [1],
740 [Work around problematic Linux PAM modules handling of PAM_TTY])
741 AC_DEFINE([LOCKED_PASSWD_PREFIX], ["!"],
742 [String used in /etc/passwd to denote locked account])
743 AC_DEFINE([SPT_TYPE], [SPT_REUSEARGV])
744 AC_DEFINE([LINK_OPNOTSUPP_ERRNO], [EPERM],
745 [Define to whatever link() returns for "not supported"
746 if it doesn't return EOPNOTSUPP.])
747 AC_DEFINE([_PATH_BTMP], ["/var/log/btmp"], [log for bad login attempts])
748 AC_DEFINE([USE_BTMP])
749 AC_DEFINE([LINUX_OOM_ADJUST], [1], [Adjust Linux out-of-memory killer])
750 inet6_default_4in6=yes
751 case `uname -r` in
752 1.*|2.0.*)
753 AC_DEFINE([BROKEN_CMSG_TYPE], [1],
754 [Define if cmsg_type is not passed correctly])
755 ;;
756 esac
757 # tun(4) forwarding compat code
758 AC_CHECK_HEADERS([linux/if_tun.h])
759 if test "x$ac_cv_header_linux_if_tun_h" = "xyes" ; then
760 AC_DEFINE([SSH_TUN_LINUX], [1],
761 [Open tunnel devices the Linux tun/tap way])
762 AC_DEFINE([SSH_TUN_COMPAT_AF], [1],
763 [Use tunnel device compatibility to OpenBSD])
764 AC_DEFINE([SSH_TUN_PREPEND_AF], [1],
765 [Prepend the address family to IP tunnel traffic])
766 fi
Adam Langleyd0592972015-03-30 14:49:51 -0700767 AC_CHECK_HEADERS([linux/seccomp.h linux/filter.h linux/audit.h], [],
768 [], [#include <linux/types.h>])
769 AC_CHECK_FUNCS([prctl])
770 AC_MSG_CHECKING([for seccomp architecture])
771 seccomp_audit_arch=
772 case "$host" in
773 x86_64-*)
774 seccomp_audit_arch=AUDIT_ARCH_X86_64
775 ;;
776 i*86-*)
777 seccomp_audit_arch=AUDIT_ARCH_I386
778 ;;
779 arm*-*)
780 seccomp_audit_arch=AUDIT_ARCH_ARM
781 ;;
782 esac
783 if test "x$seccomp_audit_arch" != "x" ; then
784 AC_MSG_RESULT(["$seccomp_audit_arch"])
785 AC_DEFINE_UNQUOTED([SECCOMP_AUDIT_ARCH], [$seccomp_audit_arch],
786 [Specify the system call convention in use])
787 else
788 AC_MSG_RESULT([architecture not supported])
789 fi
Greg Hartmanbd77cf72015-02-25 13:21:06 -0800790 ;;
791mips-sony-bsd|mips-sony-newsos4)
792 AC_DEFINE([NEED_SETPGRP], [1], [Need setpgrp to acquire controlling tty])
793 SONY=1
794 ;;
795*-*-netbsd*)
796 check_for_libcrypt_before=1
797 if test "x$withval" != "xno" ; then
798 need_dash_r=1
799 fi
800 AC_DEFINE([SSH_TUN_FREEBSD], [1], [Open tunnel devices the FreeBSD way])
801 AC_CHECK_HEADER([net/if_tap.h], ,
802 AC_DEFINE([SSH_TUN_NO_L2], [1], [No layer 2 tunnel support]))
803 AC_DEFINE([SSH_TUN_PREPEND_AF], [1],
804 [Prepend the address family to IP tunnel traffic])
Adam Langleyd0592972015-03-30 14:49:51 -0700805 TEST_MALLOC_OPTIONS="AJRX"
806 AC_DEFINE([BROKEN_STRNVIS], [1],
807 [NetBSD strnvis argument order is swapped compared to OpenBSD])
808 AC_DEFINE([BROKEN_READ_COMPARISON], [1],
809 [NetBSD read function is sometimes redirected, breaking atomicio comparisons against it])
Greg Hartmanbd77cf72015-02-25 13:21:06 -0800810 ;;
811*-*-freebsd*)
812 check_for_libcrypt_later=1
813 AC_DEFINE([LOCKED_PASSWD_PREFIX], ["*LOCKED*"], [Account locked with pw(1)])
814 AC_DEFINE([SSH_TUN_FREEBSD], [1], [Open tunnel devices the FreeBSD way])
815 AC_CHECK_HEADER([net/if_tap.h], ,
816 AC_DEFINE([SSH_TUN_NO_L2], [1], [No layer 2 tunnel support]))
817 AC_DEFINE([BROKEN_GLOB], [1], [FreeBSD glob does not do what we need])
Adam Langleyd0592972015-03-30 14:49:51 -0700818 AC_DEFINE([BROKEN_STRNVIS], [1],
819 [FreeBSD strnvis argument order is swapped compared to OpenBSD])
820 TEST_MALLOC_OPTIONS="AJRX"
821 # Preauth crypto occasionally uses file descriptors for crypto offload
822 # and will crash if they cannot be opened.
823 AC_DEFINE([SANDBOX_SKIP_RLIMIT_NOFILE], [1],
824 [define if setrlimit RLIMIT_NOFILE breaks things])
Greg Hartmanbd77cf72015-02-25 13:21:06 -0800825 ;;
826*-*-bsdi*)
827 AC_DEFINE([SETEUID_BREAKS_SETUID])
828 AC_DEFINE([BROKEN_SETREUID])
829 AC_DEFINE([BROKEN_SETREGID])
830 ;;
831*-next-*)
832 conf_lastlog_location="/usr/adm/lastlog"
833 conf_utmp_location=/etc/utmp
834 conf_wtmp_location=/usr/adm/wtmp
835 maildir=/usr/spool/mail
836 AC_DEFINE([HAVE_NEXT], [1], [Define if you are on NeXT])
837 AC_DEFINE([BROKEN_REALPATH])
838 AC_DEFINE([USE_PIPES])
839 AC_DEFINE([BROKEN_SAVED_UIDS], [1], [Needed for NeXT])
840 ;;
841*-*-openbsd*)
Adam Langleyd0592972015-03-30 14:49:51 -0700842 use_pie=auto
Greg Hartmanbd77cf72015-02-25 13:21:06 -0800843 AC_DEFINE([HAVE_ATTRIBUTE__SENTINEL__], [1], [OpenBSD's gcc has sentinel])
844 AC_DEFINE([HAVE_ATTRIBUTE__BOUNDED__], [1], [OpenBSD's gcc has bounded])
845 AC_DEFINE([SSH_TUN_OPENBSD], [1], [Open tunnel devices the OpenBSD way])
846 AC_DEFINE([SYSLOG_R_SAFE_IN_SIGHAND], [1],
847 [syslog_r function is safe to use in in a signal handler])
Adam Langleyd0592972015-03-30 14:49:51 -0700848 TEST_MALLOC_OPTIONS="AFGJPRX"
Greg Hartmanbd77cf72015-02-25 13:21:06 -0800849 ;;
850*-*-solaris*)
851 if test "x$withval" != "xno" ; then
852 need_dash_r=1
853 fi
854 AC_DEFINE([PAM_SUN_CODEBASE])
855 AC_DEFINE([LOGIN_NEEDS_UTMPX])
856 AC_DEFINE([LOGIN_NEEDS_TERM], [1],
857 [Some versions of /bin/login need the TERM supplied
858 on the commandline])
859 AC_DEFINE([PAM_TTY_KLUDGE])
860 AC_DEFINE([SSHPAM_CHAUTHTOK_NEEDS_RUID], [1],
861 [Define if pam_chauthtok wants real uid set
862 to the unpriv'ed user])
863 AC_DEFINE([LOCKED_PASSWD_STRING], ["*LK*"])
864 # Pushing STREAMS modules will cause sshd to acquire a controlling tty.
865 AC_DEFINE([SSHD_ACQUIRES_CTTY], [1],
866 [Define if sshd somehow reacquires a controlling TTY
867 after setsid()])
868 AC_DEFINE([PASSWD_NEEDS_USERNAME], [1], [must supply username to passwd
869 in case the name is longer than 8 chars])
870 AC_DEFINE([BROKEN_TCGETATTR_ICANON], [1], [tcgetattr with ICANON may hang])
871 external_path_file=/etc/default/login
872 # hardwire lastlog location (can't detect it on some versions)
873 conf_lastlog_location="/var/adm/lastlog"
874 AC_MSG_CHECKING([for obsolete utmp and wtmp in solaris2.x])
875 sol2ver=`echo "$host"| sed -e 's/.*[[0-9]]\.//'`
876 if test "$sol2ver" -ge 8; then
877 AC_MSG_RESULT([yes])
878 AC_DEFINE([DISABLE_UTMP])
879 AC_DEFINE([DISABLE_WTMP], [1],
880 [Define if you don't want to use wtmp])
881 else
882 AC_MSG_RESULT([no])
883 fi
884 AC_ARG_WITH([solaris-contracts],
885 [ --with-solaris-contracts Enable Solaris process contracts (experimental)],
886 [
887 AC_CHECK_LIB([contract], [ct_tmpl_activate],
888 [ AC_DEFINE([USE_SOLARIS_PROCESS_CONTRACTS], [1],
889 [Define if you have Solaris process contracts])
890 SSHDLIBS="$SSHDLIBS -lcontract"
891 SPC_MSG="yes" ], )
892 ],
893 )
894 AC_ARG_WITH([solaris-projects],
895 [ --with-solaris-projects Enable Solaris projects (experimental)],
896 [
897 AC_CHECK_LIB([project], [setproject],
898 [ AC_DEFINE([USE_SOLARIS_PROJECTS], [1],
899 [Define if you have Solaris projects])
900 SSHDLIBS="$SSHDLIBS -lproject"
901 SP_MSG="yes" ], )
902 ],
903 )
Adam Langleyd0592972015-03-30 14:49:51 -0700904 TEST_SHELL=$SHELL # let configure find us a capable shell
Greg Hartmanbd77cf72015-02-25 13:21:06 -0800905 ;;
906*-*-sunos4*)
907 CPPFLAGS="$CPPFLAGS -DSUNOS4"
908 AC_CHECK_FUNCS([getpwanam])
909 AC_DEFINE([PAM_SUN_CODEBASE])
910 conf_utmp_location=/etc/utmp
911 conf_wtmp_location=/var/adm/wtmp
912 conf_lastlog_location=/var/adm/lastlog
913 AC_DEFINE([USE_PIPES])
914 ;;
915*-ncr-sysv*)
916 LIBS="$LIBS -lc89"
917 AC_DEFINE([USE_PIPES])
918 AC_DEFINE([SSHD_ACQUIRES_CTTY])
919 AC_DEFINE([SETEUID_BREAKS_SETUID])
920 AC_DEFINE([BROKEN_SETREUID])
921 AC_DEFINE([BROKEN_SETREGID])
922 ;;
923*-sni-sysv*)
924 # /usr/ucblib MUST NOT be searched on ReliantUNIX
925 AC_CHECK_LIB([dl], [dlsym], ,)
926 # -lresolv needs to be at the end of LIBS or DNS lookups break
927 AC_CHECK_LIB([resolv], [res_query], [ LIBS="$LIBS -lresolv" ])
928 IPADDR_IN_DISPLAY=yes
929 AC_DEFINE([USE_PIPES])
930 AC_DEFINE([IP_TOS_IS_BROKEN])
931 AC_DEFINE([SETEUID_BREAKS_SETUID])
932 AC_DEFINE([BROKEN_SETREUID])
933 AC_DEFINE([BROKEN_SETREGID])
934 AC_DEFINE([SSHD_ACQUIRES_CTTY])
935 external_path_file=/etc/default/login
936 # /usr/ucblib/libucb.a no longer needed on ReliantUNIX
937 # Attention: always take care to bind libsocket and libnsl before libc,
938 # otherwise you will find lots of "SIOCGPGRP errno 22" on syslog
939 ;;
940# UnixWare 1.x, UnixWare 2.x, and others based on code from Univel.
941*-*-sysv4.2*)
942 AC_DEFINE([USE_PIPES])
943 AC_DEFINE([SETEUID_BREAKS_SETUID])
944 AC_DEFINE([BROKEN_SETREUID])
945 AC_DEFINE([BROKEN_SETREGID])
946 AC_DEFINE([PASSWD_NEEDS_USERNAME], [1], [must supply username to passwd])
947 AC_DEFINE([LOCKED_PASSWD_STRING], ["*LK*"])
Adam Langleyd0592972015-03-30 14:49:51 -0700948 TEST_SHELL=$SHELL # let configure find us a capable shell
Greg Hartmanbd77cf72015-02-25 13:21:06 -0800949 ;;
950# UnixWare 7.x, OpenUNIX 8
951*-*-sysv5*)
952 CPPFLAGS="$CPPFLAGS -Dvsnprintf=_xvsnprintf -Dsnprintf=_xsnprintf"
953 AC_DEFINE([UNIXWARE_LONG_PASSWORDS], [1], [Support passwords > 8 chars])
954 AC_DEFINE([USE_PIPES])
955 AC_DEFINE([SETEUID_BREAKS_SETUID])
956 AC_DEFINE([BROKEN_GETADDRINFO])
957 AC_DEFINE([BROKEN_SETREUID])
958 AC_DEFINE([BROKEN_SETREGID])
959 AC_DEFINE([PASSWD_NEEDS_USERNAME])
Adam Langleyd0592972015-03-30 14:49:51 -0700960 TEST_SHELL=$SHELL # let configure find us a capable shell
Greg Hartmanbd77cf72015-02-25 13:21:06 -0800961 case "$host" in
962 *-*-sysv5SCO_SV*) # SCO OpenServer 6.x
963 maildir=/var/spool/mail
Greg Hartmanbd77cf72015-02-25 13:21:06 -0800964 AC_DEFINE([BROKEN_LIBIAF], [1],
965 [ia_uinfo routines not supported by OS yet])
966 AC_DEFINE([BROKEN_UPDWTMPX])
967 AC_CHECK_LIB([prot], [getluid], [ LIBS="$LIBS -lprot"
968 AC_CHECK_FUNCS([getluid setluid], , , [-lprot])
969 AC_DEFINE([HAVE_SECUREWARE])
970 AC_DEFINE([DISABLE_SHADOW])
971 ], , )
972 ;;
973 *) AC_DEFINE([LOCKED_PASSWD_STRING], ["*LK*"])
974 check_for_libcrypt_later=1
975 ;;
976 esac
977 ;;
978*-*-sysv*)
979 ;;
980# SCO UNIX and OEM versions of SCO UNIX
981*-*-sco3.2v4*)
982 AC_MSG_ERROR("This Platform is no longer supported.")
983 ;;
984# SCO OpenServer 5.x
985*-*-sco3.2v5*)
986 if test -z "$GCC"; then
987 CFLAGS="$CFLAGS -belf"
988 fi
989 LIBS="$LIBS -lprot -lx -ltinfo -lm"
990 no_dev_ptmx=1
991 AC_DEFINE([USE_PIPES])
992 AC_DEFINE([HAVE_SECUREWARE])
993 AC_DEFINE([DISABLE_SHADOW])
994 AC_DEFINE([DISABLE_FD_PASSING])
995 AC_DEFINE([SETEUID_BREAKS_SETUID])
996 AC_DEFINE([BROKEN_GETADDRINFO])
997 AC_DEFINE([BROKEN_SETREUID])
998 AC_DEFINE([BROKEN_SETREGID])
999 AC_DEFINE([WITH_ABBREV_NO_TTY])
1000 AC_DEFINE([BROKEN_UPDWTMPX])
1001 AC_DEFINE([PASSWD_NEEDS_USERNAME])
1002 AC_CHECK_FUNCS([getluid setluid])
1003 MANTYPE=man
Adam Langleyd0592972015-03-30 14:49:51 -07001004 TEST_SHELL=$SHELL # let configure find us a capable shell
1005 SKIP_DISABLE_LASTLOG_DEFINE=yes
Greg Hartmanbd77cf72015-02-25 13:21:06 -08001006 ;;
1007*-*-unicosmk*)
1008 AC_DEFINE([NO_SSH_LASTLOG], [1],
1009 [Define if you don't want to use lastlog in session.c])
1010 AC_DEFINE([SETEUID_BREAKS_SETUID])
1011 AC_DEFINE([BROKEN_SETREUID])
1012 AC_DEFINE([BROKEN_SETREGID])
1013 AC_DEFINE([USE_PIPES])
1014 AC_DEFINE([DISABLE_FD_PASSING])
1015 LDFLAGS="$LDFLAGS"
1016 LIBS="$LIBS -lgen -lrsc -lshare -luex -lacm"
1017 MANTYPE=cat
1018 ;;
1019*-*-unicosmp*)
1020 AC_DEFINE([SETEUID_BREAKS_SETUID])
1021 AC_DEFINE([BROKEN_SETREUID])
1022 AC_DEFINE([BROKEN_SETREGID])
1023 AC_DEFINE([WITH_ABBREV_NO_TTY])
1024 AC_DEFINE([USE_PIPES])
1025 AC_DEFINE([DISABLE_FD_PASSING])
1026 LDFLAGS="$LDFLAGS"
1027 LIBS="$LIBS -lgen -lacid -ldb"
1028 MANTYPE=cat
1029 ;;
1030*-*-unicos*)
1031 AC_DEFINE([SETEUID_BREAKS_SETUID])
1032 AC_DEFINE([BROKEN_SETREUID])
1033 AC_DEFINE([BROKEN_SETREGID])
1034 AC_DEFINE([USE_PIPES])
1035 AC_DEFINE([DISABLE_FD_PASSING])
1036 AC_DEFINE([NO_SSH_LASTLOG])
1037 LDFLAGS="$LDFLAGS -Wl,-Dmsglevel=334:fatal"
1038 LIBS="$LIBS -lgen -lrsc -lshare -luex -lacm"
1039 MANTYPE=cat
1040 ;;
1041*-dec-osf*)
1042 AC_MSG_CHECKING([for Digital Unix SIA])
1043 no_osfsia=""
1044 AC_ARG_WITH([osfsia],
1045 [ --with-osfsia Enable Digital Unix SIA],
1046 [
1047 if test "x$withval" = "xno" ; then
1048 AC_MSG_RESULT([disabled])
1049 no_osfsia=1
1050 fi
1051 ],
1052 )
1053 if test -z "$no_osfsia" ; then
1054 if test -f /etc/sia/matrix.conf; then
1055 AC_MSG_RESULT([yes])
1056 AC_DEFINE([HAVE_OSF_SIA], [1],
1057 [Define if you have Digital Unix Security
1058 Integration Architecture])
1059 AC_DEFINE([DISABLE_LOGIN], [1],
1060 [Define if you don't want to use your
1061 system's login() call])
1062 AC_DEFINE([DISABLE_FD_PASSING])
1063 LIBS="$LIBS -lsecurity -ldb -lm -laud"
1064 SIA_MSG="yes"
1065 else
1066 AC_MSG_RESULT([no])
1067 AC_DEFINE([LOCKED_PASSWD_SUBSTR], ["Nologin"],
1068 [String used in /etc/passwd to denote locked account])
1069 fi
1070 fi
1071 AC_DEFINE([BROKEN_GETADDRINFO])
1072 AC_DEFINE([SETEUID_BREAKS_SETUID])
1073 AC_DEFINE([BROKEN_SETREUID])
1074 AC_DEFINE([BROKEN_SETREGID])
1075 AC_DEFINE([BROKEN_READV_COMPARISON], [1], [Can't do comparisons on readv])
1076 ;;
1077
1078*-*-nto-qnx*)
1079 AC_DEFINE([USE_PIPES])
1080 AC_DEFINE([NO_X11_UNIX_SOCKETS])
Greg Hartmanbd77cf72015-02-25 13:21:06 -08001081 AC_DEFINE([DISABLE_LASTLOG])
1082 AC_DEFINE([SSHD_ACQUIRES_CTTY])
1083 AC_DEFINE([BROKEN_SHADOW_EXPIRE], [1], [QNX shadow support is broken])
1084 enable_etc_default_login=no # has incompatible /etc/default/login
1085 case "$host" in
1086 *-*-nto-qnx6*)
1087 AC_DEFINE([DISABLE_FD_PASSING])
1088 ;;
1089 esac
1090 ;;
1091
1092*-*-ultrix*)
1093 AC_DEFINE([BROKEN_GETGROUPS], [1], [getgroups(0,NULL) will return -1])
1094 AC_DEFINE([BROKEN_MMAP], [1], [Ultrix mmap can't map files])
1095 AC_DEFINE([NEED_SETPGRP])
1096 AC_DEFINE([HAVE_SYS_SYSLOG_H], [1], [Force use of sys/syslog.h on Ultrix])
1097 ;;
1098
1099*-*-lynxos)
1100 CFLAGS="$CFLAGS -D__NO_INCLUDE_WARN__"
Greg Hartmanbd77cf72015-02-25 13:21:06 -08001101 AC_DEFINE([BROKEN_SETVBUF], [1], [LynxOS has broken setvbuf() implementation])
1102 ;;
1103esac
1104
1105AC_MSG_CHECKING([compiler and flags for sanity])
1106AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include <stdio.h> ]], [[ exit(0); ]])],
1107 [ AC_MSG_RESULT([yes]) ],
1108 [
1109 AC_MSG_RESULT([no])
1110 AC_MSG_ERROR([*** compiler cannot create working executables, check config.log ***])
1111 ],
1112 [ AC_MSG_WARN([cross compiling: not checking compiler sanity]) ]
1113)
1114
1115dnl Checks for header files.
1116# Checks for libraries.
1117AC_CHECK_FUNC([yp_match], , [AC_CHECK_LIB([nsl], [yp_match])])
1118AC_CHECK_FUNC([setsockopt], , [AC_CHECK_LIB([socket], [setsockopt])])
1119
1120dnl IRIX and Solaris 2.5.1 have dirname() in libgen
1121AC_CHECK_FUNCS([dirname], [AC_CHECK_HEADERS([libgen.h])] , [
1122 AC_CHECK_LIB([gen], [dirname], [
1123 AC_CACHE_CHECK([for broken dirname],
1124 ac_cv_have_broken_dirname, [
1125 save_LIBS="$LIBS"
1126 LIBS="$LIBS -lgen"
1127 AC_RUN_IFELSE(
1128 [AC_LANG_SOURCE([[
1129#include <libgen.h>
1130#include <string.h>
1131
1132int main(int argc, char **argv) {
1133 char *s, buf[32];
1134
1135 strncpy(buf,"/etc", 32);
1136 s = dirname(buf);
1137 if (!s || strncmp(s, "/", 32) != 0) {
1138 exit(1);
1139 } else {
1140 exit(0);
1141 }
1142}
1143 ]])],
1144 [ ac_cv_have_broken_dirname="no" ],
1145 [ ac_cv_have_broken_dirname="yes" ],
1146 [ ac_cv_have_broken_dirname="no" ],
1147 )
1148 LIBS="$save_LIBS"
1149 ])
1150 if test "x$ac_cv_have_broken_dirname" = "xno" ; then
1151 LIBS="$LIBS -lgen"
1152 AC_DEFINE([HAVE_DIRNAME])
1153 AC_CHECK_HEADERS([libgen.h])
1154 fi
1155 ])
1156])
1157
1158AC_CHECK_FUNC([getspnam], ,
1159 [AC_CHECK_LIB([gen], [getspnam], [LIBS="$LIBS -lgen"])])
1160AC_SEARCH_LIBS([basename], [gen], [AC_DEFINE([HAVE_BASENAME], [1],
1161 [Define if you have the basename function.])])
1162
1163dnl zlib is required
1164AC_ARG_WITH([zlib],
1165 [ --with-zlib=PATH Use zlib in PATH],
1166 [ if test "x$withval" = "xno" ; then
1167 AC_MSG_ERROR([*** zlib is required ***])
1168 elif test "x$withval" != "xyes"; then
1169 if test -d "$withval/lib"; then
1170 if test -n "${need_dash_r}"; then
1171 LDFLAGS="-L${withval}/lib -R${withval}/lib ${LDFLAGS}"
1172 else
1173 LDFLAGS="-L${withval}/lib ${LDFLAGS}"
1174 fi
1175 else
1176 if test -n "${need_dash_r}"; then
1177 LDFLAGS="-L${withval} -R${withval} ${LDFLAGS}"
1178 else
1179 LDFLAGS="-L${withval} ${LDFLAGS}"
1180 fi
1181 fi
1182 if test -d "$withval/include"; then
1183 CPPFLAGS="-I${withval}/include ${CPPFLAGS}"
1184 else
1185 CPPFLAGS="-I${withval} ${CPPFLAGS}"
1186 fi
1187 fi ]
1188)
1189
1190AC_CHECK_HEADER([zlib.h], ,[AC_MSG_ERROR([*** zlib.h missing - please install first or check config.log ***])])
1191AC_CHECK_LIB([z], [deflate], ,
1192 [
1193 saved_CPPFLAGS="$CPPFLAGS"
1194 saved_LDFLAGS="$LDFLAGS"
1195 save_LIBS="$LIBS"
1196 dnl Check default zlib install dir
1197 if test -n "${need_dash_r}"; then
1198 LDFLAGS="-L/usr/local/lib -R/usr/local/lib ${saved_LDFLAGS}"
1199 else
1200 LDFLAGS="-L/usr/local/lib ${saved_LDFLAGS}"
1201 fi
1202 CPPFLAGS="-I/usr/local/include ${saved_CPPFLAGS}"
1203 LIBS="$LIBS -lz"
1204 AC_TRY_LINK_FUNC([deflate], [AC_DEFINE([HAVE_LIBZ])],
1205 [
1206 AC_MSG_ERROR([*** zlib missing - please install first or check config.log ***])
1207 ]
1208 )
1209 ]
1210)
1211
1212AC_ARG_WITH([zlib-version-check],
1213 [ --without-zlib-version-check Disable zlib version check],
1214 [ if test "x$withval" = "xno" ; then
1215 zlib_check_nonfatal=1
1216 fi
1217 ]
1218)
1219
1220AC_MSG_CHECKING([for possibly buggy zlib])
1221AC_RUN_IFELSE([AC_LANG_PROGRAM([[
1222#include <stdio.h>
Adam Langleyd0592972015-03-30 14:49:51 -07001223#include <stdlib.h>
Greg Hartmanbd77cf72015-02-25 13:21:06 -08001224#include <zlib.h>
1225 ]],
1226 [[
1227 int a=0, b=0, c=0, d=0, n, v;
1228 n = sscanf(ZLIB_VERSION, "%d.%d.%d.%d", &a, &b, &c, &d);
1229 if (n != 3 && n != 4)
1230 exit(1);
1231 v = a*1000000 + b*10000 + c*100 + d;
1232 fprintf(stderr, "found zlib version %s (%d)\n", ZLIB_VERSION, v);
1233
1234 /* 1.1.4 is OK */
1235 if (a == 1 && b == 1 && c >= 4)
1236 exit(0);
1237
1238 /* 1.2.3 and up are OK */
1239 if (v >= 1020300)
1240 exit(0);
1241
1242 exit(2);
1243 ]])],
1244 AC_MSG_RESULT([no]),
1245 [ AC_MSG_RESULT([yes])
1246 if test -z "$zlib_check_nonfatal" ; then
1247 AC_MSG_ERROR([*** zlib too old - check config.log ***
1248Your reported zlib version has known security problems. It's possible your
1249vendor has fixed these problems without changing the version number. If you
1250are sure this is the case, you can disable the check by running
1251"./configure --without-zlib-version-check".
1252If you are in doubt, upgrade zlib to version 1.2.3 or greater.
1253See http://www.gzip.org/zlib/ for details.])
1254 else
1255 AC_MSG_WARN([zlib version may have security problems])
1256 fi
1257 ],
1258 [ AC_MSG_WARN([cross compiling: not checking zlib version]) ]
1259)
1260
1261dnl UnixWare 2.x
1262AC_CHECK_FUNC([strcasecmp],
1263 [], [ AC_CHECK_LIB([resolv], [strcasecmp], [LIBS="$LIBS -lresolv"]) ]
1264)
1265AC_CHECK_FUNCS([utimes],
1266 [], [ AC_CHECK_LIB([c89], [utimes], [AC_DEFINE([HAVE_UTIMES])
1267 LIBS="$LIBS -lc89"]) ]
1268)
1269
1270dnl Checks for libutil functions
Adam Langleyd0592972015-03-30 14:49:51 -07001271AC_CHECK_HEADERS([bsd/libutil.h libutil.h])
1272AC_SEARCH_LIBS([fmt_scaled], [util bsd])
1273AC_SEARCH_LIBS([scan_scaled], [util bsd])
1274AC_SEARCH_LIBS([login], [util bsd])
1275AC_SEARCH_LIBS([logout], [util bsd])
1276AC_SEARCH_LIBS([logwtmp], [util bsd])
1277AC_SEARCH_LIBS([openpty], [util bsd])
1278AC_SEARCH_LIBS([updwtmp], [util bsd])
1279AC_CHECK_FUNCS([fmt_scaled scan_scaled login logout openpty updwtmp logwtmp])
1280
1281# On some platforms, inet_ntop may be found in libresolv or libnsl.
1282AC_SEARCH_LIBS([inet_ntop], [resolv nsl])
Greg Hartmanbd77cf72015-02-25 13:21:06 -08001283
1284AC_FUNC_STRFTIME
1285
1286# Check for ALTDIRFUNC glob() extension
1287AC_MSG_CHECKING([for GLOB_ALTDIRFUNC support])
1288AC_EGREP_CPP([FOUNDIT],
1289 [
1290 #include <glob.h>
1291 #ifdef GLOB_ALTDIRFUNC
1292 FOUNDIT
1293 #endif
1294 ],
1295 [
1296 AC_DEFINE([GLOB_HAS_ALTDIRFUNC], [1],
1297 [Define if your system glob() function has
1298 the GLOB_ALTDIRFUNC extension])
1299 AC_MSG_RESULT([yes])
1300 ],
1301 [
1302 AC_MSG_RESULT([no])
1303 ]
1304)
1305
1306# Check for g.gl_matchc glob() extension
1307AC_MSG_CHECKING([for gl_matchc field in glob_t])
1308AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <glob.h> ]],
1309 [[ glob_t g; g.gl_matchc = 1; ]])],
1310 [
1311 AC_DEFINE([GLOB_HAS_GL_MATCHC], [1],
1312 [Define if your system glob() function has
1313 gl_matchc options in glob_t])
1314 AC_MSG_RESULT([yes])
1315 ], [
1316 AC_MSG_RESULT([no])
1317])
1318
1319# Check for g.gl_statv glob() extension
1320AC_MSG_CHECKING([for gl_statv and GLOB_KEEPSTAT extensions for glob])
1321AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <glob.h> ]], [[
1322#ifndef GLOB_KEEPSTAT
1323#error "glob does not support GLOB_KEEPSTAT extension"
1324#endif
1325glob_t g;
1326g.gl_statv = NULL;
1327]])],
1328 [
1329 AC_DEFINE([GLOB_HAS_GL_STATV], [1],
1330 [Define if your system glob() function has
1331 gl_statv options in glob_t])
1332 AC_MSG_RESULT([yes])
1333 ], [
1334 AC_MSG_RESULT([no])
Adam Langleyd0592972015-03-30 14:49:51 -07001335
Greg Hartmanbd77cf72015-02-25 13:21:06 -08001336])
1337
1338AC_CHECK_DECLS([GLOB_NOMATCH], , , [#include <glob.h>])
1339
1340AC_MSG_CHECKING([whether struct dirent allocates space for d_name])
1341AC_RUN_IFELSE(
1342 [AC_LANG_PROGRAM([[
1343#include <sys/types.h>
1344#include <dirent.h>]],
1345 [[
1346 struct dirent d;
1347 exit(sizeof(d.d_name)<=sizeof(char));
1348 ]])],
1349 [AC_MSG_RESULT([yes])],
1350 [
1351 AC_MSG_RESULT([no])
1352 AC_DEFINE([BROKEN_ONE_BYTE_DIRENT_D_NAME], [1],
1353 [Define if your struct dirent expects you to
1354 allocate extra space for d_name])
1355 ],
1356 [
1357 AC_MSG_WARN([cross compiling: assuming BROKEN_ONE_BYTE_DIRENT_D_NAME])
1358 AC_DEFINE([BROKEN_ONE_BYTE_DIRENT_D_NAME])
1359 ]
1360)
1361
1362AC_MSG_CHECKING([for /proc/pid/fd directory])
1363if test -d "/proc/$$/fd" ; then
1364 AC_DEFINE([HAVE_PROC_PID], [1], [Define if you have /proc/$pid/fd])
1365 AC_MSG_RESULT([yes])
1366else
1367 AC_MSG_RESULT([no])
1368fi
1369
1370# Check whether user wants S/Key support
1371SKEY_MSG="no"
1372AC_ARG_WITH([skey],
1373 [ --with-skey[[=PATH]] Enable S/Key support (optionally in PATH)],
1374 [
1375 if test "x$withval" != "xno" ; then
1376
1377 if test "x$withval" != "xyes" ; then
1378 CPPFLAGS="$CPPFLAGS -I${withval}/include"
1379 LDFLAGS="$LDFLAGS -L${withval}/lib"
1380 fi
1381
1382 AC_DEFINE([SKEY], [1], [Define if you want S/Key support])
1383 LIBS="-lskey $LIBS"
1384 SKEY_MSG="yes"
1385
1386 AC_MSG_CHECKING([for s/key support])
1387 AC_LINK_IFELSE(
1388 [AC_LANG_PROGRAM([[
1389#include <stdio.h>
1390#include <skey.h>
1391 ]], [[
1392 char *ff = skey_keyinfo(""); ff="";
1393 exit(0);
1394 ]])],
1395 [AC_MSG_RESULT([yes])],
1396 [
1397 AC_MSG_RESULT([no])
1398 AC_MSG_ERROR([** Incomplete or missing s/key libraries.])
1399 ])
1400 AC_MSG_CHECKING([if skeychallenge takes 4 arguments])
1401 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1402#include <stdio.h>
1403#include <skey.h>
1404 ]], [[
1405 (void)skeychallenge(NULL,"name","",0);
1406 ]])],
1407 [
1408 AC_MSG_RESULT([yes])
1409 AC_DEFINE([SKEYCHALLENGE_4ARG], [1],
1410 [Define if your skeychallenge()
1411 function takes 4 arguments (NetBSD)])],
1412 [
1413 AC_MSG_RESULT([no])
1414 ])
1415 fi
1416 ]
1417)
1418
Adam Langleyd0592972015-03-30 14:49:51 -07001419# Check whether user wants to use ldns
1420LDNS_MSG="no"
1421AC_ARG_WITH(ldns,
1422 [ --with-ldns[[=PATH]] Use ldns for DNSSEC support (optionally in PATH)],
1423 [
1424 if test "x$withval" != "xno" ; then
1425
1426 if test "x$withval" != "xyes" ; then
1427 CPPFLAGS="$CPPFLAGS -I${withval}/include"
1428 LDFLAGS="$LDFLAGS -L${withval}/lib"
Greg Hartmanbd77cf72015-02-25 13:21:06 -08001429 fi
Adam Langleyd0592972015-03-30 14:49:51 -07001430
1431 AC_DEFINE(HAVE_LDNS, 1, [Define if you want ldns support])
1432 LIBS="-lldns $LIBS"
1433 LDNS_MSG="yes"
1434
1435 AC_MSG_CHECKING([for ldns support])
1436 AC_LINK_IFELSE(
1437 [AC_LANG_SOURCE([[
1438#include <stdio.h>
1439#include <stdlib.h>
1440#include <stdint.h>
1441#include <ldns/ldns.h>
1442int main() { ldns_status status = ldns_verify_trusted(NULL, NULL, NULL, NULL); status=LDNS_STATUS_OK; exit(0); }
1443 ]])
1444 ],
1445 [AC_MSG_RESULT(yes)],
1446 [
1447 AC_MSG_RESULT(no)
1448 AC_MSG_ERROR([** Incomplete or missing ldns libraries.])
1449 ])
1450 fi
1451 ]
Greg Hartmanbd77cf72015-02-25 13:21:06 -08001452)
1453
1454# Check whether user wants libedit support
1455LIBEDIT_MSG="no"
1456AC_ARG_WITH([libedit],
1457 [ --with-libedit[[=PATH]] Enable libedit support for sftp],
1458 [ if test "x$withval" != "xno" ; then
1459 if test "x$withval" = "xyes" ; then
Adam Langleyd0592972015-03-30 14:49:51 -07001460 AC_PATH_TOOL([PKGCONFIG], [pkg-config], [no])
Greg Hartmanbd77cf72015-02-25 13:21:06 -08001461 if test "x$PKGCONFIG" != "xno"; then
1462 AC_MSG_CHECKING([if $PKGCONFIG knows about libedit])
1463 if "$PKGCONFIG" libedit; then
1464 AC_MSG_RESULT([yes])
1465 use_pkgconfig_for_libedit=yes
1466 else
1467 AC_MSG_RESULT([no])
1468 fi
1469 fi
1470 else
1471 CPPFLAGS="$CPPFLAGS -I${withval}/include"
1472 if test -n "${need_dash_r}"; then
1473 LDFLAGS="-L${withval}/lib -R${withval}/lib ${LDFLAGS}"
1474 else
1475 LDFLAGS="-L${withval}/lib ${LDFLAGS}"
1476 fi
1477 fi
1478 if test "x$use_pkgconfig_for_libedit" = "xyes"; then
Adam Langleyd0592972015-03-30 14:49:51 -07001479 LIBEDIT=`$PKGCONFIG --libs libedit`
Greg Hartmanbd77cf72015-02-25 13:21:06 -08001480 CPPFLAGS="$CPPFLAGS `$PKGCONFIG --cflags libedit`"
1481 else
1482 LIBEDIT="-ledit -lcurses"
1483 fi
1484 OTHERLIBS=`echo $LIBEDIT | sed 's/-ledit//'`
1485 AC_CHECK_LIB([edit], [el_init],
1486 [ AC_DEFINE([USE_LIBEDIT], [1], [Use libedit for sftp])
1487 LIBEDIT_MSG="yes"
1488 AC_SUBST([LIBEDIT])
1489 ],
1490 [ AC_MSG_ERROR([libedit not found]) ],
1491 [ $OTHERLIBS ]
1492 )
1493 AC_MSG_CHECKING([if libedit version is compatible])
1494 AC_COMPILE_IFELSE(
1495 [AC_LANG_PROGRAM([[ #include <histedit.h> ]],
1496 [[
1497 int i = H_SETSIZE;
1498 el_init("", NULL, NULL, NULL);
1499 exit(0);
1500 ]])],
1501 [ AC_MSG_RESULT([yes]) ],
1502 [ AC_MSG_RESULT([no])
1503 AC_MSG_ERROR([libedit version is not compatible]) ]
1504 )
1505 fi ]
1506)
1507
1508AUDIT_MODULE=none
1509AC_ARG_WITH([audit],
1510 [ --with-audit=module Enable audit support (modules=debug,bsm,linux)],
1511 [
1512 AC_MSG_CHECKING([for supported audit module])
1513 case "$withval" in
1514 bsm)
1515 AC_MSG_RESULT([bsm])
1516 AUDIT_MODULE=bsm
1517 dnl Checks for headers, libs and functions
1518 AC_CHECK_HEADERS([bsm/audit.h], [],
1519 [AC_MSG_ERROR([BSM enabled and bsm/audit.h not found])],
1520 [
1521#ifdef HAVE_TIME_H
1522# include <time.h>
1523#endif
1524 ]
1525)
1526 AC_CHECK_LIB([bsm], [getaudit], [],
1527 [AC_MSG_ERROR([BSM enabled and required library not found])])
1528 AC_CHECK_FUNCS([getaudit], [],
1529 [AC_MSG_ERROR([BSM enabled and required function not found])])
1530 # These are optional
1531 AC_CHECK_FUNCS([getaudit_addr aug_get_machine])
1532 AC_DEFINE([USE_BSM_AUDIT], [1], [Use BSM audit module])
Adam Langleyd0592972015-03-30 14:49:51 -07001533 if test "$sol2ver" -ge 11; then
1534 SSHDLIBS="$SSHDLIBS -lscf"
1535 AC_DEFINE([BROKEN_BSM_API], [1],
1536 [The system has incomplete BSM API])
1537 fi
Greg Hartmanbd77cf72015-02-25 13:21:06 -08001538 ;;
1539 linux)
1540 AC_MSG_RESULT([linux])
1541 AUDIT_MODULE=linux
1542 dnl Checks for headers, libs and functions
1543 AC_CHECK_HEADERS([libaudit.h])
1544 SSHDLIBS="$SSHDLIBS -laudit"
1545 AC_DEFINE([USE_LINUX_AUDIT], [1], [Use Linux audit module])
1546 ;;
1547 debug)
1548 AUDIT_MODULE=debug
1549 AC_MSG_RESULT([debug])
1550 AC_DEFINE([SSH_AUDIT_EVENTS], [1], [Use audit debugging module])
1551 ;;
1552 no)
1553 AC_MSG_RESULT([no])
1554 ;;
1555 *)
1556 AC_MSG_ERROR([Unknown audit module $withval])
1557 ;;
1558 esac ]
1559)
1560
Adam Langleyd0592972015-03-30 14:49:51 -07001561AC_ARG_WITH([pie],
1562 [ --with-pie Build Position Independent Executables if possible], [
1563 if test "x$withval" = "xno"; then
1564 use_pie=no
1565 fi
1566 if test "x$withval" = "xyes"; then
1567 use_pie=yes
1568 fi
1569 ]
1570)
1571if test "x$use_pie" = "x"; then
1572 use_pie=no
1573fi
1574if test "x$use_toolchain_hardening" != "x1" && test "x$use_pie" = "xauto"; then
1575 # Turn off automatic PIE when toolchain hardening is off.
1576 use_pie=no
1577fi
1578if test "x$use_pie" = "xauto"; then
1579 # Automatic PIE requires gcc >= 4.x
1580 AC_MSG_CHECKING([for gcc >= 4.x])
1581 AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
1582#if !defined(__GNUC__) || __GNUC__ < 4
1583#error gcc is too old
1584#endif
1585]])],
1586 [ AC_MSG_RESULT([yes]) ],
1587 [ AC_MSG_RESULT([no])
1588 use_pie=no ]
1589)
1590fi
1591if test "x$use_pie" != "xno"; then
1592 SAVED_CFLAGS="$CFLAGS"
1593 SAVED_LDFLAGS="$LDFLAGS"
1594 OSSH_CHECK_CFLAG_COMPILE([-fPIE])
1595 OSSH_CHECK_LDFLAG_LINK([-pie])
1596 # We use both -fPIE and -pie or neither.
1597 AC_MSG_CHECKING([whether both -fPIE and -pie are supported])
1598 if echo "x $CFLAGS" | grep ' -fPIE' >/dev/null 2>&1 && \
1599 echo "x $LDFLAGS" | grep ' -pie' >/dev/null 2>&1 ; then
1600 AC_MSG_RESULT([yes])
1601 else
1602 AC_MSG_RESULT([no])
1603 CFLAGS="$SAVED_CFLAGS"
1604 LDFLAGS="$SAVED_LDFLAGS"
1605 fi
1606fi
1607
Greg Hartmanbd77cf72015-02-25 13:21:06 -08001608dnl Checks for library functions. Please keep in alphabetical order
1609AC_CHECK_FUNCS([ \
Adam Langleyd0592972015-03-30 14:49:51 -07001610 Blowfish_initstate \
1611 Blowfish_expandstate \
1612 Blowfish_expand0state \
1613 Blowfish_stream2word \
Greg Hartmanbd77cf72015-02-25 13:21:06 -08001614 asprintf \
1615 b64_ntop \
1616 __b64_ntop \
1617 b64_pton \
1618 __b64_pton \
1619 bcopy \
Adam Langleyd0592972015-03-30 14:49:51 -07001620 bcrypt_pbkdf \
Greg Hartmanbd77cf72015-02-25 13:21:06 -08001621 bindresvport_sa \
Adam Langleyd0592972015-03-30 14:49:51 -07001622 blf_enc \
1623 cap_rights_limit \
Greg Hartmanbd77cf72015-02-25 13:21:06 -08001624 clock \
1625 closefrom \
1626 dirfd \
Adam Langleyd0592972015-03-30 14:49:51 -07001627 endgrent \
1628 explicit_bzero \
Greg Hartmanbd77cf72015-02-25 13:21:06 -08001629 fchmod \
1630 fchown \
1631 freeaddrinfo \
Adam Langleyd0592972015-03-30 14:49:51 -07001632 fstatfs \
Greg Hartmanbd77cf72015-02-25 13:21:06 -08001633 fstatvfs \
1634 futimes \
1635 getaddrinfo \
1636 getcwd \
1637 getgrouplist \
1638 getnameinfo \
1639 getopt \
1640 getpeereid \
1641 getpeerucred \
Adam Langleyd0592972015-03-30 14:49:51 -07001642 getpgid \
1643 getpgrp \
Greg Hartmanbd77cf72015-02-25 13:21:06 -08001644 _getpty \
1645 getrlimit \
1646 getttyent \
1647 glob \
1648 group_from_gid \
1649 inet_aton \
1650 inet_ntoa \
1651 inet_ntop \
1652 innetgr \
1653 login_getcapbool \
Adam Langleyd0592972015-03-30 14:49:51 -07001654 mblen \
Greg Hartmanbd77cf72015-02-25 13:21:06 -08001655 md5_crypt \
1656 memmove \
Adam Langleyd0592972015-03-30 14:49:51 -07001657 memset_s \
Greg Hartmanbd77cf72015-02-25 13:21:06 -08001658 mkdtemp \
1659 mmap \
1660 ngetaddrinfo \
1661 nsleep \
1662 ogetaddrinfo \
1663 openlog_r \
Greg Hartmanbd77cf72015-02-25 13:21:06 -08001664 poll \
1665 prctl \
1666 pstat \
1667 readpassphrase \
Adam Langleyd0592972015-03-30 14:49:51 -07001668 reallocarray \
Greg Hartmanbd77cf72015-02-25 13:21:06 -08001669 realpath \
1670 recvmsg \
1671 rresvport_af \
1672 sendmsg \
1673 setdtablesize \
1674 setegid \
1675 setenv \
1676 seteuid \
1677 setgroupent \
1678 setgroups \
Adam Langleyd0592972015-03-30 14:49:51 -07001679 setlinebuf \
Greg Hartmanbd77cf72015-02-25 13:21:06 -08001680 setlogin \
1681 setpassent\
1682 setpcred \
1683 setproctitle \
1684 setregid \
1685 setreuid \
1686 setrlimit \
1687 setsid \
1688 setvbuf \
1689 sigaction \
1690 sigvec \
1691 snprintf \
1692 socketpair \
1693 statfs \
1694 statvfs \
1695 strdup \
1696 strerror \
1697 strlcat \
1698 strlcpy \
1699 strmode \
Adam Langleyd0592972015-03-30 14:49:51 -07001700 strnlen \
Greg Hartmanbd77cf72015-02-25 13:21:06 -08001701 strnvis \
1702 strptime \
1703 strtonum \
1704 strtoll \
1705 strtoul \
Adam Langleyd0592972015-03-30 14:49:51 -07001706 strtoull \
Greg Hartmanbd77cf72015-02-25 13:21:06 -08001707 swap32 \
1708 sysconf \
1709 tcgetpgrp \
1710 timingsafe_bcmp \
1711 truncate \
1712 unsetenv \
1713 updwtmpx \
1714 user_from_uid \
Adam Langleyd0592972015-03-30 14:49:51 -07001715 usleep \
Greg Hartmanbd77cf72015-02-25 13:21:06 -08001716 vasprintf \
Greg Hartmanbd77cf72015-02-25 13:21:06 -08001717 vsnprintf \
1718 waitpid \
1719])
1720
1721AC_LINK_IFELSE(
1722 [AC_LANG_PROGRAM(
1723 [[ #include <ctype.h> ]],
1724 [[ return (isblank('a')); ]])],
1725 [AC_DEFINE([HAVE_ISBLANK], [1], [Define if you have isblank(3C).])
1726])
1727
Adam Langleyd0592972015-03-30 14:49:51 -07001728# PKCS11 depends on OpenSSL.
1729if test "x$openssl" = "xyes" ; then
1730 # PKCS#11 support requires dlopen() and co
1731 AC_SEARCH_LIBS([dlopen], [dl],
1732 [AC_DEFINE([ENABLE_PKCS11], [], [Enable for PKCS#11 support])]
1733 )
1734fi
Greg Hartmanbd77cf72015-02-25 13:21:06 -08001735
1736# IRIX has a const char return value for gai_strerror()
1737AC_CHECK_FUNCS([gai_strerror], [
1738 AC_DEFINE([HAVE_GAI_STRERROR])
1739 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1740#include <sys/types.h>
1741#include <sys/socket.h>
1742#include <netdb.h>
1743
1744const char *gai_strerror(int);
1745 ]], [[
1746 char *str;
1747 str = gai_strerror(0);
1748 ]])], [
1749 AC_DEFINE([HAVE_CONST_GAI_STRERROR_PROTO], [1],
1750 [Define if gai_strerror() returns const char *])], [])])
1751
1752AC_SEARCH_LIBS([nanosleep], [rt posix4], [AC_DEFINE([HAVE_NANOSLEEP], [1],
1753 [Some systems put nanosleep outside of libc])])
1754
Adam Langleyd0592972015-03-30 14:49:51 -07001755AC_SEARCH_LIBS([clock_gettime], [rt],
1756 [AC_DEFINE([HAVE_CLOCK_GETTIME], [1], [Have clock_gettime])])
1757
Greg Hartmanbd77cf72015-02-25 13:21:06 -08001758dnl Make sure prototypes are defined for these before using them.
1759AC_CHECK_DECL([getrusage], [AC_CHECK_FUNCS([getrusage])])
1760AC_CHECK_DECL([strsep],
1761 [AC_CHECK_FUNCS([strsep])],
1762 [],
1763 [
1764#ifdef HAVE_STRING_H
1765# include <string.h>
1766#endif
1767 ])
1768
1769dnl tcsendbreak might be a macro
1770AC_CHECK_DECL([tcsendbreak],
1771 [AC_DEFINE([HAVE_TCSENDBREAK])],
1772 [AC_CHECK_FUNCS([tcsendbreak])],
1773 [#include <termios.h>]
1774)
1775
1776AC_CHECK_DECLS([h_errno], , ,[#include <netdb.h>])
1777
1778AC_CHECK_DECLS([SHUT_RD], , ,
1779 [
1780#include <sys/types.h>
1781#include <sys/socket.h>
1782 ])
1783
1784AC_CHECK_DECLS([O_NONBLOCK], , ,
1785 [
1786#include <sys/types.h>
1787#ifdef HAVE_SYS_STAT_H
1788# include <sys/stat.h>
1789#endif
1790#ifdef HAVE_FCNTL_H
1791# include <fcntl.h>
1792#endif
1793 ])
1794
1795AC_CHECK_DECLS([writev], , , [
1796#include <sys/types.h>
1797#include <sys/uio.h>
1798#include <unistd.h>
1799 ])
1800
1801AC_CHECK_DECLS([MAXSYMLINKS], , , [
1802#include <sys/param.h>
1803 ])
1804
1805AC_CHECK_DECLS([offsetof], , , [
1806#include <stddef.h>
1807 ])
1808
Adam Langleyd0592972015-03-30 14:49:51 -07001809# extra bits for select(2)
1810AC_CHECK_DECLS([howmany, NFDBITS], [], [], [[
1811#include <sys/param.h>
1812#include <sys/types.h>
1813#ifdef HAVE_SYS_SYSMACROS_H
1814#include <sys/sysmacros.h>
1815#endif
1816#ifdef HAVE_SYS_SELECT_H
1817#include <sys/select.h>
1818#endif
1819#ifdef HAVE_SYS_TIME_H
1820#include <sys/time.h>
1821#endif
1822#ifdef HAVE_UNISTD_H
1823#include <unistd.h>
1824#endif
1825 ]])
1826AC_CHECK_TYPES([fd_mask], [], [], [[
1827#include <sys/param.h>
1828#include <sys/types.h>
1829#ifdef HAVE_SYS_SELECT_H
1830#include <sys/select.h>
1831#endif
1832#ifdef HAVE_SYS_TIME_H
1833#include <sys/time.h>
1834#endif
1835#ifdef HAVE_UNISTD_H
1836#include <unistd.h>
1837#endif
1838 ]])
1839
Greg Hartmanbd77cf72015-02-25 13:21:06 -08001840AC_CHECK_FUNCS([setresuid], [
1841 dnl Some platorms have setresuid that isn't implemented, test for this
1842 AC_MSG_CHECKING([if setresuid seems to work])
1843 AC_RUN_IFELSE(
1844 [AC_LANG_PROGRAM([[
1845#include <stdlib.h>
1846#include <errno.h>
1847 ]], [[
1848 errno=0;
1849 setresuid(0,0,0);
1850 if (errno==ENOSYS)
1851 exit(1);
1852 else
1853 exit(0);
1854 ]])],
1855 [AC_MSG_RESULT([yes])],
1856 [AC_DEFINE([BROKEN_SETRESUID], [1],
1857 [Define if your setresuid() is broken])
1858 AC_MSG_RESULT([not implemented])],
1859 [AC_MSG_WARN([cross compiling: not checking setresuid])]
1860 )
1861])
1862
1863AC_CHECK_FUNCS([setresgid], [
1864 dnl Some platorms have setresgid that isn't implemented, test for this
1865 AC_MSG_CHECKING([if setresgid seems to work])
1866 AC_RUN_IFELSE(
1867 [AC_LANG_PROGRAM([[
1868#include <stdlib.h>
1869#include <errno.h>
1870 ]], [[
1871 errno=0;
1872 setresgid(0,0,0);
1873 if (errno==ENOSYS)
1874 exit(1);
1875 else
1876 exit(0);
1877 ]])],
1878 [AC_MSG_RESULT([yes])],
1879 [AC_DEFINE([BROKEN_SETRESGID], [1],
1880 [Define if your setresgid() is broken])
1881 AC_MSG_RESULT([not implemented])],
1882 [AC_MSG_WARN([cross compiling: not checking setresuid])]
1883 )
1884])
1885
1886dnl Checks for time functions
1887AC_CHECK_FUNCS([gettimeofday time])
1888dnl Checks for utmp functions
1889AC_CHECK_FUNCS([endutent getutent getutid getutline pututline setutent])
1890AC_CHECK_FUNCS([utmpname])
1891dnl Checks for utmpx functions
1892AC_CHECK_FUNCS([endutxent getutxent getutxid getutxline getutxuser pututxline])
1893AC_CHECK_FUNCS([setutxdb setutxent utmpxname])
1894dnl Checks for lastlog functions
1895AC_CHECK_FUNCS([getlastlogxbyname])
1896
1897AC_CHECK_FUNC([daemon],
1898 [AC_DEFINE([HAVE_DAEMON], [1], [Define if your libraries define daemon()])],
1899 [AC_CHECK_LIB([bsd], [daemon],
1900 [LIBS="$LIBS -lbsd"; AC_DEFINE([HAVE_DAEMON])])]
1901)
1902
1903AC_CHECK_FUNC([getpagesize],
1904 [AC_DEFINE([HAVE_GETPAGESIZE], [1],
1905 [Define if your libraries define getpagesize()])],
1906 [AC_CHECK_LIB([ucb], [getpagesize],
1907 [LIBS="$LIBS -lucb"; AC_DEFINE([HAVE_GETPAGESIZE])])]
1908)
1909
1910# Check for broken snprintf
1911if test "x$ac_cv_func_snprintf" = "xyes" ; then
1912 AC_MSG_CHECKING([whether snprintf correctly terminates long strings])
1913 AC_RUN_IFELSE(
1914 [AC_LANG_PROGRAM([[ #include <stdio.h> ]],
1915 [[
1916 char b[5];
1917 snprintf(b,5,"123456789");
1918 exit(b[4]!='\0');
1919 ]])],
1920 [AC_MSG_RESULT([yes])],
1921 [
1922 AC_MSG_RESULT([no])
1923 AC_DEFINE([BROKEN_SNPRINTF], [1],
1924 [Define if your snprintf is busted])
1925 AC_MSG_WARN([****** Your snprintf() function is broken, complain to your vendor])
1926 ],
1927 [ AC_MSG_WARN([cross compiling: Assuming working snprintf()]) ]
1928 )
1929fi
1930
Adam Langleyd0592972015-03-30 14:49:51 -07001931# We depend on vsnprintf returning the right thing on overflow: the
1932# number of characters it tried to create (as per SUSv3)
1933if test "x$ac_cv_func_vsnprintf" = "xyes" ; then
Greg Hartmanbd77cf72015-02-25 13:21:06 -08001934 AC_MSG_CHECKING([whether vsnprintf returns correct values on overflow])
1935 AC_RUN_IFELSE(
1936 [AC_LANG_PROGRAM([[
1937#include <sys/types.h>
1938#include <stdio.h>
1939#include <stdarg.h>
1940
Adam Langleyd0592972015-03-30 14:49:51 -07001941int x_snprintf(char *str, size_t count, const char *fmt, ...)
Greg Hartmanbd77cf72015-02-25 13:21:06 -08001942{
Adam Langleyd0592972015-03-30 14:49:51 -07001943 size_t ret;
1944 va_list ap;
1945
1946 va_start(ap, fmt);
1947 ret = vsnprintf(str, count, fmt, ap);
1948 va_end(ap);
Greg Hartmanbd77cf72015-02-25 13:21:06 -08001949 return ret;
1950}
1951 ]], [[
Adam Langleyd0592972015-03-30 14:49:51 -07001952char x[1];
1953if (x_snprintf(x, 1, "%s %d", "hello", 12345) != 11)
1954 return 1;
1955if (x_snprintf(NULL, 0, "%s %d", "hello", 12345) != 11)
1956 return 1;
1957return 0;
Greg Hartmanbd77cf72015-02-25 13:21:06 -08001958 ]])],
1959 [AC_MSG_RESULT([yes])],
1960 [
1961 AC_MSG_RESULT([no])
1962 AC_DEFINE([BROKEN_SNPRINTF], [1],
1963 [Define if your snprintf is busted])
1964 AC_MSG_WARN([****** Your vsnprintf() function is broken, complain to your vendor])
1965 ],
1966 [ AC_MSG_WARN([cross compiling: Assuming working vsnprintf()]) ]
1967 )
1968fi
1969
1970# On systems where [v]snprintf is broken, but is declared in stdio,
1971# check that the fmt argument is const char * or just char *.
1972# This is only useful for when BROKEN_SNPRINTF
1973AC_MSG_CHECKING([whether snprintf can declare const char *fmt])
1974AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1975#include <stdio.h>
1976int snprintf(char *a, size_t b, const char *c, ...) { return 0; }
1977 ]], [[
1978 snprintf(0, 0, 0);
1979 ]])],
1980 [AC_MSG_RESULT([yes])
1981 AC_DEFINE([SNPRINTF_CONST], [const],
1982 [Define as const if snprintf() can declare const char *fmt])],
1983 [AC_MSG_RESULT([no])
1984 AC_DEFINE([SNPRINTF_CONST], [/* not const */])])
1985
1986# Check for missing getpeereid (or equiv) support
1987NO_PEERCHECK=""
1988if test "x$ac_cv_func_getpeereid" != "xyes" -a "x$ac_cv_func_getpeerucred" != "xyes"; then
1989 AC_MSG_CHECKING([whether system supports SO_PEERCRED getsockopt])
1990 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
1991#include <sys/types.h>
1992#include <sys/socket.h>]], [[int i = SO_PEERCRED;]])],
1993 [ AC_MSG_RESULT([yes])
1994 AC_DEFINE([HAVE_SO_PEERCRED], [1], [Have PEERCRED socket option])
1995 ], [AC_MSG_RESULT([no])
1996 NO_PEERCHECK=1
1997 ])
1998fi
1999
2000dnl see whether mkstemp() requires XXXXXX
2001if test "x$ac_cv_func_mkdtemp" = "xyes" ; then
2002AC_MSG_CHECKING([for (overly) strict mkstemp])
2003AC_RUN_IFELSE(
2004 [AC_LANG_PROGRAM([[
2005#include <stdlib.h>
2006 ]], [[
2007 char template[]="conftest.mkstemp-test";
2008 if (mkstemp(template) == -1)
2009 exit(1);
2010 unlink(template);
2011 exit(0);
2012 ]])],
2013 [
2014 AC_MSG_RESULT([no])
2015 ],
2016 [
2017 AC_MSG_RESULT([yes])
2018 AC_DEFINE([HAVE_STRICT_MKSTEMP], [1], [Silly mkstemp()])
2019 ],
2020 [
2021 AC_MSG_RESULT([yes])
2022 AC_DEFINE([HAVE_STRICT_MKSTEMP])
2023 ]
2024)
2025fi
2026
2027dnl make sure that openpty does not reacquire controlling terminal
2028if test ! -z "$check_for_openpty_ctty_bug"; then
2029 AC_MSG_CHECKING([if openpty correctly handles controlling tty])
2030 AC_RUN_IFELSE(
2031 [AC_LANG_PROGRAM([[
2032#include <stdio.h>
2033#include <sys/fcntl.h>
2034#include <sys/types.h>
2035#include <sys/wait.h>
2036 ]], [[
2037 pid_t pid;
2038 int fd, ptyfd, ttyfd, status;
2039
2040 pid = fork();
2041 if (pid < 0) { /* failed */
2042 exit(1);
2043 } else if (pid > 0) { /* parent */
2044 waitpid(pid, &status, 0);
2045 if (WIFEXITED(status))
2046 exit(WEXITSTATUS(status));
2047 else
2048 exit(2);
2049 } else { /* child */
2050 close(0); close(1); close(2);
2051 setsid();
2052 openpty(&ptyfd, &ttyfd, NULL, NULL, NULL);
2053 fd = open("/dev/tty", O_RDWR | O_NOCTTY);
2054 if (fd >= 0)
2055 exit(3); /* Acquired ctty: broken */
2056 else
2057 exit(0); /* Did not acquire ctty: OK */
2058 }
2059 ]])],
2060 [
2061 AC_MSG_RESULT([yes])
2062 ],
2063 [
2064 AC_MSG_RESULT([no])
2065 AC_DEFINE([SSHD_ACQUIRES_CTTY])
2066 ],
2067 [
2068 AC_MSG_RESULT([cross-compiling, assuming yes])
2069 ]
2070 )
2071fi
2072
2073if test "x$ac_cv_func_getaddrinfo" = "xyes" && \
2074 test "x$check_for_hpux_broken_getaddrinfo" = "x1"; then
2075 AC_MSG_CHECKING([if getaddrinfo seems to work])
2076 AC_RUN_IFELSE(
2077 [AC_LANG_PROGRAM([[
2078#include <stdio.h>
2079#include <sys/socket.h>
2080#include <netdb.h>
2081#include <errno.h>
2082#include <netinet/in.h>
2083
2084#define TEST_PORT "2222"
2085 ]], [[
2086 int err, sock;
2087 struct addrinfo *gai_ai, *ai, hints;
2088 char ntop[NI_MAXHOST], strport[NI_MAXSERV], *name = NULL;
2089
2090 memset(&hints, 0, sizeof(hints));
2091 hints.ai_family = PF_UNSPEC;
2092 hints.ai_socktype = SOCK_STREAM;
2093 hints.ai_flags = AI_PASSIVE;
2094
2095 err = getaddrinfo(name, TEST_PORT, &hints, &gai_ai);
2096 if (err != 0) {
2097 fprintf(stderr, "getaddrinfo failed (%s)", gai_strerror(err));
2098 exit(1);
2099 }
2100
2101 for (ai = gai_ai; ai != NULL; ai = ai->ai_next) {
2102 if (ai->ai_family != AF_INET6)
2103 continue;
2104
2105 err = getnameinfo(ai->ai_addr, ai->ai_addrlen, ntop,
2106 sizeof(ntop), strport, sizeof(strport),
2107 NI_NUMERICHOST|NI_NUMERICSERV);
2108
2109 if (err != 0) {
2110 if (err == EAI_SYSTEM)
2111 perror("getnameinfo EAI_SYSTEM");
2112 else
2113 fprintf(stderr, "getnameinfo failed: %s\n",
2114 gai_strerror(err));
2115 exit(2);
2116 }
2117
2118 sock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
2119 if (sock < 0)
2120 perror("socket");
2121 if (bind(sock, ai->ai_addr, ai->ai_addrlen) < 0) {
2122 if (errno == EBADF)
2123 exit(3);
2124 }
2125 }
2126 exit(0);
2127 ]])],
2128 [
2129 AC_MSG_RESULT([yes])
2130 ],
2131 [
2132 AC_MSG_RESULT([no])
2133 AC_DEFINE([BROKEN_GETADDRINFO])
2134 ],
2135 [
2136 AC_MSG_RESULT([cross-compiling, assuming yes])
2137 ]
2138 )
2139fi
2140
2141if test "x$ac_cv_func_getaddrinfo" = "xyes" && \
2142 test "x$check_for_aix_broken_getaddrinfo" = "x1"; then
2143 AC_MSG_CHECKING([if getaddrinfo seems to work])
2144 AC_RUN_IFELSE(
2145 [AC_LANG_PROGRAM([[
2146#include <stdio.h>
2147#include <sys/socket.h>
2148#include <netdb.h>
2149#include <errno.h>
2150#include <netinet/in.h>
2151
2152#define TEST_PORT "2222"
2153 ]], [[
2154 int err, sock;
2155 struct addrinfo *gai_ai, *ai, hints;
2156 char ntop[NI_MAXHOST], strport[NI_MAXSERV], *name = NULL;
2157
2158 memset(&hints, 0, sizeof(hints));
2159 hints.ai_family = PF_UNSPEC;
2160 hints.ai_socktype = SOCK_STREAM;
2161 hints.ai_flags = AI_PASSIVE;
2162
2163 err = getaddrinfo(name, TEST_PORT, &hints, &gai_ai);
2164 if (err != 0) {
2165 fprintf(stderr, "getaddrinfo failed (%s)", gai_strerror(err));
2166 exit(1);
2167 }
2168
2169 for (ai = gai_ai; ai != NULL; ai = ai->ai_next) {
2170 if (ai->ai_family != AF_INET && ai->ai_family != AF_INET6)
2171 continue;
2172
2173 err = getnameinfo(ai->ai_addr, ai->ai_addrlen, ntop,
2174 sizeof(ntop), strport, sizeof(strport),
2175 NI_NUMERICHOST|NI_NUMERICSERV);
2176
2177 if (ai->ai_family == AF_INET && err != 0) {
2178 perror("getnameinfo");
2179 exit(2);
2180 }
2181 }
2182 exit(0);
2183 ]])],
2184 [
2185 AC_MSG_RESULT([yes])
2186 AC_DEFINE([AIX_GETNAMEINFO_HACK], [1],
2187 [Define if you have a getaddrinfo that fails
2188 for the all-zeros IPv6 address])
2189 ],
2190 [
2191 AC_MSG_RESULT([no])
2192 AC_DEFINE([BROKEN_GETADDRINFO])
2193 ],
2194 [
2195 AC_MSG_RESULT([cross-compiling, assuming no])
2196 ]
2197 )
2198fi
2199
Adam Langleyd0592972015-03-30 14:49:51 -07002200if test "x$ac_cv_func_getaddrinfo" = "xyes"; then
2201 AC_CHECK_DECLS(AI_NUMERICSERV, , ,
2202 [#include <sys/types.h>
2203 #include <sys/socket.h>
2204 #include <netdb.h>])
2205fi
2206
Greg Hartmanbd77cf72015-02-25 13:21:06 -08002207if test "x$check_for_conflicting_getspnam" = "x1"; then
2208 AC_MSG_CHECKING([for conflicting getspnam in shadow.h])
2209 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <shadow.h> ]],
2210 [[ exit(0); ]])],
2211 [
2212 AC_MSG_RESULT([no])
2213 ],
2214 [
2215 AC_MSG_RESULT([yes])
2216 AC_DEFINE([GETSPNAM_CONFLICTING_DEFS], [1],
2217 [Conflicting defs for getspnam])
2218 ]
2219 )
2220fi
2221
2222AC_FUNC_GETPGRP
2223
2224# Search for OpenSSL
2225saved_CPPFLAGS="$CPPFLAGS"
2226saved_LDFLAGS="$LDFLAGS"
2227AC_ARG_WITH([ssl-dir],
2228 [ --with-ssl-dir=PATH Specify path to OpenSSL installation ],
2229 [
Adam Langleyd0592972015-03-30 14:49:51 -07002230 if test "x$openssl" = "xno" ; then
2231 AC_MSG_ERROR([cannot use --with-ssl-dir when OpenSSL disabled])
2232 fi
Greg Hartmanbd77cf72015-02-25 13:21:06 -08002233 if test "x$withval" != "xno" ; then
2234 case "$withval" in
2235 # Relative paths
2236 ./*|../*) withval="`pwd`/$withval"
2237 esac
2238 if test -d "$withval/lib"; then
2239 if test -n "${need_dash_r}"; then
2240 LDFLAGS="-L${withval}/lib -R${withval}/lib ${LDFLAGS}"
2241 else
2242 LDFLAGS="-L${withval}/lib ${LDFLAGS}"
2243 fi
2244 elif test -d "$withval/lib64"; then
2245 if test -n "${need_dash_r}"; then
2246 LDFLAGS="-L${withval}/lib64 -R${withval}/lib64 ${LDFLAGS}"
2247 else
2248 LDFLAGS="-L${withval}/lib64 ${LDFLAGS}"
2249 fi
2250 else
2251 if test -n "${need_dash_r}"; then
2252 LDFLAGS="-L${withval} -R${withval} ${LDFLAGS}"
2253 else
2254 LDFLAGS="-L${withval} ${LDFLAGS}"
2255 fi
2256 fi
2257 if test -d "$withval/include"; then
2258 CPPFLAGS="-I${withval}/include ${CPPFLAGS}"
2259 else
2260 CPPFLAGS="-I${withval} ${CPPFLAGS}"
2261 fi
2262 fi
2263 ]
2264)
Greg Hartmanbd77cf72015-02-25 13:21:06 -08002265
2266AC_ARG_WITH([openssl-header-check],
2267 [ --without-openssl-header-check Disable OpenSSL version consistency check],
Greg Hartmanbd77cf72015-02-25 13:21:06 -08002268 [
Adam Langleyd0592972015-03-30 14:49:51 -07002269 if test "x$withval" = "xno" ; then
2270 openssl_check_nonfatal=1
Greg Hartmanbd77cf72015-02-25 13:21:06 -08002271 fi
Greg Hartmanbd77cf72015-02-25 13:21:06 -08002272 ]
2273)
2274
Adam Langleyd0592972015-03-30 14:49:51 -07002275openssl_engine=no
Greg Hartmanbd77cf72015-02-25 13:21:06 -08002276AC_ARG_WITH([ssl-engine],
2277 [ --with-ssl-engine Enable OpenSSL (hardware) ENGINE support ],
Adam Langleyd0592972015-03-30 14:49:51 -07002278 [
2279 if test "x$openssl" = "xno" ; then
2280 AC_MSG_ERROR([cannot use --with-ssl-engine when OpenSSL disabled])
2281 fi
2282 if test "x$withval" != "xno" ; then
2283 openssl_engine=yes
2284 fi
2285 ]
2286)
2287
2288if test "x$openssl" = "xyes" ; then
2289 LIBS="-lcrypto $LIBS"
2290 AC_TRY_LINK_FUNC([RAND_add], [AC_DEFINE([HAVE_OPENSSL], [1],
2291 [Define if your ssl headers are included
2292 with #include <openssl/header.h>])],
2293 [
2294 dnl Check default openssl install dir
2295 if test -n "${need_dash_r}"; then
2296 LDFLAGS="-L/usr/local/ssl/lib -R/usr/local/ssl/lib ${saved_LDFLAGS}"
2297 else
2298 LDFLAGS="-L/usr/local/ssl/lib ${saved_LDFLAGS}"
2299 fi
2300 CPPFLAGS="-I/usr/local/ssl/include ${saved_CPPFLAGS}"
2301 AC_CHECK_HEADER([openssl/opensslv.h], ,
2302 [AC_MSG_ERROR([*** OpenSSL headers missing - please install first or check config.log ***])])
2303 AC_TRY_LINK_FUNC([RAND_add], [AC_DEFINE([HAVE_OPENSSL])],
2304 [
2305 AC_MSG_ERROR([*** Can't find recent OpenSSL libcrypto (see config.log for details) ***])
2306 ]
2307 )
2308 ]
2309 )
2310
2311 # Determine OpenSSL header version
2312 AC_MSG_CHECKING([OpenSSL header version])
2313 AC_RUN_IFELSE(
2314 [AC_LANG_PROGRAM([[
2315 #include <stdio.h>
2316 #include <string.h>
2317 #include <openssl/opensslv.h>
2318 #define DATA "conftest.sslincver"
2319 ]], [[
2320 FILE *fd;
2321 int rc;
2322
2323 fd = fopen(DATA,"w");
2324 if(fd == NULL)
2325 exit(1);
2326
2327 if ((rc = fprintf(fd ,"%08x (%s)\n", OPENSSL_VERSION_NUMBER, OPENSSL_VERSION_TEXT)) <0)
2328 exit(1);
2329
2330 exit(0);
2331 ]])],
2332 [
2333 ssl_header_ver=`cat conftest.sslincver`
2334 AC_MSG_RESULT([$ssl_header_ver])
2335 ],
2336 [
2337 AC_MSG_RESULT([not found])
2338 AC_MSG_ERROR([OpenSSL version header not found.])
2339 ],
2340 [
2341 AC_MSG_WARN([cross compiling: not checking])
2342 ]
2343 )
2344
2345 # Determine OpenSSL library version
2346 AC_MSG_CHECKING([OpenSSL library version])
2347 AC_RUN_IFELSE(
2348 [AC_LANG_PROGRAM([[
2349 #include <stdio.h>
2350 #include <string.h>
2351 #include <openssl/opensslv.h>
2352 #include <openssl/crypto.h>
2353 #define DATA "conftest.ssllibver"
2354 ]], [[
2355 FILE *fd;
2356 int rc;
2357
2358 fd = fopen(DATA,"w");
2359 if(fd == NULL)
2360 exit(1);
2361
2362 if ((rc = fprintf(fd ,"%08x (%s)\n", SSLeay(),
2363 SSLeay_version(SSLEAY_VERSION))) <0)
2364 exit(1);
2365
2366 exit(0);
2367 ]])],
2368 [
2369 ssl_library_ver=`cat conftest.ssllibver`
2370 # Check version is supported.
2371 case "$ssl_library_ver" in
2372 0090[[0-7]]*|009080[[0-5]]*)
2373 AC_MSG_ERROR([OpenSSL >= 0.9.8f required (have "$ssl_library_ver")])
2374 ;;
2375 *) ;;
2376 esac
2377 AC_MSG_RESULT([$ssl_library_ver])
2378 ],
2379 [
2380 AC_MSG_RESULT([not found])
2381 AC_MSG_ERROR([OpenSSL library not found.])
2382 ],
2383 [
2384 AC_MSG_WARN([cross compiling: not checking])
2385 ]
2386 )
2387
2388 # Sanity check OpenSSL headers
2389 AC_MSG_CHECKING([whether OpenSSL's headers match the library])
2390 AC_RUN_IFELSE(
2391 [AC_LANG_PROGRAM([[
2392 #include <string.h>
2393 #include <openssl/opensslv.h>
2394 ]], [[
2395 exit(SSLeay() == OPENSSL_VERSION_NUMBER ? 0 : 1);
2396 ]])],
2397 [
2398 AC_MSG_RESULT([yes])
2399 ],
2400 [
2401 AC_MSG_RESULT([no])
2402 if test "x$openssl_check_nonfatal" = "x"; then
2403 AC_MSG_ERROR([Your OpenSSL headers do not match your
2404 library. Check config.log for details.
2405 If you are sure your installation is consistent, you can disable the check
2406 by running "./configure --without-openssl-header-check".
2407 Also see contrib/findssl.sh for help identifying header/library mismatches.
2408 ])
2409 else
2410 AC_MSG_WARN([Your OpenSSL headers do not match your
2411 library. Check config.log for details.
2412 Also see contrib/findssl.sh for help identifying header/library mismatches.])
2413 fi
2414 ],
2415 [
2416 AC_MSG_WARN([cross compiling: not checking])
2417 ]
2418 )
2419
2420 AC_MSG_CHECKING([if programs using OpenSSL functions will link])
2421 AC_LINK_IFELSE(
2422 [AC_LANG_PROGRAM([[ #include <openssl/evp.h> ]],
2423 [[ SSLeay_add_all_algorithms(); ]])],
2424 [
2425 AC_MSG_RESULT([yes])
2426 ],
2427 [
2428 AC_MSG_RESULT([no])
2429 saved_LIBS="$LIBS"
2430 LIBS="$LIBS -ldl"
2431 AC_MSG_CHECKING([if programs using OpenSSL need -ldl])
2432 AC_LINK_IFELSE(
2433 [AC_LANG_PROGRAM([[ #include <openssl/evp.h> ]],
2434 [[ SSLeay_add_all_algorithms(); ]])],
2435 [
2436 AC_MSG_RESULT([yes])
2437 ],
2438 [
2439 AC_MSG_RESULT([no])
2440 LIBS="$saved_LIBS"
2441 ]
2442 )
2443 ]
2444 )
2445
2446 AC_CHECK_FUNCS([ \
2447 BN_is_prime_ex \
2448 DSA_generate_parameters_ex \
2449 EVP_DigestInit_ex \
2450 EVP_DigestFinal_ex \
2451 EVP_MD_CTX_init \
2452 EVP_MD_CTX_cleanup \
2453 EVP_MD_CTX_copy_ex \
2454 HMAC_CTX_init \
2455 RSA_generate_key_ex \
2456 RSA_get_default_method \
2457 ])
2458
2459 if test "x$openssl_engine" = "xyes" ; then
Greg Hartmanbd77cf72015-02-25 13:21:06 -08002460 AC_MSG_CHECKING([for OpenSSL ENGINE support])
2461 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
Adam Langleyd0592972015-03-30 14:49:51 -07002462 #include <openssl/engine.h>
Greg Hartmanbd77cf72015-02-25 13:21:06 -08002463 ]], [[
Adam Langleyd0592972015-03-30 14:49:51 -07002464 ENGINE_load_builtin_engines();
2465 ENGINE_register_all_complete();
Greg Hartmanbd77cf72015-02-25 13:21:06 -08002466 ]])],
2467 [ AC_MSG_RESULT([yes])
2468 AC_DEFINE([USE_OPENSSL_ENGINE], [1],
2469 [Enable OpenSSL engine support])
2470 ], [ AC_MSG_ERROR([OpenSSL ENGINE support not found])
2471 ])
Adam Langleyd0592972015-03-30 14:49:51 -07002472 fi
Greg Hartmanbd77cf72015-02-25 13:21:06 -08002473
Adam Langleyd0592972015-03-30 14:49:51 -07002474 # Check for OpenSSL without EVP_aes_{192,256}_cbc
2475 AC_MSG_CHECKING([whether OpenSSL has crippled AES support])
2476 AC_LINK_IFELSE(
2477 [AC_LANG_PROGRAM([[
2478 #include <string.h>
2479 #include <openssl/evp.h>
2480 ]], [[
2481 exit(EVP_aes_192_cbc() == NULL || EVP_aes_256_cbc() == NULL);
2482 ]])],
2483 [
2484 AC_MSG_RESULT([no])
2485 ],
2486 [
2487 AC_MSG_RESULT([yes])
2488 AC_DEFINE([OPENSSL_LOBOTOMISED_AES], [1],
2489 [libcrypto is missing AES 192 and 256 bit functions])
2490 ]
2491 )
2492
2493 # Check for OpenSSL with EVP_aes_*ctr
2494 AC_MSG_CHECKING([whether OpenSSL has AES CTR via EVP])
2495 AC_LINK_IFELSE(
2496 [AC_LANG_PROGRAM([[
2497 #include <string.h>
2498 #include <openssl/evp.h>
2499 ]], [[
2500 exit(EVP_aes_128_ctr() == NULL ||
2501 EVP_aes_192_cbc() == NULL ||
2502 EVP_aes_256_cbc() == NULL);
2503 ]])],
2504 [
2505 AC_MSG_RESULT([yes])
2506 AC_DEFINE([OPENSSL_HAVE_EVPCTR], [1],
2507 [libcrypto has EVP AES CTR])
2508 ],
2509 [
2510 AC_MSG_RESULT([no])
2511 ]
2512 )
2513
2514 # Check for OpenSSL with EVP_aes_*gcm
2515 AC_MSG_CHECKING([whether OpenSSL has AES GCM via EVP])
2516 AC_LINK_IFELSE(
2517 [AC_LANG_PROGRAM([[
2518 #include <string.h>
2519 #include <openssl/evp.h>
2520 ]], [[
2521 exit(EVP_aes_128_gcm() == NULL ||
2522 EVP_aes_256_gcm() == NULL ||
2523 EVP_CTRL_GCM_SET_IV_FIXED == 0 ||
2524 EVP_CTRL_GCM_IV_GEN == 0 ||
2525 EVP_CTRL_GCM_SET_TAG == 0 ||
2526 EVP_CTRL_GCM_GET_TAG == 0 ||
2527 EVP_CIPHER_CTX_ctrl(NULL, 0, 0, NULL) == 0);
2528 ]])],
2529 [
2530 AC_MSG_RESULT([yes])
2531 AC_DEFINE([OPENSSL_HAVE_EVPGCM], [1],
2532 [libcrypto has EVP AES GCM])
2533 ],
2534 [
2535 AC_MSG_RESULT([no])
2536 unsupported_algorithms="$unsupported_cipers \
2537 aes128-gcm@openssh.com aes256-gcm@openssh.com"
2538 ]
2539 )
2540
2541 AC_SEARCH_LIBS([EVP_CIPHER_CTX_ctrl], [crypto],
2542 [AC_DEFINE([HAVE_EVP_CIPHER_CTX_CTRL], [1],
2543 [Define if libcrypto has EVP_CIPHER_CTX_ctrl])])
2544
2545 AC_MSG_CHECKING([if EVP_DigestUpdate returns an int])
2546 AC_LINK_IFELSE(
2547 [AC_LANG_PROGRAM([[
2548 #include <string.h>
2549 #include <openssl/evp.h>
2550 ]], [[
2551 if(EVP_DigestUpdate(NULL, NULL,0))
2552 exit(0);
2553 ]])],
2554 [
2555 AC_MSG_RESULT([yes])
2556 ],
2557 [
2558 AC_MSG_RESULT([no])
2559 AC_DEFINE([OPENSSL_EVP_DIGESTUPDATE_VOID], [1],
2560 [Define if EVP_DigestUpdate returns void])
2561 ]
2562 )
2563
2564 # Some systems want crypt() from libcrypt, *not* the version in OpenSSL,
2565 # because the system crypt() is more featureful.
2566 if test "x$check_for_libcrypt_before" = "x1"; then
2567 AC_CHECK_LIB([crypt], [crypt])
2568 fi
2569
2570 # Some Linux systems (Slackware) need crypt() from libcrypt, *not* the
2571 # version in OpenSSL.
2572 if test "x$check_for_libcrypt_later" = "x1"; then
2573 AC_CHECK_LIB([crypt], [crypt], [LIBS="$LIBS -lcrypt"])
2574 fi
2575 AC_CHECK_FUNCS([crypt DES_crypt])
2576
2577 # Search for SHA256 support in libc and/or OpenSSL
2578 AC_CHECK_FUNCS([SHA256_Update EVP_sha256], ,
2579 [unsupported_algorithms="$unsupported_algorithms \
2580 hmac-sha2-256 hmac-sha2-512 \
2581 diffie-hellman-group-exchange-sha256 \
2582 hmac-sha2-256-etm@openssh.com hmac-sha2-512-etm@openssh.com"
2583 ]
2584 )
2585 # Search for RIPE-MD support in OpenSSL
2586 AC_CHECK_FUNCS([EVP_ripemd160], ,
2587 [unsupported_algorithms="$unsupported_algorithms \
2588 hmac-ripemd160
2589 hmac-ripemd160@openssh.com
2590 hmac-ripemd160-etm@openssh.com"
2591 ]
2592 )
2593
2594 # Check complete ECC support in OpenSSL
2595 AC_MSG_CHECKING([whether OpenSSL has NID_X9_62_prime256v1])
2596 AC_LINK_IFELSE(
2597 [AC_LANG_PROGRAM([[
2598 #include <openssl/ec.h>
2599 #include <openssl/ecdh.h>
2600 #include <openssl/ecdsa.h>
2601 #include <openssl/evp.h>
2602 #include <openssl/objects.h>
2603 #include <openssl/opensslv.h>
2604 #if OPENSSL_VERSION_NUMBER < 0x0090807f /* 0.9.8g */
2605 # error "OpenSSL < 0.9.8g has unreliable ECC code"
2606 #endif
2607 ]], [[
2608 EC_KEY *e = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
2609 const EVP_MD *m = EVP_sha256(); /* We need this too */
2610 ]])],
2611 [ AC_MSG_RESULT([yes])
2612 enable_nistp256=1 ],
2613 [ AC_MSG_RESULT([no]) ]
2614 )
2615
2616 AC_MSG_CHECKING([whether OpenSSL has NID_secp384r1])
2617 AC_LINK_IFELSE(
2618 [AC_LANG_PROGRAM([[
2619 #include <openssl/ec.h>
2620 #include <openssl/ecdh.h>
2621 #include <openssl/ecdsa.h>
2622 #include <openssl/evp.h>
2623 #include <openssl/objects.h>
2624 #include <openssl/opensslv.h>
2625 #if OPENSSL_VERSION_NUMBER < 0x0090807f /* 0.9.8g */
2626 # error "OpenSSL < 0.9.8g has unreliable ECC code"
2627 #endif
2628 ]], [[
2629 EC_KEY *e = EC_KEY_new_by_curve_name(NID_secp384r1);
2630 const EVP_MD *m = EVP_sha384(); /* We need this too */
2631 ]])],
2632 [ AC_MSG_RESULT([yes])
2633 enable_nistp384=1 ],
2634 [ AC_MSG_RESULT([no]) ]
2635 )
2636
2637 AC_MSG_CHECKING([whether OpenSSL has NID_secp521r1])
2638 AC_LINK_IFELSE(
2639 [AC_LANG_PROGRAM([[
2640 #include <openssl/ec.h>
2641 #include <openssl/ecdh.h>
2642 #include <openssl/ecdsa.h>
2643 #include <openssl/evp.h>
2644 #include <openssl/objects.h>
2645 #include <openssl/opensslv.h>
2646 #if OPENSSL_VERSION_NUMBER < 0x0090807f /* 0.9.8g */
2647 # error "OpenSSL < 0.9.8g has unreliable ECC code"
2648 #endif
2649 ]], [[
2650 EC_KEY *e = EC_KEY_new_by_curve_name(NID_secp521r1);
2651 const EVP_MD *m = EVP_sha512(); /* We need this too */
2652 ]])],
2653 [ AC_MSG_RESULT([yes])
2654 AC_MSG_CHECKING([if OpenSSL's NID_secp521r1 is functional])
2655 AC_RUN_IFELSE(
2656 [AC_LANG_PROGRAM([[
2657 #include <openssl/ec.h>
2658 #include <openssl/ecdh.h>
2659 #include <openssl/ecdsa.h>
2660 #include <openssl/evp.h>
2661 #include <openssl/objects.h>
2662 #include <openssl/opensslv.h>
2663 ]],[[
2664 EC_KEY *e = EC_KEY_new_by_curve_name(NID_secp521r1);
2665 const EVP_MD *m = EVP_sha512(); /* We need this too */
2666 exit(e == NULL || m == NULL);
2667 ]])],
2668 [ AC_MSG_RESULT([yes])
2669 enable_nistp521=1 ],
2670 [ AC_MSG_RESULT([no]) ],
2671 [ AC_MSG_WARN([cross-compiling: assuming yes])
2672 enable_nistp521=1 ]
2673 )],
Greg Hartmanbd77cf72015-02-25 13:21:06 -08002674 AC_MSG_RESULT([no])
Adam Langleyd0592972015-03-30 14:49:51 -07002675 )
Greg Hartmanbd77cf72015-02-25 13:21:06 -08002676
Adam Langleyd0592972015-03-30 14:49:51 -07002677 COMMENT_OUT_ECC="#no ecc#"
2678 TEST_SSH_ECC=no
Greg Hartmanbd77cf72015-02-25 13:21:06 -08002679
Adam Langleyd0592972015-03-30 14:49:51 -07002680 if test x$enable_nistp256 = x1 || test x$enable_nistp384 = x1 || \
2681 test x$enable_nistp521 = x1; then
2682 AC_DEFINE(OPENSSL_HAS_ECC, [1], [OpenSSL has ECC])
2683 fi
2684 if test x$enable_nistp256 = x1; then
2685 AC_DEFINE([OPENSSL_HAS_NISTP256], [1],
2686 [libcrypto has NID_X9_62_prime256v1])
Greg Hartmanbd77cf72015-02-25 13:21:06 -08002687 TEST_SSH_ECC=yes
2688 COMMENT_OUT_ECC=""
Adam Langleyd0592972015-03-30 14:49:51 -07002689 else
2690 unsupported_algorithms="$unsupported_algorithms ecdsa-sha2-nistp256 \
2691 ecdh-sha2-nistp256 ecdsa-sha2-nistp256-cert-v01@openssh.com"
2692 fi
2693 if test x$enable_nistp384 = x1; then
2694 AC_DEFINE([OPENSSL_HAS_NISTP384], [1], [libcrypto has NID_secp384r1])
2695 TEST_SSH_ECC=yes
2696 COMMENT_OUT_ECC=""
2697 else
2698 unsupported_algorithms="$unsupported_algorithms ecdsa-sha2-nistp384 \
2699 ecdh-sha2-nistp384 ecdsa-sha2-nistp384-cert-v01@openssh.com"
2700 fi
2701 if test x$enable_nistp521 = x1; then
2702 AC_DEFINE([OPENSSL_HAS_NISTP521], [1], [libcrypto has NID_secp521r1])
2703 TEST_SSH_ECC=yes
2704 COMMENT_OUT_ECC=""
2705 else
2706 unsupported_algorithms="$unsupported_algorithms ecdh-sha2-nistp521 \
2707 ecdsa-sha2-nistp521 ecdsa-sha2-nistp521-cert-v01@openssh.com"
2708 fi
2709
2710 AC_SUBST([TEST_SSH_ECC])
2711 AC_SUBST([COMMENT_OUT_ECC])
2712else
2713 AC_CHECK_LIB([crypt], [crypt], [LIBS="$LIBS -lcrypt"])
2714 AC_CHECK_FUNCS([crypt])
2715fi
2716
2717AC_CHECK_FUNCS([ \
2718 arc4random \
2719 arc4random_buf \
2720 arc4random_stir \
2721 arc4random_uniform \
2722])
Greg Hartmanbd77cf72015-02-25 13:21:06 -08002723
2724saved_LIBS="$LIBS"
2725AC_CHECK_LIB([iaf], [ia_openinfo], [
2726 LIBS="$LIBS -liaf"
2727 AC_CHECK_FUNCS([set_id], [SSHDLIBS="$SSHDLIBS -liaf"
2728 AC_DEFINE([HAVE_LIBIAF], [1],
2729 [Define if system has libiaf that supports set_id])
2730 ])
2731])
2732LIBS="$saved_LIBS"
2733
2734### Configure cryptographic random number support
2735
2736# Check wheter OpenSSL seeds itself
Adam Langleyd0592972015-03-30 14:49:51 -07002737if test "x$openssl" = "xyes" ; then
2738 AC_MSG_CHECKING([whether OpenSSL's PRNG is internally seeded])
2739 AC_RUN_IFELSE(
2740 [AC_LANG_PROGRAM([[
2741 #include <string.h>
2742 #include <openssl/rand.h>
2743 ]], [[
2744 exit(RAND_status() == 1 ? 0 : 1);
2745 ]])],
2746 [
2747 OPENSSL_SEEDS_ITSELF=yes
2748 AC_MSG_RESULT([yes])
2749 ],
2750 [
2751 AC_MSG_RESULT([no])
2752 ],
2753 [
2754 AC_MSG_WARN([cross compiling: assuming yes])
2755 # This is safe, since we will fatal() at runtime if
2756 # OpenSSL is not seeded correctly.
2757 OPENSSL_SEEDS_ITSELF=yes
2758 ]
2759 )
2760fi
Greg Hartmanbd77cf72015-02-25 13:21:06 -08002761
2762# PRNGD TCP socket
2763AC_ARG_WITH([prngd-port],
2764 [ --with-prngd-port=PORT read entropy from PRNGD/EGD TCP localhost:PORT],
2765 [
2766 case "$withval" in
2767 no)
2768 withval=""
2769 ;;
2770 [[0-9]]*)
2771 ;;
2772 *)
2773 AC_MSG_ERROR([You must specify a numeric port number for --with-prngd-port])
2774 ;;
2775 esac
2776 if test ! -z "$withval" ; then
2777 PRNGD_PORT="$withval"
2778 AC_DEFINE_UNQUOTED([PRNGD_PORT], [$PRNGD_PORT],
2779 [Port number of PRNGD/EGD random number socket])
2780 fi
2781 ]
2782)
2783
2784# PRNGD Unix domain socket
2785AC_ARG_WITH([prngd-socket],
2786 [ --with-prngd-socket=FILE read entropy from PRNGD/EGD socket FILE (default=/var/run/egd-pool)],
2787 [
2788 case "$withval" in
2789 yes)
2790 withval="/var/run/egd-pool"
2791 ;;
2792 no)
2793 withval=""
2794 ;;
2795 /*)
2796 ;;
2797 *)
2798 AC_MSG_ERROR([You must specify an absolute path to the entropy socket])
2799 ;;
2800 esac
2801
2802 if test ! -z "$withval" ; then
2803 if test ! -z "$PRNGD_PORT" ; then
2804 AC_MSG_ERROR([You may not specify both a PRNGD/EGD port and socket])
2805 fi
2806 if test ! -r "$withval" ; then
2807 AC_MSG_WARN([Entropy socket is not readable])
2808 fi
2809 PRNGD_SOCKET="$withval"
2810 AC_DEFINE_UNQUOTED([PRNGD_SOCKET], ["$PRNGD_SOCKET"],
2811 [Location of PRNGD/EGD random number socket])
2812 fi
2813 ],
2814 [
2815 # Check for existing socket only if we don't have a random device already
2816 if test "x$OPENSSL_SEEDS_ITSELF" != "xyes" ; then
2817 AC_MSG_CHECKING([for PRNGD/EGD socket])
2818 # Insert other locations here
2819 for sock in /var/run/egd-pool /dev/egd-pool /etc/entropy; do
2820 if test -r $sock && $TEST_MINUS_S_SH -c "test -S $sock -o -p $sock" ; then
2821 PRNGD_SOCKET="$sock"
2822 AC_DEFINE_UNQUOTED([PRNGD_SOCKET], ["$PRNGD_SOCKET"])
2823 break;
2824 fi
2825 done
2826 if test ! -z "$PRNGD_SOCKET" ; then
2827 AC_MSG_RESULT([$PRNGD_SOCKET])
2828 else
2829 AC_MSG_RESULT([not found])
2830 fi
2831 fi
2832 ]
2833)
2834
2835# Which randomness source do we use?
2836if test ! -z "$PRNGD_PORT" ; then
2837 RAND_MSG="PRNGd port $PRNGD_PORT"
2838elif test ! -z "$PRNGD_SOCKET" ; then
2839 RAND_MSG="PRNGd socket $PRNGD_SOCKET"
2840elif test ! -z "$OPENSSL_SEEDS_ITSELF" ; then
2841 AC_DEFINE([OPENSSL_PRNG_ONLY], [1],
Adam Langleyd0592972015-03-30 14:49:51 -07002842 [Define if you want the OpenSSL internally seeded PRNG only])
Greg Hartmanbd77cf72015-02-25 13:21:06 -08002843 RAND_MSG="OpenSSL internal ONLY"
Adam Langleyd0592972015-03-30 14:49:51 -07002844elif test "x$openssl" = "xno" ; then
2845 AC_MSG_WARN([OpenSSH will use /dev/urandom as a source of random numbers. It will fail if this device is not supported or accessible])
Greg Hartmanbd77cf72015-02-25 13:21:06 -08002846else
2847 AC_MSG_ERROR([OpenSSH has no source of random numbers. Please configure OpenSSL with an entropy source or re-run configure using one of the --with-prngd-port or --with-prngd-socket options])
2848fi
2849
2850# Check for PAM libs
2851PAM_MSG="no"
2852AC_ARG_WITH([pam],
2853 [ --with-pam Enable PAM support ],
2854 [
2855 if test "x$withval" != "xno" ; then
2856 if test "x$ac_cv_header_security_pam_appl_h" != "xyes" && \
2857 test "x$ac_cv_header_pam_pam_appl_h" != "xyes" ; then
2858 AC_MSG_ERROR([PAM headers not found])
2859 fi
2860
2861 saved_LIBS="$LIBS"
2862 AC_CHECK_LIB([dl], [dlopen], , )
2863 AC_CHECK_LIB([pam], [pam_set_item], , [AC_MSG_ERROR([*** libpam missing])])
2864 AC_CHECK_FUNCS([pam_getenvlist])
2865 AC_CHECK_FUNCS([pam_putenv])
2866 LIBS="$saved_LIBS"
2867
2868 PAM_MSG="yes"
2869
2870 SSHDLIBS="$SSHDLIBS -lpam"
2871 AC_DEFINE([USE_PAM], [1],
2872 [Define if you want to enable PAM support])
2873
2874 if test $ac_cv_lib_dl_dlopen = yes; then
2875 case "$LIBS" in
2876 *-ldl*)
2877 # libdl already in LIBS
2878 ;;
2879 *)
2880 SSHDLIBS="$SSHDLIBS -ldl"
2881 ;;
2882 esac
2883 fi
2884 fi
2885 ]
2886)
2887
2888# Check for older PAM
2889if test "x$PAM_MSG" = "xyes" ; then
2890 # Check PAM strerror arguments (old PAM)
2891 AC_MSG_CHECKING([whether pam_strerror takes only one argument])
2892 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
2893#include <stdlib.h>
2894#if defined(HAVE_SECURITY_PAM_APPL_H)
2895#include <security/pam_appl.h>
2896#elif defined (HAVE_PAM_PAM_APPL_H)
2897#include <pam/pam_appl.h>
2898#endif
2899 ]], [[
2900(void)pam_strerror((pam_handle_t *)NULL, -1);
2901 ]])], [AC_MSG_RESULT([no])], [
2902 AC_DEFINE([HAVE_OLD_PAM], [1],
2903 [Define if you have an old version of PAM
2904 which takes only one argument to pam_strerror])
2905 AC_MSG_RESULT([yes])
2906 PAM_MSG="yes (old library)"
Adam Langleyd0592972015-03-30 14:49:51 -07002907
Greg Hartmanbd77cf72015-02-25 13:21:06 -08002908 ])
2909fi
2910
Adam Langleyd0592972015-03-30 14:49:51 -07002911case "$host" in
2912*-*-cygwin*)
2913 SSH_PRIVSEP_USER=CYGWIN_SSH_PRIVSEP_USER
2914 ;;
2915*)
2916 SSH_PRIVSEP_USER=sshd
2917 ;;
2918esac
Greg Hartmanbd77cf72015-02-25 13:21:06 -08002919AC_ARG_WITH([privsep-user],
2920 [ --with-privsep-user=user Specify non-privileged user for privilege separation],
2921 [
2922 if test -n "$withval" && test "x$withval" != "xno" && \
2923 test "x${withval}" != "xyes"; then
2924 SSH_PRIVSEP_USER=$withval
2925 fi
2926 ]
2927)
Adam Langleyd0592972015-03-30 14:49:51 -07002928if test "x$SSH_PRIVSEP_USER" = "xCYGWIN_SSH_PRIVSEP_USER" ; then
2929 AC_DEFINE_UNQUOTED([SSH_PRIVSEP_USER], [CYGWIN_SSH_PRIVSEP_USER],
2930 [Cygwin function to fetch non-privileged user for privilege separation])
2931else
2932 AC_DEFINE_UNQUOTED([SSH_PRIVSEP_USER], ["$SSH_PRIVSEP_USER"],
2933 [non-privileged user for privilege separation])
2934fi
Greg Hartmanbd77cf72015-02-25 13:21:06 -08002935AC_SUBST([SSH_PRIVSEP_USER])
2936
Adam Langleyd0592972015-03-30 14:49:51 -07002937if test "x$have_linux_no_new_privs" = "x1" ; then
2938AC_CHECK_DECL([SECCOMP_MODE_FILTER], [have_seccomp_filter=1], , [
2939 #include <sys/types.h>
2940 #include <linux/seccomp.h>
2941])
2942fi
2943if test "x$have_seccomp_filter" = "x1" ; then
2944AC_MSG_CHECKING([kernel for seccomp_filter support])
2945AC_LINK_IFELSE([AC_LANG_PROGRAM([[
2946 #include <errno.h>
2947 #include <elf.h>
2948 #include <linux/audit.h>
2949 #include <linux/seccomp.h>
2950 #include <stdlib.h>
2951 #include <sys/prctl.h>
2952 ]],
2953 [[ int i = $seccomp_audit_arch;
2954 errno = 0;
2955 prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, NULL, 0, 0);
2956 exit(errno == EFAULT ? 0 : 1); ]])],
2957 [ AC_MSG_RESULT([yes]) ], [
2958 AC_MSG_RESULT([no])
2959 # Disable seccomp filter as a target
2960 have_seccomp_filter=0
2961 ]
2962)
2963fi
2964
Greg Hartmanbd77cf72015-02-25 13:21:06 -08002965# Decide which sandbox style to use
2966sandbox_arg=""
2967AC_ARG_WITH([sandbox],
Adam Langleyd0592972015-03-30 14:49:51 -07002968 [ --with-sandbox=style Specify privilege separation sandbox (no, darwin, rlimit, systrace, seccomp_filter, capsicum)],
Greg Hartmanbd77cf72015-02-25 13:21:06 -08002969 [
2970 if test "x$withval" = "xyes" ; then
2971 sandbox_arg=""
2972 else
2973 sandbox_arg="$withval"
2974 fi
2975 ]
2976)
Adam Langleyd0592972015-03-30 14:49:51 -07002977
2978# Some platforms (seems to be the ones that have a kernel poll(2)-type
2979# function with which they implement select(2)) use an extra file descriptor
2980# when calling select(2), which means we can't use the rlimit sandbox.
2981AC_MSG_CHECKING([if select works with descriptor rlimit])
2982AC_RUN_IFELSE(
2983 [AC_LANG_PROGRAM([[
2984#include <sys/types.h>
2985#ifdef HAVE_SYS_TIME_H
2986# include <sys/time.h>
2987#endif
2988#include <sys/resource.h>
2989#ifdef HAVE_SYS_SELECT_H
2990# include <sys/select.h>
2991#endif
2992#include <errno.h>
2993#include <fcntl.h>
2994#include <stdlib.h>
2995 ]],[[
2996 struct rlimit rl_zero;
2997 int fd, r;
2998 fd_set fds;
2999 struct timeval tv;
3000
3001 fd = open("/dev/null", O_RDONLY);
3002 FD_ZERO(&fds);
3003 FD_SET(fd, &fds);
3004 rl_zero.rlim_cur = rl_zero.rlim_max = 0;
3005 setrlimit(RLIMIT_FSIZE, &rl_zero);
3006 setrlimit(RLIMIT_NOFILE, &rl_zero);
3007 tv.tv_sec = 1;
3008 tv.tv_usec = 0;
3009 r = select(fd+1, &fds, NULL, NULL, &tv);
3010 exit (r == -1 ? 1 : 0);
3011 ]])],
3012 [AC_MSG_RESULT([yes])
3013 select_works_with_rlimit=yes],
3014 [AC_MSG_RESULT([no])
3015 select_works_with_rlimit=no],
3016 [AC_MSG_WARN([cross compiling: assuming yes])]
3017)
3018
3019AC_MSG_CHECKING([if setrlimit(RLIMIT_NOFILE,{0,0}) works])
3020AC_RUN_IFELSE(
3021 [AC_LANG_PROGRAM([[
3022#include <sys/types.h>
3023#ifdef HAVE_SYS_TIME_H
3024# include <sys/time.h>
3025#endif
3026#include <sys/resource.h>
3027#include <errno.h>
3028#include <stdlib.h>
3029 ]],[[
3030 struct rlimit rl_zero;
3031 int fd, r;
3032 fd_set fds;
3033
3034 rl_zero.rlim_cur = rl_zero.rlim_max = 0;
3035 r = setrlimit(RLIMIT_NOFILE, &rl_zero);
3036 exit (r == -1 ? 1 : 0);
3037 ]])],
3038 [AC_MSG_RESULT([yes])
3039 rlimit_nofile_zero_works=yes],
3040 [AC_MSG_RESULT([no])
3041 rlimit_nofile_zero_works=no],
3042 [AC_MSG_WARN([cross compiling: assuming yes])]
3043)
3044
3045AC_MSG_CHECKING([if setrlimit RLIMIT_FSIZE works])
3046AC_RUN_IFELSE(
3047 [AC_LANG_PROGRAM([[
3048#include <sys/types.h>
3049#include <sys/resource.h>
3050#include <stdlib.h>
3051 ]],[[
3052 struct rlimit rl_zero;
3053
3054 rl_zero.rlim_cur = rl_zero.rlim_max = 0;
3055 exit(setrlimit(RLIMIT_FSIZE, &rl_zero) != 0);
3056 ]])],
3057 [AC_MSG_RESULT([yes])],
3058 [AC_MSG_RESULT([no])
3059 AC_DEFINE(SANDBOX_SKIP_RLIMIT_FSIZE, 1,
3060 [setrlimit RLIMIT_FSIZE works])],
3061 [AC_MSG_WARN([cross compiling: assuming yes])]
3062)
3063
Greg Hartmanbd77cf72015-02-25 13:21:06 -08003064if test "x$sandbox_arg" = "xsystrace" || \
3065 ( test -z "$sandbox_arg" && test "x$have_systr_policy_kill" = "x1" ) ; then
3066 test "x$have_systr_policy_kill" != "x1" && \
3067 AC_MSG_ERROR([systrace sandbox requires systrace headers and SYSTR_POLICY_KILL support])
3068 SANDBOX_STYLE="systrace"
3069 AC_DEFINE([SANDBOX_SYSTRACE], [1], [Sandbox using systrace(4)])
3070elif test "x$sandbox_arg" = "xdarwin" || \
3071 ( test -z "$sandbox_arg" && test "x$ac_cv_func_sandbox_init" = "xyes" && \
3072 test "x$ac_cv_header_sandbox_h" = "xyes") ; then
3073 test "x$ac_cv_func_sandbox_init" != "xyes" -o \
3074 "x$ac_cv_header_sandbox_h" != "xyes" && \
3075 AC_MSG_ERROR([Darwin seatbelt sandbox requires sandbox.h and sandbox_init function])
3076 SANDBOX_STYLE="darwin"
3077 AC_DEFINE([SANDBOX_DARWIN], [1], [Sandbox using Darwin sandbox_init(3)])
Adam Langleyd0592972015-03-30 14:49:51 -07003078elif test "x$sandbox_arg" = "xseccomp_filter" || \
3079 ( test -z "$sandbox_arg" && \
3080 test "x$have_seccomp_filter" = "x1" && \
3081 test "x$ac_cv_header_elf_h" = "xyes" && \
3082 test "x$ac_cv_header_linux_audit_h" = "xyes" && \
3083 test "x$ac_cv_header_linux_filter_h" = "xyes" && \
3084 test "x$seccomp_audit_arch" != "x" && \
3085 test "x$have_linux_no_new_privs" = "x1" && \
3086 test "x$ac_cv_func_prctl" = "xyes" ) ; then
3087 test "x$seccomp_audit_arch" = "x" && \
3088 AC_MSG_ERROR([seccomp_filter sandbox not supported on $host])
3089 test "x$have_linux_no_new_privs" != "x1" && \
3090 AC_MSG_ERROR([seccomp_filter sandbox requires PR_SET_NO_NEW_PRIVS])
3091 test "x$have_seccomp_filter" != "x1" && \
3092 AC_MSG_ERROR([seccomp_filter sandbox requires seccomp headers])
3093 test "x$ac_cv_func_prctl" != "xyes" && \
3094 AC_MSG_ERROR([seccomp_filter sandbox requires prctl function])
3095 SANDBOX_STYLE="seccomp_filter"
3096 AC_DEFINE([SANDBOX_SECCOMP_FILTER], [1], [Sandbox using seccomp filter])
3097elif test "x$sandbox_arg" = "xcapsicum" || \
3098 ( test -z "$sandbox_arg" && \
3099 test "x$ac_cv_header_sys_capability_h" = "xyes" && \
3100 test "x$ac_cv_func_cap_rights_limit" = "xyes") ; then
3101 test "x$ac_cv_header_sys_capability_h" != "xyes" && \
3102 AC_MSG_ERROR([capsicum sandbox requires sys/capability.h header])
3103 test "x$ac_cv_func_cap_rights_limit" != "xyes" && \
3104 AC_MSG_ERROR([capsicum sandbox requires cap_rights_limit function])
3105 SANDBOX_STYLE="capsicum"
3106 AC_DEFINE([SANDBOX_CAPSICUM], [1], [Sandbox using capsicum])
Greg Hartmanbd77cf72015-02-25 13:21:06 -08003107elif test "x$sandbox_arg" = "xrlimit" || \
Adam Langleyd0592972015-03-30 14:49:51 -07003108 ( test -z "$sandbox_arg" && test "x$ac_cv_func_setrlimit" = "xyes" && \
3109 test "x$select_works_with_rlimit" = "xyes" && \
3110 test "x$rlimit_nofile_zero_works" = "xyes" ) ; then
Greg Hartmanbd77cf72015-02-25 13:21:06 -08003111 test "x$ac_cv_func_setrlimit" != "xyes" && \
3112 AC_MSG_ERROR([rlimit sandbox requires setrlimit function])
Adam Langleyd0592972015-03-30 14:49:51 -07003113 test "x$select_works_with_rlimit" != "xyes" && \
3114 AC_MSG_ERROR([rlimit sandbox requires select to work with rlimit])
Greg Hartmanbd77cf72015-02-25 13:21:06 -08003115 SANDBOX_STYLE="rlimit"
3116 AC_DEFINE([SANDBOX_RLIMIT], [1], [Sandbox using setrlimit(2)])
3117elif test -z "$sandbox_arg" || test "x$sandbox_arg" = "xno" || \
3118 test "x$sandbox_arg" = "xnone" || test "x$sandbox_arg" = "xnull" ; then
3119 SANDBOX_STYLE="none"
3120 AC_DEFINE([SANDBOX_NULL], [1], [no privsep sandboxing])
3121else
3122 AC_MSG_ERROR([unsupported --with-sandbox])
3123fi
3124
3125# Cheap hack to ensure NEWS-OS libraries are arranged right.
3126if test ! -z "$SONY" ; then
3127 LIBS="$LIBS -liberty";
3128fi
3129
3130# Check for long long datatypes
3131AC_CHECK_TYPES([long long, unsigned long long, long double])
3132
3133# Check datatype sizes
Greg Hartmanbd77cf72015-02-25 13:21:06 -08003134AC_CHECK_SIZEOF([short int], [2])
3135AC_CHECK_SIZEOF([int], [4])
3136AC_CHECK_SIZEOF([long int], [4])
3137AC_CHECK_SIZEOF([long long int], [8])
3138
3139# Sanity check long long for some platforms (AIX)
3140if test "x$ac_cv_sizeof_long_long_int" = "x4" ; then
3141 ac_cv_sizeof_long_long_int=0
3142fi
3143
3144# compute LLONG_MIN and LLONG_MAX if we don't know them.
3145if test -z "$have_llong_max"; then
3146 AC_MSG_CHECKING([for max value of long long])
3147 AC_RUN_IFELSE(
3148 [AC_LANG_PROGRAM([[
3149#include <stdio.h>
3150/* Why is this so damn hard? */
3151#ifdef __GNUC__
3152# undef __GNUC__
3153#endif
3154#define __USE_ISOC99
3155#include <limits.h>
3156#define DATA "conftest.llminmax"
3157#define my_abs(a) ((a) < 0 ? ((a) * -1) : (a))
3158
3159/*
3160 * printf in libc on some platforms (eg old Tru64) does not understand %lld so
3161 * we do this the hard way.
3162 */
3163static int
3164fprint_ll(FILE *f, long long n)
3165{
3166 unsigned int i;
3167 int l[sizeof(long long) * 8];
3168
3169 if (n < 0)
3170 if (fprintf(f, "-") < 0)
3171 return -1;
3172 for (i = 0; n != 0; i++) {
3173 l[i] = my_abs(n % 10);
3174 n /= 10;
3175 }
3176 do {
3177 if (fprintf(f, "%d", l[--i]) < 0)
3178 return -1;
3179 } while (i != 0);
3180 if (fprintf(f, " ") < 0)
3181 return -1;
3182 return 0;
3183}
3184 ]], [[
3185 FILE *f;
3186 long long i, llmin, llmax = 0;
3187
3188 if((f = fopen(DATA,"w")) == NULL)
3189 exit(1);
3190
3191#if defined(LLONG_MIN) && defined(LLONG_MAX)
3192 fprintf(stderr, "Using system header for LLONG_MIN and LLONG_MAX\n");
3193 llmin = LLONG_MIN;
3194 llmax = LLONG_MAX;
3195#else
3196 fprintf(stderr, "Calculating LLONG_MIN and LLONG_MAX\n");
3197 /* This will work on one's complement and two's complement */
3198 for (i = 1; i > llmax; i <<= 1, i++)
3199 llmax = i;
3200 llmin = llmax + 1LL; /* wrap */
3201#endif
3202
3203 /* Sanity check */
3204 if (llmin + 1 < llmin || llmin - 1 < llmin || llmax + 1 > llmax
3205 || llmax - 1 > llmax || llmin == llmax || llmin == 0
3206 || llmax == 0 || llmax < LONG_MAX || llmin > LONG_MIN) {
3207 fprintf(f, "unknown unknown\n");
3208 exit(2);
3209 }
3210
3211 if (fprint_ll(f, llmin) < 0)
3212 exit(3);
3213 if (fprint_ll(f, llmax) < 0)
3214 exit(4);
3215 if (fclose(f) < 0)
3216 exit(5);
3217 exit(0);
3218 ]])],
3219 [
3220 llong_min=`$AWK '{print $1}' conftest.llminmax`
3221 llong_max=`$AWK '{print $2}' conftest.llminmax`
3222
3223 AC_MSG_RESULT([$llong_max])
3224 AC_DEFINE_UNQUOTED([LLONG_MAX], [${llong_max}LL],
3225 [max value of long long calculated by configure])
3226 AC_MSG_CHECKING([for min value of long long])
3227 AC_MSG_RESULT([$llong_min])
3228 AC_DEFINE_UNQUOTED([LLONG_MIN], [${llong_min}LL],
3229 [min value of long long calculated by configure])
3230 ],
3231 [
3232 AC_MSG_RESULT([not found])
3233 ],
3234 [
3235 AC_MSG_WARN([cross compiling: not checking])
3236 ]
3237 )
3238fi
3239
3240
3241# More checks for data types
3242AC_CACHE_CHECK([for u_int type], ac_cv_have_u_int, [
3243 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> ]],
3244 [[ u_int a; a = 1;]])],
3245 [ ac_cv_have_u_int="yes" ], [ ac_cv_have_u_int="no"
3246 ])
3247])
3248if test "x$ac_cv_have_u_int" = "xyes" ; then
3249 AC_DEFINE([HAVE_U_INT], [1], [define if you have u_int data type])
3250 have_u_int=1
3251fi
3252
3253AC_CACHE_CHECK([for intXX_t types], ac_cv_have_intxx_t, [
3254 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> ]],
3255 [[ int8_t a; int16_t b; int32_t c; a = b = c = 1;]])],
3256 [ ac_cv_have_intxx_t="yes" ], [ ac_cv_have_intxx_t="no"
3257 ])
3258])
3259if test "x$ac_cv_have_intxx_t" = "xyes" ; then
3260 AC_DEFINE([HAVE_INTXX_T], [1], [define if you have intxx_t data type])
3261 have_intxx_t=1
3262fi
3263
3264if (test -z "$have_intxx_t" && \
3265 test "x$ac_cv_header_stdint_h" = "xyes")
3266then
3267 AC_MSG_CHECKING([for intXX_t types in stdint.h])
3268 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <stdint.h> ]],
3269 [[ int8_t a; int16_t b; int32_t c; a = b = c = 1;]])],
3270 [
3271 AC_DEFINE([HAVE_INTXX_T])
3272 AC_MSG_RESULT([yes])
3273 ], [ AC_MSG_RESULT([no])
3274 ])
3275fi
3276
3277AC_CACHE_CHECK([for int64_t type], ac_cv_have_int64_t, [
3278 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
3279#include <sys/types.h>
3280#ifdef HAVE_STDINT_H
3281# include <stdint.h>
3282#endif
3283#include <sys/socket.h>
3284#ifdef HAVE_SYS_BITYPES_H
3285# include <sys/bitypes.h>
3286#endif
3287 ]], [[
3288int64_t a; a = 1;
3289 ]])],
3290 [ ac_cv_have_int64_t="yes" ], [ ac_cv_have_int64_t="no"
3291 ])
3292])
3293if test "x$ac_cv_have_int64_t" = "xyes" ; then
3294 AC_DEFINE([HAVE_INT64_T], [1], [define if you have int64_t data type])
3295fi
3296
3297AC_CACHE_CHECK([for u_intXX_t types], ac_cv_have_u_intxx_t, [
3298 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> ]],
3299 [[ u_int8_t a; u_int16_t b; u_int32_t c; a = b = c = 1;]])],
3300 [ ac_cv_have_u_intxx_t="yes" ], [ ac_cv_have_u_intxx_t="no"
3301 ])
3302])
3303if test "x$ac_cv_have_u_intxx_t" = "xyes" ; then
3304 AC_DEFINE([HAVE_U_INTXX_T], [1], [define if you have u_intxx_t data type])
3305 have_u_intxx_t=1
3306fi
3307
3308if test -z "$have_u_intxx_t" ; then
3309 AC_MSG_CHECKING([for u_intXX_t types in sys/socket.h])
3310 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/socket.h> ]],
3311 [[ u_int8_t a; u_int16_t b; u_int32_t c; a = b = c = 1;]])],
3312 [
3313 AC_DEFINE([HAVE_U_INTXX_T])
3314 AC_MSG_RESULT([yes])
3315 ], [ AC_MSG_RESULT([no])
3316 ])
3317fi
3318
3319AC_CACHE_CHECK([for u_int64_t types], ac_cv_have_u_int64_t, [
3320 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> ]],
3321 [[ u_int64_t a; a = 1;]])],
3322 [ ac_cv_have_u_int64_t="yes" ], [ ac_cv_have_u_int64_t="no"
3323 ])
3324])
3325if test "x$ac_cv_have_u_int64_t" = "xyes" ; then
3326 AC_DEFINE([HAVE_U_INT64_T], [1], [define if you have u_int64_t data type])
3327 have_u_int64_t=1
3328fi
3329
Adam Langleyd0592972015-03-30 14:49:51 -07003330if (test -z "$have_u_int64_t" && \
3331 test "x$ac_cv_header_sys_bitypes_h" = "xyes")
3332then
Greg Hartmanbd77cf72015-02-25 13:21:06 -08003333 AC_MSG_CHECKING([for u_int64_t type in sys/bitypes.h])
3334 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/bitypes.h> ]],
3335 [[ u_int64_t a; a = 1]])],
3336 [
3337 AC_DEFINE([HAVE_U_INT64_T])
3338 AC_MSG_RESULT([yes])
3339 ], [ AC_MSG_RESULT([no])
3340 ])
3341fi
3342
3343if test -z "$have_u_intxx_t" ; then
3344 AC_CACHE_CHECK([for uintXX_t types], ac_cv_have_uintxx_t, [
3345 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
3346#include <sys/types.h>
3347 ]], [[
3348 uint8_t a;
3349 uint16_t b;
3350 uint32_t c;
3351 a = b = c = 1;
3352 ]])],
3353 [ ac_cv_have_uintxx_t="yes" ], [ ac_cv_have_uintxx_t="no"
3354 ])
3355 ])
3356 if test "x$ac_cv_have_uintxx_t" = "xyes" ; then
3357 AC_DEFINE([HAVE_UINTXX_T], [1],
3358 [define if you have uintxx_t data type])
3359 fi
3360fi
3361
Adam Langleyd0592972015-03-30 14:49:51 -07003362if (test -z "$have_uintxx_t" && \
3363 test "x$ac_cv_header_stdint_h" = "xyes")
3364then
Greg Hartmanbd77cf72015-02-25 13:21:06 -08003365 AC_MSG_CHECKING([for uintXX_t types in stdint.h])
3366 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <stdint.h> ]],
3367 [[ uint8_t a; uint16_t b; uint32_t c; a = b = c = 1;]])],
3368 [
3369 AC_DEFINE([HAVE_UINTXX_T])
3370 AC_MSG_RESULT([yes])
3371 ], [ AC_MSG_RESULT([no])
3372 ])
3373fi
3374
Adam Langleyd0592972015-03-30 14:49:51 -07003375if (test -z "$have_uintxx_t" && \
3376 test "x$ac_cv_header_inttypes_h" = "xyes")
3377then
3378 AC_MSG_CHECKING([for uintXX_t types in inttypes.h])
3379 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <inttypes.h> ]],
3380 [[ uint8_t a; uint16_t b; uint32_t c; a = b = c = 1;]])],
3381 [
3382 AC_DEFINE([HAVE_UINTXX_T])
3383 AC_MSG_RESULT([yes])
3384 ], [ AC_MSG_RESULT([no])
3385 ])
3386fi
3387
Greg Hartmanbd77cf72015-02-25 13:21:06 -08003388if (test -z "$have_u_intxx_t" || test -z "$have_intxx_t" && \
3389 test "x$ac_cv_header_sys_bitypes_h" = "xyes")
3390then
3391 AC_MSG_CHECKING([for intXX_t and u_intXX_t types in sys/bitypes.h])
3392 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
3393#include <sys/bitypes.h>
3394 ]], [[
3395 int8_t a; int16_t b; int32_t c;
3396 u_int8_t e; u_int16_t f; u_int32_t g;
3397 a = b = c = e = f = g = 1;
3398 ]])],
3399 [
3400 AC_DEFINE([HAVE_U_INTXX_T])
3401 AC_DEFINE([HAVE_INTXX_T])
3402 AC_MSG_RESULT([yes])
3403 ], [AC_MSG_RESULT([no])
3404 ])
3405fi
3406
3407
3408AC_CACHE_CHECK([for u_char], ac_cv_have_u_char, [
3409 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> ]],
3410 [[ u_char foo; foo = 125; ]])],
3411 [ ac_cv_have_u_char="yes" ], [ ac_cv_have_u_char="no"
3412 ])
3413])
3414if test "x$ac_cv_have_u_char" = "xyes" ; then
3415 AC_DEFINE([HAVE_U_CHAR], [1], [define if you have u_char data type])
3416fi
3417
Adam Langleyd0592972015-03-30 14:49:51 -07003418AC_CHECK_TYPES([intmax_t, uintmax_t], , , [
3419#include <sys/types.h>
3420#include <stdint.h>
3421])
3422
Greg Hartmanbd77cf72015-02-25 13:21:06 -08003423TYPE_SOCKLEN_T
3424
3425AC_CHECK_TYPES([sig_atomic_t], , , [#include <signal.h>])
3426AC_CHECK_TYPES([fsblkcnt_t, fsfilcnt_t], , , [
3427#include <sys/types.h>
3428#ifdef HAVE_SYS_BITYPES_H
3429#include <sys/bitypes.h>
3430#endif
3431#ifdef HAVE_SYS_STATFS_H
3432#include <sys/statfs.h>
3433#endif
3434#ifdef HAVE_SYS_STATVFS_H
3435#include <sys/statvfs.h>
3436#endif
3437])
3438
3439AC_CHECK_TYPES([in_addr_t, in_port_t], , ,
3440[#include <sys/types.h>
3441#include <netinet/in.h>])
3442
3443AC_CACHE_CHECK([for size_t], ac_cv_have_size_t, [
3444 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> ]],
3445 [[ size_t foo; foo = 1235; ]])],
3446 [ ac_cv_have_size_t="yes" ], [ ac_cv_have_size_t="no"
3447 ])
3448])
3449if test "x$ac_cv_have_size_t" = "xyes" ; then
3450 AC_DEFINE([HAVE_SIZE_T], [1], [define if you have size_t data type])
3451fi
3452
3453AC_CACHE_CHECK([for ssize_t], ac_cv_have_ssize_t, [
3454 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> ]],
3455 [[ ssize_t foo; foo = 1235; ]])],
3456 [ ac_cv_have_ssize_t="yes" ], [ ac_cv_have_ssize_t="no"
3457 ])
3458])
3459if test "x$ac_cv_have_ssize_t" = "xyes" ; then
3460 AC_DEFINE([HAVE_SSIZE_T], [1], [define if you have ssize_t data type])
3461fi
3462
3463AC_CACHE_CHECK([for clock_t], ac_cv_have_clock_t, [
3464 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <time.h> ]],
3465 [[ clock_t foo; foo = 1235; ]])],
3466 [ ac_cv_have_clock_t="yes" ], [ ac_cv_have_clock_t="no"
3467 ])
3468])
3469if test "x$ac_cv_have_clock_t" = "xyes" ; then
3470 AC_DEFINE([HAVE_CLOCK_T], [1], [define if you have clock_t data type])
3471fi
3472
3473AC_CACHE_CHECK([for sa_family_t], ac_cv_have_sa_family_t, [
3474 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
3475#include <sys/types.h>
3476#include <sys/socket.h>
3477 ]], [[ sa_family_t foo; foo = 1235; ]])],
3478 [ ac_cv_have_sa_family_t="yes" ],
3479 [ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
3480#include <sys/types.h>
3481#include <sys/socket.h>
3482#include <netinet/in.h>
3483 ]], [[ sa_family_t foo; foo = 1235; ]])],
3484 [ ac_cv_have_sa_family_t="yes" ],
3485 [ ac_cv_have_sa_family_t="no" ]
3486 )
3487 ])
3488])
3489if test "x$ac_cv_have_sa_family_t" = "xyes" ; then
3490 AC_DEFINE([HAVE_SA_FAMILY_T], [1],
3491 [define if you have sa_family_t data type])
3492fi
3493
3494AC_CACHE_CHECK([for pid_t], ac_cv_have_pid_t, [
3495 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> ]],
3496 [[ pid_t foo; foo = 1235; ]])],
3497 [ ac_cv_have_pid_t="yes" ], [ ac_cv_have_pid_t="no"
3498 ])
3499])
3500if test "x$ac_cv_have_pid_t" = "xyes" ; then
3501 AC_DEFINE([HAVE_PID_T], [1], [define if you have pid_t data type])
3502fi
3503
3504AC_CACHE_CHECK([for mode_t], ac_cv_have_mode_t, [
3505 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> ]],
3506 [[ mode_t foo; foo = 1235; ]])],
3507 [ ac_cv_have_mode_t="yes" ], [ ac_cv_have_mode_t="no"
3508 ])
3509])
3510if test "x$ac_cv_have_mode_t" = "xyes" ; then
3511 AC_DEFINE([HAVE_MODE_T], [1], [define if you have mode_t data type])
3512fi
3513
3514
3515AC_CACHE_CHECK([for struct sockaddr_storage], ac_cv_have_struct_sockaddr_storage, [
3516 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
3517#include <sys/types.h>
3518#include <sys/socket.h>
3519 ]], [[ struct sockaddr_storage s; ]])],
3520 [ ac_cv_have_struct_sockaddr_storage="yes" ],
3521 [ ac_cv_have_struct_sockaddr_storage="no"
3522 ])
3523])
3524if test "x$ac_cv_have_struct_sockaddr_storage" = "xyes" ; then
3525 AC_DEFINE([HAVE_STRUCT_SOCKADDR_STORAGE], [1],
3526 [define if you have struct sockaddr_storage data type])
3527fi
3528
3529AC_CACHE_CHECK([for struct sockaddr_in6], ac_cv_have_struct_sockaddr_in6, [
3530 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
3531#include <sys/types.h>
3532#include <netinet/in.h>
3533 ]], [[ struct sockaddr_in6 s; s.sin6_family = 0; ]])],
3534 [ ac_cv_have_struct_sockaddr_in6="yes" ],
3535 [ ac_cv_have_struct_sockaddr_in6="no"
3536 ])
3537])
3538if test "x$ac_cv_have_struct_sockaddr_in6" = "xyes" ; then
3539 AC_DEFINE([HAVE_STRUCT_SOCKADDR_IN6], [1],
3540 [define if you have struct sockaddr_in6 data type])
3541fi
3542
3543AC_CACHE_CHECK([for struct in6_addr], ac_cv_have_struct_in6_addr, [
3544 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
3545#include <sys/types.h>
3546#include <netinet/in.h>
3547 ]], [[ struct in6_addr s; s.s6_addr[0] = 0; ]])],
3548 [ ac_cv_have_struct_in6_addr="yes" ],
3549 [ ac_cv_have_struct_in6_addr="no"
3550 ])
3551])
3552if test "x$ac_cv_have_struct_in6_addr" = "xyes" ; then
3553 AC_DEFINE([HAVE_STRUCT_IN6_ADDR], [1],
3554 [define if you have struct in6_addr data type])
3555
3556dnl Now check for sin6_scope_id
3557 AC_CHECK_MEMBERS([struct sockaddr_in6.sin6_scope_id], , ,
3558 [
3559#ifdef HAVE_SYS_TYPES_H
3560#include <sys/types.h>
3561#endif
3562#include <netinet/in.h>
3563 ])
3564fi
3565
3566AC_CACHE_CHECK([for struct addrinfo], ac_cv_have_struct_addrinfo, [
3567 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
3568#include <sys/types.h>
3569#include <sys/socket.h>
3570#include <netdb.h>
3571 ]], [[ struct addrinfo s; s.ai_flags = AI_PASSIVE; ]])],
3572 [ ac_cv_have_struct_addrinfo="yes" ],
3573 [ ac_cv_have_struct_addrinfo="no"
3574 ])
3575])
3576if test "x$ac_cv_have_struct_addrinfo" = "xyes" ; then
3577 AC_DEFINE([HAVE_STRUCT_ADDRINFO], [1],
3578 [define if you have struct addrinfo data type])
3579fi
3580
3581AC_CACHE_CHECK([for struct timeval], ac_cv_have_struct_timeval, [
3582 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/time.h> ]],
3583 [[ struct timeval tv; tv.tv_sec = 1;]])],
3584 [ ac_cv_have_struct_timeval="yes" ],
3585 [ ac_cv_have_struct_timeval="no"
3586 ])
3587])
3588if test "x$ac_cv_have_struct_timeval" = "xyes" ; then
3589 AC_DEFINE([HAVE_STRUCT_TIMEVAL], [1], [define if you have struct timeval])
3590 have_struct_timeval=1
3591fi
3592
3593AC_CHECK_TYPES([struct timespec])
3594
3595# We need int64_t or else certian parts of the compile will fail.
3596if test "x$ac_cv_have_int64_t" = "xno" && \
3597 test "x$ac_cv_sizeof_long_int" != "x8" && \
3598 test "x$ac_cv_sizeof_long_long_int" = "x0" ; then
3599 echo "OpenSSH requires int64_t support. Contact your vendor or install"
3600 echo "an alternative compiler (I.E., GCC) before continuing."
3601 echo ""
3602 exit 1;
3603else
3604dnl test snprintf (broken on SCO w/gcc)
3605 AC_RUN_IFELSE(
3606 [AC_LANG_SOURCE([[
3607#include <stdio.h>
3608#include <string.h>
3609#ifdef HAVE_SNPRINTF
3610main()
3611{
3612 char buf[50];
3613 char expected_out[50];
3614 int mazsize = 50 ;
3615#if (SIZEOF_LONG_INT == 8)
3616 long int num = 0x7fffffffffffffff;
3617#else
3618 long long num = 0x7fffffffffffffffll;
3619#endif
3620 strcpy(expected_out, "9223372036854775807");
3621 snprintf(buf, mazsize, "%lld", num);
3622 if(strcmp(buf, expected_out) != 0)
3623 exit(1);
3624 exit(0);
3625}
3626#else
3627main() { exit(0); }
3628#endif
3629 ]])], [ true ], [ AC_DEFINE([BROKEN_SNPRINTF]) ],
3630 AC_MSG_WARN([cross compiling: Assuming working snprintf()])
3631 )
3632fi
3633
3634dnl Checks for structure members
3635OSSH_CHECK_HEADER_FOR_FIELD([ut_host], [utmp.h], [HAVE_HOST_IN_UTMP])
3636OSSH_CHECK_HEADER_FOR_FIELD([ut_host], [utmpx.h], [HAVE_HOST_IN_UTMPX])
3637OSSH_CHECK_HEADER_FOR_FIELD([syslen], [utmpx.h], [HAVE_SYSLEN_IN_UTMPX])
3638OSSH_CHECK_HEADER_FOR_FIELD([ut_pid], [utmp.h], [HAVE_PID_IN_UTMP])
3639OSSH_CHECK_HEADER_FOR_FIELD([ut_type], [utmp.h], [HAVE_TYPE_IN_UTMP])
3640OSSH_CHECK_HEADER_FOR_FIELD([ut_type], [utmpx.h], [HAVE_TYPE_IN_UTMPX])
3641OSSH_CHECK_HEADER_FOR_FIELD([ut_tv], [utmp.h], [HAVE_TV_IN_UTMP])
3642OSSH_CHECK_HEADER_FOR_FIELD([ut_id], [utmp.h], [HAVE_ID_IN_UTMP])
3643OSSH_CHECK_HEADER_FOR_FIELD([ut_id], [utmpx.h], [HAVE_ID_IN_UTMPX])
3644OSSH_CHECK_HEADER_FOR_FIELD([ut_addr], [utmp.h], [HAVE_ADDR_IN_UTMP])
3645OSSH_CHECK_HEADER_FOR_FIELD([ut_addr], [utmpx.h], [HAVE_ADDR_IN_UTMPX])
3646OSSH_CHECK_HEADER_FOR_FIELD([ut_addr_v6], [utmp.h], [HAVE_ADDR_V6_IN_UTMP])
3647OSSH_CHECK_HEADER_FOR_FIELD([ut_addr_v6], [utmpx.h], [HAVE_ADDR_V6_IN_UTMPX])
3648OSSH_CHECK_HEADER_FOR_FIELD([ut_exit], [utmp.h], [HAVE_EXIT_IN_UTMP])
3649OSSH_CHECK_HEADER_FOR_FIELD([ut_time], [utmp.h], [HAVE_TIME_IN_UTMP])
3650OSSH_CHECK_HEADER_FOR_FIELD([ut_time], [utmpx.h], [HAVE_TIME_IN_UTMPX])
3651OSSH_CHECK_HEADER_FOR_FIELD([ut_tv], [utmpx.h], [HAVE_TV_IN_UTMPX])
3652
3653AC_CHECK_MEMBERS([struct stat.st_blksize])
Adam Langleyd0592972015-03-30 14:49:51 -07003654AC_CHECK_MEMBERS([struct passwd.pw_gecos, struct passwd.pw_class,
3655struct passwd.pw_change, struct passwd.pw_expire],
3656[], [], [[
3657#include <sys/types.h>
3658#include <pwd.h>
3659]])
3660
Greg Hartmanbd77cf72015-02-25 13:21:06 -08003661AC_CHECK_MEMBER([struct __res_state.retrans], [], [AC_DEFINE([__res_state], [state],
3662 [Define if we don't have struct __res_state in resolv.h])],
Adam Langleyd0592972015-03-30 14:49:51 -07003663[[
Greg Hartmanbd77cf72015-02-25 13:21:06 -08003664#include <stdio.h>
3665#if HAVE_SYS_TYPES_H
3666# include <sys/types.h>
3667#endif
3668#include <netinet/in.h>
3669#include <arpa/nameser.h>
3670#include <resolv.h>
Adam Langleyd0592972015-03-30 14:49:51 -07003671]])
Greg Hartmanbd77cf72015-02-25 13:21:06 -08003672
3673AC_CACHE_CHECK([for ss_family field in struct sockaddr_storage],
3674 ac_cv_have_ss_family_in_struct_ss, [
3675 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
3676#include <sys/types.h>
3677#include <sys/socket.h>
3678 ]], [[ struct sockaddr_storage s; s.ss_family = 1; ]])],
3679 [ ac_cv_have_ss_family_in_struct_ss="yes" ],
3680 [ ac_cv_have_ss_family_in_struct_ss="no" ])
3681])
3682if test "x$ac_cv_have_ss_family_in_struct_ss" = "xyes" ; then
3683 AC_DEFINE([HAVE_SS_FAMILY_IN_SS], [1], [Fields in struct sockaddr_storage])
3684fi
3685
3686AC_CACHE_CHECK([for __ss_family field in struct sockaddr_storage],
3687 ac_cv_have___ss_family_in_struct_ss, [
3688 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
3689#include <sys/types.h>
3690#include <sys/socket.h>
3691 ]], [[ struct sockaddr_storage s; s.__ss_family = 1; ]])],
3692 [ ac_cv_have___ss_family_in_struct_ss="yes" ],
3693 [ ac_cv_have___ss_family_in_struct_ss="no"
3694 ])
3695])
3696if test "x$ac_cv_have___ss_family_in_struct_ss" = "xyes" ; then
3697 AC_DEFINE([HAVE___SS_FAMILY_IN_SS], [1],
3698 [Fields in struct sockaddr_storage])
3699fi
3700
Greg Hartmanbd77cf72015-02-25 13:21:06 -08003701dnl make sure we're using the real structure members and not defines
3702AC_CACHE_CHECK([for msg_accrights field in struct msghdr],
3703 ac_cv_have_accrights_in_msghdr, [
3704 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
3705#include <sys/types.h>
3706#include <sys/socket.h>
3707#include <sys/uio.h>
3708 ]], [[
3709#ifdef msg_accrights
3710#error "msg_accrights is a macro"
3711exit(1);
3712#endif
3713struct msghdr m;
3714m.msg_accrights = 0;
3715exit(0);
3716 ]])],
3717 [ ac_cv_have_accrights_in_msghdr="yes" ],
3718 [ ac_cv_have_accrights_in_msghdr="no" ]
3719 )
3720])
3721if test "x$ac_cv_have_accrights_in_msghdr" = "xyes" ; then
3722 AC_DEFINE([HAVE_ACCRIGHTS_IN_MSGHDR], [1],
3723 [Define if your system uses access rights style
3724 file descriptor passing])
3725fi
3726
3727AC_MSG_CHECKING([if struct statvfs.f_fsid is integral type])
3728AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
Adam Langleyd0592972015-03-30 14:49:51 -07003729#include <sys/param.h>
Greg Hartmanbd77cf72015-02-25 13:21:06 -08003730#include <sys/stat.h>
3731#ifdef HAVE_SYS_TIME_H
3732# include <sys/time.h>
3733#endif
3734#ifdef HAVE_SYS_MOUNT_H
3735#include <sys/mount.h>
3736#endif
3737#ifdef HAVE_SYS_STATVFS_H
3738#include <sys/statvfs.h>
3739#endif
3740 ]], [[ struct statvfs s; s.f_fsid = 0; ]])],
3741 [ AC_MSG_RESULT([yes]) ],
3742 [ AC_MSG_RESULT([no])
3743
3744 AC_MSG_CHECKING([if fsid_t has member val])
3745 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
3746#include <sys/types.h>
3747#include <sys/statvfs.h>
3748 ]], [[ fsid_t t; t.val[0] = 0; ]])],
3749 [ AC_MSG_RESULT([yes])
3750 AC_DEFINE([FSID_HAS_VAL], [1], [fsid_t has member val]) ],
3751 [ AC_MSG_RESULT([no]) ])
3752
3753 AC_MSG_CHECKING([if f_fsid has member __val])
3754 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
3755#include <sys/types.h>
3756#include <sys/statvfs.h>
3757 ]], [[ fsid_t t; t.__val[0] = 0; ]])],
3758 [ AC_MSG_RESULT([yes])
3759 AC_DEFINE([FSID_HAS___VAL], [1], [fsid_t has member __val]) ],
3760 [ AC_MSG_RESULT([no]) ])
3761])
3762
3763AC_CACHE_CHECK([for msg_control field in struct msghdr],
3764 ac_cv_have_control_in_msghdr, [
3765 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
3766#include <sys/types.h>
3767#include <sys/socket.h>
3768#include <sys/uio.h>
3769 ]], [[
3770#ifdef msg_control
3771#error "msg_control is a macro"
3772exit(1);
3773#endif
3774struct msghdr m;
3775m.msg_control = 0;
3776exit(0);
3777 ]])],
3778 [ ac_cv_have_control_in_msghdr="yes" ],
3779 [ ac_cv_have_control_in_msghdr="no" ]
3780 )
3781])
3782if test "x$ac_cv_have_control_in_msghdr" = "xyes" ; then
3783 AC_DEFINE([HAVE_CONTROL_IN_MSGHDR], [1],
3784 [Define if your system uses ancillary data style
3785 file descriptor passing])
3786fi
3787
3788AC_CACHE_CHECK([if libc defines __progname], ac_cv_libc_defines___progname, [
3789 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],
3790 [[ extern char *__progname; printf("%s", __progname); ]])],
3791 [ ac_cv_libc_defines___progname="yes" ],
3792 [ ac_cv_libc_defines___progname="no"
3793 ])
3794])
3795if test "x$ac_cv_libc_defines___progname" = "xyes" ; then
3796 AC_DEFINE([HAVE___PROGNAME], [1], [Define if libc defines __progname])
3797fi
3798
3799AC_CACHE_CHECK([whether $CC implements __FUNCTION__], ac_cv_cc_implements___FUNCTION__, [
3800 AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include <stdio.h> ]],
3801 [[ printf("%s", __FUNCTION__); ]])],
3802 [ ac_cv_cc_implements___FUNCTION__="yes" ],
3803 [ ac_cv_cc_implements___FUNCTION__="no"
3804 ])
3805])
3806if test "x$ac_cv_cc_implements___FUNCTION__" = "xyes" ; then
3807 AC_DEFINE([HAVE___FUNCTION__], [1],
3808 [Define if compiler implements __FUNCTION__])
3809fi
3810
3811AC_CACHE_CHECK([whether $CC implements __func__], ac_cv_cc_implements___func__, [
3812 AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include <stdio.h> ]],
3813 [[ printf("%s", __func__); ]])],
3814 [ ac_cv_cc_implements___func__="yes" ],
3815 [ ac_cv_cc_implements___func__="no"
3816 ])
3817])
3818if test "x$ac_cv_cc_implements___func__" = "xyes" ; then
3819 AC_DEFINE([HAVE___func__], [1], [Define if compiler implements __func__])
3820fi
3821
3822AC_CACHE_CHECK([whether va_copy exists], ac_cv_have_va_copy, [
3823 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
3824#include <stdarg.h>
3825va_list x,y;
3826 ]], [[ va_copy(x,y); ]])],
3827 [ ac_cv_have_va_copy="yes" ],
3828 [ ac_cv_have_va_copy="no"
3829 ])
3830])
3831if test "x$ac_cv_have_va_copy" = "xyes" ; then
3832 AC_DEFINE([HAVE_VA_COPY], [1], [Define if va_copy exists])
3833fi
3834
3835AC_CACHE_CHECK([whether __va_copy exists], ac_cv_have___va_copy, [
3836 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
3837#include <stdarg.h>
3838va_list x,y;
3839 ]], [[ __va_copy(x,y); ]])],
3840 [ ac_cv_have___va_copy="yes" ], [ ac_cv_have___va_copy="no"
3841 ])
3842])
3843if test "x$ac_cv_have___va_copy" = "xyes" ; then
3844 AC_DEFINE([HAVE___VA_COPY], [1], [Define if __va_copy exists])
3845fi
3846
3847AC_CACHE_CHECK([whether getopt has optreset support],
3848 ac_cv_have_getopt_optreset, [
3849 AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include <getopt.h> ]],
3850 [[ extern int optreset; optreset = 0; ]])],
3851 [ ac_cv_have_getopt_optreset="yes" ],
3852 [ ac_cv_have_getopt_optreset="no"
3853 ])
3854])
3855if test "x$ac_cv_have_getopt_optreset" = "xyes" ; then
3856 AC_DEFINE([HAVE_GETOPT_OPTRESET], [1],
3857 [Define if your getopt(3) defines and uses optreset])
3858fi
3859
3860AC_CACHE_CHECK([if libc defines sys_errlist], ac_cv_libc_defines_sys_errlist, [
3861 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],
3862[[ extern const char *const sys_errlist[]; printf("%s", sys_errlist[0]);]])],
3863 [ ac_cv_libc_defines_sys_errlist="yes" ],
3864 [ ac_cv_libc_defines_sys_errlist="no"
3865 ])
3866])
3867if test "x$ac_cv_libc_defines_sys_errlist" = "xyes" ; then
3868 AC_DEFINE([HAVE_SYS_ERRLIST], [1],
3869 [Define if your system defines sys_errlist[]])
3870fi
3871
3872
3873AC_CACHE_CHECK([if libc defines sys_nerr], ac_cv_libc_defines_sys_nerr, [
3874 AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],
3875[[ extern int sys_nerr; printf("%i", sys_nerr);]])],
3876 [ ac_cv_libc_defines_sys_nerr="yes" ],
3877 [ ac_cv_libc_defines_sys_nerr="no"
3878 ])
3879])
3880if test "x$ac_cv_libc_defines_sys_nerr" = "xyes" ; then
3881 AC_DEFINE([HAVE_SYS_NERR], [1], [Define if your system defines sys_nerr])
3882fi
3883
3884# Check libraries needed by DNS fingerprint support
3885AC_SEARCH_LIBS([getrrsetbyname], [resolv],
3886 [AC_DEFINE([HAVE_GETRRSETBYNAME], [1],
3887 [Define if getrrsetbyname() exists])],
3888 [
3889 # Needed by our getrrsetbyname()
3890 AC_SEARCH_LIBS([res_query], [resolv])
3891 AC_SEARCH_LIBS([dn_expand], [resolv])
3892 AC_MSG_CHECKING([if res_query will link])
3893 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
3894#include <sys/types.h>
3895#include <netinet/in.h>
3896#include <arpa/nameser.h>
3897#include <netdb.h>
3898#include <resolv.h>
3899 ]], [[
3900 res_query (0, 0, 0, 0, 0);
3901 ]])],
3902 AC_MSG_RESULT([yes]),
3903 [AC_MSG_RESULT([no])
3904 saved_LIBS="$LIBS"
3905 LIBS="$LIBS -lresolv"
3906 AC_MSG_CHECKING([for res_query in -lresolv])
3907 AC_LINK_IFELSE([AC_LANG_PROGRAM([[
3908#include <sys/types.h>
3909#include <netinet/in.h>
3910#include <arpa/nameser.h>
3911#include <netdb.h>
3912#include <resolv.h>
3913 ]], [[
3914 res_query (0, 0, 0, 0, 0);
3915 ]])],
3916 [AC_MSG_RESULT([yes])],
3917 [LIBS="$saved_LIBS"
3918 AC_MSG_RESULT([no])])
3919 ])
3920 AC_CHECK_FUNCS([_getshort _getlong])
3921 AC_CHECK_DECLS([_getshort, _getlong], , ,
3922 [#include <sys/types.h>
3923 #include <arpa/nameser.h>])
3924 AC_CHECK_MEMBER([HEADER.ad],
3925 [AC_DEFINE([HAVE_HEADER_AD], [1],
3926 [Define if HEADER.ad exists in arpa/nameser.h])], ,
3927 [#include <arpa/nameser.h>])
3928 ])
3929
3930AC_MSG_CHECKING([if struct __res_state _res is an extern])
3931AC_LINK_IFELSE([AC_LANG_PROGRAM([[
3932#include <stdio.h>
3933#if HAVE_SYS_TYPES_H
3934# include <sys/types.h>
3935#endif
3936#include <netinet/in.h>
3937#include <arpa/nameser.h>
3938#include <resolv.h>
3939extern struct __res_state _res;
3940 ]], [[ ]])],
3941 [AC_MSG_RESULT([yes])
3942 AC_DEFINE([HAVE__RES_EXTERN], [1],
3943 [Define if you have struct __res_state _res as an extern])
3944 ],
3945 [ AC_MSG_RESULT([no]) ]
3946)
3947
3948# Check whether user wants SELinux support
3949SELINUX_MSG="no"
3950LIBSELINUX=""
3951AC_ARG_WITH([selinux],
3952 [ --with-selinux Enable SELinux support],
3953 [ if test "x$withval" != "xno" ; then
3954 save_LIBS="$LIBS"
3955 AC_DEFINE([WITH_SELINUX], [1],
3956 [Define if you want SELinux support.])
3957 SELINUX_MSG="yes"
3958 AC_CHECK_HEADER([selinux/selinux.h], ,
3959 AC_MSG_ERROR([SELinux support requires selinux.h header]))
3960 AC_CHECK_LIB([selinux], [setexeccon],
3961 [ LIBSELINUX="-lselinux"
3962 LIBS="$LIBS -lselinux"
3963 ],
3964 AC_MSG_ERROR([SELinux support requires libselinux library]))
3965 SSHLIBS="$SSHLIBS $LIBSELINUX"
3966 SSHDLIBS="$SSHDLIBS $LIBSELINUX"
3967 AC_CHECK_FUNCS([getseuserbyname get_default_context_with_level])
3968 LIBS="$save_LIBS"
3969 fi ]
3970)
3971AC_SUBST([SSHLIBS])
3972AC_SUBST([SSHDLIBS])
3973
3974# Check whether user wants Kerberos 5 support
3975KRB5_MSG="no"
3976AC_ARG_WITH([kerberos5],
3977 [ --with-kerberos5=PATH Enable Kerberos 5 support],
3978 [ if test "x$withval" != "xno" ; then
3979 if test "x$withval" = "xyes" ; then
3980 KRB5ROOT="/usr/local"
3981 else
3982 KRB5ROOT=${withval}
3983 fi
3984
3985 AC_DEFINE([KRB5], [1], [Define if you want Kerberos 5 support])
3986 KRB5_MSG="yes"
3987
3988 AC_PATH_PROG([KRB5CONF], [krb5-config],
3989 [$KRB5ROOT/bin/krb5-config],
3990 [$KRB5ROOT/bin:$PATH])
3991 if test -x $KRB5CONF ; then
Adam Langleyd0592972015-03-30 14:49:51 -07003992 K5CFLAGS="`$KRB5CONF --cflags`"
3993 K5LIBS="`$KRB5CONF --libs`"
3994 CPPFLAGS="$CPPFLAGS $K5CFLAGS"
Greg Hartmanbd77cf72015-02-25 13:21:06 -08003995
3996 AC_MSG_CHECKING([for gssapi support])
3997 if $KRB5CONF | grep gssapi >/dev/null ; then
3998 AC_MSG_RESULT([yes])
3999 AC_DEFINE([GSSAPI], [1],
4000 [Define this if you want GSSAPI
4001 support in the version 2 protocol])
Adam Langleyd0592972015-03-30 14:49:51 -07004002 GSSCFLAGS="`$KRB5CONF --cflags gssapi`"
4003 GSSLIBS="`$KRB5CONF --libs gssapi`"
4004 CPPFLAGS="$CPPFLAGS $GSSCFLAGS"
Greg Hartmanbd77cf72015-02-25 13:21:06 -08004005 else
4006 AC_MSG_RESULT([no])
Greg Hartmanbd77cf72015-02-25 13:21:06 -08004007 fi
Greg Hartmanbd77cf72015-02-25 13:21:06 -08004008 AC_MSG_CHECKING([whether we are using Heimdal])
4009 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <krb5.h>
4010 ]], [[ char *tmp = heimdal_version; ]])],
4011 [ AC_MSG_RESULT([yes])
4012 AC_DEFINE([HEIMDAL], [1],
4013 [Define this if you are using the Heimdal
4014 version of Kerberos V5]) ],
4015 [AC_MSG_RESULT([no])
4016 ])
4017 else
4018 CPPFLAGS="$CPPFLAGS -I${KRB5ROOT}/include"
4019 LDFLAGS="$LDFLAGS -L${KRB5ROOT}/lib"
4020 AC_MSG_CHECKING([whether we are using Heimdal])
4021 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <krb5.h>
4022 ]], [[ char *tmp = heimdal_version; ]])],
4023 [ AC_MSG_RESULT([yes])
4024 AC_DEFINE([HEIMDAL])
4025 K5LIBS="-lkrb5"
4026 K5LIBS="$K5LIBS -lcom_err -lasn1"
4027 AC_CHECK_LIB([roken], [net_write],
4028 [K5LIBS="$K5LIBS -lroken"])
4029 AC_CHECK_LIB([des], [des_cbc_encrypt],
4030 [K5LIBS="$K5LIBS -ldes"])
4031 ], [ AC_MSG_RESULT([no])
4032 K5LIBS="-lkrb5 -lk5crypto -lcom_err"
4033
4034 ])
4035 AC_SEARCH_LIBS([dn_expand], [resolv])
4036
4037 AC_CHECK_LIB([gssapi_krb5], [gss_init_sec_context],
4038 [ AC_DEFINE([GSSAPI])
Adam Langleyd0592972015-03-30 14:49:51 -07004039 GSSLIBS="-lgssapi_krb5" ],
Greg Hartmanbd77cf72015-02-25 13:21:06 -08004040 [ AC_CHECK_LIB([gssapi], [gss_init_sec_context],
4041 [ AC_DEFINE([GSSAPI])
Adam Langleyd0592972015-03-30 14:49:51 -07004042 GSSLIBS="-lgssapi" ],
4043 [ AC_CHECK_LIB([gss], [gss_init_sec_context],
4044 [ AC_DEFINE([GSSAPI])
4045 GSSLIBS="-lgss" ],
4046 AC_MSG_WARN([Cannot find any suitable gss-api library - build may fail]))
4047 ])
4048 ])
Greg Hartmanbd77cf72015-02-25 13:21:06 -08004049
4050 AC_CHECK_HEADER([gssapi.h], ,
4051 [ unset ac_cv_header_gssapi_h
4052 CPPFLAGS="$CPPFLAGS -I${KRB5ROOT}/include/gssapi"
4053 AC_CHECK_HEADERS([gssapi.h], ,
4054 AC_MSG_WARN([Cannot find any suitable gss-api header - build may fail])
4055 )
4056 ]
4057 )
4058
4059 oldCPP="$CPPFLAGS"
4060 CPPFLAGS="$CPPFLAGS -I${KRB5ROOT}/include/gssapi"
4061 AC_CHECK_HEADER([gssapi_krb5.h], ,
4062 [ CPPFLAGS="$oldCPP" ])
4063
4064 fi
4065 if test ! -z "$need_dash_r" ; then
4066 LDFLAGS="$LDFLAGS -R${KRB5ROOT}/lib"
4067 fi
4068 if test ! -z "$blibpath" ; then
4069 blibpath="$blibpath:${KRB5ROOT}/lib"
4070 fi
4071
4072 AC_CHECK_HEADERS([gssapi.h gssapi/gssapi.h])
4073 AC_CHECK_HEADERS([gssapi_krb5.h gssapi/gssapi_krb5.h])
4074 AC_CHECK_HEADERS([gssapi_generic.h gssapi/gssapi_generic.h])
4075
Greg Hartmanbd77cf72015-02-25 13:21:06 -08004076 AC_SEARCH_LIBS([k_hasafs], [kafs], [AC_DEFINE([USE_AFS], [1],
4077 [Define this if you want to use libkafs' AFS support])])
Adam Langleyd0592972015-03-30 14:49:51 -07004078
4079 AC_CHECK_DECLS([GSS_C_NT_HOSTBASED_SERVICE], [], [], [[
4080#ifdef HAVE_GSSAPI_H
4081# include <gssapi.h>
4082#elif defined(HAVE_GSSAPI_GSSAPI_H)
4083# include <gssapi/gssapi.h>
4084#endif
4085
4086#ifdef HAVE_GSSAPI_GENERIC_H
4087# include <gssapi_generic.h>
4088#elif defined(HAVE_GSSAPI_GSSAPI_GENERIC_H)
4089# include <gssapi/gssapi_generic.h>
4090#endif
4091 ]])
4092 saved_LIBS="$LIBS"
4093 LIBS="$LIBS $K5LIBS"
4094 AC_CHECK_FUNCS([krb5_cc_new_unique krb5_get_error_message krb5_free_error_message])
4095 LIBS="$saved_LIBS"
4096
Greg Hartmanbd77cf72015-02-25 13:21:06 -08004097 fi
4098 ]
4099)
Adam Langleyd0592972015-03-30 14:49:51 -07004100AC_SUBST([GSSLIBS])
4101AC_SUBST([K5LIBS])
Greg Hartmanbd77cf72015-02-25 13:21:06 -08004102
4103# Looking for programs, paths and files
4104
4105PRIVSEP_PATH=/var/empty
4106AC_ARG_WITH([privsep-path],
4107 [ --with-privsep-path=xxx Path for privilege separation chroot (default=/var/empty)],
4108 [
4109 if test -n "$withval" && test "x$withval" != "xno" && \
4110 test "x${withval}" != "xyes"; then
4111 PRIVSEP_PATH=$withval
4112 fi
4113 ]
4114)
4115AC_SUBST([PRIVSEP_PATH])
4116
4117AC_ARG_WITH([xauth],
4118 [ --with-xauth=PATH Specify path to xauth program ],
4119 [
4120 if test -n "$withval" && test "x$withval" != "xno" && \
4121 test "x${withval}" != "xyes"; then
4122 xauth_path=$withval
4123 fi
4124 ],
4125 [
4126 TestPath="$PATH"
4127 TestPath="${TestPath}${PATH_SEPARATOR}/usr/X/bin"
4128 TestPath="${TestPath}${PATH_SEPARATOR}/usr/bin/X11"
4129 TestPath="${TestPath}${PATH_SEPARATOR}/usr/X11R6/bin"
4130 TestPath="${TestPath}${PATH_SEPARATOR}/usr/openwin/bin"
4131 AC_PATH_PROG([xauth_path], [xauth], , [$TestPath])
4132 if (test ! -z "$xauth_path" && test -x "/usr/openwin/bin/xauth") ; then
4133 xauth_path="/usr/openwin/bin/xauth"
4134 fi
4135 ]
4136)
4137
4138STRIP_OPT=-s
4139AC_ARG_ENABLE([strip],
4140 [ --disable-strip Disable calling strip(1) on install],
4141 [
4142 if test "x$enableval" = "xno" ; then
4143 STRIP_OPT=
4144 fi
4145 ]
4146)
4147AC_SUBST([STRIP_OPT])
4148
4149if test -z "$xauth_path" ; then
4150 XAUTH_PATH="undefined"
4151 AC_SUBST([XAUTH_PATH])
4152else
4153 AC_DEFINE_UNQUOTED([XAUTH_PATH], ["$xauth_path"],
4154 [Define if xauth is found in your path])
4155 XAUTH_PATH=$xauth_path
4156 AC_SUBST([XAUTH_PATH])
4157fi
4158
4159dnl # --with-maildir=/path/to/mail gets top priority.
4160dnl # if maildir is set in the platform case statement above we use that.
4161dnl # Otherwise we run a program to get the dir from system headers.
4162dnl # We first look for _PATH_MAILDIR then MAILDIR then _PATH_MAIL
4163dnl # If we find _PATH_MAILDIR we do nothing because that is what
4164dnl # session.c expects anyway. Otherwise we set to the value found
4165dnl # stripping any trailing slash. If for some strage reason our program
4166dnl # does not find what it needs, we default to /var/spool/mail.
4167# Check for mail directory
4168AC_ARG_WITH([maildir],
4169 [ --with-maildir=/path/to/mail Specify your system mail directory],
4170 [
4171 if test "X$withval" != X && test "x$withval" != xno && \
4172 test "x${withval}" != xyes; then
4173 AC_DEFINE_UNQUOTED([MAIL_DIRECTORY], ["$withval"],
4174 [Set this to your mail directory if you do not have _PATH_MAILDIR])
4175 fi
4176 ],[
4177 if test "X$maildir" != "X"; then
4178 AC_DEFINE_UNQUOTED([MAIL_DIRECTORY], ["$maildir"])
4179 else
4180 AC_MSG_CHECKING([Discovering system mail directory])
4181 AC_RUN_IFELSE(
4182 [AC_LANG_PROGRAM([[
4183#include <stdio.h>
4184#include <string.h>
4185#ifdef HAVE_PATHS_H
4186#include <paths.h>
4187#endif
4188#ifdef HAVE_MAILLOCK_H
4189#include <maillock.h>
4190#endif
4191#define DATA "conftest.maildir"
4192 ]], [[
4193 FILE *fd;
4194 int rc;
4195
4196 fd = fopen(DATA,"w");
4197 if(fd == NULL)
4198 exit(1);
4199
4200#if defined (_PATH_MAILDIR)
4201 if ((rc = fprintf(fd ,"_PATH_MAILDIR:%s\n", _PATH_MAILDIR)) <0)
4202 exit(1);
4203#elif defined (MAILDIR)
4204 if ((rc = fprintf(fd ,"MAILDIR:%s\n", MAILDIR)) <0)
4205 exit(1);
4206#elif defined (_PATH_MAIL)
4207 if ((rc = fprintf(fd ,"_PATH_MAIL:%s\n", _PATH_MAIL)) <0)
4208 exit(1);
4209#else
4210 exit (2);
4211#endif
4212
4213 exit(0);
4214 ]])],
4215 [
4216 maildir_what=`awk -F: '{print $1}' conftest.maildir`
4217 maildir=`awk -F: '{print $2}' conftest.maildir \
4218 | sed 's|/$||'`
4219 AC_MSG_RESULT([Using: $maildir from $maildir_what])
4220 if test "x$maildir_what" != "x_PATH_MAILDIR"; then
4221 AC_DEFINE_UNQUOTED([MAIL_DIRECTORY], ["$maildir"])
4222 fi
4223 ],
4224 [
4225 if test "X$ac_status" = "X2";then
4226# our test program didn't find it. Default to /var/spool/mail
4227 AC_MSG_RESULT([Using: default value of /var/spool/mail])
4228 AC_DEFINE_UNQUOTED([MAIL_DIRECTORY], ["/var/spool/mail"])
4229 else
4230 AC_MSG_RESULT([*** not found ***])
4231 fi
4232 ],
4233 [
4234 AC_MSG_WARN([cross compiling: use --with-maildir=/path/to/mail])
4235 ]
4236 )
4237 fi
4238 ]
4239) # maildir
4240
4241if test ! -z "$cross_compiling" && test "x$cross_compiling" = "xyes"; then
4242 AC_MSG_WARN([cross compiling: Disabling /dev/ptmx test])
4243 disable_ptmx_check=yes
4244fi
4245if test -z "$no_dev_ptmx" ; then
4246 if test "x$disable_ptmx_check" != "xyes" ; then
4247 AC_CHECK_FILE(["/dev/ptmx"],
4248 [
4249 AC_DEFINE_UNQUOTED([HAVE_DEV_PTMX], [1],
4250 [Define if you have /dev/ptmx])
4251 have_dev_ptmx=1
4252 ]
4253 )
4254 fi
4255fi
4256
4257if test ! -z "$cross_compiling" && test "x$cross_compiling" != "xyes"; then
4258 AC_CHECK_FILE(["/dev/ptc"],
4259 [
4260 AC_DEFINE_UNQUOTED([HAVE_DEV_PTS_AND_PTC], [1],
4261 [Define if you have /dev/ptc])
4262 have_dev_ptc=1
4263 ]
4264 )
4265else
4266 AC_MSG_WARN([cross compiling: Disabling /dev/ptc test])
4267fi
4268
4269# Options from here on. Some of these are preset by platform above
4270AC_ARG_WITH([mantype],
4271 [ --with-mantype=man|cat|doc Set man page type],
4272 [
4273 case "$withval" in
4274 man|cat|doc)
4275 MANTYPE=$withval
4276 ;;
4277 *)
4278 AC_MSG_ERROR([invalid man type: $withval])
4279 ;;
4280 esac
4281 ]
4282)
4283if test -z "$MANTYPE"; then
4284 TestPath="/usr/bin${PATH_SEPARATOR}/usr/ucb"
4285 AC_PATH_PROGS([NROFF], [nroff awf], [/bin/false], [$TestPath])
4286 if ${NROFF} -mdoc ${srcdir}/ssh.1 >/dev/null 2>&1; then
4287 MANTYPE=doc
4288 elif ${NROFF} -man ${srcdir}/ssh.1 >/dev/null 2>&1; then
4289 MANTYPE=man
4290 else
4291 MANTYPE=cat
4292 fi
4293fi
4294AC_SUBST([MANTYPE])
4295if test "$MANTYPE" = "doc"; then
4296 mansubdir=man;
4297else
4298 mansubdir=$MANTYPE;
4299fi
4300AC_SUBST([mansubdir])
4301
4302# Check whether to enable MD5 passwords
4303MD5_MSG="no"
4304AC_ARG_WITH([md5-passwords],
4305 [ --with-md5-passwords Enable use of MD5 passwords],
4306 [
4307 if test "x$withval" != "xno" ; then
4308 AC_DEFINE([HAVE_MD5_PASSWORDS], [1],
4309 [Define if you want to allow MD5 passwords])
4310 MD5_MSG="yes"
4311 fi
4312 ]
4313)
4314
4315# Whether to disable shadow password support
4316AC_ARG_WITH([shadow],
4317 [ --without-shadow Disable shadow password support],
4318 [
4319 if test "x$withval" = "xno" ; then
4320 AC_DEFINE([DISABLE_SHADOW])
4321 disable_shadow=yes
4322 fi
4323 ]
4324)
4325
4326if test -z "$disable_shadow" ; then
4327 AC_MSG_CHECKING([if the systems has expire shadow information])
4328 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
4329#include <sys/types.h>
4330#include <shadow.h>
4331struct spwd sp;
4332 ]], [[ sp.sp_expire = sp.sp_lstchg = sp.sp_inact = 0; ]])],
4333 [ sp_expire_available=yes ], [
4334 ])
4335
4336 if test "x$sp_expire_available" = "xyes" ; then
4337 AC_MSG_RESULT([yes])
4338 AC_DEFINE([HAS_SHADOW_EXPIRE], [1],
4339 [Define if you want to use shadow password expire field])
4340 else
4341 AC_MSG_RESULT([no])
4342 fi
4343fi
4344
4345# Use ip address instead of hostname in $DISPLAY
4346if test ! -z "$IPADDR_IN_DISPLAY" ; then
4347 DISPLAY_HACK_MSG="yes"
4348 AC_DEFINE([IPADDR_IN_DISPLAY], [1],
4349 [Define if you need to use IP address
4350 instead of hostname in $DISPLAY])
4351else
4352 DISPLAY_HACK_MSG="no"
4353 AC_ARG_WITH([ipaddr-display],
4354 [ --with-ipaddr-display Use ip address instead of hostname in \$DISPLAY],
4355 [
4356 if test "x$withval" != "xno" ; then
4357 AC_DEFINE([IPADDR_IN_DISPLAY])
4358 DISPLAY_HACK_MSG="yes"
4359 fi
4360 ]
4361 )
4362fi
4363
4364# check for /etc/default/login and use it if present.
4365AC_ARG_ENABLE([etc-default-login],
4366 [ --disable-etc-default-login Disable using PATH from /etc/default/login [no]],
4367 [ if test "x$enableval" = "xno"; then
4368 AC_MSG_NOTICE([/etc/default/login handling disabled])
4369 etc_default_login=no
4370 else
4371 etc_default_login=yes
4372 fi ],
4373 [ if test ! -z "$cross_compiling" && test "x$cross_compiling" = "xyes";
4374 then
4375 AC_MSG_WARN([cross compiling: not checking /etc/default/login])
4376 etc_default_login=no
4377 else
4378 etc_default_login=yes
4379 fi ]
4380)
4381
4382if test "x$etc_default_login" != "xno"; then
4383 AC_CHECK_FILE(["/etc/default/login"],
4384 [ external_path_file=/etc/default/login ])
4385 if test "x$external_path_file" = "x/etc/default/login"; then
4386 AC_DEFINE([HAVE_ETC_DEFAULT_LOGIN], [1],
4387 [Define if your system has /etc/default/login])
4388 fi
4389fi
4390
4391dnl BSD systems use /etc/login.conf so --with-default-path= has no effect
4392if test $ac_cv_func_login_getcapbool = "yes" && \
4393 test $ac_cv_header_login_cap_h = "yes" ; then
4394 external_path_file=/etc/login.conf
4395fi
4396
4397# Whether to mess with the default path
4398SERVER_PATH_MSG="(default)"
4399AC_ARG_WITH([default-path],
4400 [ --with-default-path= Specify default \$PATH environment for server],
4401 [
4402 if test "x$external_path_file" = "x/etc/login.conf" ; then
4403 AC_MSG_WARN([
4404--with-default-path=PATH has no effect on this system.
4405Edit /etc/login.conf instead.])
4406 elif test "x$withval" != "xno" ; then
4407 if test ! -z "$external_path_file" ; then
4408 AC_MSG_WARN([
4409--with-default-path=PATH will only be used if PATH is not defined in
4410$external_path_file .])
4411 fi
4412 user_path="$withval"
4413 SERVER_PATH_MSG="$withval"
4414 fi
4415 ],
4416 [ if test "x$external_path_file" = "x/etc/login.conf" ; then
4417 AC_MSG_WARN([Make sure the path to scp is in /etc/login.conf])
4418 else
4419 if test ! -z "$external_path_file" ; then
4420 AC_MSG_WARN([
4421If PATH is defined in $external_path_file, ensure the path to scp is included,
4422otherwise scp will not work.])
4423 fi
4424 AC_RUN_IFELSE(
4425 [AC_LANG_PROGRAM([[
4426/* find out what STDPATH is */
4427#include <stdio.h>
4428#ifdef HAVE_PATHS_H
4429# include <paths.h>
4430#endif
4431#ifndef _PATH_STDPATH
4432# ifdef _PATH_USERPATH /* Irix */
4433# define _PATH_STDPATH _PATH_USERPATH
4434# else
4435# define _PATH_STDPATH "/usr/bin:/bin:/usr/sbin:/sbin"
4436# endif
4437#endif
4438#include <sys/types.h>
4439#include <sys/stat.h>
4440#include <fcntl.h>
4441#define DATA "conftest.stdpath"
4442 ]], [[
4443 FILE *fd;
4444 int rc;
4445
4446 fd = fopen(DATA,"w");
4447 if(fd == NULL)
4448 exit(1);
4449
4450 if ((rc = fprintf(fd,"%s", _PATH_STDPATH)) < 0)
4451 exit(1);
4452
4453 exit(0);
4454 ]])],
4455 [ user_path=`cat conftest.stdpath` ],
4456 [ user_path="/usr/bin:/bin:/usr/sbin:/sbin" ],
4457 [ user_path="/usr/bin:/bin:/usr/sbin:/sbin" ]
4458 )
4459# make sure $bindir is in USER_PATH so scp will work
Adam Langleyd0592972015-03-30 14:49:51 -07004460 t_bindir="${bindir}"
4461 while echo "${t_bindir}" | egrep '\$\{|NONE/' >/dev/null 2>&1; do
4462 t_bindir=`eval echo ${t_bindir}`
4463 case $t_bindir in
4464 NONE/*) t_bindir=`echo $t_bindir | sed "s~NONE~$prefix~"` ;;
4465 esac
4466 case $t_bindir in
4467 NONE/*) t_bindir=`echo $t_bindir | sed "s~NONE~$ac_default_prefix~"` ;;
4468 esac
4469 done
Greg Hartmanbd77cf72015-02-25 13:21:06 -08004470 echo $user_path | grep ":$t_bindir" > /dev/null 2>&1
4471 if test $? -ne 0 ; then
4472 echo $user_path | grep "^$t_bindir" > /dev/null 2>&1
4473 if test $? -ne 0 ; then
4474 user_path=$user_path:$t_bindir
4475 AC_MSG_RESULT([Adding $t_bindir to USER_PATH so scp will work])
4476 fi
4477 fi
4478 fi ]
4479)
4480if test "x$external_path_file" != "x/etc/login.conf" ; then
4481 AC_DEFINE_UNQUOTED([USER_PATH], ["$user_path"], [Specify default $PATH])
4482 AC_SUBST([user_path])
4483fi
4484
4485# Set superuser path separately to user path
4486AC_ARG_WITH([superuser-path],
4487 [ --with-superuser-path= Specify different path for super-user],
4488 [
4489 if test -n "$withval" && test "x$withval" != "xno" && \
4490 test "x${withval}" != "xyes"; then
4491 AC_DEFINE_UNQUOTED([SUPERUSER_PATH], ["$withval"],
4492 [Define if you want a different $PATH
4493 for the superuser])
4494 superuser_path=$withval
4495 fi
4496 ]
4497)
4498
4499
4500AC_MSG_CHECKING([if we need to convert IPv4 in IPv6-mapped addresses])
4501IPV4_IN6_HACK_MSG="no"
4502AC_ARG_WITH(4in6,
4503 [ --with-4in6 Check for and convert IPv4 in IPv6 mapped addresses],
4504 [
4505 if test "x$withval" != "xno" ; then
4506 AC_MSG_RESULT([yes])
4507 AC_DEFINE([IPV4_IN_IPV6], [1],
4508 [Detect IPv4 in IPv6 mapped addresses
4509 and treat as IPv4])
4510 IPV4_IN6_HACK_MSG="yes"
4511 else
4512 AC_MSG_RESULT([no])
4513 fi
4514 ], [
4515 if test "x$inet6_default_4in6" = "xyes"; then
4516 AC_MSG_RESULT([yes (default)])
4517 AC_DEFINE([IPV4_IN_IPV6])
4518 IPV4_IN6_HACK_MSG="yes"
4519 else
4520 AC_MSG_RESULT([no (default)])
4521 fi
4522 ]
4523)
4524
4525# Whether to enable BSD auth support
4526BSD_AUTH_MSG=no
4527AC_ARG_WITH([bsd-auth],
4528 [ --with-bsd-auth Enable BSD auth support],
4529 [
4530 if test "x$withval" != "xno" ; then
4531 AC_DEFINE([BSD_AUTH], [1],
4532 [Define if you have BSD auth support])
4533 BSD_AUTH_MSG=yes
4534 fi
4535 ]
4536)
4537
4538# Where to place sshd.pid
4539piddir=/var/run
4540# make sure the directory exists
4541if test ! -d $piddir ; then
4542 piddir=`eval echo ${sysconfdir}`
4543 case $piddir in
4544 NONE/*) piddir=`echo $piddir | sed "s~NONE~$ac_default_prefix~"` ;;
4545 esac
4546fi
4547
4548AC_ARG_WITH([pid-dir],
4549 [ --with-pid-dir=PATH Specify location of ssh.pid file],
4550 [
4551 if test -n "$withval" && test "x$withval" != "xno" && \
4552 test "x${withval}" != "xyes"; then
4553 piddir=$withval
4554 if test ! -d $piddir ; then
4555 AC_MSG_WARN([** no $piddir directory on this system **])
4556 fi
4557 fi
4558 ]
4559)
4560
4561AC_DEFINE_UNQUOTED([_PATH_SSH_PIDDIR], ["$piddir"],
4562 [Specify location of ssh.pid])
4563AC_SUBST([piddir])
4564
4565dnl allow user to disable some login recording features
4566AC_ARG_ENABLE([lastlog],
4567 [ --disable-lastlog disable use of lastlog even if detected [no]],
4568 [
4569 if test "x$enableval" = "xno" ; then
4570 AC_DEFINE([DISABLE_LASTLOG])
4571 fi
4572 ]
4573)
4574AC_ARG_ENABLE([utmp],
4575 [ --disable-utmp disable use of utmp even if detected [no]],
4576 [
4577 if test "x$enableval" = "xno" ; then
4578 AC_DEFINE([DISABLE_UTMP])
4579 fi
4580 ]
4581)
4582AC_ARG_ENABLE([utmpx],
4583 [ --disable-utmpx disable use of utmpx even if detected [no]],
4584 [
4585 if test "x$enableval" = "xno" ; then
4586 AC_DEFINE([DISABLE_UTMPX], [1],
4587 [Define if you don't want to use utmpx])
4588 fi
4589 ]
4590)
4591AC_ARG_ENABLE([wtmp],
4592 [ --disable-wtmp disable use of wtmp even if detected [no]],
4593 [
4594 if test "x$enableval" = "xno" ; then
4595 AC_DEFINE([DISABLE_WTMP])
4596 fi
4597 ]
4598)
4599AC_ARG_ENABLE([wtmpx],
4600 [ --disable-wtmpx disable use of wtmpx even if detected [no]],
4601 [
4602 if test "x$enableval" = "xno" ; then
4603 AC_DEFINE([DISABLE_WTMPX], [1],
4604 [Define if you don't want to use wtmpx])
4605 fi
4606 ]
4607)
4608AC_ARG_ENABLE([libutil],
4609 [ --disable-libutil disable use of libutil (login() etc.) [no]],
4610 [
4611 if test "x$enableval" = "xno" ; then
4612 AC_DEFINE([DISABLE_LOGIN])
4613 fi
4614 ]
4615)
4616AC_ARG_ENABLE([pututline],
4617 [ --disable-pututline disable use of pututline() etc. ([uw]tmp) [no]],
4618 [
4619 if test "x$enableval" = "xno" ; then
4620 AC_DEFINE([DISABLE_PUTUTLINE], [1],
4621 [Define if you don't want to use pututline()
4622 etc. to write [uw]tmp])
4623 fi
4624 ]
4625)
4626AC_ARG_ENABLE([pututxline],
4627 [ --disable-pututxline disable use of pututxline() etc. ([uw]tmpx) [no]],
4628 [
4629 if test "x$enableval" = "xno" ; then
4630 AC_DEFINE([DISABLE_PUTUTXLINE], [1],
4631 [Define if you don't want to use pututxline()
4632 etc. to write [uw]tmpx])
4633 fi
4634 ]
4635)
4636AC_ARG_WITH([lastlog],
4637 [ --with-lastlog=FILE|DIR specify lastlog location [common locations]],
4638 [
4639 if test "x$withval" = "xno" ; then
4640 AC_DEFINE([DISABLE_LASTLOG])
4641 elif test -n "$withval" && test "x${withval}" != "xyes"; then
4642 conf_lastlog_location=$withval
4643 fi
4644 ]
4645)
4646
4647dnl lastlog, [uw]tmpx? detection
4648dnl NOTE: set the paths in the platform section to avoid the
4649dnl need for command-line parameters
4650dnl lastlog and [uw]tmp are subject to a file search if all else fails
4651
4652dnl lastlog detection
4653dnl NOTE: the code itself will detect if lastlog is a directory
4654AC_MSG_CHECKING([if your system defines LASTLOG_FILE])
4655AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
4656#include <sys/types.h>
4657#include <utmp.h>
4658#ifdef HAVE_LASTLOG_H
4659# include <lastlog.h>
4660#endif
4661#ifdef HAVE_PATHS_H
4662# include <paths.h>
4663#endif
4664#ifdef HAVE_LOGIN_H
4665# include <login.h>
4666#endif
4667 ]], [[ char *lastlog = LASTLOG_FILE; ]])],
4668 [ AC_MSG_RESULT([yes]) ],
4669 [
4670 AC_MSG_RESULT([no])
4671 AC_MSG_CHECKING([if your system defines _PATH_LASTLOG])
4672 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
4673#include <sys/types.h>
4674#include <utmp.h>
4675#ifdef HAVE_LASTLOG_H
4676# include <lastlog.h>
4677#endif
4678#ifdef HAVE_PATHS_H
4679# include <paths.h>
4680#endif
4681 ]], [[ char *lastlog = _PATH_LASTLOG; ]])],
4682 [ AC_MSG_RESULT([yes]) ],
4683 [
4684 AC_MSG_RESULT([no])
4685 system_lastlog_path=no
4686 ])
4687])
4688
4689if test -z "$conf_lastlog_location"; then
4690 if test x"$system_lastlog_path" = x"no" ; then
4691 for f in /var/log/lastlog /usr/adm/lastlog /var/adm/lastlog /etc/security/lastlog ; do
4692 if (test -d "$f" || test -f "$f") ; then
4693 conf_lastlog_location=$f
4694 fi
4695 done
4696 if test -z "$conf_lastlog_location"; then
4697 AC_MSG_WARN([** Cannot find lastlog **])
4698 dnl Don't define DISABLE_LASTLOG - that means we don't try wtmp/wtmpx
4699 fi
4700 fi
4701fi
4702
4703if test -n "$conf_lastlog_location"; then
4704 AC_DEFINE_UNQUOTED([CONF_LASTLOG_FILE], ["$conf_lastlog_location"],
4705 [Define if you want to specify the path to your lastlog file])
4706fi
4707
4708dnl utmp detection
4709AC_MSG_CHECKING([if your system defines UTMP_FILE])
4710AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
4711#include <sys/types.h>
4712#include <utmp.h>
4713#ifdef HAVE_PATHS_H
4714# include <paths.h>
4715#endif
4716 ]], [[ char *utmp = UTMP_FILE; ]])],
4717 [ AC_MSG_RESULT([yes]) ],
4718 [ AC_MSG_RESULT([no])
4719 system_utmp_path=no
4720])
4721if test -z "$conf_utmp_location"; then
4722 if test x"$system_utmp_path" = x"no" ; then
4723 for f in /etc/utmp /usr/adm/utmp /var/run/utmp; do
4724 if test -f $f ; then
4725 conf_utmp_location=$f
4726 fi
4727 done
4728 if test -z "$conf_utmp_location"; then
4729 AC_DEFINE([DISABLE_UTMP])
4730 fi
4731 fi
4732fi
4733if test -n "$conf_utmp_location"; then
4734 AC_DEFINE_UNQUOTED([CONF_UTMP_FILE], ["$conf_utmp_location"],
4735 [Define if you want to specify the path to your utmp file])
4736fi
4737
4738dnl wtmp detection
4739AC_MSG_CHECKING([if your system defines WTMP_FILE])
4740AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
4741#include <sys/types.h>
4742#include <utmp.h>
4743#ifdef HAVE_PATHS_H
4744# include <paths.h>
4745#endif
4746 ]], [[ char *wtmp = WTMP_FILE; ]])],
4747 [ AC_MSG_RESULT([yes]) ],
4748 [ AC_MSG_RESULT([no])
4749 system_wtmp_path=no
4750])
4751if test -z "$conf_wtmp_location"; then
4752 if test x"$system_wtmp_path" = x"no" ; then
4753 for f in /usr/adm/wtmp /var/log/wtmp; do
4754 if test -f $f ; then
4755 conf_wtmp_location=$f
4756 fi
4757 done
4758 if test -z "$conf_wtmp_location"; then
4759 AC_DEFINE([DISABLE_WTMP])
4760 fi
4761 fi
4762fi
4763if test -n "$conf_wtmp_location"; then
4764 AC_DEFINE_UNQUOTED([CONF_WTMP_FILE], ["$conf_wtmp_location"],
4765 [Define if you want to specify the path to your wtmp file])
4766fi
4767
Greg Hartmanbd77cf72015-02-25 13:21:06 -08004768dnl wtmpx detection
4769AC_MSG_CHECKING([if your system defines WTMPX_FILE])
4770AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
4771#include <sys/types.h>
4772#include <utmp.h>
4773#ifdef HAVE_UTMPX_H
4774#include <utmpx.h>
4775#endif
4776#ifdef HAVE_PATHS_H
4777# include <paths.h>
4778#endif
4779 ]], [[ char *wtmpx = WTMPX_FILE; ]])],
4780 [ AC_MSG_RESULT([yes]) ],
4781 [ AC_MSG_RESULT([no])
4782 system_wtmpx_path=no
4783])
4784if test -z "$conf_wtmpx_location"; then
4785 if test x"$system_wtmpx_path" = x"no" ; then
4786 AC_DEFINE([DISABLE_WTMPX])
4787 fi
4788else
4789 AC_DEFINE_UNQUOTED([CONF_WTMPX_FILE], ["$conf_wtmpx_location"],
4790 [Define if you want to specify the path to your wtmpx file])
4791fi
4792
4793
4794if test ! -z "$blibpath" ; then
4795 LDFLAGS="$LDFLAGS $blibflags$blibpath"
4796 AC_MSG_WARN([Please check and edit blibpath in LDFLAGS in Makefile])
4797fi
4798
Adam Langleyd0592972015-03-30 14:49:51 -07004799AC_CHECK_MEMBER([struct lastlog.ll_line], [], [
4800 if test x$SKIP_DISABLE_LASTLOG_DEFINE != "xyes" ; then
4801 AC_DEFINE([DISABLE_LASTLOG])
4802 fi
4803 ], [
4804#ifdef HAVE_SYS_TYPES_H
4805#include <sys/types.h>
4806#endif
4807#ifdef HAVE_UTMP_H
4808#include <utmp.h>
4809#endif
4810#ifdef HAVE_UTMPX_H
4811#include <utmpx.h>
4812#endif
4813#ifdef HAVE_LASTLOG_H
4814#include <lastlog.h>
4815#endif
4816 ])
4817
4818AC_CHECK_MEMBER([struct utmp.ut_line], [], [
4819 AC_DEFINE([DISABLE_UTMP])
4820 AC_DEFINE([DISABLE_WTMP])
4821 ], [
4822#ifdef HAVE_SYS_TYPES_H
4823#include <sys/types.h>
4824#endif
4825#ifdef HAVE_UTMP_H
4826#include <utmp.h>
4827#endif
4828#ifdef HAVE_UTMPX_H
4829#include <utmpx.h>
4830#endif
4831#ifdef HAVE_LASTLOG_H
4832#include <lastlog.h>
4833#endif
4834 ])
4835
Greg Hartmanbd77cf72015-02-25 13:21:06 -08004836dnl Adding -Werror to CFLAGS early prevents configure tests from running.
4837dnl Add now.
4838CFLAGS="$CFLAGS $werror_flags"
4839
4840if test "x$ac_cv_func_getaddrinfo" != "xyes" ; then
4841 TEST_SSH_IPV6=no
4842else
4843 TEST_SSH_IPV6=yes
4844fi
4845AC_CHECK_DECL([BROKEN_GETADDRINFO], [TEST_SSH_IPV6=no])
4846AC_SUBST([TEST_SSH_IPV6], [$TEST_SSH_IPV6])
Adam Langleyd0592972015-03-30 14:49:51 -07004847AC_SUBST([TEST_MALLOC_OPTIONS], [$TEST_MALLOC_OPTIONS])
4848AC_SUBST([UNSUPPORTED_ALGORITHMS], [$unsupported_algorithms])
Greg Hartmanbd77cf72015-02-25 13:21:06 -08004849
4850AC_EXEEXT
4851AC_CONFIG_FILES([Makefile buildpkg.sh opensshd.init openssh.xml \
4852 openbsd-compat/Makefile openbsd-compat/regress/Makefile \
4853 survey.sh])
4854AC_OUTPUT
4855
4856# Print summary of options
4857
4858# Someone please show me a better way :)
4859A=`eval echo ${prefix}` ; A=`eval echo ${A}`
4860B=`eval echo ${bindir}` ; B=`eval echo ${B}`
4861C=`eval echo ${sbindir}` ; C=`eval echo ${C}`
4862D=`eval echo ${sysconfdir}` ; D=`eval echo ${D}`
4863E=`eval echo ${libexecdir}/ssh-askpass` ; E=`eval echo ${E}`
4864F=`eval echo ${mandir}/${mansubdir}X` ; F=`eval echo ${F}`
4865G=`eval echo ${piddir}` ; G=`eval echo ${G}`
4866H=`eval echo ${PRIVSEP_PATH}` ; H=`eval echo ${H}`
4867I=`eval echo ${user_path}` ; I=`eval echo ${I}`
4868J=`eval echo ${superuser_path}` ; J=`eval echo ${J}`
4869
4870echo ""
4871echo "OpenSSH has been configured with the following options:"
4872echo " User binaries: $B"
4873echo " System binaries: $C"
4874echo " Configuration files: $D"
4875echo " Askpass program: $E"
4876echo " Manual pages: $F"
4877echo " PID file: $G"
4878echo " Privilege separation chroot path: $H"
4879if test "x$external_path_file" = "x/etc/login.conf" ; then
4880echo " At runtime, sshd will use the path defined in $external_path_file"
4881echo " Make sure the path to scp is present, otherwise scp will not work"
4882else
4883echo " sshd default user PATH: $I"
4884 if test ! -z "$external_path_file"; then
4885echo " (If PATH is set in $external_path_file it will be used instead. If"
4886echo " used, ensure the path to scp is present, otherwise scp will not work.)"
4887 fi
4888fi
4889if test ! -z "$superuser_path" ; then
4890echo " sshd superuser user PATH: $J"
4891fi
4892echo " Manpage format: $MANTYPE"
4893echo " PAM support: $PAM_MSG"
4894echo " OSF SIA support: $SIA_MSG"
4895echo " KerberosV support: $KRB5_MSG"
4896echo " SELinux support: $SELINUX_MSG"
4897echo " Smartcard support: $SCARD_MSG"
4898echo " S/KEY support: $SKEY_MSG"
Greg Hartmanbd77cf72015-02-25 13:21:06 -08004899echo " MD5 password support: $MD5_MSG"
4900echo " libedit support: $LIBEDIT_MSG"
4901echo " Solaris process contract support: $SPC_MSG"
4902echo " Solaris project support: $SP_MSG"
4903echo " IP address in \$DISPLAY hack: $DISPLAY_HACK_MSG"
4904echo " Translate v4 in v6 hack: $IPV4_IN6_HACK_MSG"
4905echo " BSD Auth support: $BSD_AUTH_MSG"
4906echo " Random number source: $RAND_MSG"
4907echo " Privsep sandbox style: $SANDBOX_STYLE"
4908
4909echo ""
4910
4911echo " Host: ${host}"
4912echo " Compiler: ${CC}"
4913echo " Compiler flags: ${CFLAGS}"
4914echo "Preprocessor flags: ${CPPFLAGS}"
4915echo " Linker flags: ${LDFLAGS}"
4916echo " Libraries: ${LIBS}"
4917if test ! -z "${SSHDLIBS}"; then
4918echo " +for sshd: ${SSHDLIBS}"
4919fi
4920if test ! -z "${SSHLIBS}"; then
4921echo " +for ssh: ${SSHLIBS}"
4922fi
4923
4924echo ""
4925
4926if test "x$MAKE_PACKAGE_SUPPORTED" = "xyes" ; then
4927 echo "SVR4 style packages are supported with \"make package\""
4928 echo ""
4929fi
4930
4931if test "x$PAM_MSG" = "xyes" ; then
4932 echo "PAM is enabled. You may need to install a PAM control file "
4933 echo "for sshd, otherwise password authentication may fail. "
4934 echo "Example PAM control files can be found in the contrib/ "
4935 echo "subdirectory"
4936 echo ""
4937fi
4938
4939if test ! -z "$NO_PEERCHECK" ; then
4940 echo "WARNING: the operating system that you are using does not"
4941 echo "appear to support getpeereid(), getpeerucred() or the"
4942 echo "SO_PEERCRED getsockopt() option. These facilities are used to"
4943 echo "enforce security checks to prevent unauthorised connections to"
4944 echo "ssh-agent. Their absence increases the risk that a malicious"
4945 echo "user can connect to your agent."
4946 echo ""
4947fi
4948
4949if test "$AUDIT_MODULE" = "bsm" ; then
4950 echo "WARNING: BSM audit support is currently considered EXPERIMENTAL."
4951 echo "See the Solaris section in README.platform for details."
4952fi