--- configure.in.orig Thu Jan 17 08:36:05 2002 +++ configure.in Wed Jan 8 18:24:51 2003 @@ -30,8 +30,140 @@ fi AC_PROG_CC +AC_PROG_CPP AC_ISC_POSIX +AC_MSG_CHECKING([whether to enable ipv6]) +AC_ARG_ENABLE(ipv6, +[ --enable-ipv6 Enable ipv6 (with ipv4) support + --disable-ipv6 Disable ipv6 support], +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + ipv6=no + ;; + *) AC_MSG_RESULT(yes) + AC_DEFINE(ENABLE_IPV6) + ipv6=yes + ;; + esac ], + + AC_TRY_RUN([ /* AF_INET6 avalable check */ +#include +#include +main() +{ + if (socket(AF_INET6, SOCK_STREAM, 0) < 0) + exit(1); + else + exit(0); +} +], + AC_MSG_RESULT(yes) + AC_DEFINE(ENABLE_IPV6) + ipv6=yes, + AC_MSG_RESULT(no) + ipv6=no, + AC_MSG_RESULT(no) + ipv6=no +)) + +ipv6type=unknown +ipv6lib=none + +if test "$ipv6" = "yes"; then + AC_MSG_CHECKING([ipv6 stack type]) + for i in inria kame linux toshiba v6d zeta; do + case $i in + inria) + dnl http://www.kame.net/ + AC_EGREP_CPP(yes, [dnl +#include +#ifdef IPV6_INRIA_VERSION +yes +#endif], + [ipv6type=$i; + CPPFLAGS="-DINET6 $CPPFLAGS"]) + ;; + kame) + dnl http://www.kame.net/ + AC_EGREP_CPP(yes, [dnl +#include +#ifdef __KAME__ +yes +#endif], + [ipv6type=$i; + CPPFLAGS="-DINET6 $CPPFLAGS"]) + ;; + linux) + dnl http://www.v6.linux.or.jp/ + if test -d /usr/inet6; then + ipv6type=$i + ipv6lib=inet6 + ipv6libdir=/usr/inet6/lib + CPPFLAGS="-DINET6 -I/usr/inet6/include $CPPFLAGS" + fi + ;; + toshiba) + AC_EGREP_CPP(yes, [dnl +#include +#ifdef _TOSHIBA_INET6 +yes +#endif], + [ipv6type=$i; + ipv6lib=inet6; + ipv6libdir=/usr/local/v6/lib; + CPPFLAGS="-DINET6 $CPPFLAGS"]) + ;; + v6d) + AC_EGREP_CPP(yes, [dnl +#include +#ifdef __V6D__ +yes +#endif], + [ipv6type=$i; + ipv6lib=v6; + ipv6libdir=/usr/local/v6/lib; + CPPFLAGS="-I/usr/local/v6/include $CPPFLAGS"]) + ;; + zeta) + AC_EGREP_CPP(yes, [dnl +#include +#ifdef _ZETA_MINAMI_INET6 +yes +#endif], + [ipv6type=$i; + ipv6lib=inet6; + ipv6libdir=/usr/local/v6/lib; + CPPFLAGS="-DINET6 $CPPFLAGS"]) + ;; + esac + if test "$ipv6type" != "unknown"; then + break + fi + done + AC_MSG_RESULT($ipv6type) +fi + +if test "$ipv6" = "yes" -a -f /usr/local/v6/lib/libinet6.a; then + ac_inet6_LDFLAGS="inet6" + ipv6libdir=/usr/local/v6/lib + LDFLAGS="$LDFLAGS -L/usr/local/v6/lib" + AC_CHECK_LIB(inet6, getaddrinfo, , ipv6lib="$ac_inet6_LDFLAGS") +fi + + +if test "$ipv6" = "yes" -a "$ipv6lib" != "none"; then + if test -d $ipv6libdir -a -f $ipv6libdir/lib$ipv6lib.a; then + LIBS="-L$ipv6libdir -l$ipv6lib $LIBS" + else + echo 'Fatal: no $ipv6lib library found. cannot continue.' + echo "You need to fetch lib$ipv6lib.a from appropriate" + echo 'ipv6 kit and compile beforehand.' + exit 1 + fi +fi + AC_DEFINE_UNQUOTED(HOSTTYPE, "$host") case "$host" in @@ -313,7 +445,7 @@ # Socket pairs appear to be broken on several systems. I don't know exactly # where, so I'll use pipes everywhere for now. -AC_DEFINE(USE_PIPES) +# AC_DEFINE(USE_PIPES) AC_MSG_CHECKING([that the compiler works]) AC_TRY_RUN([ main(int ac, char **av) { return 0; } ], @@ -369,7 +501,7 @@ AC_HEADER_STDC AC_HEADER_SYS_WAIT -AC_CHECK_HEADERS(unistd.h rusage.h sys/time.h lastlog.h utmp.h shadow.h) +AC_CHECK_HEADERS(unistd.h rusage.h sys/time.h lastlog.h login_cap.h utmp.h shadow.h) AC_CHECK_HEADERS(sgtty.h sys/select.h sys/ioctl.h machine/endian.h) AC_CHECK_HEADERS(paths.h usersec.h utime.h netinet/in_systm.h) AC_CHECK_HEADERS(netinet/in_system.h netinet/ip.h netinet/tcp.h ulimit.h) @@ -399,6 +531,16 @@ [ AC_DEFINE(HAVE_INCOMPATIBLE_SIGINFO) AC_MSG_RESULT(yes)] , AC_MSG_RESULT(no)) +AC_MSG_CHECKING([whether sys/socket.h have struct sockaddr_storage]) +AC_EGREP_HEADER(sockaddr_storage, sys/socket.h, + [ AC_DEFINE(HAVE_SOCKADDR_STORAGE) AC_MSG_RESULT(yes)], AC_MSG_RESULT(no)) +AC_MSG_CHECKING([whether sys/socket.h have __ss_family]) +AC_EGREP_HEADER(__ss_family, sys/socket.h, + [ AC_DEFINE(HAVE_NEW_SS_FAMILY) AC_MSG_RESULT(yes)], AC_MSG_RESULT(no)) +AC_MSG_CHECKING([whether sys/socket.h have sa_len]) +AC_EGREP_HEADER(sa_len, sys/socket.h, + [ AC_DEFINE(HAVE_SOCKADDR_LEN) AC_MSG_RESULT(yes)], AC_MSG_RESULT(no)) + AC_CHECK_LIB(c, crypt, [true], AC_CHECK_LIB(crypt, crypt)) AC_CHECK_LIB(sec, getspnam) AC_CHECK_LIB(seq, get_process_stats) @@ -438,6 +580,107 @@ AC_REPLACE_FUNCS(strerror memmove remove random putenv crypt socketpair snprintf) +AC_MSG_CHECKING(getaddrinfo bug) +AC_TRY_RUN([ +#include +#include +#include +#include +#include + +main() +{ + int passive, gaierr, inet4 = 0, inet6 = 0; + struct addrinfo hints, *ai, *aitop; + char straddr[INET6_ADDRSTRLEN], strport[16]; + + for (passive = 0; passive <= 1; passive++) { + memset(&hints, 0, sizeof(hints)); + hints.ai_family = AF_UNSPEC; + hints.ai_flags = passive ? AI_PASSIVE : 0; + hints.ai_socktype = SOCK_STREAM; + if ((gaierr = getaddrinfo(NULL, "54321", &hints, &aitop)) != 0) { + (void)gai_strerror(gaierr); + goto bad; + } + for (ai = aitop; ai; ai = ai->ai_next) { + if (ai->ai_addr == NULL || + ai->ai_addrlen == 0 || + getnameinfo(ai->ai_addr, ai->ai_addrlen, + straddr, sizeof(straddr), strport, sizeof(strport), + NI_NUMERICHOST|NI_NUMERICSERV) != 0) { + goto bad; + } + if (strcmp(strport, "54321") != 0) { + goto bad; + } + switch (ai->ai_family) { + case AF_INET: + if (passive) { + if (strcmp(straddr, "0.0.0.0") != 0) { + goto bad; + } + } else { + if (strcmp(straddr, "127.0.0.1") != 0) { + goto bad; + } + } + inet4++; + break; + case AF_INET6: + if (passive) { + if (strcmp(straddr, "::") != 0) { + goto bad; + } + } else { + if (strcmp(straddr, "::1") != 0) { + goto bad; + } + } + inet6++; + break; + case AF_UNSPEC: + goto bad; + break; + default: + /* another family support? */ + break; + } + } + } + + if (!(inet4 == 0 || inet4 == 2)) + goto bad; + if (!(inet6 == 0 || inet6 == 2)) + goto bad; + + if (aitop) + freeaddrinfo(aitop); + exit(0); + + bad: + if (aitop) + freeaddrinfo(aitop); + exit(1); +} +], +AC_MSG_RESULT(good) +buggygetaddrinfo=no, +AC_MSG_RESULT(buggy) +buggygetaddrinfo=yes, +AC_MSG_RESULT(buggy) +buggygetaddrinfo=yes) + +if test "$buggygetaddrinfo" = "yes"; then + if test "$ipv6" = "yes"; then + echo 'Fatal: You must get working getaddrinfo() function.' + echo ' or you can specify "--disable-ipv6"'. + exit 1 + else + AC_REPLACE_FUNCS(getaddrinfo getnameinfo) + fi +fi + AC_PROG_LN_S AC_PROG_INSTALL AC_CHECK_PROG(AR, ar, ar, echo) @@ -934,7 +1177,11 @@ AC_DEFINE(KRB5) KERBEROS_ROOT="$with_kerberos5" KERBEROS_INCS="-I${KERBEROS_ROOT}/include" - KERBEROS_LIBS="-L${KERBEROS_ROOT}/lib -lgssapi_krb5 -lkrb5 -lcrypto -lcom_err" + if test -f ${KERBEROS_ROOT}/lib/libk5crypto.a ; then + KERBEROS_LIBS="-L${KERBEROS_ROOT}/lib -R${KERBEROS_ROOT}/lib -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err" + else + KERBEROS_LIBS="-L${KERBEROS_ROOT}/lib -R${KERBEROS_ROOT}/lib -lgssapi_krb5 -lkrb5 -lcrypto -lcom_err" + fi AC_CHECK_LIB(ndbm, dbm_open, KERBEROS_LIBS="$KERBEROS_LIBS -lndbm") KERBEROS_OBJS="auth-kerberos.o" ;; @@ -1125,6 +1372,7 @@ AC_DEFINE(Rdup2,SOCKSdup2) AC_DEFINE(Rfclose,SOCKSfclose) AC_DEFINE(Rgethostbyname,SOCKSgethostbyname) + AC_DEFINE(Rgetaddrinfo,SOCKSgetaddrinfo) fi AC_MSG_CHECKING(whether to use rsaref) @@ -1254,6 +1502,38 @@ AC_DEFINE(ENABLE_TCP_NODELAY) ) +AC_MSG_CHECKING(whether to enable another port try support) +AC_ARG_ENABLE(another-port-try, +[ --enable-another-port-try Enable another port try support (default) + --disable-another-port-try Disable another port try support], +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + ;; + *) AC_MSG_RESULT(yes) + AC_DEFINE(ENABLE_ANOTHER_PORT_TRY) + ;; + esac ], + AC_MSG_RESULT(yes) + AC_DEFINE(ENABLE_ANOTHER_PORT_TRY) +) + +AC_MSG_CHECKING(whether to enable logging auth info support) +AC_ARG_ENABLE(log-auth, +[ --enable-log-auth Enable logging auth info support (default) + --disable-log-auth Disable logging auth info support], +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + ;; + *) AC_MSG_RESULT(yes) + AC_DEFINE(ENABLE_LOG_AUTH) + ;; + esac ], + AC_MSG_RESULT(yes) + AC_DEFINE(ENABLE_LOG_AUTH) +) + AC_MSG_CHECKING(whether to enable SO_LINGER) AC_ARG_ENABLE(so-linger, [ --enable-so-linger Enable setting SO_LINGER socket option], @@ -1313,6 +1593,8 @@ AC_DEFINE(SCP_ALL_STATISTICS_ENABLED) ) +CFLAGS="$CPPFLAGS $CFLAGS" + # We include this here only to make it visible in --help; this is only used # in the gmp subdirectory. AC_ARG_ENABLE(asm, @@ -1326,7 +1608,7 @@ fi AC_MSG_RESULT($PIDDIR) -AC_CONFIG_SUBDIRS(gmp-2.0.2-ssh-2) +#AC_CONFIG_SUBDIRS(gmp-2.0.2-ssh-2) AC_ARG_PROGRAM @@ -1357,4 +1639,4 @@ AC_SUBST(SSHDCONFOBJS) AC_SUBST(SSHINSTALLMODE) -AC_OUTPUT(Makefile sshd.8 ssh.1 make-ssh-known-hosts.1 zlib-1.0.4/Makefile) +AC_OUTPUT(Makefile sshd.8 ssh.1 make-ssh-known-hosts.1 make-ssh-known-hosts.pl)