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