]> andersk Git - openssh.git/blame_incremental - configure.ac
- (dtucker) [sshd_config.5] Add PermitRootLogin without-password warning
[openssh.git] / configure.ac
... / ...
CommitLineData
1# $Id$
2#
3# Copyright (c) 1999-2004 Damien Miller
4#
5# Permission to use, copy, modify, and distribute this software for any
6# purpose with or without fee is hereby granted, provided that the above
7# copyright notice and this permission notice appear in all copies.
8#
9# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16
17AC_INIT
18AC_CONFIG_SRCDIR([ssh.c])
19
20AC_CONFIG_HEADER(config.h)
21AC_PROG_CC
22AC_CANONICAL_HOST
23AC_C_BIGENDIAN
24
25# Checks for programs.
26AC_PROG_AWK
27AC_PROG_CPP
28AC_PROG_RANLIB
29AC_PROG_INSTALL
30AC_PATH_PROG(AR, ar)
31AC_PATH_PROGS(PERL, perl5 perl)
32AC_PATH_PROG(SED, sed)
33AC_SUBST(PERL)
34AC_PATH_PROG(ENT, ent)
35AC_SUBST(ENT)
36AC_PATH_PROG(TEST_MINUS_S_SH, bash)
37AC_PATH_PROG(TEST_MINUS_S_SH, ksh)
38AC_PATH_PROG(TEST_MINUS_S_SH, sh)
39AC_PATH_PROG(SH, sh)
40
41# System features
42AC_SYS_LARGEFILE
43
44if test -z "$AR" ; then
45 AC_MSG_ERROR([*** 'ar' missing, please install or fix your \$PATH ***])
46fi
47
48# Use LOGIN_PROGRAM from environment if possible
49if test ! -z "$LOGIN_PROGRAM" ; then
50 AC_DEFINE_UNQUOTED(LOGIN_PROGRAM_FALLBACK, "$LOGIN_PROGRAM")
51else
52 # Search for login
53 AC_PATH_PROG(LOGIN_PROGRAM_FALLBACK, login)
54 if test ! -z "$LOGIN_PROGRAM_FALLBACK" ; then
55 AC_DEFINE_UNQUOTED(LOGIN_PROGRAM_FALLBACK, "$LOGIN_PROGRAM_FALLBACK")
56 fi
57fi
58
59AC_PATH_PROG(PATH_PASSWD_PROG, passwd)
60if test ! -z "$PATH_PASSWD_PROG" ; then
61 AC_DEFINE_UNQUOTED(_PATH_PASSWD_PROG, "$PATH_PASSWD_PROG")
62fi
63
64if test -z "$LD" ; then
65 LD=$CC
66fi
67AC_SUBST(LD)
68
69AC_C_INLINE
70if test "$GCC" = "yes" || test "$GCC" = "egcs"; then
71 CFLAGS="$CFLAGS -Wall -Wpointer-arith -Wno-uninitialized"
72fi
73
74AC_ARG_WITH(rpath,
75 [ --without-rpath Disable auto-added -R linker paths],
76 [
77 if test "x$withval" = "xno" ; then
78 need_dash_r=""
79 fi
80 if test "x$withval" = "xyes" ; then
81 need_dash_r=1
82 fi
83 ]
84)
85
86# Check for some target-specific stuff
87case "$host" in
88*-*-aix*)
89 AC_MSG_CHECKING([how to specify blibpath for linker ($LD)])
90 if (test -z "$blibpath"); then
91 blibpath="/usr/lib:/lib"
92 fi
93 saved_LDFLAGS="$LDFLAGS"
94 for tryflags in -blibpath: -Wl,-blibpath: -Wl,-rpath, ;do
95 if (test -z "$blibflags"); then
96 LDFLAGS="$saved_LDFLAGS $tryflags$blibpath"
97 AC_TRY_LINK([], [], [blibflags=$tryflags])
98 fi
99 done
100 if (test -z "$blibflags"); then
101 AC_MSG_RESULT(not found)
102 AC_MSG_ERROR([*** must be able to specify blibpath on AIX - check config.log])
103 else
104 AC_MSG_RESULT($blibflags)
105 fi
106 LDFLAGS="$saved_LDFLAGS"
107 dnl Check for authenticate. Might be in libs.a on older AIXes
108 AC_CHECK_FUNC(authenticate, [AC_DEFINE(WITH_AIXAUTHENTICATE)],
109 [AC_CHECK_LIB(s,authenticate,
110 [ AC_DEFINE(WITH_AIXAUTHENTICATE)
111 LIBS="$LIBS -ls"
112 ])
113 ])
114 dnl Check if loginfailed is declared and takes 4 arguments (AIX >= 5.2)
115 AC_CHECK_DECL(loginfailed,
116 [AC_MSG_CHECKING(if loginfailed takes 4 arguments)
117 AC_TRY_COMPILE(
118 [#include <usersec.h>],
119 [(void)loginfailed("user","host","tty",0);],
120 [AC_MSG_RESULT(yes)
121 AC_DEFINE(AIX_LOGINFAILED_4ARG)],
122 [AC_MSG_RESULT(no)]
123 )],
124 [],
125 [#include <usersec.h>]
126 )
127 AC_CHECK_FUNCS(setauthdb)
128 AC_DEFINE(BROKEN_GETADDRINFO)
129 AC_DEFINE(BROKEN_REALPATH)
130 AC_DEFINE(SETEUID_BREAKS_SETUID)
131 AC_DEFINE(BROKEN_SETREUID)
132 AC_DEFINE(BROKEN_SETREGID)
133 dnl AIX handles lastlog as part of its login message
134 AC_DEFINE(DISABLE_LASTLOG)
135 AC_DEFINE(LOGIN_NEEDS_UTMPX)
136 AC_DEFINE(SPT_TYPE,SPT_REUSEARGV)
137 ;;
138*-*-cygwin*)
139 check_for_libcrypt_later=1
140 LIBS="$LIBS /usr/lib/textmode.o"
141 AC_DEFINE(HAVE_CYGWIN)
142 AC_DEFINE(USE_PIPES)
143 AC_DEFINE(DISABLE_SHADOW)
144 AC_DEFINE(IP_TOS_IS_BROKEN)
145 AC_DEFINE(NO_X11_UNIX_SOCKETS)
146 AC_DEFINE(NO_IPPORT_RESERVED_CONCEPT)
147 AC_DEFINE(DISABLE_FD_PASSING)
148 AC_DEFINE(SETGROUPS_NOOP)
149 ;;
150*-*-dgux*)
151 AC_DEFINE(IP_TOS_IS_BROKEN)
152 AC_DEFINE(SETEUID_BREAKS_SETUID)
153 AC_DEFINE(BROKEN_SETREUID)
154 AC_DEFINE(BROKEN_SETREGID)
155 ;;
156*-*-darwin*)
157 AC_MSG_CHECKING(if we have working getaddrinfo)
158 AC_TRY_RUN([#include <mach-o/dyld.h>
159main() { if (NSVersionOfRunTimeLibrary("System") >= (60 << 16))
160 exit(0);
161 else
162 exit(1);
163}], [AC_MSG_RESULT(working)],
164 [AC_MSG_RESULT(buggy)
165 AC_DEFINE(BROKEN_GETADDRINFO)],
166 [AC_MSG_RESULT(assume it is working)])
167 AC_DEFINE(SETEUID_BREAKS_SETUID)
168 AC_DEFINE(BROKEN_SETREUID)
169 AC_DEFINE(BROKEN_SETREGID)
170 AC_DEFINE_UNQUOTED(BIND_8_COMPAT, 1)
171 ;;
172*-*-hpux10.26)
173 if test -z "$GCC"; then
174 CFLAGS="$CFLAGS -Ae"
175 fi
176 CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1"
177 IPADDR_IN_DISPLAY=yes
178 AC_DEFINE(HAVE_SECUREWARE)
179 AC_DEFINE(USE_PIPES)
180 AC_DEFINE(LOGIN_NO_ENDOPT)
181 AC_DEFINE(LOGIN_NEEDS_UTMPX)
182 AC_DEFINE(LOCKED_PASSWD_STRING, "*")
183 AC_DEFINE(SPT_TYPE,SPT_PSTAT)
184 LIBS="$LIBS -lsec -lsecpw"
185 AC_CHECK_LIB(xnet, t_error, ,AC_MSG_ERROR([*** -lxnet needed on HP-UX - check config.log ***]))
186 disable_ptmx_check=yes
187 ;;
188*-*-hpux10*)
189 if test -z "$GCC"; then
190 CFLAGS="$CFLAGS -Ae"
191 fi
192 CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1"
193 IPADDR_IN_DISPLAY=yes
194 AC_DEFINE(USE_PIPES)
195 AC_DEFINE(LOGIN_NO_ENDOPT)
196 AC_DEFINE(LOGIN_NEEDS_UTMPX)
197 AC_DEFINE(LOCKED_PASSWD_STRING, "*")
198 AC_DEFINE(SPT_TYPE,SPT_PSTAT)
199 LIBS="$LIBS -lsec"
200 AC_CHECK_LIB(xnet, t_error, ,AC_MSG_ERROR([*** -lxnet needed on HP-UX - check config.log ***]))
201 ;;
202*-*-hpux11*)
203 CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1"
204 IPADDR_IN_DISPLAY=yes
205 AC_DEFINE(PAM_SUN_CODEBASE)
206 AC_DEFINE(USE_PIPES)
207 AC_DEFINE(LOGIN_NO_ENDOPT)
208 AC_DEFINE(LOGIN_NEEDS_UTMPX)
209 AC_DEFINE(DISABLE_UTMP)
210 AC_DEFINE(LOCKED_PASSWD_STRING, "*")
211 AC_DEFINE(SPT_TYPE,SPT_PSTAT)
212 check_for_hpux_broken_getaddrinfo=1
213 LIBS="$LIBS -lsec"
214 AC_CHECK_LIB(xnet, t_error, ,AC_MSG_ERROR([*** -lxnet needed on HP-UX - check config.log ***]))
215 ;;
216*-*-irix5*)
217 PATH="$PATH:/usr/etc"
218 AC_DEFINE(BROKEN_INET_NTOA)
219 AC_DEFINE(SETEUID_BREAKS_SETUID)
220 AC_DEFINE(BROKEN_SETREUID)
221 AC_DEFINE(BROKEN_SETREGID)
222 AC_DEFINE(WITH_ABBREV_NO_TTY)
223 AC_DEFINE(LOCKED_PASSWD_STRING, "*LK*")
224 ;;
225*-*-irix6*)
226 PATH="$PATH:/usr/etc"
227 AC_DEFINE(WITH_IRIX_ARRAY)
228 AC_DEFINE(WITH_IRIX_PROJECT)
229 AC_DEFINE(WITH_IRIX_AUDIT)
230 AC_CHECK_FUNC(jlimit_startjob, [AC_DEFINE(WITH_IRIX_JOBS)])
231 AC_DEFINE(BROKEN_INET_NTOA)
232 AC_DEFINE(SETEUID_BREAKS_SETUID)
233 AC_DEFINE(BROKEN_SETREUID)
234 AC_DEFINE(BROKEN_SETREGID)
235 AC_DEFINE(BROKEN_UPDWTMPX)
236 AC_DEFINE(WITH_ABBREV_NO_TTY)
237 AC_DEFINE(LOCKED_PASSWD_STRING, "*LK*")
238 ;;
239*-*-linux*)
240 no_dev_ptmx=1
241 check_for_libcrypt_later=1
242 check_for_openpty_ctty_bug=1
243 AC_DEFINE(DONT_TRY_OTHER_AF)
244 AC_DEFINE(PAM_TTY_KLUDGE)
245 AC_DEFINE(LOCKED_PASSWD_PREFIX, "!")
246 AC_DEFINE(SPT_TYPE,SPT_REUSEARGV)
247 inet6_default_4in6=yes
248 case `uname -r` in
249 1.*|2.0.*)
250 AC_DEFINE(BROKEN_CMSG_TYPE)
251 ;;
252 esac
253 ;;
254mips-sony-bsd|mips-sony-newsos4)
255 AC_DEFINE(HAVE_NEWS4)
256 SONY=1
257 ;;
258*-*-netbsd*)
259 check_for_libcrypt_before=1
260 if test "x$withval" != "xno" ; then
261 need_dash_r=1
262 fi
263 ;;
264*-*-freebsd*)
265 check_for_libcrypt_later=1
266 ;;
267*-*-bsdi*)
268 AC_DEFINE(SETEUID_BREAKS_SETUID)
269 AC_DEFINE(BROKEN_SETREUID)
270 AC_DEFINE(BROKEN_SETREGID)
271 ;;
272*-next-*)
273 conf_lastlog_location="/usr/adm/lastlog"
274 conf_utmp_location=/etc/utmp
275 conf_wtmp_location=/usr/adm/wtmp
276 MAIL=/usr/spool/mail
277 AC_DEFINE(HAVE_NEXT)
278 AC_DEFINE(BROKEN_REALPATH)
279 AC_DEFINE(USE_PIPES)
280 AC_DEFINE(BROKEN_SAVED_UIDS)
281 ;;
282*-*-solaris*)
283 if test "x$withval" != "xno" ; then
284 need_dash_r=1
285 fi
286 AC_DEFINE(PAM_SUN_CODEBASE)
287 AC_DEFINE(LOGIN_NEEDS_UTMPX)
288 AC_DEFINE(LOGIN_NEEDS_TERM)
289 AC_DEFINE(PAM_TTY_KLUDGE)
290 AC_DEFINE(LOCKED_PASSWD_STRING, "*LK*")
291 # Pushing STREAMS modules will cause sshd to acquire a controlling tty.
292 AC_DEFINE(SSHD_ACQUIRES_CTTY)
293 external_path_file=/etc/default/login
294 # hardwire lastlog location (can't detect it on some versions)
295 conf_lastlog_location="/var/adm/lastlog"
296 AC_MSG_CHECKING(for obsolete utmp and wtmp in solaris2.x)
297 sol2ver=`echo "$host"| sed -e 's/.*[[0-9]]\.//'`
298 if test "$sol2ver" -ge 8; then
299 AC_MSG_RESULT(yes)
300 AC_DEFINE(DISABLE_UTMP)
301 AC_DEFINE(DISABLE_WTMP)
302 else
303 AC_MSG_RESULT(no)
304 fi
305 ;;
306*-*-sunos4*)
307 CPPFLAGS="$CPPFLAGS -DSUNOS4"
308 AC_CHECK_FUNCS(getpwanam)
309 AC_DEFINE(PAM_SUN_CODEBASE)
310 conf_utmp_location=/etc/utmp
311 conf_wtmp_location=/var/adm/wtmp
312 conf_lastlog_location=/var/adm/lastlog
313 AC_DEFINE(USE_PIPES)
314 ;;
315*-ncr-sysv*)
316 LIBS="$LIBS -lc89"
317 AC_DEFINE(USE_PIPES)
318 AC_DEFINE(SSHD_ACQUIRES_CTTY)
319 AC_DEFINE(SETEUID_BREAKS_SETUID)
320 AC_DEFINE(BROKEN_SETREUID)
321 AC_DEFINE(BROKEN_SETREGID)
322 ;;
323*-sni-sysv*)
324 # /usr/ucblib MUST NOT be searched on ReliantUNIX
325 AC_CHECK_LIB(dl, dlsym, ,)
326 IPADDR_IN_DISPLAY=yes
327 AC_DEFINE(USE_PIPES)
328 AC_DEFINE(IP_TOS_IS_BROKEN)
329 AC_DEFINE(SETEUID_BREAKS_SETUID)
330 AC_DEFINE(BROKEN_SETREUID)
331 AC_DEFINE(BROKEN_SETREGID)
332 AC_DEFINE(SSHD_ACQUIRES_CTTY)
333 external_path_file=/etc/default/login
334 # /usr/ucblib/libucb.a no longer needed on ReliantUNIX
335 # Attention: always take care to bind libsocket and libnsl before libc,
336 # otherwise you will find lots of "SIOCGPGRP errno 22" on syslog
337 ;;
338*-*-sysv4.2*)
339 AC_DEFINE(USE_PIPES)
340 AC_DEFINE(SETEUID_BREAKS_SETUID)
341 AC_DEFINE(BROKEN_SETREUID)
342 AC_DEFINE(BROKEN_SETREGID)
343 ;;
344*-*-sysv5*)
345 AC_DEFINE(USE_PIPES)
346 AC_DEFINE(SETEUID_BREAKS_SETUID)
347 AC_DEFINE(BROKEN_SETREUID)
348 AC_DEFINE(BROKEN_SETREGID)
349 ;;
350*-*-sysv*)
351 ;;
352*-*-sco3.2v4*)
353 CPPFLAGS="$CPPFLAGS -Dftruncate=chsize"
354 LIBS="$LIBS -los -lprot -lcrypt_i -lx -ltinfo -lm"
355 RANLIB=true
356 no_dev_ptmx=1
357 AC_DEFINE(BROKEN_SYS_TERMIO_H)
358 AC_DEFINE(USE_PIPES)
359 AC_DEFINE(HAVE_SECUREWARE)
360 AC_DEFINE(DISABLE_SHADOW)
361 AC_DEFINE(BROKEN_SAVED_UIDS)
362 AC_DEFINE(WITH_ABBREV_NO_TTY)
363 AC_CHECK_FUNCS(getluid setluid)
364 MANTYPE=man
365 do_sco3_extra_lib_check=yes
366 ;;
367*-*-sco3.2v5*)
368 if test -z "$GCC"; then
369 CFLAGS="$CFLAGS -belf"
370 fi
371 LIBS="$LIBS -lprot -lx -ltinfo -lm"
372 no_dev_ptmx=1
373 AC_DEFINE(USE_PIPES)
374 AC_DEFINE(HAVE_SECUREWARE)
375 AC_DEFINE(DISABLE_SHADOW)
376 AC_DEFINE(DISABLE_FD_PASSING)
377 AC_DEFINE(SETEUID_BREAKS_SETUID)
378 AC_DEFINE(BROKEN_SETREUID)
379 AC_DEFINE(BROKEN_SETREGID)
380 AC_DEFINE(WITH_ABBREV_NO_TTY)
381 AC_CHECK_FUNCS(getluid setluid)
382 MANTYPE=man
383 ;;
384*-*-unicosmk*)
385 AC_DEFINE(NO_SSH_LASTLOG)
386 AC_DEFINE(SETEUID_BREAKS_SETUID)
387 AC_DEFINE(BROKEN_SETREUID)
388 AC_DEFINE(BROKEN_SETREGID)
389 AC_DEFINE(USE_PIPES)
390 AC_DEFINE(DISABLE_FD_PASSING)
391 LDFLAGS="$LDFLAGS"
392 LIBS="$LIBS -lgen -lrsc -lshare -luex -lacm"
393 MANTYPE=cat
394 ;;
395*-*-unicosmp*)
396 AC_DEFINE(SETEUID_BREAKS_SETUID)
397 AC_DEFINE(BROKEN_SETREUID)
398 AC_DEFINE(BROKEN_SETREGID)
399 AC_DEFINE(WITH_ABBREV_NO_TTY)
400 AC_DEFINE(USE_PIPES)
401 AC_DEFINE(DISABLE_FD_PASSING)
402 LDFLAGS="$LDFLAGS"
403 LIBS="$LIBS -lgen -lacid -ldb"
404 MANTYPE=cat
405 ;;
406*-*-unicos*)
407 AC_DEFINE(SETEUID_BREAKS_SETUID)
408 AC_DEFINE(BROKEN_SETREUID)
409 AC_DEFINE(BROKEN_SETREGID)
410 AC_DEFINE(USE_PIPES)
411 AC_DEFINE(DISABLE_FD_PASSING)
412 AC_DEFINE(NO_SSH_LASTLOG)
413 LDFLAGS="$LDFLAGS -Wl,-Dmsglevel=334:fatal"
414 LIBS="$LIBS -lgen -lrsc -lshare -luex -lacm"
415 MANTYPE=cat
416 ;;
417*-dec-osf*)
418 AC_MSG_CHECKING(for Digital Unix SIA)
419 no_osfsia=""
420 AC_ARG_WITH(osfsia,
421 [ --with-osfsia Enable Digital Unix SIA],
422 [
423 if test "x$withval" = "xno" ; then
424 AC_MSG_RESULT(disabled)
425 no_osfsia=1
426 fi
427 ],
428 )
429 if test -z "$no_osfsia" ; then
430 if test -f /etc/sia/matrix.conf; then
431 AC_MSG_RESULT(yes)
432 AC_DEFINE(HAVE_OSF_SIA)
433 AC_DEFINE(DISABLE_LOGIN)
434 AC_DEFINE(DISABLE_FD_PASSING)
435 LIBS="$LIBS -lsecurity -ldb -lm -laud"
436 else
437 AC_MSG_RESULT(no)
438 AC_DEFINE(LOCKED_PASSWD_SUBSTR, "Nologin")
439 fi
440 fi
441 AC_DEFINE(BROKEN_GETADDRINFO)
442 AC_DEFINE(SETEUID_BREAKS_SETUID)
443 AC_DEFINE(BROKEN_SETREUID)
444 AC_DEFINE(BROKEN_SETREGID)
445 ;;
446
447*-*-nto-qnx)
448 AC_DEFINE(USE_PIPES)
449 AC_DEFINE(NO_X11_UNIX_SOCKETS)
450 AC_DEFINE(MISSING_NFDBITS)
451 AC_DEFINE(MISSING_HOWMANY)
452 AC_DEFINE(MISSING_FD_MASK)
453 ;;
454esac
455
456# Allow user to specify flags
457AC_ARG_WITH(cflags,
458 [ --with-cflags Specify additional flags to pass to compiler],
459 [
460 if test "x$withval" != "xno" ; then
461 CFLAGS="$CFLAGS $withval"
462 fi
463 ]
464)
465AC_ARG_WITH(cppflags,
466 [ --with-cppflags Specify additional flags to pass to preprocessor] ,
467 [
468 if test "x$withval" != "xno"; then
469 CPPFLAGS="$CPPFLAGS $withval"
470 fi
471 ]
472)
473AC_ARG_WITH(ldflags,
474 [ --with-ldflags Specify additional flags to pass to linker],
475 [
476 if test "x$withval" != "xno" ; then
477 LDFLAGS="$LDFLAGS $withval"
478 fi
479 ]
480)
481AC_ARG_WITH(libs,
482 [ --with-libs Specify additional libraries to link with],
483 [
484 if test "x$withval" != "xno" ; then
485 LIBS="$LIBS $withval"
486 fi
487 ]
488)
489
490AC_MSG_CHECKING(compiler and flags for sanity)
491AC_TRY_RUN([
492#include <stdio.h>
493int main(){exit(0);}
494 ],
495 [ AC_MSG_RESULT(yes) ],
496 [
497 AC_MSG_RESULT(no)
498 AC_MSG_ERROR([*** compiler cannot create working executables, check config.log ***])
499 ]
500)
501
502# Checks for header files.
503AC_CHECK_HEADERS(bstring.h crypt.h endian.h features.h floatingpoint.h \
504 getopt.h glob.h ia.h lastlog.h limits.h login.h \
505 login_cap.h maillock.h netdb.h netgroup.h \
506 netinet/in_systm.h pam/pam_appl.h paths.h pty.h readpassphrase.h \
507 rpc/types.h security/pam_appl.h shadow.h stddef.h stdint.h \
508 strings.h sys/strtio.h sys/audit.h sys/bitypes.h sys/bsdtty.h \
509 sys/cdefs.h sys/mman.h sys/prctl.h sys/pstat.h sys/ptms.h \
510 sys/select.h sys/stat.h sys/stream.h sys/stropts.h \
511 sys/sysmacros.h sys/time.h sys/timers.h sys/un.h time.h tmpdir.h \
512 ttyent.h usersec.h util.h utime.h utmp.h utmpx.h vis.h)
513
514# Checks for libraries.
515AC_CHECK_FUNC(yp_match, , AC_CHECK_LIB(nsl, yp_match))
516AC_CHECK_FUNC(setsockopt, , AC_CHECK_LIB(socket, setsockopt))
517
518dnl SCO OS3 needs this for libwrap
519if test "x$with_tcp_wrappers" != "xno" ; then
520 if test "x$do_sco3_extra_lib_check" = "xyes" ; then
521 AC_CHECK_LIB(rpc, innetgr, LIBS="-lrpc -lyp -lrpc $LIBS" , , -lyp -lrpc)
522 fi
523fi
524
525dnl IRIX and Solaris 2.5.1 have dirname() in libgen
526AC_CHECK_FUNCS(dirname, [AC_CHECK_HEADERS(libgen.h)] ,[
527 AC_CHECK_LIB(gen, dirname,[
528 AC_CACHE_CHECK([for broken dirname],
529 ac_cv_have_broken_dirname, [
530 save_LIBS="$LIBS"
531 LIBS="$LIBS -lgen"
532 AC_TRY_RUN(
533 [
534#include <libgen.h>
535#include <string.h>
536
537int main(int argc, char **argv) {
538 char *s, buf[32];
539
540 strncpy(buf,"/etc", 32);
541 s = dirname(buf);
542 if (!s || strncmp(s, "/", 32) != 0) {
543 exit(1);
544 } else {
545 exit(0);
546 }
547}
548 ],
549 [ ac_cv_have_broken_dirname="no" ],
550 [ ac_cv_have_broken_dirname="yes" ]
551 )
552 LIBS="$save_LIBS"
553 ])
554 if test "x$ac_cv_have_broken_dirname" = "xno" ; then
555 LIBS="$LIBS -lgen"
556 AC_DEFINE(HAVE_DIRNAME)
557 AC_CHECK_HEADERS(libgen.h)
558 fi
559 ])
560])
561
562AC_CHECK_FUNC(getspnam, ,
563 AC_CHECK_LIB(gen, getspnam, LIBS="$LIBS -lgen"))
564AC_SEARCH_LIBS(basename, gen, AC_DEFINE(HAVE_BASENAME))
565
566dnl zlib is required
567AC_ARG_WITH(zlib,
568 [ --with-zlib=PATH Use zlib in PATH],
569 [
570 if test "x$withval" = "xno" ; then
571 AC_MSG_ERROR([*** zlib is required ***])
572 fi
573 if test -d "$withval/lib"; then
574 if test -n "${need_dash_r}"; then
575 LDFLAGS="-L${withval}/lib -R${withval}/lib ${LDFLAGS}"
576 else
577 LDFLAGS="-L${withval}/lib ${LDFLAGS}"
578 fi
579 else
580 if test -n "${need_dash_r}"; then
581 LDFLAGS="-L${withval} -R${withval} ${LDFLAGS}"
582 else
583 LDFLAGS="-L${withval} ${LDFLAGS}"
584 fi
585 fi
586 if test -d "$withval/include"; then
587 CPPFLAGS="-I${withval}/include ${CPPFLAGS}"
588 else
589 CPPFLAGS="-I${withval} ${CPPFLAGS}"
590 fi
591 ]
592)
593
594AC_CHECK_LIB(z, deflate, ,
595 [
596 saved_CPPFLAGS="$CPPFLAGS"
597 saved_LDFLAGS="$LDFLAGS"
598 save_LIBS="$LIBS"
599 dnl Check default zlib install dir
600 if test -n "${need_dash_r}"; then
601 LDFLAGS="-L/usr/local/lib -R/usr/local/lib ${saved_LDFLAGS}"
602 else
603 LDFLAGS="-L/usr/local/lib ${saved_LDFLAGS}"
604 fi
605 CPPFLAGS="-I/usr/local/include ${saved_CPPFLAGS}"
606 LIBS="$LIBS -lz"
607 AC_TRY_LINK_FUNC(deflate, AC_DEFINE(HAVE_LIBZ),
608 [
609 AC_MSG_ERROR([*** zlib missing - please install first or check config.log ***])
610 ]
611 )
612 ]
613)
614AC_CHECK_HEADER([zlib.h], ,AC_MSG_ERROR([*** zlib.h missing - please install first or check config.log ***]))
615
616AC_ARG_WITH(zlib-version-check,
617 [ --without-zlib-version-check Disable zlib version check],
618 [ if test "x$withval" = "xno" ; then
619 zlib_check_nonfatal=1
620 fi
621 ]
622)
623
624AC_MSG_CHECKING(for zlib 1.1.4 or greater)
625AC_TRY_RUN([
626#include <zlib.h>
627int main()
628{
629 int a, b, c, v;
630 if (sscanf(ZLIB_VERSION, "%d.%d.%d", &a, &b, &c) != 3)
631 exit(1);
632 v = a*1000000 + b*1000 + c;
633 if (v >= 1001004)
634 exit(0);
635 exit(2);
636}
637 ],
638 AC_MSG_RESULT(yes),
639 [ AC_MSG_RESULT(no)
640 if test -z "$zlib_check_nonfatal" ; then
641 AC_MSG_ERROR([*** zlib too old - check config.log ***
642Your reported zlib version has known security problems. It's possible your
643vendor has fixed these problems without changing the version number. If you
644are sure this is the case, you can disable the check by running
645"./configure --without-zlib-version-check".
646If you are in doubt, upgrade zlib to version 1.1.4 or greater.])
647 else
648 AC_MSG_WARN([zlib version may have security problems])
649 fi
650 ]
651)
652
653dnl UnixWare 2.x
654AC_CHECK_FUNC(strcasecmp,
655 [], [ AC_CHECK_LIB(resolv, strcasecmp, LIBS="$LIBS -lresolv") ]
656)
657AC_CHECK_FUNC(utimes,
658 [], [ AC_CHECK_LIB(c89, utimes, [AC_DEFINE(HAVE_UTIMES)
659 LIBS="$LIBS -lc89"]) ]
660)
661
662dnl Checks for libutil functions
663AC_CHECK_HEADERS(libutil.h)
664AC_SEARCH_LIBS(login, util bsd, [AC_DEFINE(HAVE_LOGIN)])
665AC_CHECK_FUNCS(logout updwtmp logwtmp)
666
667AC_FUNC_STRFTIME
668
669# Check for ALTDIRFUNC glob() extension
670AC_MSG_CHECKING(for GLOB_ALTDIRFUNC support)
671AC_EGREP_CPP(FOUNDIT,
672 [
673 #include <glob.h>
674 #ifdef GLOB_ALTDIRFUNC
675 FOUNDIT
676 #endif
677 ],
678 [
679 AC_DEFINE(GLOB_HAS_ALTDIRFUNC)
680 AC_MSG_RESULT(yes)
681 ],
682 [
683 AC_MSG_RESULT(no)
684 ]
685)
686
687# Check for g.gl_matchc glob() extension
688AC_MSG_CHECKING(for gl_matchc field in glob_t)
689AC_EGREP_CPP(FOUNDIT,
690 [
691 #include <glob.h>
692 int main(void){glob_t g; g.gl_matchc = 1;}
693 ],
694 [
695 AC_DEFINE(GLOB_HAS_GL_MATCHC)
696 AC_MSG_RESULT(yes)
697 ],
698 [
699 AC_MSG_RESULT(no)
700 ]
701)
702
703AC_MSG_CHECKING([whether struct dirent allocates space for d_name])
704AC_TRY_RUN(
705 [
706#include <sys/types.h>
707#include <dirent.h>
708int main(void){struct dirent d;exit(sizeof(d.d_name)<=sizeof(char));}
709 ],
710 [AC_MSG_RESULT(yes)],
711 [
712 AC_MSG_RESULT(no)
713 AC_DEFINE(BROKEN_ONE_BYTE_DIRENT_D_NAME)
714 ]
715)
716
717# Check whether user wants S/Key support
718SKEY_MSG="no"
719AC_ARG_WITH(skey,
720 [ --with-skey[[=PATH]] Enable S/Key support
721 (optionally in PATH)],
722 [
723 if test "x$withval" != "xno" ; then
724
725 if test "x$withval" != "xyes" ; then
726 CPPFLAGS="$CPPFLAGS -I${withval}/include"
727 LDFLAGS="$LDFLAGS -L${withval}/lib"
728 fi
729
730 AC_DEFINE(SKEY)
731 LIBS="-lskey $LIBS"
732 SKEY_MSG="yes"
733
734 AC_MSG_CHECKING([for s/key support])
735 AC_TRY_RUN(
736 [
737#include <stdio.h>
738#include <skey.h>
739int main() { char *ff = skey_keyinfo(""); ff=""; exit(0); }
740 ],
741 [AC_MSG_RESULT(yes)],
742 [
743 AC_MSG_RESULT(no)
744 AC_MSG_ERROR([** Incomplete or missing s/key libraries.])
745 ])
746 fi
747 ]
748)
749
750# Check whether user wants TCP wrappers support
751TCPW_MSG="no"
752AC_ARG_WITH(tcp-wrappers,
753 [ --with-tcp-wrappers[[=PATH]] Enable tcpwrappers support
754 (optionally in PATH)],
755 [
756 if test "x$withval" != "xno" ; then
757 saved_LIBS="$LIBS"
758 saved_LDFLAGS="$LDFLAGS"
759 saved_CPPFLAGS="$CPPFLAGS"
760 if test -n "${withval}" -a "${withval}" != "yes"; then
761 if test -d "${withval}/lib"; then
762 if test -n "${need_dash_r}"; then
763 LDFLAGS="-L${withval}/lib -R${withval}/lib ${LDFLAGS}"
764 else
765 LDFLAGS="-L${withval}/lib ${LDFLAGS}"
766 fi
767 else
768 if test -n "${need_dash_r}"; then
769 LDFLAGS="-L${withval} -R${withval} ${LDFLAGS}"
770 else
771 LDFLAGS="-L${withval} ${LDFLAGS}"
772 fi
773 fi
774 if test -d "${withval}/include"; then
775 CPPFLAGS="-I${withval}/include ${CPPFLAGS}"
776 else
777 CPPFLAGS="-I${withval} ${CPPFLAGS}"
778 fi
779 fi
780 LIBWRAP="-lwrap"
781 LIBS="$LIBWRAP $LIBS"
782 AC_MSG_CHECKING(for libwrap)
783 AC_TRY_LINK(
784 [
785#include <tcpd.h>
786 int deny_severity = 0, allow_severity = 0;
787 ],
788 [hosts_access(0);],
789 [
790 AC_MSG_RESULT(yes)
791 AC_DEFINE(LIBWRAP)
792 AC_SUBST(LIBWRAP)
793 TCPW_MSG="yes"
794 ],
795 [
796 AC_MSG_ERROR([*** libwrap missing])
797 ]
798 )
799 LIBS="$saved_LIBS"
800 fi
801 ]
802)
803
804dnl Checks for library functions. Please keep in alphabetical order
805AC_CHECK_FUNCS(\
806 arc4random __b64_ntop b64_ntop __b64_pton b64_pton \
807 bcopy bindresvport_sa clock fchmod fchown freeaddrinfo futimes \
808 getaddrinfo getcwd getgrouplist getnameinfo getopt \
809 getpeereid _getpty getrlimit getttyent glob inet_aton \
810 inet_ntoa inet_ntop innetgr login_getcapbool md5_crypt memmove \
811 mkdtemp mmap ngetaddrinfo nsleep ogetaddrinfo openlog_r openpty \
812 pstat prctl readpassphrase realpath recvmsg rresvport_af sendmsg \
813 setdtablesize setegid setenv seteuid setgroups setlogin setpcred \
814 setproctitle setregid setreuid setrlimit \
815 setsid setvbuf sigaction sigvec snprintf socketpair strerror \
816 strlcat strlcpy strmode strnvis strtoul sysconf tcgetpgrp \
817 truncate unsetenv updwtmpx utimes vhangup vsnprintf waitpid \
818)
819
820# IRIX has a const char return value for gai_strerror()
821AC_CHECK_FUNCS(gai_strerror,[
822 AC_DEFINE(HAVE_GAI_STRERROR)
823 AC_TRY_COMPILE([
824#include <sys/types.h>
825#include <sys/socket.h>
826#include <netdb.h>
827
828const char *gai_strerror(int);],[
829char *str;
830
831str = gai_strerror(0);],[
832 AC_DEFINE(HAVE_CONST_GAI_STRERROR_PROTO, 1,
833 [Define if gai_strerror() returns const char *])])])
834
835AC_SEARCH_LIBS(nanosleep, rt posix4, AC_DEFINE(HAVE_NANOSLEEP))
836
837dnl Make sure prototypes are defined for these before using them.
838AC_CHECK_DECL(strsep, [AC_CHECK_FUNCS(strsep)])
839AC_CHECK_DECL(getrusage, [AC_CHECK_FUNCS(getrusage)])
840
841dnl tcsendbreak might be a macro
842AC_CHECK_DECL(tcsendbreak,
843 [AC_DEFINE(HAVE_TCSENDBREAK)],
844 [AC_CHECK_FUNCS(tcsendbreak)],
845 [#include <termios.h>]
846)
847
848AC_CHECK_FUNCS(setresuid, [
849 dnl Some platorms have setresuid that isn't implemented, test for this
850 AC_MSG_CHECKING(if setresuid seems to work)
851 AC_TRY_RUN([
852#include <stdlib.h>
853#include <errno.h>
854int main(){errno=0; setresuid(0,0,0); if (errno==ENOSYS) exit(1); else exit(0);}
855 ],
856 [AC_MSG_RESULT(yes)],
857 [AC_DEFINE(BROKEN_SETRESUID)
858 AC_MSG_RESULT(not implemented)]
859 )
860])
861
862AC_CHECK_FUNCS(setresgid, [
863 dnl Some platorms have setresgid that isn't implemented, test for this
864 AC_MSG_CHECKING(if setresgid seems to work)
865 AC_TRY_RUN([
866#include <stdlib.h>
867#include <errno.h>
868int main(){errno=0; setresgid(0,0,0); if (errno==ENOSYS) exit(1); else exit(0);}
869 ],
870 [AC_MSG_RESULT(yes)],
871 [AC_DEFINE(BROKEN_SETRESGID)
872 AC_MSG_RESULT(not implemented)]
873 )
874])
875
876dnl Checks for time functions
877AC_CHECK_FUNCS(gettimeofday time)
878dnl Checks for utmp functions
879AC_CHECK_FUNCS(endutent getutent getutid getutline pututline setutent)
880AC_CHECK_FUNCS(utmpname)
881dnl Checks for utmpx functions
882AC_CHECK_FUNCS(endutxent getutxent getutxid getutxline pututxline )
883AC_CHECK_FUNCS(setutxent utmpxname)
884
885AC_CHECK_FUNC(daemon,
886 [AC_DEFINE(HAVE_DAEMON)],
887 [AC_CHECK_LIB(bsd, daemon, [LIBS="$LIBS -lbsd"; AC_DEFINE(HAVE_DAEMON)])]
888)
889
890AC_CHECK_FUNC(getpagesize,
891 [AC_DEFINE(HAVE_GETPAGESIZE)],
892 [AC_CHECK_LIB(ucb, getpagesize, [LIBS="$LIBS -lucb"; AC_DEFINE(HAVE_GETPAGESIZE)])]
893)
894
895# Check for broken snprintf
896if test "x$ac_cv_func_snprintf" = "xyes" ; then
897 AC_MSG_CHECKING([whether snprintf correctly terminates long strings])
898 AC_TRY_RUN(
899 [
900#include <stdio.h>
901int main(void){char b[5];snprintf(b,5,"123456789");exit(b[4]!='\0');}
902 ],
903 [AC_MSG_RESULT(yes)],
904 [
905 AC_MSG_RESULT(no)
906 AC_DEFINE(BROKEN_SNPRINTF)
907 AC_MSG_WARN([****** Your snprintf() function is broken, complain to your vendor])
908 ]
909 )
910fi
911
912dnl see whether mkstemp() requires XXXXXX
913if test "x$ac_cv_func_mkdtemp" = "xyes" ; then
914AC_MSG_CHECKING([for (overly) strict mkstemp])
915AC_TRY_RUN(
916 [
917#include <stdlib.h>
918main() { char template[]="conftest.mkstemp-test";
919if (mkstemp(template) == -1)
920 exit(1);
921unlink(template); exit(0);
922}
923 ],
924 [
925 AC_MSG_RESULT(no)
926 ],
927 [
928 AC_MSG_RESULT(yes)
929 AC_DEFINE(HAVE_STRICT_MKSTEMP)
930 ],
931 [
932 AC_MSG_RESULT(yes)
933 AC_DEFINE(HAVE_STRICT_MKSTEMP)
934 ]
935)
936fi
937
938dnl make sure that openpty does not reacquire controlling terminal
939if test ! -z "$check_for_openpty_ctty_bug"; then
940 AC_MSG_CHECKING(if openpty correctly handles controlling tty)
941 AC_TRY_RUN(
942 [
943#include <stdio.h>
944#include <sys/fcntl.h>
945#include <sys/types.h>
946#include <sys/wait.h>
947
948int
949main()
950{
951 pid_t pid;
952 int fd, ptyfd, ttyfd, status;
953
954 pid = fork();
955 if (pid < 0) { /* failed */
956 exit(1);
957 } else if (pid > 0) { /* parent */
958 waitpid(pid, &status, 0);
959 if (WIFEXITED(status))
960 exit(WEXITSTATUS(status));
961 else
962 exit(2);
963 } else { /* child */
964 close(0); close(1); close(2);
965 setsid();
966 openpty(&ptyfd, &ttyfd, NULL, NULL, NULL);
967 fd = open("/dev/tty", O_RDWR | O_NOCTTY);
968 if (fd >= 0)
969 exit(3); /* Acquired ctty: broken */
970 else
971 exit(0); /* Did not acquire ctty: OK */
972 }
973}
974 ],
975 [
976 AC_MSG_RESULT(yes)
977 ],
978 [
979 AC_MSG_RESULT(no)
980 AC_DEFINE(SSHD_ACQUIRES_CTTY)
981 ]
982 )
983fi
984
985if test "x$ac_cv_func_getaddrinfo" = "xyes" -a "x$check_for_hpux_broken_getaddrinfo" = "x1"; then
986 AC_MSG_CHECKING(if getaddrinfo seems to work)
987 AC_TRY_RUN(
988 [
989#include <stdio.h>
990#include <sys/socket.h>
991#include <netdb.h>
992#include <errno.h>
993#include <netinet/in.h>
994
995#define TEST_PORT "2222"
996
997int
998main(void)
999{
1000 int err, sock;
1001 struct addrinfo *gai_ai, *ai, hints;
1002 char ntop[NI_MAXHOST], strport[NI_MAXSERV], *name = NULL;
1003
1004 memset(&hints, 0, sizeof(hints));
1005 hints.ai_family = PF_UNSPEC;
1006 hints.ai_socktype = SOCK_STREAM;
1007 hints.ai_flags = AI_PASSIVE;
1008
1009 err = getaddrinfo(name, TEST_PORT, &hints, &gai_ai);
1010 if (err != 0) {
1011 fprintf(stderr, "getaddrinfo failed (%s)", gai_strerror(err));
1012 exit(1);
1013 }
1014
1015 for (ai = gai_ai; ai != NULL; ai = ai->ai_next) {
1016 if (ai->ai_family != AF_INET6)
1017 continue;
1018
1019 err = getnameinfo(ai->ai_addr, ai->ai_addrlen, ntop,
1020 sizeof(ntop), strport, sizeof(strport),
1021 NI_NUMERICHOST|NI_NUMERICSERV);
1022
1023 if (err != 0) {
1024 if (err == EAI_SYSTEM)
1025 perror("getnameinfo EAI_SYSTEM");
1026 else
1027 fprintf(stderr, "getnameinfo failed: %s\n",
1028 gai_strerror(err));
1029 exit(2);
1030 }
1031
1032 sock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
1033 if (sock < 0)
1034 perror("socket");
1035 if (bind(sock, ai->ai_addr, ai->ai_addrlen) < 0) {
1036 if (errno == EBADF)
1037 exit(3);
1038 }
1039 }
1040 exit(0);
1041}
1042 ],
1043 [
1044 AC_MSG_RESULT(yes)
1045 ],
1046 [
1047 AC_MSG_RESULT(no)
1048 AC_DEFINE(BROKEN_GETADDRINFO)
1049 ]
1050 )
1051fi
1052
1053AC_FUNC_GETPGRP
1054
1055# Check for PAM libs
1056PAM_MSG="no"
1057AC_ARG_WITH(pam,
1058 [ --with-pam Enable PAM support ],
1059 [
1060 if test "x$withval" != "xno" ; then
1061 if test "x$ac_cv_header_security_pam_appl_h" != "xyes" && \
1062 test "x$ac_cv_header_pam_pam_appl_h" != "xyes" ; then
1063 AC_MSG_ERROR([PAM headers not found])
1064 fi
1065
1066 AC_CHECK_LIB(dl, dlopen, , )
1067 AC_CHECK_LIB(pam, pam_set_item, , AC_MSG_ERROR([*** libpam missing]))
1068 AC_CHECK_FUNCS(pam_getenvlist)
1069 AC_CHECK_FUNCS(pam_putenv)
1070
1071 PAM_MSG="yes"
1072
1073 AC_DEFINE(USE_PAM)
1074 if test $ac_cv_lib_dl_dlopen = yes; then
1075 LIBPAM="-lpam -ldl"
1076 else
1077 LIBPAM="-lpam"
1078 fi
1079 AC_SUBST(LIBPAM)
1080 fi
1081 ]
1082)
1083
1084# Check for older PAM
1085if test "x$PAM_MSG" = "xyes" ; then
1086 # Check PAM strerror arguments (old PAM)
1087 AC_MSG_CHECKING([whether pam_strerror takes only one argument])
1088 AC_TRY_COMPILE(
1089 [
1090#include <stdlib.h>
1091#if defined(HAVE_SECURITY_PAM_APPL_H)
1092#include <security/pam_appl.h>
1093#elif defined (HAVE_PAM_PAM_APPL_H)
1094#include <pam/pam_appl.h>
1095#endif
1096 ],
1097 [(void)pam_strerror((pam_handle_t *)NULL, -1);],
1098 [AC_MSG_RESULT(no)],
1099 [
1100 AC_DEFINE(HAVE_OLD_PAM)
1101 AC_MSG_RESULT(yes)
1102 PAM_MSG="yes (old library)"
1103 ]
1104 )
1105fi
1106
1107# Search for OpenSSL
1108saved_CPPFLAGS="$CPPFLAGS"
1109saved_LDFLAGS="$LDFLAGS"
1110AC_ARG_WITH(ssl-dir,
1111 [ --with-ssl-dir=PATH Specify path to OpenSSL installation ],
1112 [
1113 if test "x$withval" != "xno" ; then
1114 if test -d "$withval/lib"; then
1115 if test -n "${need_dash_r}"; then
1116 LDFLAGS="-L${withval}/lib -R${withval}/lib ${LDFLAGS}"
1117 else
1118 LDFLAGS="-L${withval}/lib ${LDFLAGS}"
1119 fi
1120 else
1121 if test -n "${need_dash_r}"; then
1122 LDFLAGS="-L${withval} -R${withval} ${LDFLAGS}"
1123 else
1124 LDFLAGS="-L${withval} ${LDFLAGS}"
1125 fi
1126 fi
1127 if test -d "$withval/include"; then
1128 CPPFLAGS="-I${withval}/include ${CPPFLAGS}"
1129 else
1130 CPPFLAGS="-I${withval} ${CPPFLAGS}"
1131 fi
1132 fi
1133 ]
1134)
1135LIBS="-lcrypto $LIBS"
1136AC_TRY_LINK_FUNC(RAND_add, AC_DEFINE(HAVE_OPENSSL),
1137 [
1138 dnl Check default openssl install dir
1139 if test -n "${need_dash_r}"; then
1140 LDFLAGS="-L/usr/local/ssl/lib -R/usr/local/ssl/lib ${saved_LDFLAGS}"
1141 else
1142 LDFLAGS="-L/usr/local/ssl/lib ${saved_LDFLAGS}"
1143 fi
1144 CPPFLAGS="-I/usr/local/ssl/include ${saved_CPPFLAGS}"
1145 AC_TRY_LINK_FUNC(RAND_add, AC_DEFINE(HAVE_OPENSSL),
1146 [
1147 AC_MSG_ERROR([*** Can't find recent OpenSSL libcrypto (see config.log for details) ***])
1148 ]
1149 )
1150 ]
1151)
1152
1153# Determine OpenSSL header version
1154AC_MSG_CHECKING([OpenSSL header version])
1155AC_TRY_RUN(
1156 [
1157#include <stdio.h>
1158#include <string.h>
1159#include <openssl/opensslv.h>
1160#define DATA "conftest.sslincver"
1161int main(void) {
1162 FILE *fd;
1163 int rc;
1164
1165 fd = fopen(DATA,"w");
1166 if(fd == NULL)
1167 exit(1);
1168
1169 if ((rc = fprintf(fd ,"%x (%s)\n", OPENSSL_VERSION_NUMBER, OPENSSL_VERSION_TEXT)) <0)
1170 exit(1);
1171
1172 exit(0);
1173}
1174 ],
1175 [
1176 ssl_header_ver=`cat conftest.sslincver`
1177 AC_MSG_RESULT($ssl_header_ver)
1178 ],
1179 [
1180 AC_MSG_RESULT(not found)
1181 AC_MSG_ERROR(OpenSSL version header not found.)
1182 ]
1183)
1184
1185# Determine OpenSSL library version
1186AC_MSG_CHECKING([OpenSSL library version])
1187AC_TRY_RUN(
1188 [
1189#include <stdio.h>
1190#include <string.h>
1191#include <openssl/opensslv.h>
1192#include <openssl/crypto.h>
1193#define DATA "conftest.ssllibver"
1194int main(void) {
1195 FILE *fd;
1196 int rc;
1197
1198 fd = fopen(DATA,"w");
1199 if(fd == NULL)
1200 exit(1);
1201
1202 if ((rc = fprintf(fd ,"%x (%s)\n", SSLeay(), SSLeay_version(SSLEAY_VERSION))) <0)
1203 exit(1);
1204
1205 exit(0);
1206}
1207 ],
1208 [
1209 ssl_library_ver=`cat conftest.ssllibver`
1210 AC_MSG_RESULT($ssl_library_ver)
1211 ],
1212 [
1213 AC_MSG_RESULT(not found)
1214 AC_MSG_ERROR(OpenSSL library not found.)
1215 ]
1216)
1217
1218# Sanity check OpenSSL headers
1219AC_MSG_CHECKING([whether OpenSSL's headers match the library])
1220AC_TRY_RUN(
1221 [
1222#include <string.h>
1223#include <openssl/opensslv.h>
1224int main(void) { exit(SSLeay() == OPENSSL_VERSION_NUMBER ? 0 : 1); }
1225 ],
1226 [
1227 AC_MSG_RESULT(yes)
1228 ],
1229 [
1230 AC_MSG_RESULT(no)
1231 AC_MSG_ERROR([Your OpenSSL headers do not match your library.
1232Check config.log for details.
1233Also see contrib/findssl.sh for help identifying header/library mismatches.])
1234 ]
1235)
1236
1237# Some systems want crypt() from libcrypt, *not* the version in OpenSSL,
1238# because the system crypt() is more featureful.
1239if test "x$check_for_libcrypt_before" = "x1"; then
1240 AC_CHECK_LIB(crypt, crypt)
1241fi
1242
1243# Some Linux systems (Slackware) need crypt() from libcrypt, *not* the
1244# version in OpenSSL.
1245if test "x$check_for_libcrypt_later" = "x1"; then
1246 AC_CHECK_LIB(crypt, crypt, LIBS="$LIBS -lcrypt")
1247fi
1248
1249
1250### Configure cryptographic random number support
1251
1252# Check wheter OpenSSL seeds itself
1253AC_MSG_CHECKING([whether OpenSSL's PRNG is internally seeded])
1254AC_TRY_RUN(
1255 [
1256#include <string.h>
1257#include <openssl/rand.h>
1258int main(void) { exit(RAND_status() == 1 ? 0 : 1); }
1259 ],
1260 [
1261 OPENSSL_SEEDS_ITSELF=yes
1262 AC_MSG_RESULT(yes)
1263 ],
1264 [
1265 AC_MSG_RESULT(no)
1266 # Default to use of the rand helper if OpenSSL doesn't
1267 # seed itself
1268 USE_RAND_HELPER=yes
1269 ]
1270)
1271
1272
1273# Do we want to force the use of the rand helper?
1274AC_ARG_WITH(rand-helper,
1275 [ --with-rand-helper Use subprocess to gather strong randomness ],
1276 [
1277 if test "x$withval" = "xno" ; then
1278 # Force use of OpenSSL's internal RNG, even if
1279 # the previous test showed it to be unseeded.
1280 if test -z "$OPENSSL_SEEDS_ITSELF" ; then
1281 AC_MSG_WARN([*** Forcing use of OpenSSL's non-self-seeding PRNG])
1282 OPENSSL_SEEDS_ITSELF=yes
1283 USE_RAND_HELPER=""
1284 fi
1285 else
1286 USE_RAND_HELPER=yes
1287 fi
1288 ],
1289)
1290
1291# Which randomness source do we use?
1292if test ! -z "$OPENSSL_SEEDS_ITSELF" -a -z "$USE_RAND_HELPER" ; then
1293 # OpenSSL only
1294 AC_DEFINE(OPENSSL_PRNG_ONLY)
1295 RAND_MSG="OpenSSL internal ONLY"
1296 INSTALL_SSH_RAND_HELPER=""
1297elif test ! -z "$USE_RAND_HELPER" ; then
1298 # install rand helper
1299 RAND_MSG="ssh-rand-helper"
1300 INSTALL_SSH_RAND_HELPER="yes"
1301fi
1302AC_SUBST(INSTALL_SSH_RAND_HELPER)
1303
1304### Configuration of ssh-rand-helper
1305
1306# PRNGD TCP socket
1307AC_ARG_WITH(prngd-port,
1308 [ --with-prngd-port=PORT read entropy from PRNGD/EGD TCP localhost:PORT],
1309 [
1310 case "$withval" in
1311 no)
1312 withval=""
1313 ;;
1314 [[0-9]]*)
1315 ;;
1316 *)
1317 AC_MSG_ERROR(You must specify a numeric port number for --with-prngd-port)
1318 ;;
1319 esac
1320 if test ! -z "$withval" ; then
1321 PRNGD_PORT="$withval"
1322 AC_DEFINE_UNQUOTED(PRNGD_PORT, $PRNGD_PORT)
1323 fi
1324 ]
1325)
1326
1327# PRNGD Unix domain socket
1328AC_ARG_WITH(prngd-socket,
1329 [ --with-prngd-socket=FILE read entropy from PRNGD/EGD socket FILE (default=/var/run/egd-pool)],
1330 [
1331 case "$withval" in
1332 yes)
1333 withval="/var/run/egd-pool"
1334 ;;
1335 no)
1336 withval=""
1337 ;;
1338 /*)
1339 ;;
1340 *)
1341 AC_MSG_ERROR(You must specify an absolute path to the entropy socket)
1342 ;;
1343 esac
1344
1345 if test ! -z "$withval" ; then
1346 if test ! -z "$PRNGD_PORT" ; then
1347 AC_MSG_ERROR(You may not specify both a PRNGD/EGD port and socket)
1348 fi
1349 if test ! -r "$withval" ; then
1350 AC_MSG_WARN(Entropy socket is not readable)
1351 fi
1352 PRNGD_SOCKET="$withval"
1353 AC_DEFINE_UNQUOTED(PRNGD_SOCKET, "$PRNGD_SOCKET")
1354 fi
1355 ],
1356 [
1357 # Check for existing socket only if we don't have a random device already
1358 if test "$USE_RAND_HELPER" = yes ; then
1359 AC_MSG_CHECKING(for PRNGD/EGD socket)
1360 # Insert other locations here
1361 for sock in /var/run/egd-pool /dev/egd-pool /etc/entropy; do
1362 if test -r $sock && $TEST_MINUS_S_SH -c "test -S $sock -o -p $sock" ; then
1363 PRNGD_SOCKET="$sock"
1364 AC_DEFINE_UNQUOTED(PRNGD_SOCKET, "$PRNGD_SOCKET")
1365 break;
1366 fi
1367 done
1368 if test ! -z "$PRNGD_SOCKET" ; then
1369 AC_MSG_RESULT($PRNGD_SOCKET)
1370 else
1371 AC_MSG_RESULT(not found)
1372 fi
1373 fi
1374 ]
1375)
1376
1377# Change default command timeout for hashing entropy source
1378entropy_timeout=200
1379AC_ARG_WITH(entropy-timeout,
1380 [ --with-entropy-timeout Specify entropy gathering command timeout (msec)],
1381 [
1382 if test "x$withval" != "xno" ; then
1383 entropy_timeout=$withval
1384 fi
1385 ]
1386)
1387AC_DEFINE_UNQUOTED(ENTROPY_TIMEOUT_MSEC, $entropy_timeout)
1388
1389SSH_PRIVSEP_USER=sshd
1390AC_ARG_WITH(privsep-user,
1391 [ --with-privsep-user=user Specify non-privileged user for privilege separation],
1392 [
1393 if test -n "$withval"; then
1394 SSH_PRIVSEP_USER=$withval
1395 fi
1396 ]
1397)
1398AC_DEFINE_UNQUOTED(SSH_PRIVSEP_USER, "$SSH_PRIVSEP_USER")
1399AC_SUBST(SSH_PRIVSEP_USER)
1400
1401# We do this little dance with the search path to insure
1402# that programs that we select for use by installed programs
1403# (which may be run by the super-user) come from trusted
1404# locations before they come from the user's private area.
1405# This should help avoid accidentally configuring some
1406# random version of a program in someone's personal bin.
1407
1408OPATH=$PATH
1409PATH=/bin:/usr/bin
1410test -h /bin 2> /dev/null && PATH=/usr/bin
1411test -d /sbin && PATH=$PATH:/sbin
1412test -d /usr/sbin && PATH=$PATH:/usr/sbin
1413PATH=$PATH:/etc:$OPATH
1414
1415# These programs are used by the command hashing source to gather entropy
1416OSSH_PATH_ENTROPY_PROG(PROG_LS, ls)
1417OSSH_PATH_ENTROPY_PROG(PROG_NETSTAT, netstat)
1418OSSH_PATH_ENTROPY_PROG(PROG_ARP, arp)
1419OSSH_PATH_ENTROPY_PROG(PROG_IFCONFIG, ifconfig)
1420OSSH_PATH_ENTROPY_PROG(PROG_JSTAT, jstat)
1421OSSH_PATH_ENTROPY_PROG(PROG_PS, ps)
1422OSSH_PATH_ENTROPY_PROG(PROG_SAR, sar)
1423OSSH_PATH_ENTROPY_PROG(PROG_W, w)
1424OSSH_PATH_ENTROPY_PROG(PROG_WHO, who)
1425OSSH_PATH_ENTROPY_PROG(PROG_LAST, last)
1426OSSH_PATH_ENTROPY_PROG(PROG_LASTLOG, lastlog)
1427OSSH_PATH_ENTROPY_PROG(PROG_DF, df)
1428OSSH_PATH_ENTROPY_PROG(PROG_VMSTAT, vmstat)
1429OSSH_PATH_ENTROPY_PROG(PROG_UPTIME, uptime)
1430OSSH_PATH_ENTROPY_PROG(PROG_IPCS, ipcs)
1431OSSH_PATH_ENTROPY_PROG(PROG_TAIL, tail)
1432# restore PATH
1433PATH=$OPATH
1434
1435# Where does ssh-rand-helper get its randomness from?
1436INSTALL_SSH_PRNG_CMDS=""
1437if test ! -z "$INSTALL_SSH_RAND_HELPER" ; then
1438 if test ! -z "$PRNGD_PORT" ; then
1439 RAND_HELPER_MSG="TCP localhost:$PRNGD_PORT"
1440 elif test ! -z "$PRNGD_SOCKET" ; then
1441 RAND_HELPER_MSG="Unix domain socket \"$PRNGD_SOCKET\""
1442 else
1443 RAND_HELPER_MSG="Command hashing (timeout $entropy_timeout)"
1444 RAND_HELPER_CMDHASH=yes
1445 INSTALL_SSH_PRNG_CMDS="yes"
1446 fi
1447fi
1448AC_SUBST(INSTALL_SSH_PRNG_CMDS)
1449
1450
1451# Cheap hack to ensure NEWS-OS libraries are arranged right.
1452if test ! -z "$SONY" ; then
1453 LIBS="$LIBS -liberty";
1454fi
1455
1456# Checks for data types
1457AC_CHECK_SIZEOF(char, 1)
1458AC_CHECK_SIZEOF(short int, 2)
1459AC_CHECK_SIZEOF(int, 4)
1460AC_CHECK_SIZEOF(long int, 4)
1461AC_CHECK_SIZEOF(long long int, 8)
1462
1463# Sanity check long long for some platforms (AIX)
1464if test "x$ac_cv_sizeof_long_long_int" = "x4" ; then
1465 ac_cv_sizeof_long_long_int=0
1466fi
1467
1468# More checks for data types
1469AC_CACHE_CHECK([for u_int type], ac_cv_have_u_int, [
1470 AC_TRY_COMPILE(
1471 [ #include <sys/types.h> ],
1472 [ u_int a; a = 1;],
1473 [ ac_cv_have_u_int="yes" ],
1474 [ ac_cv_have_u_int="no" ]
1475 )
1476])
1477if test "x$ac_cv_have_u_int" = "xyes" ; then
1478 AC_DEFINE(HAVE_U_INT)
1479 have_u_int=1
1480fi
1481
1482AC_CACHE_CHECK([for intXX_t types], ac_cv_have_intxx_t, [
1483 AC_TRY_COMPILE(
1484 [ #include <sys/types.h> ],
1485 [ int8_t a; int16_t b; int32_t c; a = b = c = 1;],
1486 [ ac_cv_have_intxx_t="yes" ],
1487 [ ac_cv_have_intxx_t="no" ]
1488 )
1489])
1490if test "x$ac_cv_have_intxx_t" = "xyes" ; then
1491 AC_DEFINE(HAVE_INTXX_T)
1492 have_intxx_t=1
1493fi
1494
1495if (test -z "$have_intxx_t" && \
1496 test "x$ac_cv_header_stdint_h" = "xyes")
1497then
1498 AC_MSG_CHECKING([for intXX_t types in stdint.h])
1499 AC_TRY_COMPILE(
1500 [ #include <stdint.h> ],
1501 [ int8_t a; int16_t b; int32_t c; a = b = c = 1;],
1502 [
1503 AC_DEFINE(HAVE_INTXX_T)
1504 AC_MSG_RESULT(yes)
1505 ],
1506 [ AC_MSG_RESULT(no) ]
1507 )
1508fi
1509
1510AC_CACHE_CHECK([for int64_t type], ac_cv_have_int64_t, [
1511 AC_TRY_COMPILE(
1512 [
1513#include <sys/types.h>
1514#ifdef HAVE_STDINT_H
1515# include <stdint.h>
1516#endif
1517#include <sys/socket.h>
1518#ifdef HAVE_SYS_BITYPES_H
1519# include <sys/bitypes.h>
1520#endif
1521 ],
1522 [ int64_t a; a = 1;],
1523 [ ac_cv_have_int64_t="yes" ],
1524 [ ac_cv_have_int64_t="no" ]
1525 )
1526])
1527if test "x$ac_cv_have_int64_t" = "xyes" ; then
1528 AC_DEFINE(HAVE_INT64_T)
1529fi
1530
1531AC_CACHE_CHECK([for u_intXX_t types], ac_cv_have_u_intxx_t, [
1532 AC_TRY_COMPILE(
1533 [ #include <sys/types.h> ],
1534 [ u_int8_t a; u_int16_t b; u_int32_t c; a = b = c = 1;],
1535 [ ac_cv_have_u_intxx_t="yes" ],
1536 [ ac_cv_have_u_intxx_t="no" ]
1537 )
1538])
1539if test "x$ac_cv_have_u_intxx_t" = "xyes" ; then
1540 AC_DEFINE(HAVE_U_INTXX_T)
1541 have_u_intxx_t=1
1542fi
1543
1544if test -z "$have_u_intxx_t" ; then
1545 AC_MSG_CHECKING([for u_intXX_t types in sys/socket.h])
1546 AC_TRY_COMPILE(
1547 [ #include <sys/socket.h> ],
1548 [ u_int8_t a; u_int16_t b; u_int32_t c; a = b = c = 1;],
1549 [
1550 AC_DEFINE(HAVE_U_INTXX_T)
1551 AC_MSG_RESULT(yes)
1552 ],
1553 [ AC_MSG_RESULT(no) ]
1554 )
1555fi
1556
1557AC_CACHE_CHECK([for u_int64_t types], ac_cv_have_u_int64_t, [
1558 AC_TRY_COMPILE(
1559 [ #include <sys/types.h> ],
1560 [ u_int64_t a; a = 1;],
1561 [ ac_cv_have_u_int64_t="yes" ],
1562 [ ac_cv_have_u_int64_t="no" ]
1563 )
1564])
1565if test "x$ac_cv_have_u_int64_t" = "xyes" ; then
1566 AC_DEFINE(HAVE_U_INT64_T)
1567 have_u_int64_t=1
1568fi
1569
1570if test -z "$have_u_int64_t" ; then
1571 AC_MSG_CHECKING([for u_int64_t type in sys/bitypes.h])
1572 AC_TRY_COMPILE(
1573 [ #include <sys/bitypes.h> ],
1574 [ u_int64_t a; a = 1],
1575 [
1576 AC_DEFINE(HAVE_U_INT64_T)
1577 AC_MSG_RESULT(yes)
1578 ],
1579 [ AC_MSG_RESULT(no) ]
1580 )
1581fi
1582
1583if test -z "$have_u_intxx_t" ; then
1584 AC_CACHE_CHECK([for uintXX_t types], ac_cv_have_uintxx_t, [
1585 AC_TRY_COMPILE(
1586 [
1587#include <sys/types.h>
1588 ],
1589 [ uint8_t a; uint16_t b; uint32_t c; a = b = c = 1; ],
1590 [ ac_cv_have_uintxx_t="yes" ],
1591 [ ac_cv_have_uintxx_t="no" ]
1592 )
1593 ])
1594 if test "x$ac_cv_have_uintxx_t" = "xyes" ; then
1595 AC_DEFINE(HAVE_UINTXX_T)
1596 fi
1597fi
1598
1599if test -z "$have_uintxx_t" ; then
1600 AC_MSG_CHECKING([for uintXX_t types in stdint.h])
1601 AC_TRY_COMPILE(
1602 [ #include <stdint.h> ],
1603 [ uint8_t a; uint16_t b; uint32_t c; a = b = c = 1;],
1604 [
1605 AC_DEFINE(HAVE_UINTXX_T)
1606 AC_MSG_RESULT(yes)
1607 ],
1608 [ AC_MSG_RESULT(no) ]
1609 )
1610fi
1611
1612if (test -z "$have_u_intxx_t" || test -z "$have_intxx_t" && \
1613 test "x$ac_cv_header_sys_bitypes_h" = "xyes")
1614then
1615 AC_MSG_CHECKING([for intXX_t and u_intXX_t types in sys/bitypes.h])
1616 AC_TRY_COMPILE(
1617 [
1618#include <sys/bitypes.h>
1619 ],
1620 [
1621 int8_t a; int16_t b; int32_t c;
1622 u_int8_t e; u_int16_t f; u_int32_t g;
1623 a = b = c = e = f = g = 1;
1624 ],
1625 [
1626 AC_DEFINE(HAVE_U_INTXX_T)
1627 AC_DEFINE(HAVE_INTXX_T)
1628 AC_MSG_RESULT(yes)
1629 ],
1630 [AC_MSG_RESULT(no)]
1631 )
1632fi
1633
1634
1635AC_CACHE_CHECK([for u_char], ac_cv_have_u_char, [
1636 AC_TRY_COMPILE(
1637 [
1638#include <sys/types.h>
1639 ],
1640 [ u_char foo; foo = 125; ],
1641 [ ac_cv_have_u_char="yes" ],
1642 [ ac_cv_have_u_char="no" ]
1643 )
1644])
1645if test "x$ac_cv_have_u_char" = "xyes" ; then
1646 AC_DEFINE(HAVE_U_CHAR)
1647fi
1648
1649TYPE_SOCKLEN_T
1650
1651AC_CHECK_TYPES(sig_atomic_t,,,[#include <signal.h>])
1652
1653AC_CACHE_CHECK([for size_t], ac_cv_have_size_t, [
1654 AC_TRY_COMPILE(
1655 [
1656#include <sys/types.h>
1657 ],
1658 [ size_t foo; foo = 1235; ],
1659 [ ac_cv_have_size_t="yes" ],
1660 [ ac_cv_have_size_t="no" ]
1661 )
1662])
1663if test "x$ac_cv_have_size_t" = "xyes" ; then
1664 AC_DEFINE(HAVE_SIZE_T)
1665fi
1666
1667AC_CACHE_CHECK([for ssize_t], ac_cv_have_ssize_t, [
1668 AC_TRY_COMPILE(
1669 [
1670#include <sys/types.h>
1671 ],
1672 [ ssize_t foo; foo = 1235; ],
1673 [ ac_cv_have_ssize_t="yes" ],
1674 [ ac_cv_have_ssize_t="no" ]
1675 )
1676])
1677if test "x$ac_cv_have_ssize_t" = "xyes" ; then
1678 AC_DEFINE(HAVE_SSIZE_T)
1679fi
1680
1681AC_CACHE_CHECK([for clock_t], ac_cv_have_clock_t, [
1682 AC_TRY_COMPILE(
1683 [
1684#include <time.h>
1685 ],
1686 [ clock_t foo; foo = 1235; ],
1687 [ ac_cv_have_clock_t="yes" ],
1688 [ ac_cv_have_clock_t="no" ]
1689 )
1690])
1691if test "x$ac_cv_have_clock_t" = "xyes" ; then
1692 AC_DEFINE(HAVE_CLOCK_T)
1693fi
1694
1695AC_CACHE_CHECK([for sa_family_t], ac_cv_have_sa_family_t, [
1696 AC_TRY_COMPILE(
1697 [
1698#include <sys/types.h>
1699#include <sys/socket.h>
1700 ],
1701 [ sa_family_t foo; foo = 1235; ],
1702 [ ac_cv_have_sa_family_t="yes" ],
1703 [ AC_TRY_COMPILE(
1704 [
1705#include <sys/types.h>
1706#include <sys/socket.h>
1707#include <netinet/in.h>
1708 ],
1709 [ sa_family_t foo; foo = 1235; ],
1710 [ ac_cv_have_sa_family_t="yes" ],
1711
1712 [ ac_cv_have_sa_family_t="no" ]
1713 )]
1714 )
1715])
1716if test "x$ac_cv_have_sa_family_t" = "xyes" ; then
1717 AC_DEFINE(HAVE_SA_FAMILY_T)
1718fi
1719
1720AC_CACHE_CHECK([for pid_t], ac_cv_have_pid_t, [
1721 AC_TRY_COMPILE(
1722 [
1723#include <sys/types.h>
1724 ],
1725 [ pid_t foo; foo = 1235; ],
1726 [ ac_cv_have_pid_t="yes" ],
1727 [ ac_cv_have_pid_t="no" ]
1728 )
1729])
1730if test "x$ac_cv_have_pid_t" = "xyes" ; then
1731 AC_DEFINE(HAVE_PID_T)
1732fi
1733
1734AC_CACHE_CHECK([for mode_t], ac_cv_have_mode_t, [
1735 AC_TRY_COMPILE(
1736 [
1737#include <sys/types.h>
1738 ],
1739 [ mode_t foo; foo = 1235; ],
1740 [ ac_cv_have_mode_t="yes" ],
1741 [ ac_cv_have_mode_t="no" ]
1742 )
1743])
1744if test "x$ac_cv_have_mode_t" = "xyes" ; then
1745 AC_DEFINE(HAVE_MODE_T)
1746fi
1747
1748
1749AC_CACHE_CHECK([for struct sockaddr_storage], ac_cv_have_struct_sockaddr_storage, [
1750 AC_TRY_COMPILE(
1751 [
1752#include <sys/types.h>
1753#include <sys/socket.h>
1754 ],
1755 [ struct sockaddr_storage s; ],
1756 [ ac_cv_have_struct_sockaddr_storage="yes" ],
1757 [ ac_cv_have_struct_sockaddr_storage="no" ]
1758 )
1759])
1760if test "x$ac_cv_have_struct_sockaddr_storage" = "xyes" ; then
1761 AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE)
1762fi
1763
1764AC_CACHE_CHECK([for struct sockaddr_in6], ac_cv_have_struct_sockaddr_in6, [
1765 AC_TRY_COMPILE(
1766 [
1767#include <sys/types.h>
1768#include <netinet/in.h>
1769 ],
1770 [ struct sockaddr_in6 s; s.sin6_family = 0; ],
1771 [ ac_cv_have_struct_sockaddr_in6="yes" ],
1772 [ ac_cv_have_struct_sockaddr_in6="no" ]
1773 )
1774])
1775if test "x$ac_cv_have_struct_sockaddr_in6" = "xyes" ; then
1776 AC_DEFINE(HAVE_STRUCT_SOCKADDR_IN6)
1777fi
1778
1779AC_CACHE_CHECK([for struct in6_addr], ac_cv_have_struct_in6_addr, [
1780 AC_TRY_COMPILE(
1781 [
1782#include <sys/types.h>
1783#include <netinet/in.h>
1784 ],
1785 [ struct in6_addr s; s.s6_addr[0] = 0; ],
1786 [ ac_cv_have_struct_in6_addr="yes" ],
1787 [ ac_cv_have_struct_in6_addr="no" ]
1788 )
1789])
1790if test "x$ac_cv_have_struct_in6_addr" = "xyes" ; then
1791 AC_DEFINE(HAVE_STRUCT_IN6_ADDR)
1792fi
1793
1794AC_CACHE_CHECK([for struct addrinfo], ac_cv_have_struct_addrinfo, [
1795 AC_TRY_COMPILE(
1796 [
1797#include <sys/types.h>
1798#include <sys/socket.h>
1799#include <netdb.h>
1800 ],
1801 [ struct addrinfo s; s.ai_flags = AI_PASSIVE; ],
1802 [ ac_cv_have_struct_addrinfo="yes" ],
1803 [ ac_cv_have_struct_addrinfo="no" ]
1804 )
1805])
1806if test "x$ac_cv_have_struct_addrinfo" = "xyes" ; then
1807 AC_DEFINE(HAVE_STRUCT_ADDRINFO)
1808fi
1809
1810AC_CACHE_CHECK([for struct timeval], ac_cv_have_struct_timeval, [
1811 AC_TRY_COMPILE(
1812 [ #include <sys/time.h> ],
1813 [ struct timeval tv; tv.tv_sec = 1;],
1814 [ ac_cv_have_struct_timeval="yes" ],
1815 [ ac_cv_have_struct_timeval="no" ]
1816 )
1817])
1818if test "x$ac_cv_have_struct_timeval" = "xyes" ; then
1819 AC_DEFINE(HAVE_STRUCT_TIMEVAL)
1820 have_struct_timeval=1
1821fi
1822
1823AC_CHECK_TYPES(struct timespec)
1824
1825# We need int64_t or else certian parts of the compile will fail.
1826if test "x$ac_cv_have_int64_t" = "xno" -a \
1827 "x$ac_cv_sizeof_long_int" != "x8" -a \
1828 "x$ac_cv_sizeof_long_long_int" = "x0" ; then
1829 echo "OpenSSH requires int64_t support. Contact your vendor or install"
1830 echo "an alternative compiler (I.E., GCC) before continuing."
1831 echo ""
1832 exit 1;
1833else
1834dnl test snprintf (broken on SCO w/gcc)
1835 AC_TRY_RUN(
1836 [
1837#include <stdio.h>
1838#include <string.h>
1839#ifdef HAVE_SNPRINTF
1840main()
1841{
1842 char buf[50];
1843 char expected_out[50];
1844 int mazsize = 50 ;
1845#if (SIZEOF_LONG_INT == 8)
1846 long int num = 0x7fffffffffffffff;
1847#else
1848 long long num = 0x7fffffffffffffffll;
1849#endif
1850 strcpy(expected_out, "9223372036854775807");
1851 snprintf(buf, mazsize, "%lld", num);
1852 if(strcmp(buf, expected_out) != 0)
1853 exit(1);
1854 exit(0);
1855}
1856#else
1857main() { exit(0); }
1858#endif
1859 ], [ true ], [ AC_DEFINE(BROKEN_SNPRINTF) ]
1860 )
1861fi
1862
1863dnl Checks for structure members
1864OSSH_CHECK_HEADER_FOR_FIELD(ut_host, utmp.h, HAVE_HOST_IN_UTMP)
1865OSSH_CHECK_HEADER_FOR_FIELD(ut_host, utmpx.h, HAVE_HOST_IN_UTMPX)
1866OSSH_CHECK_HEADER_FOR_FIELD(syslen, utmpx.h, HAVE_SYSLEN_IN_UTMPX)
1867OSSH_CHECK_HEADER_FOR_FIELD(ut_pid, utmp.h, HAVE_PID_IN_UTMP)
1868OSSH_CHECK_HEADER_FOR_FIELD(ut_type, utmp.h, HAVE_TYPE_IN_UTMP)
1869OSSH_CHECK_HEADER_FOR_FIELD(ut_type, utmpx.h, HAVE_TYPE_IN_UTMPX)
1870OSSH_CHECK_HEADER_FOR_FIELD(ut_tv, utmp.h, HAVE_TV_IN_UTMP)
1871OSSH_CHECK_HEADER_FOR_FIELD(ut_id, utmp.h, HAVE_ID_IN_UTMP)
1872OSSH_CHECK_HEADER_FOR_FIELD(ut_id, utmpx.h, HAVE_ID_IN_UTMPX)
1873OSSH_CHECK_HEADER_FOR_FIELD(ut_addr, utmp.h, HAVE_ADDR_IN_UTMP)
1874OSSH_CHECK_HEADER_FOR_FIELD(ut_addr, utmpx.h, HAVE_ADDR_IN_UTMPX)
1875OSSH_CHECK_HEADER_FOR_FIELD(ut_addr_v6, utmp.h, HAVE_ADDR_V6_IN_UTMP)
1876OSSH_CHECK_HEADER_FOR_FIELD(ut_addr_v6, utmpx.h, HAVE_ADDR_V6_IN_UTMPX)
1877OSSH_CHECK_HEADER_FOR_FIELD(ut_exit, utmp.h, HAVE_EXIT_IN_UTMP)
1878OSSH_CHECK_HEADER_FOR_FIELD(ut_time, utmp.h, HAVE_TIME_IN_UTMP)
1879OSSH_CHECK_HEADER_FOR_FIELD(ut_time, utmpx.h, HAVE_TIME_IN_UTMPX)
1880OSSH_CHECK_HEADER_FOR_FIELD(ut_tv, utmpx.h, HAVE_TV_IN_UTMPX)
1881
1882AC_CHECK_MEMBERS([struct stat.st_blksize])
1883
1884AC_CACHE_CHECK([for ss_family field in struct sockaddr_storage],
1885 ac_cv_have_ss_family_in_struct_ss, [
1886 AC_TRY_COMPILE(
1887 [
1888#include <sys/types.h>
1889#include <sys/socket.h>
1890 ],
1891 [ struct sockaddr_storage s; s.ss_family = 1; ],
1892 [ ac_cv_have_ss_family_in_struct_ss="yes" ],
1893 [ ac_cv_have_ss_family_in_struct_ss="no" ],
1894 )
1895])
1896if test "x$ac_cv_have_ss_family_in_struct_ss" = "xyes" ; then
1897 AC_DEFINE(HAVE_SS_FAMILY_IN_SS)
1898fi
1899
1900AC_CACHE_CHECK([for __ss_family field in struct sockaddr_storage],
1901 ac_cv_have___ss_family_in_struct_ss, [
1902 AC_TRY_COMPILE(
1903 [
1904#include <sys/types.h>
1905#include <sys/socket.h>
1906 ],
1907 [ struct sockaddr_storage s; s.__ss_family = 1; ],
1908 [ ac_cv_have___ss_family_in_struct_ss="yes" ],
1909 [ ac_cv_have___ss_family_in_struct_ss="no" ]
1910 )
1911])
1912if test "x$ac_cv_have___ss_family_in_struct_ss" = "xyes" ; then
1913 AC_DEFINE(HAVE___SS_FAMILY_IN_SS)
1914fi
1915
1916AC_CACHE_CHECK([for pw_class field in struct passwd],
1917 ac_cv_have_pw_class_in_struct_passwd, [
1918 AC_TRY_COMPILE(
1919 [
1920#include <pwd.h>
1921 ],
1922 [ struct passwd p; p.pw_class = 0; ],
1923 [ ac_cv_have_pw_class_in_struct_passwd="yes" ],
1924 [ ac_cv_have_pw_class_in_struct_passwd="no" ]
1925 )
1926])
1927if test "x$ac_cv_have_pw_class_in_struct_passwd" = "xyes" ; then
1928 AC_DEFINE(HAVE_PW_CLASS_IN_PASSWD)
1929fi
1930
1931AC_CACHE_CHECK([for pw_expire field in struct passwd],
1932 ac_cv_have_pw_expire_in_struct_passwd, [
1933 AC_TRY_COMPILE(
1934 [
1935#include <pwd.h>
1936 ],
1937 [ struct passwd p; p.pw_expire = 0; ],
1938 [ ac_cv_have_pw_expire_in_struct_passwd="yes" ],
1939 [ ac_cv_have_pw_expire_in_struct_passwd="no" ]
1940 )
1941])
1942if test "x$ac_cv_have_pw_expire_in_struct_passwd" = "xyes" ; then
1943 AC_DEFINE(HAVE_PW_EXPIRE_IN_PASSWD)
1944fi
1945
1946AC_CACHE_CHECK([for pw_change field in struct passwd],
1947 ac_cv_have_pw_change_in_struct_passwd, [
1948 AC_TRY_COMPILE(
1949 [
1950#include <pwd.h>
1951 ],
1952 [ struct passwd p; p.pw_change = 0; ],
1953 [ ac_cv_have_pw_change_in_struct_passwd="yes" ],
1954 [ ac_cv_have_pw_change_in_struct_passwd="no" ]
1955 )
1956])
1957if test "x$ac_cv_have_pw_change_in_struct_passwd" = "xyes" ; then
1958 AC_DEFINE(HAVE_PW_CHANGE_IN_PASSWD)
1959fi
1960
1961dnl make sure we're using the real structure members and not defines
1962AC_CACHE_CHECK([for msg_accrights field in struct msghdr],
1963 ac_cv_have_accrights_in_msghdr, [
1964 AC_TRY_RUN(
1965 [
1966#include <sys/types.h>
1967#include <sys/socket.h>
1968#include <sys/uio.h>
1969int main() {
1970#ifdef msg_accrights
1971exit(1);
1972#endif
1973struct msghdr m;
1974m.msg_accrights = 0;
1975exit(0);
1976}
1977 ],
1978 [ ac_cv_have_accrights_in_msghdr="yes" ],
1979 [ ac_cv_have_accrights_in_msghdr="no" ]
1980 )
1981])
1982if test "x$ac_cv_have_accrights_in_msghdr" = "xyes" ; then
1983 AC_DEFINE(HAVE_ACCRIGHTS_IN_MSGHDR)
1984fi
1985
1986AC_CACHE_CHECK([for msg_control field in struct msghdr],
1987 ac_cv_have_control_in_msghdr, [
1988 AC_TRY_RUN(
1989 [
1990#include <sys/types.h>
1991#include <sys/socket.h>
1992#include <sys/uio.h>
1993int main() {
1994#ifdef msg_control
1995exit(1);
1996#endif
1997struct msghdr m;
1998m.msg_control = 0;
1999exit(0);
2000}
2001 ],
2002 [ ac_cv_have_control_in_msghdr="yes" ],
2003 [ ac_cv_have_control_in_msghdr="no" ]
2004 )
2005])
2006if test "x$ac_cv_have_control_in_msghdr" = "xyes" ; then
2007 AC_DEFINE(HAVE_CONTROL_IN_MSGHDR)
2008fi
2009
2010AC_CACHE_CHECK([if libc defines __progname], ac_cv_libc_defines___progname, [
2011 AC_TRY_LINK([],
2012 [ extern char *__progname; printf("%s", __progname); ],
2013 [ ac_cv_libc_defines___progname="yes" ],
2014 [ ac_cv_libc_defines___progname="no" ]
2015 )
2016])
2017if test "x$ac_cv_libc_defines___progname" = "xyes" ; then
2018 AC_DEFINE(HAVE___PROGNAME)
2019fi
2020
2021AC_CACHE_CHECK([whether $CC implements __FUNCTION__], ac_cv_cc_implements___FUNCTION__, [
2022 AC_TRY_LINK([
2023#include <stdio.h>
2024],
2025 [ printf("%s", __FUNCTION__); ],
2026 [ ac_cv_cc_implements___FUNCTION__="yes" ],
2027 [ ac_cv_cc_implements___FUNCTION__="no" ]
2028 )
2029])
2030if test "x$ac_cv_cc_implements___FUNCTION__" = "xyes" ; then
2031 AC_DEFINE(HAVE___FUNCTION__)
2032fi
2033
2034AC_CACHE_CHECK([whether $CC implements __func__], ac_cv_cc_implements___func__, [
2035 AC_TRY_LINK([
2036#include <stdio.h>
2037],
2038 [ printf("%s", __func__); ],
2039 [ ac_cv_cc_implements___func__="yes" ],
2040 [ ac_cv_cc_implements___func__="no" ]
2041 )
2042])
2043if test "x$ac_cv_cc_implements___func__" = "xyes" ; then
2044 AC_DEFINE(HAVE___func__)
2045fi
2046
2047AC_CACHE_CHECK([whether getopt has optreset support],
2048 ac_cv_have_getopt_optreset, [
2049 AC_TRY_LINK(
2050 [
2051#include <getopt.h>
2052 ],
2053 [ extern int optreset; optreset = 0; ],
2054 [ ac_cv_have_getopt_optreset="yes" ],
2055 [ ac_cv_have_getopt_optreset="no" ]
2056 )
2057])
2058if test "x$ac_cv_have_getopt_optreset" = "xyes" ; then
2059 AC_DEFINE(HAVE_GETOPT_OPTRESET)
2060fi
2061
2062AC_CACHE_CHECK([if libc defines sys_errlist], ac_cv_libc_defines_sys_errlist, [
2063 AC_TRY_LINK([],
2064 [ extern const char *const sys_errlist[]; printf("%s", sys_errlist[0]);],
2065 [ ac_cv_libc_defines_sys_errlist="yes" ],
2066 [ ac_cv_libc_defines_sys_errlist="no" ]
2067 )
2068])
2069if test "x$ac_cv_libc_defines_sys_errlist" = "xyes" ; then
2070 AC_DEFINE(HAVE_SYS_ERRLIST)
2071fi
2072
2073
2074AC_CACHE_CHECK([if libc defines sys_nerr], ac_cv_libc_defines_sys_nerr, [
2075 AC_TRY_LINK([],
2076 [ extern int sys_nerr; printf("%i", sys_nerr);],
2077 [ ac_cv_libc_defines_sys_nerr="yes" ],
2078 [ ac_cv_libc_defines_sys_nerr="no" ]
2079 )
2080])
2081if test "x$ac_cv_libc_defines_sys_nerr" = "xyes" ; then
2082 AC_DEFINE(HAVE_SYS_NERR)
2083fi
2084
2085SCARD_MSG="no"
2086# Check whether user wants sectok support
2087AC_ARG_WITH(sectok,
2088 [ --with-sectok Enable smartcard support using libsectok],
2089 [
2090 if test "x$withval" != "xno" ; then
2091 if test "x$withval" != "xyes" ; then
2092 CPPFLAGS="$CPPFLAGS -I${withval}"
2093 LDFLAGS="$LDFLAGS -L${withval}"
2094 if test ! -z "$need_dash_r" ; then
2095 LDFLAGS="$LDFLAGS -R${withval}"
2096 fi
2097 if test ! -z "$blibpath" ; then
2098 blibpath="$blibpath:${withval}"
2099 fi
2100 fi
2101 AC_CHECK_HEADERS(sectok.h)
2102 if test "$ac_cv_header_sectok_h" != yes; then
2103 AC_MSG_ERROR(Can't find sectok.h)
2104 fi
2105 AC_CHECK_LIB(sectok, sectok_open)
2106 if test "$ac_cv_lib_sectok_sectok_open" != yes; then
2107 AC_MSG_ERROR(Can't find libsectok)
2108 fi
2109 AC_DEFINE(SMARTCARD)
2110 AC_DEFINE(USE_SECTOK)
2111 SCARD_MSG="yes, using sectok"
2112 fi
2113 ]
2114)
2115
2116# Check whether user wants OpenSC support
2117AC_ARG_WITH(opensc,
2118 AC_HELP_STRING([--with-opensc=PFX],
2119 [Enable smartcard support using OpenSC]),
2120 opensc_config_prefix="$withval", opensc_config_prefix="")
2121if test x$opensc_config_prefix != x ; then
2122 OPENSC_CONFIG=$opensc_config_prefix/bin/opensc-config
2123 AC_PATH_PROG(OPENSC_CONFIG, opensc-config, no)
2124 if test "$OPENSC_CONFIG" != "no"; then
2125 LIBOPENSC_CFLAGS=`$OPENSC_CONFIG --cflags`
2126 LIBOPENSC_LIBS=`$OPENSC_CONFIG --libs`
2127 CPPFLAGS="$CPPFLAGS $LIBOPENSC_CFLAGS"
2128 LDFLAGS="$LDFLAGS $LIBOPENSC_LIBS"
2129 AC_DEFINE(SMARTCARD)
2130 AC_DEFINE(USE_OPENSC)
2131 SCARD_MSG="yes, using OpenSC"
2132 fi
2133fi
2134
2135# Check libraries needed by DNS fingerprint support
2136AC_SEARCH_LIBS(getrrsetbyname, resolv,
2137 [AC_DEFINE(HAVE_GETRRSETBYNAME)],
2138 [
2139 # Needed by our getrrsetbyname()
2140 AC_SEARCH_LIBS(res_query, resolv)
2141 AC_SEARCH_LIBS(dn_expand, resolv)
2142 AC_CHECK_FUNCS(_getshort _getlong)
2143 AC_CHECK_MEMBER(HEADER.ad,
2144 [AC_DEFINE(HAVE_HEADER_AD)],,
2145 [#include <arpa/nameser.h>])
2146 ])
2147
2148# Check whether user wants Kerberos 5 support
2149KRB5_MSG="no"
2150AC_ARG_WITH(kerberos5,
2151 [ --with-kerberos5=PATH Enable Kerberos 5 support],
2152 [ if test "x$withval" != "xno" ; then
2153 if test "x$withval" = "xyes" ; then
2154 KRB5ROOT="/usr/local"
2155 else
2156 KRB5ROOT=${withval}
2157 fi
2158
2159 AC_DEFINE(KRB5)
2160 KRB5_MSG="yes"
2161
2162 AC_MSG_CHECKING(for krb5-config)
2163 if test -x $KRB5ROOT/bin/krb5-config ; then
2164 KRB5CONF=$KRB5ROOT/bin/krb5-config
2165 AC_MSG_RESULT($KRB5CONF)
2166
2167 AC_MSG_CHECKING(for gssapi support)
2168 if $KRB5CONF | grep gssapi >/dev/null ; then
2169 AC_MSG_RESULT(yes)
2170 AC_DEFINE(GSSAPI)
2171 k5confopts=gssapi
2172 else
2173 AC_MSG_RESULT(no)
2174 k5confopts=""
2175 fi
2176 K5CFLAGS="`$KRB5CONF --cflags $k5confopts`"
2177 K5LIBS="`$KRB5CONF --libs $k5confopts`"
2178 CPPFLAGS="$CPPFLAGS $K5CFLAGS"
2179 AC_MSG_CHECKING(whether we are using Heimdal)
2180 AC_TRY_COMPILE([ #include <krb5.h> ],
2181 [ char *tmp = heimdal_version; ],
2182 [ AC_MSG_RESULT(yes)
2183 AC_DEFINE(HEIMDAL) ],
2184 AC_MSG_RESULT(no)
2185 )
2186 else
2187 AC_MSG_RESULT(no)
2188 CPPFLAGS="$CPPFLAGS -I${KRB5ROOT}/include"
2189 LDFLAGS="$LDFLAGS -L${KRB5ROOT}/lib"
2190 AC_MSG_CHECKING(whether we are using Heimdal)
2191 AC_TRY_COMPILE([ #include <krb5.h> ],
2192 [ char *tmp = heimdal_version; ],
2193 [ AC_MSG_RESULT(yes)
2194 AC_DEFINE(HEIMDAL)
2195 K5LIBS="-lkrb5 -ldes -lcom_err -lasn1 -lroken"
2196 ],
2197 [ AC_MSG_RESULT(no)
2198 K5LIBS="-lkrb5 -lk5crypto -lcom_err"
2199 ]
2200 )
2201 AC_SEARCH_LIBS(dn_expand, resolv)
2202
2203 AC_CHECK_LIB(gssapi,gss_init_sec_context,
2204 [ AC_DEFINE(GSSAPI)
2205 K5LIBS="-lgssapi $K5LIBS" ],
2206 [ AC_CHECK_LIB(gssapi_krb5,gss_init_sec_context,
2207 [ AC_DEFINE(GSSAPI)
2208 K5LIBS="-lgssapi_krb5 $K5LIBS" ],
2209 AC_MSG_WARN([Cannot find any suitable gss-api library - build may fail]),
2210 $K5LIBS)
2211 ],
2212 $K5LIBS)
2213
2214 AC_CHECK_HEADER(gssapi.h, ,
2215 [ unset ac_cv_header_gssapi_h
2216 CPPFLAGS="$CPPFLAGS -I${KRB5ROOT}/include/gssapi"
2217 AC_CHECK_HEADERS(gssapi.h, ,
2218 AC_MSG_WARN([Cannot find any suitable gss-api header - build may fail])
2219 )
2220 ]
2221 )
2222
2223 oldCPP="$CPPFLAGS"
2224 CPPFLAGS="$CPPFLAGS -I${KRB5ROOT}/include/gssapi"
2225 AC_CHECK_HEADER(gssapi_krb5.h, ,
2226 [ CPPFLAGS="$oldCPP" ])
2227
2228 fi
2229 if test ! -z "$need_dash_r" ; then
2230 LDFLAGS="$LDFLAGS -R${KRB5ROOT}/lib"
2231 fi
2232 if test ! -z "$blibpath" ; then
2233 blibpath="$blibpath:${KRB5ROOT}/lib"
2234 fi
2235 fi
2236
2237 AC_CHECK_HEADERS(gssapi.h gssapi/gssapi.h)
2238 AC_CHECK_HEADERS(gssapi_krb5.h gssapi/gssapi_krb5.h)
2239 AC_CHECK_HEADERS(gssapi_generic.h gssapi/gssapi_generic.h)
2240
2241 LIBS="$LIBS $K5LIBS"
2242 AC_SEARCH_LIBS(k_hasafs, kafs, AC_DEFINE(USE_AFS))
2243 AC_SEARCH_LIBS(krb5_init_ets, $K5LIBS, AC_DEFINE(KRB5_INIT_ETS))
2244 ]
2245)
2246
2247# Looking for programs, paths and files
2248
2249PRIVSEP_PATH=/var/empty
2250AC_ARG_WITH(privsep-path,
2251 [ --with-privsep-path=xxx Path for privilege separation chroot (default=/var/empty)],
2252 [
2253 if test "x$withval" != "$no" ; then
2254 PRIVSEP_PATH=$withval
2255 fi
2256 ]
2257)
2258AC_SUBST(PRIVSEP_PATH)
2259
2260AC_ARG_WITH(xauth,
2261 [ --with-xauth=PATH Specify path to xauth program ],
2262 [
2263 if test "x$withval" != "xno" ; then
2264 xauth_path=$withval
2265 fi
2266 ],
2267 [
2268 TestPath="$PATH"
2269 TestPath="${TestPath}${PATH_SEPARATOR}/usr/X/bin"
2270 TestPath="${TestPath}${PATH_SEPARATOR}/usr/bin/X11"
2271 TestPath="${TestPath}${PATH_SEPARATOR}/usr/X11R6/bin"
2272 TestPath="${TestPath}${PATH_SEPARATOR}/usr/openwin/bin"
2273 AC_PATH_PROG(xauth_path, xauth, , $TestPath)
2274 if (test ! -z "$xauth_path" && test -x "/usr/openwin/bin/xauth") ; then
2275 xauth_path="/usr/openwin/bin/xauth"
2276 fi
2277 ]
2278)
2279
2280STRIP_OPT=-s
2281AC_ARG_ENABLE(strip,
2282 [ --disable-strip Disable calling strip(1) on install],
2283 [
2284 if test "x$enableval" = "xno" ; then
2285 STRIP_OPT=
2286 fi
2287 ]
2288)
2289AC_SUBST(STRIP_OPT)
2290
2291if test -z "$xauth_path" ; then
2292 XAUTH_PATH="undefined"
2293 AC_SUBST(XAUTH_PATH)
2294else
2295 AC_DEFINE_UNQUOTED(XAUTH_PATH, "$xauth_path")
2296 XAUTH_PATH=$xauth_path
2297 AC_SUBST(XAUTH_PATH)
2298fi
2299
2300# Check for mail directory (last resort if we cannot get it from headers)
2301if test ! -z "$MAIL" ; then
2302 maildir=`dirname $MAIL`
2303 AC_DEFINE_UNQUOTED(MAIL_DIRECTORY, "$maildir")
2304fi
2305
2306if test -z "$no_dev_ptmx" ; then
2307 if test "x$disable_ptmx_check" != "xyes" ; then
2308 AC_CHECK_FILE("/dev/ptmx",
2309 [
2310 AC_DEFINE_UNQUOTED(HAVE_DEV_PTMX)
2311 have_dev_ptmx=1
2312 ]
2313 )
2314 fi
2315fi
2316AC_CHECK_FILE("/dev/ptc",
2317 [
2318 AC_DEFINE_UNQUOTED(HAVE_DEV_PTS_AND_PTC)
2319 have_dev_ptc=1
2320 ]
2321)
2322
2323# Options from here on. Some of these are preset by platform above
2324AC_ARG_WITH(mantype,
2325 [ --with-mantype=man|cat|doc Set man page type],
2326 [
2327 case "$withval" in
2328 man|cat|doc)
2329 MANTYPE=$withval
2330 ;;
2331 *)
2332 AC_MSG_ERROR(invalid man type: $withval)
2333 ;;
2334 esac
2335 ]
2336)
2337if test -z "$MANTYPE"; then
2338 TestPath="/usr/bin${PATH_SEPARATOR}/usr/ucb"
2339 AC_PATH_PROGS(NROFF, nroff awf, /bin/false, $TestPath)
2340 if ${NROFF} -mdoc ${srcdir}/ssh.1 >/dev/null 2>&1; then
2341 MANTYPE=doc
2342 elif ${NROFF} -man ${srcdir}/ssh.1 >/dev/null 2>&1; then
2343 MANTYPE=man
2344 else
2345 MANTYPE=cat
2346 fi
2347fi
2348AC_SUBST(MANTYPE)
2349if test "$MANTYPE" = "doc"; then
2350 mansubdir=man;
2351else
2352 mansubdir=$MANTYPE;
2353fi
2354AC_SUBST(mansubdir)
2355
2356# Check whether to enable MD5 passwords
2357MD5_MSG="no"
2358AC_ARG_WITH(md5-passwords,
2359 [ --with-md5-passwords Enable use of MD5 passwords],
2360 [
2361 if test "x$withval" != "xno" ; then
2362 AC_DEFINE(HAVE_MD5_PASSWORDS)
2363 MD5_MSG="yes"
2364 fi
2365 ]
2366)
2367
2368# Whether to disable shadow password support
2369AC_ARG_WITH(shadow,
2370 [ --without-shadow Disable shadow password support],
2371 [
2372 if test "x$withval" = "xno" ; then
2373 AC_DEFINE(DISABLE_SHADOW)
2374 disable_shadow=yes
2375 fi
2376 ]
2377)
2378
2379if test -z "$disable_shadow" ; then
2380 AC_MSG_CHECKING([if the systems has expire shadow information])
2381 AC_TRY_COMPILE(
2382 [
2383#include <sys/types.h>
2384#include <shadow.h>
2385 struct spwd sp;
2386 ],[ sp.sp_expire = sp.sp_lstchg = sp.sp_inact = 0; ],
2387 [ sp_expire_available=yes ], []
2388 )
2389
2390 if test "x$sp_expire_available" = "xyes" ; then
2391 AC_MSG_RESULT(yes)
2392 AC_DEFINE(HAS_SHADOW_EXPIRE)
2393 else
2394 AC_MSG_RESULT(no)
2395 fi
2396fi
2397
2398# Use ip address instead of hostname in $DISPLAY
2399if test ! -z "$IPADDR_IN_DISPLAY" ; then
2400 DISPLAY_HACK_MSG="yes"
2401 AC_DEFINE(IPADDR_IN_DISPLAY)
2402else
2403 DISPLAY_HACK_MSG="no"
2404 AC_ARG_WITH(ipaddr-display,
2405 [ --with-ipaddr-display Use ip address instead of hostname in \$DISPLAY],
2406 [
2407 if test "x$withval" != "xno" ; then
2408 AC_DEFINE(IPADDR_IN_DISPLAY)
2409 DISPLAY_HACK_MSG="yes"
2410 fi
2411 ]
2412 )
2413fi
2414
2415# check for /etc/default/login and use it if present.
2416AC_ARG_ENABLE(etc-default-login,
2417 [ --disable-etc-default-login Disable using PATH from /etc/default/login [no]],,
2418[
2419AC_CHECK_FILE("/etc/default/login", [ external_path_file=/etc/default/login ])
2420
2421if test "x$external_path_file" = "x/etc/default/login"; then
2422 AC_DEFINE(HAVE_ETC_DEFAULT_LOGIN)
2423fi
2424])
2425
2426dnl BSD systems use /etc/login.conf so --with-default-path= has no effect
2427if test $ac_cv_func_login_getcapbool = "yes" -a \
2428 $ac_cv_header_login_cap_h = "yes" ; then
2429 external_path_file=/etc/login.conf
2430fi
2431
2432# Whether to mess with the default path
2433SERVER_PATH_MSG="(default)"
2434AC_ARG_WITH(default-path,
2435 [ --with-default-path= Specify default \$PATH environment for server],
2436 [
2437 if test "x$external_path_file" = "x/etc/login.conf" ; then
2438 AC_MSG_WARN([
2439--with-default-path=PATH has no effect on this system.
2440Edit /etc/login.conf instead.])
2441 elif test "x$withval" != "xno" ; then
2442 if test ! -z "$external_path_file" ; then
2443 AC_MSG_WARN([
2444--with-default-path=PATH will only be used if PATH is not defined in
2445$external_path_file .])
2446 fi
2447 user_path="$withval"
2448 SERVER_PATH_MSG="$withval"
2449 fi
2450 ],
2451 [ if test "x$external_path_file" = "x/etc/login.conf" ; then
2452 AC_MSG_WARN([Make sure the path to scp is in /etc/login.conf])
2453 else
2454 if test ! -z "$external_path_file" ; then
2455 AC_MSG_WARN([
2456If PATH is defined in $external_path_file, ensure the path to scp is included,
2457otherwise scp will not work.])
2458 fi
2459 AC_TRY_RUN(
2460 [
2461/* find out what STDPATH is */
2462#include <stdio.h>
2463#ifdef HAVE_PATHS_H
2464# include <paths.h>
2465#endif
2466#ifndef _PATH_STDPATH
2467# ifdef _PATH_USERPATH /* Irix */
2468# define _PATH_STDPATH _PATH_USERPATH
2469# else
2470# define _PATH_STDPATH "/usr/bin:/bin:/usr/sbin:/sbin"
2471# endif
2472#endif
2473#include <sys/types.h>
2474#include <sys/stat.h>
2475#include <fcntl.h>
2476#define DATA "conftest.stdpath"
2477
2478main()
2479{
2480 FILE *fd;
2481 int rc;
2482
2483 fd = fopen(DATA,"w");
2484 if(fd == NULL)
2485 exit(1);
2486
2487 if ((rc = fprintf(fd,"%s", _PATH_STDPATH)) < 0)
2488 exit(1);
2489
2490 exit(0);
2491}
2492 ], [ user_path=`cat conftest.stdpath` ],
2493 [ user_path="/usr/bin:/bin:/usr/sbin:/sbin" ],
2494 [ user_path="/usr/bin:/bin:/usr/sbin:/sbin" ]
2495 )
2496# make sure $bindir is in USER_PATH so scp will work
2497 t_bindir=`eval echo ${bindir}`
2498 case $t_bindir in
2499 NONE/*) t_bindir=`echo $t_bindir | sed "s~NONE~$prefix~"` ;;
2500 esac
2501 case $t_bindir in
2502 NONE/*) t_bindir=`echo $t_bindir | sed "s~NONE~$ac_default_prefix~"` ;;
2503 esac
2504 echo $user_path | grep ":$t_bindir" > /dev/null 2>&1
2505 if test $? -ne 0 ; then
2506 echo $user_path | grep "^$t_bindir" > /dev/null 2>&1
2507 if test $? -ne 0 ; then
2508 user_path=$user_path:$t_bindir
2509 AC_MSG_RESULT(Adding $t_bindir to USER_PATH so scp will work)
2510 fi
2511 fi
2512 fi ]
2513)
2514if test "x$external_path_file" != "x/etc/login.conf" ; then
2515 AC_DEFINE_UNQUOTED(USER_PATH, "$user_path")
2516 AC_SUBST(user_path)
2517fi
2518
2519# Set superuser path separately to user path
2520AC_ARG_WITH(superuser-path,
2521 [ --with-superuser-path= Specify different path for super-user],
2522 [
2523 if test "x$withval" != "xno" ; then
2524 AC_DEFINE_UNQUOTED(SUPERUSER_PATH, "$withval")
2525 superuser_path=$withval
2526 fi
2527 ]
2528)
2529
2530
2531AC_MSG_CHECKING([if we need to convert IPv4 in IPv6-mapped addresses])
2532IPV4_IN6_HACK_MSG="no"
2533AC_ARG_WITH(4in6,
2534 [ --with-4in6 Check for and convert IPv4 in IPv6 mapped addresses],
2535 [
2536 if test "x$withval" != "xno" ; then
2537 AC_MSG_RESULT(yes)
2538 AC_DEFINE(IPV4_IN_IPV6)
2539 IPV4_IN6_HACK_MSG="yes"
2540 else
2541 AC_MSG_RESULT(no)
2542 fi
2543 ],[
2544 if test "x$inet6_default_4in6" = "xyes"; then
2545 AC_MSG_RESULT([yes (default)])
2546 AC_DEFINE(IPV4_IN_IPV6)
2547 IPV4_IN6_HACK_MSG="yes"
2548 else
2549 AC_MSG_RESULT([no (default)])
2550 fi
2551 ]
2552)
2553
2554# Whether to enable BSD auth support
2555BSD_AUTH_MSG=no
2556AC_ARG_WITH(bsd-auth,
2557 [ --with-bsd-auth Enable BSD auth support],
2558 [
2559 if test "x$withval" != "xno" ; then
2560 AC_DEFINE(BSD_AUTH)
2561 BSD_AUTH_MSG=yes
2562 fi
2563 ]
2564)
2565
2566# Where to place sshd.pid
2567piddir=/var/run
2568# make sure the directory exists
2569if test ! -d $piddir ; then
2570 piddir=`eval echo ${sysconfdir}`
2571 case $piddir in
2572 NONE/*) piddir=`echo $piddir | sed "s~NONE~$ac_default_prefix~"` ;;
2573 esac
2574fi
2575
2576AC_ARG_WITH(pid-dir,
2577 [ --with-pid-dir=PATH Specify location of ssh.pid file],
2578 [
2579 if test "x$withval" != "xno" ; then
2580 piddir=$withval
2581 if test ! -d $piddir ; then
2582 AC_MSG_WARN([** no $piddir directory on this system **])
2583 fi
2584 fi
2585 ]
2586)
2587
2588AC_DEFINE_UNQUOTED(_PATH_SSH_PIDDIR, "$piddir")
2589AC_SUBST(piddir)
2590
2591dnl allow user to disable some login recording features
2592AC_ARG_ENABLE(lastlog,
2593 [ --disable-lastlog disable use of lastlog even if detected [no]],
2594 [
2595 if test "x$enableval" = "xno" ; then
2596 AC_DEFINE(DISABLE_LASTLOG)
2597 fi
2598 ]
2599)
2600AC_ARG_ENABLE(utmp,
2601 [ --disable-utmp disable use of utmp even if detected [no]],
2602 [
2603 if test "x$enableval" = "xno" ; then
2604 AC_DEFINE(DISABLE_UTMP)
2605 fi
2606 ]
2607)
2608AC_ARG_ENABLE(utmpx,
2609 [ --disable-utmpx disable use of utmpx even if detected [no]],
2610 [
2611 if test "x$enableval" = "xno" ; then
2612 AC_DEFINE(DISABLE_UTMPX)
2613 fi
2614 ]
2615)
2616AC_ARG_ENABLE(wtmp,
2617 [ --disable-wtmp disable use of wtmp even if detected [no]],
2618 [
2619 if test "x$enableval" = "xno" ; then
2620 AC_DEFINE(DISABLE_WTMP)
2621 fi
2622 ]
2623)
2624AC_ARG_ENABLE(wtmpx,
2625 [ --disable-wtmpx disable use of wtmpx even if detected [no]],
2626 [
2627 if test "x$enableval" = "xno" ; then
2628 AC_DEFINE(DISABLE_WTMPX)
2629 fi
2630 ]
2631)
2632AC_ARG_ENABLE(libutil,
2633 [ --disable-libutil disable use of libutil (login() etc.) [no]],
2634 [
2635 if test "x$enableval" = "xno" ; then
2636 AC_DEFINE(DISABLE_LOGIN)
2637 fi
2638 ]
2639)
2640AC_ARG_ENABLE(pututline,
2641 [ --disable-pututline disable use of pututline() etc. ([uw]tmp) [no]],
2642 [
2643 if test "x$enableval" = "xno" ; then
2644 AC_DEFINE(DISABLE_PUTUTLINE)
2645 fi
2646 ]
2647)
2648AC_ARG_ENABLE(pututxline,
2649 [ --disable-pututxline disable use of pututxline() etc. ([uw]tmpx) [no]],
2650 [
2651 if test "x$enableval" = "xno" ; then
2652 AC_DEFINE(DISABLE_PUTUTXLINE)
2653 fi
2654 ]
2655)
2656AC_ARG_WITH(lastlog,
2657 [ --with-lastlog=FILE|DIR specify lastlog location [common locations]],
2658 [
2659 if test "x$withval" = "xno" ; then
2660 AC_DEFINE(DISABLE_LASTLOG)
2661 else
2662 conf_lastlog_location=$withval
2663 fi
2664 ]
2665)
2666
2667dnl lastlog, [uw]tmpx? detection
2668dnl NOTE: set the paths in the platform section to avoid the
2669dnl need for command-line parameters
2670dnl lastlog and [uw]tmp are subject to a file search if all else fails
2671
2672dnl lastlog detection
2673dnl NOTE: the code itself will detect if lastlog is a directory
2674AC_MSG_CHECKING([if your system defines LASTLOG_FILE])
2675AC_TRY_COMPILE([
2676#include <sys/types.h>
2677#include <utmp.h>
2678#ifdef HAVE_LASTLOG_H
2679# include <lastlog.h>
2680#endif
2681#ifdef HAVE_PATHS_H
2682# include <paths.h>
2683#endif
2684#ifdef HAVE_LOGIN_H
2685# include <login.h>
2686#endif
2687 ],
2688 [ char *lastlog = LASTLOG_FILE; ],
2689 [ AC_MSG_RESULT(yes) ],
2690 [
2691 AC_MSG_RESULT(no)
2692 AC_MSG_CHECKING([if your system defines _PATH_LASTLOG])
2693 AC_TRY_COMPILE([
2694#include <sys/types.h>
2695#include <utmp.h>
2696#ifdef HAVE_LASTLOG_H
2697# include <lastlog.h>
2698#endif
2699#ifdef HAVE_PATHS_H
2700# include <paths.h>
2701#endif
2702 ],
2703 [ char *lastlog = _PATH_LASTLOG; ],
2704 [ AC_MSG_RESULT(yes) ],
2705 [
2706 AC_MSG_RESULT(no)
2707 system_lastlog_path=no
2708 ])
2709 ]
2710)
2711
2712if test -z "$conf_lastlog_location"; then
2713 if test x"$system_lastlog_path" = x"no" ; then
2714 for f in /var/log/lastlog /usr/adm/lastlog /var/adm/lastlog /etc/security/lastlog ; do
2715 if (test -d "$f" || test -f "$f") ; then
2716 conf_lastlog_location=$f
2717 fi
2718 done
2719 if test -z "$conf_lastlog_location"; then
2720 AC_MSG_WARN([** Cannot find lastlog **])
2721 dnl Don't define DISABLE_LASTLOG - that means we don't try wtmp/wtmpx
2722 fi
2723 fi
2724fi
2725
2726if test -n "$conf_lastlog_location"; then
2727 AC_DEFINE_UNQUOTED(CONF_LASTLOG_FILE, "$conf_lastlog_location")
2728fi
2729
2730dnl utmp detection
2731AC_MSG_CHECKING([if your system defines UTMP_FILE])
2732AC_TRY_COMPILE([
2733#include <sys/types.h>
2734#include <utmp.h>
2735#ifdef HAVE_PATHS_H
2736# include <paths.h>
2737#endif
2738 ],
2739 [ char *utmp = UTMP_FILE; ],
2740 [ AC_MSG_RESULT(yes) ],
2741 [ AC_MSG_RESULT(no)
2742 system_utmp_path=no ]
2743)
2744if test -z "$conf_utmp_location"; then
2745 if test x"$system_utmp_path" = x"no" ; then
2746 for f in /etc/utmp /usr/adm/utmp /var/run/utmp; do
2747 if test -f $f ; then
2748 conf_utmp_location=$f
2749 fi
2750 done
2751 if test -z "$conf_utmp_location"; then
2752 AC_DEFINE(DISABLE_UTMP)
2753 fi
2754 fi
2755fi
2756if test -n "$conf_utmp_location"; then
2757 AC_DEFINE_UNQUOTED(CONF_UTMP_FILE, "$conf_utmp_location")
2758fi
2759
2760dnl wtmp detection
2761AC_MSG_CHECKING([if your system defines WTMP_FILE])
2762AC_TRY_COMPILE([
2763#include <sys/types.h>
2764#include <utmp.h>
2765#ifdef HAVE_PATHS_H
2766# include <paths.h>
2767#endif
2768 ],
2769 [ char *wtmp = WTMP_FILE; ],
2770 [ AC_MSG_RESULT(yes) ],
2771 [ AC_MSG_RESULT(no)
2772 system_wtmp_path=no ]
2773)
2774if test -z "$conf_wtmp_location"; then
2775 if test x"$system_wtmp_path" = x"no" ; then
2776 for f in /usr/adm/wtmp /var/log/wtmp; do
2777 if test -f $f ; then
2778 conf_wtmp_location=$f
2779 fi
2780 done
2781 if test -z "$conf_wtmp_location"; then
2782 AC_DEFINE(DISABLE_WTMP)
2783 fi
2784 fi
2785fi
2786if test -n "$conf_wtmp_location"; then
2787 AC_DEFINE_UNQUOTED(CONF_WTMP_FILE, "$conf_wtmp_location")
2788fi
2789
2790
2791dnl utmpx detection - I don't know any system so perverse as to require
2792dnl utmpx, but not define UTMPX_FILE (ditto wtmpx.) No doubt it's out
2793dnl there, though.
2794AC_MSG_CHECKING([if your system defines UTMPX_FILE])
2795AC_TRY_COMPILE([
2796#include <sys/types.h>
2797#include <utmp.h>
2798#ifdef HAVE_UTMPX_H
2799#include <utmpx.h>
2800#endif
2801#ifdef HAVE_PATHS_H
2802# include <paths.h>
2803#endif
2804 ],
2805 [ char *utmpx = UTMPX_FILE; ],
2806 [ AC_MSG_RESULT(yes) ],
2807 [ AC_MSG_RESULT(no)
2808 system_utmpx_path=no ]
2809)
2810if test -z "$conf_utmpx_location"; then
2811 if test x"$system_utmpx_path" = x"no" ; then
2812 AC_DEFINE(DISABLE_UTMPX)
2813 fi
2814else
2815 AC_DEFINE_UNQUOTED(CONF_UTMPX_FILE, "$conf_utmpx_location")
2816fi
2817
2818dnl wtmpx detection
2819AC_MSG_CHECKING([if your system defines WTMPX_FILE])
2820AC_TRY_COMPILE([
2821#include <sys/types.h>
2822#include <utmp.h>
2823#ifdef HAVE_UTMPX_H
2824#include <utmpx.h>
2825#endif
2826#ifdef HAVE_PATHS_H
2827# include <paths.h>
2828#endif
2829 ],
2830 [ char *wtmpx = WTMPX_FILE; ],
2831 [ AC_MSG_RESULT(yes) ],
2832 [ AC_MSG_RESULT(no)
2833 system_wtmpx_path=no ]
2834)
2835if test -z "$conf_wtmpx_location"; then
2836 if test x"$system_wtmpx_path" = x"no" ; then
2837 AC_DEFINE(DISABLE_WTMPX)
2838 fi
2839else
2840 AC_DEFINE_UNQUOTED(CONF_WTMPX_FILE, "$conf_wtmpx_location")
2841fi
2842
2843
2844if test ! -z "$blibpath" ; then
2845 LDFLAGS="$LDFLAGS $blibflags$blibpath"
2846 AC_MSG_WARN([Please check and edit blibpath in LDFLAGS in Makefile])
2847fi
2848
2849dnl remove pam and dl because they are in $LIBPAM
2850if test "$PAM_MSG" = yes ; then
2851 LIBS=`echo $LIBS | sed 's/-lpam //'`
2852fi
2853if test "$ac_cv_lib_pam_pam_set_item" = yes ; then
2854 LIBS=`echo $LIBS | sed 's/-ldl //'`
2855fi
2856
2857AC_EXEEXT
2858AC_CONFIG_FILES([Makefile openbsd-compat/Makefile scard/Makefile ssh_prng_cmds])
2859AC_OUTPUT
2860
2861# Print summary of options
2862
2863# Someone please show me a better way :)
2864A=`eval echo ${prefix}` ; A=`eval echo ${A}`
2865B=`eval echo ${bindir}` ; B=`eval echo ${B}`
2866C=`eval echo ${sbindir}` ; C=`eval echo ${C}`
2867D=`eval echo ${sysconfdir}` ; D=`eval echo ${D}`
2868E=`eval echo ${libexecdir}/ssh-askpass` ; E=`eval echo ${E}`
2869F=`eval echo ${mandir}/${mansubdir}X` ; F=`eval echo ${F}`
2870G=`eval echo ${piddir}` ; G=`eval echo ${G}`
2871H=`eval echo ${PRIVSEP_PATH}` ; H=`eval echo ${H}`
2872I=`eval echo ${user_path}` ; I=`eval echo ${I}`
2873J=`eval echo ${superuser_path}` ; J=`eval echo ${J}`
2874
2875echo ""
2876echo "OpenSSH has been configured with the following options:"
2877echo " User binaries: $B"
2878echo " System binaries: $C"
2879echo " Configuration files: $D"
2880echo " Askpass program: $E"
2881echo " Manual pages: $F"
2882echo " PID file: $G"
2883echo " Privilege separation chroot path: $H"
2884if test "x$external_path_file" = "x/etc/login.conf" ; then
2885echo " At runtime, sshd will use the path defined in $external_path_file"
2886echo " Make sure the path to scp is present, otherwise scp will not work"
2887else
2888echo " sshd default user PATH: $I"
2889 if test ! -z "$external_path_file"; then
2890echo " (If PATH is set in $external_path_file it will be used instead. If"
2891echo " used, ensure the path to scp is present, otherwise scp will not work.)"
2892 fi
2893fi
2894if test ! -z "$superuser_path" ; then
2895echo " sshd superuser user PATH: $J"
2896fi
2897echo " Manpage format: $MANTYPE"
2898echo " PAM support: $PAM_MSG"
2899echo " KerberosV support: $KRB5_MSG"
2900echo " Smartcard support: $SCARD_MSG"
2901echo " S/KEY support: $SKEY_MSG"
2902echo " TCP Wrappers support: $TCPW_MSG"
2903echo " MD5 password support: $MD5_MSG"
2904echo " IP address in \$DISPLAY hack: $DISPLAY_HACK_MSG"
2905echo " Translate v4 in v6 hack: $IPV4_IN6_HACK_MSG"
2906echo " BSD Auth support: $BSD_AUTH_MSG"
2907echo " Random number source: $RAND_MSG"
2908if test ! -z "$USE_RAND_HELPER" ; then
2909echo " ssh-rand-helper collects from: $RAND_HELPER_MSG"
2910fi
2911
2912echo ""
2913
2914echo " Host: ${host}"
2915echo " Compiler: ${CC}"
2916echo " Compiler flags: ${CFLAGS}"
2917echo "Preprocessor flags: ${CPPFLAGS}"
2918echo " Linker flags: ${LDFLAGS}"
2919echo " Libraries: ${LIBWRAP} ${LIBPAM} ${LIBS}"
2920
2921echo ""
2922
2923if test "x$PAM_MSG" = "xyes" ; then
2924 echo "PAM is enabled. You may need to install a PAM control file "
2925 echo "for sshd, otherwise password authentication may fail. "
2926 echo "Example PAM control files can be found in the contrib/ "
2927 echo "subdirectory"
2928 echo ""
2929fi
2930
2931if test ! -z "$RAND_HELPER_CMDHASH" ; then
2932 echo "WARNING: you are using the builtin random number collection "
2933 echo "service. Please read WARNING.RNG and request that your OS "
2934 echo "vendor includes kernel-based random number collection in "
2935 echo "future versions of your OS."
2936 echo ""
2937fi
2938
This page took 0.080023 seconds and 5 git commands to generate.