AC_INIT(getpty.c) CONFIG_RULES AC_PROG_AWK AC_CHECK_FUNCS(fchmod fchown revoke vhangup killpg _getpty) dnl LOGINLIBS= dnl dnl Make our operating system-specific security checks and definitions for dnl login. dnl In addition, the following code decides what streams modules will dnl be pushed onto a pty.In particular, if HAVE_STREAMS is defined and dnl HAVE_LINE_PUSH is not defined, modules may be pushed by inserting dnl An appropriate generic ifdef for each module in init_slave.c and dnl AC_DEFINES for the operating systems that need the modules. dnl Each OS that supports streams has a different idea of what you want to dnl push. dnl case $krb5_cv_host in *-*-ultrix*) echo "Disabling initial vhangup and setsid because they break under Ultrix..." AC_DEFINE([OPEN_CTTY_ONLY_ONCE],[1]) ac_cv_func_setsid=no # setsid doesn't do the right thing under Ultrix even though present ;; *-*-aix3*) # AIX has streams include files but not streams TTY # Moreover, strops.h trashes sys/ioctl.h krb5_cv_has_streams=no ;; alpha*-dec-osf*) AC_CHECK_LIB(security,main, AC_DEFINE(HAVE_SETLUID) LOGINLIBS="$LOGINLIBS -lsecurity" ) AC_MSG_RESULT(will open ctty prior to revoke due to OSF/1 lossage) AC_DEFINE(REVOKE_NEEDS_OPEN) ;; *-*-solaris*) AC_DEFINE(PUSH_PTEM) AC_DEFINE(PUSH_LDTERM) AC_DEFINE(PUSH_TTCOMPAT) ;; *-*-hpux*) krb5_cv_has_streams=no ;; esac dnl AC_SUBST(LOGINLIBS) dnl AC_CHECK_LIB(util,openpty, [AC_DEFINE(HAVE_OPENPTY) LIBS="$LIBS -lutil"]) AC_TYPE_MODE_T AC_CHECK_TYPE(time_t, long) AC_CHECK_FUNCS(setreuid gettosbyname setsid ttyname line_push ptsname grantpt openpty) AC_CHECK_HEADERS(unistd.h stdlib.h string.h libutil.h pty.h sys/filio.h sys/sockio.h sys/label.h sys/tty.h sys/wait.h ttyent.h lastlog.h sys/select.h sys/ptyvar.h util.h) AC_CHECK_FUNCS(waitpid) CHECK_SIGNALS AC_CHECK_HEADER(termios.h,[AC_CHECK_FUNC(cfsetispeed,AC_DEFINE(POSIX_TERMIOS))]) ###################################################################### # # utmp related hair here. There's lots of it. # AC_CHECK_HEADERS(utmp.h utmpx.h) AC_CHECK_FUNCS(setutent setutxent updwtmp updwtmpx logwtmp getutmp getutmpx) AC_CHECK_FUNCS(utmpname utmpxname) AC_DEFUN(K5_CHECK_UT_MEMBER, [AC_MSG_CHECKING([for $2 in struct $1]) AC_CACHE_VAL([krb5_cv_struct_$1_$2], [AC_TRY_COMPILE([#include #include <$1.h>], [struct $1 u; u.$2;], eval "krb5_cv_struct_$1_$2=yes", eval "krb5_cv_struct_$1_$2=no")]) if eval "test \"`echo '$krb5_cv_struct_'$1'_'$2`\" = yes"; then AC_MSG_RESULT(yes) krb5_tr_ut=HAVE_STRUCT_`echo $1'_'$2 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` AC_DEFINE_UNQUOTED($krb5_tr_ut) else AC_MSG_RESULT(no) fi]) if test "$ac_cv_header_utmp_h" = yes; then AC_MSG_RESULT(checking struct utmp members) for krb5_mem in ut_host ut_syslen ut_addr ut_id ut_pid ut_type ut_exit; do K5_CHECK_UT_MEMBER(utmp, $krb5_mem) done fi if test "$ac_cv_header_utmpx_h" = yes; then AC_MSG_RESULT(checking struct utmpx members) for krb5_mem in ut_host ut_syslen ut_addr ut_id ut_pid ut_type ut_exit; do K5_CHECK_UT_MEMBER(utmpx, $krb5_mem) done fi AC_DEFUN(K5_CHECK_UT_EXIT_MEMBER, [AC_MSG_CHECKING([for ut_exit.$2 in struct $1]) AC_CACHE_VAL([krb5_cv_struct_$1_ut_exit_$2], [AC_TRY_COMPILE([#include #include <$1.h>], [struct $1 u; u.ut_exit.$2;], eval "krb5_cv_struct_$1_ut_exit_$2=yes", eval "krb5_cv_struct_$1_ut_exit_$2=no")]) if eval "test \"`echo '$krb5_cv_struct_'$1'_ut_exit_'$2`\" = yes"; then AC_MSG_RESULT(yes) ifelse([$3], , :, [$3]) else AC_MSG_RESULT(no) ifelse([$4], , :, [$4]) fi]) if test "$krb5_cv_struct_utmp_ut_exit" = yes; then AC_MSG_RESULT(checking for working ut_exit.e_exit in struct utmp) for krb5_mem in __e_exit ut_e_exit ut_exit e_exit; do K5_CHECK_UT_EXIT_MEMBER(utmp, $krb5_mem, [krb5_utmp_e_exit=$krb5_mem krb5_utmp_e_termination=`echo $krb5_mem|sed -e 's%_exit$%_termination%'`], ) done if test "${krb5_utmp_e_exit+set}" = set; then AC_MSG_RESULT([working ut_exit.e_exit in utmp is $krb5_utmp_e_exit]) AC_DEFINE_UNQUOTED(PTY_UTMP_E_EXIT, $krb5_utmp_e_exit) AC_DEFINE_UNQUOTED(PTY_UTMP_E_TERMINATION, $krb5_utmp_e_termination) else AC_MSG_RESULT([cannot find working ut_exit.e_exit in utmp]) fi fi if test "$krb5_cv_struct_utmpx_ut_exit" = yes; then AC_MSG_RESULT(checking for working ut_exit.e_exit in struct utmpx) for krb5_mem in __e_exit ut_e_exit ut_exit e_exit; do K5_CHECK_UT_EXIT_MEMBER(utmpx, $krb5_mem, [krb5_utmpx_e_exit=$krb5_mem krb5_utmpx_e_termination=`echo $krb5_mem|sed -e 's%_exit$%_termination%'`], ) done if test "${krb5_utmpx_e_exit+set}" = set; then AC_MSG_RESULT([working ut_exit.e_exit in utmpx is $krb5_utmpx_e_exit]) AC_DEFINE_UNQUOTED(PTY_UTMPX_E_EXIT, $krb5_utmpx_e_exit) AC_DEFINE_UNQUOTED(PTY_UTMPX_E_TERMINATION, $krb5_utmpx_e_termination) else AC_MSG_RESULT([cannot find working ut_exit.e_exit in utmpx]) fi fi if test "$ac_cv_header_utmpx_h" = yes; then AC_MSG_CHECKING(consistency of utmpx API) if test "$ac_cv_func_setutxent" = yes; then if test "$krb5_cv_struct_utmpx_ut_id" = yes \ && test "$krb5_cv_struct_utmpx_ut_type" = yes \ && test "$krb5_cv_struct_utmpx_ut_pid" = yes; then AC_MSG_RESULT(ok) else AC_MSG_RESULT(not ok) AC_MSG_ERROR([have setutxent but no ut_id, ut_type, or ut_pid in utmpx]) fi else AC_MSG_RESULT(not ok) AC_MSG_ERROR([have utmpx.h but no setutxent]) fi fi if test "$ac_cv_func_setutent" = yes && \ test "$ac_cv_header_utmpx_h" = no; then AC_MSG_CHECKING(consistency of sysV-ish utmp API) if test "$ac_cv_header_utmp_h" = yes; then if test "$krb5_cv_struct_utmp_ut_id" = yes \ && test "$krb5_cv_struct_utmp_ut_type" = yes \ && test "$krb5_cv_struct_utmp_ut_pid" = yes; then AC_MSG_RESULT(ok) else AC_MSG_RESULT(not ok) AC_MSG_ERROR([have setutent but no ut_id, ut_type, or ut_pid in utmp]) fi else AC_MSG_RESULT(not ok) AC_MSG_ERROR([have setutent but no utmp.h]) fi fi # # end of utmp-related hair # ###################################################################### dnl KRB5_NEED_PROTO([#ifdef HAVE_UTMP_H #include #endif #ifdef HAVE_UTMPX_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_STDLIB_H #include #endif ],getutmp) dnl ######################################### KRB5_NEED_PROTO([#include #ifdef HAVE_UTMP_H #include #endif #ifdef HAVE_LIBUTIL_H #include #endif #ifdef HAVE_UTIL_H #include #endif ],logwtmp) ######################################## KRB5_NEED_PROTO([#include ],revoke) ######################################## dnl AC_MSG_CHECKING([streams interface]) AC_CACHE_VAL(krb5_cv_has_streams, [AC_TRY_COMPILE( [#include #include ], [], krb5_cv_has_streams=yes, krb5_cv_has_streams=no)]) AC_MSG_RESULT($krb5_cv_has_streams) if test $krb5_cv_has_streams = yes; then AC_DEFINE(HAVE_STREAMS) fi dnl dnl dnl AC_MSG_CHECKING([arguments to getpgrp]) AC_CACHE_VAL(krb5_cv_getpgrp_args, [AC_TRY_COMPILE( [#ifndef __STDC__ #define __STDC__ 1 #endif #include #include ], [pid_t pid = getpgrp(getpid())], krb5_cv_getpgrp_args=pid, krb5_cv_getpgrp_args=void)]) AC_MSG_RESULT($krb5_cv_getpgrp_args) if test $krb5_cv_getpgrp_args = pid; then AC_DEFINE(GETPGRP_ONEARG) fi dnl dnl AC_MSG_CHECKING([number of arguments to setpgrp]) AC_CACHE_VAL(krb5_cv_setpgrp_args, [AC_TRY_COMPILE( [#ifndef __STDC__ #define __STDC__ 1 #endif #include ],[setpgrp(0,0)], krb5_cv_setpgrp_args=two, krb5_cv_setpgrp_args=void)]) AC_MSG_RESULT($krb5_cv_setpgrp_args) if test $krb5_cv_setpgrp_args = two; then AC_DEFINE(SETPGRP_TWOARG) fi dnl KRB5_AC_INET6 AC_C_CONST dnl KRB5_BUILD_LIBRARY_WITH_DEPS KRB5_BUILD_LIBRARY_STATIC KRB5_BUILD_LIBOBJS KRB5_BUILD_PROGRAM KRB5_RUN_FLAGS V5_AC_OUTPUT_MAKEFILE