]> granicus.if.org Git - shadow/blobdiff - configure.in
* src/groupdel.c: Add process_flags().
[shadow] / configure.in
index de9b27e38c3280206760e36d62fcb969b19e6241..d2057c7bacb33a0ff9b2879f86231a2e7855cc2f 100644 (file)
@@ -1,6 +1,6 @@
 dnl Process this file with autoconf to produce a configure script.
 AC_INIT
-AM_INIT_AUTOMAKE(shadow, 4.0.14)
+AM_INIT_AUTOMAKE(shadow, 4.1.5)
 AC_CONFIG_HEADERS([config.h])
 
 dnl Some hacks...
@@ -28,15 +28,21 @@ dnl Checks for header files.
 AC_HEADER_DIRENT
 AC_HEADER_STDC
 AC_HEADER_SYS_WAIT
+AC_HEADER_STDBOOL
 
 AC_CHECK_HEADERS(errno.h fcntl.h limits.h unistd.h sys/time.h utmp.h \
        utmpx.h termios.h termio.h sgtty.h sys/ioctl.h syslog.h paths.h \
-       utime.h ulimit.h sys/resource.h gshadow.h shadow.h lastlog.h \
-       locale.h rpc/key_prot.h)
+       utime.h ulimit.h sys/resource.h gshadow.h lastlog.h \
+       locale.h rpc/key_prot.h netdb.h acl/libacl.h attr/libattr.h \
+       attr/error_context.h)
 
-AC_CHECK_FUNCS(a64l fchmod fchown fsync getgroups gethostname getspnam \
+dnl shadow now uses the libc's shadow implementation
+AC_CHECK_HEADER([shadow.h],,[AC_MSG_ERROR([You need a libc with shadow.h])])
+
+AC_CHECK_FUNCS(l64a fchmod fchown fsync futimes getgroups gethostname getspnam \
        gettimeofday getusershell getutent initgroups lchown lckpwdf lstat \
-       memcpy memset setgroups sigaction strchr updwtmp updwtmpx)
+       lutimes memcpy memset setgroups sigaction strchr updwtmp updwtmpx innetgr \
+       getpwnam_r getpwuid_r getgrnam_r getgrgid_r getspnam_r getaddrinfo)
 AC_SYS_LARGEFILE
 
 dnl Checks for typedefs, structures, and compiler characteristics.
@@ -47,41 +53,39 @@ AC_TYPE_PID_T
 AC_TYPE_MODE_T
 AC_HEADER_STAT
 AC_CHECK_MEMBERS([struct stat.st_rdev])
+AC_CHECK_MEMBERS([struct stat.st_atim])
+AC_CHECK_MEMBERS([struct stat.st_atimensec])
+AC_CHECK_MEMBERS([struct stat.st_mtim])
+AC_CHECK_MEMBERS([struct stat.st_mtimensec])
 AC_HEADER_TIME
 AC_STRUCT_TM
 
-if test "$ac_cv_header_utmp_h" = "yes"; then
-       AC_CACHE_CHECK(for ut_host in struct utmp,
-               ac_cv_struct_utmp_ut_host,
-               AC_COMPILE_IFELSE(
-                       [AC_LANG_PROGRAM([#include <utmp.h>],
-                               [struct utmp ut; char *cp = ut.ut_host;]
-                       )],
-                       [ac_cv_struct_utmp_ut_host=yes],
-                       [ac_cv_struct_utmp_ut_host=no]
-               )
-       )
-
-       if test "$ac_cv_struct_utmp_ut_host" = "yes"; then
-               AC_DEFINE(UT_HOST, 1, [Define if you have ut_host in struct utmp.])
-       fi
-
-       AC_CACHE_CHECK(for ut_user in struct utmp,
-               ac_cv_struct_utmp_ut_user,
-               AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <utmp.h>],
-                               [struct utmp ut; char *cp = ut.ut_user;]
-                       )],
-                       [ac_cv_struct_utmp_ut_user=yes],
-                       [ac_cv_struct_utmp_ut_user=no]
-               )
-       )
-
-       if test "$ac_cv_struct_utmp_ut_user" = "no"; then
-               AC_DEFINE(ut_user, ut_name,
-                       [Define to ut_name if struct utmp has ut_name (not ut_user).])
-       fi
+AC_CHECK_MEMBERS([struct utmp.ut_type,
+                  struct utmp.ut_id,
+                  struct utmp.ut_name,
+                  struct utmp.ut_user,
+                  struct utmp.ut_host,
+                  struct utmp.ut_syslen,
+                  struct utmp.ut_addr,
+                  struct utmp.ut_addr_v6,
+                  struct utmp.ut_time,
+                  struct utmp.ut_xtime,
+                  struct utmp.ut_tv],,,[[#include <utmp.h>]])
+dnl There are dependencies:
+dnl If UTMPX has to be used, the utmp structure shall have a ut_id field.
+if test "$ac_cv_header_utmpx_h" = "yes" &&
+   test "$ac_cv_member_struct_utmp_ut_id" != "yes"; then
+       AC_MSG_ERROR(Systems with UTMPX and no ut_id field in the utmp structure are not supported)
 fi
 
+AC_CHECK_MEMBERS([struct utmpx.ut_name,
+                  struct utmpx.ut_host,
+                  struct utmpx.ut_syslen,
+                  struct utmpx.ut_addr,
+                  struct utmpx.ut_addr_v6,
+                  struct utmpx.ut_time,
+                  struct utmpx.ut_xtime],,,[[#include <utmpx.h>]])
+
 if test "$ac_cv_header_lastlog_h" = "yes"; then
        AC_CACHE_CHECK(for ll_host in struct lastlog,
                ac_cv_struct_lastlog_ll_host,
@@ -109,7 +113,6 @@ AC_REPLACE_FUNCS(sgetgrent sgetpwent sgetspent)
 AC_REPLACE_FUNCS(snprintf strcasecmp strdup strerror strstr)
 
 AC_CHECK_FUNC(setpgrp)
-AC_FUNC_SETPGRP
 
 if test "$ac_cv_header_shadow_h" = "yes"; then
        AC_CACHE_CHECK(for working shadow group support,
@@ -195,12 +198,6 @@ AC_DEFINE(USE_SYSLOG, 1, [Define to use syslog().])
 AC_DEFINE(RLOGIN, 1, [Define if login should support the -r flag for rlogind.])
 AC_DEFINE(RUSEROK, 0, [Define to the ruserok() "success" return value (0 or 1).])
 
-dnl Use our own version of getpass(), which handles long passwords
-dnl (unlike many systems which have a limit of 8 characters), and can
-dnl be interrupted with Ctrl-C (unlike Linux libc).
-AC_DEFINE(getpass, libshadow_getpass,
-       [Define to libshadow_getpass to use our own version of getpass().])
-
 AC_ARG_ENABLE(shadowgrp,
        [AC_HELP_STRING([--enable-shadowgrp], [enable shadow group support @<:@default=yes@:>@])],
        [case "${enableval}" in
@@ -214,25 +211,86 @@ AC_ARG_ENABLE(shadowgrp,
 AC_ARG_ENABLE(man,
        [AC_HELP_STRING([--enable-man],
                [regenerate roff man pages from Docbook @<:@default=no@:>@])],
-       [enable_man=yes],
-        [enable_man=no]
+       [enable_man="${enableval}"],
+       [enable_man="no"]
+)
+
+AC_ARG_ENABLE(account-tools-setuid,
+       [AC_HELP_STRING([--enable-account-tools-setuid],
+               [Install the user and group management tools setuid and authenticate the callers. This requires --with-pam.])],
+       [case "${enableval}" in
+        yes) enable_acct_tools_setuid="yes" ;;
+         no) enable_acct_tools_setuid="no" ;;
+          *) AC_MSG_ERROR(bad value ${enableval} for --enable-account-tools-setuid)
+          ;;
+        esac],
+       [enable_acct_tools_setuid="maybe"]
+)
+
+AC_ARG_ENABLE(utmpx,
+       [AC_HELP_STRING([--enable-utmpx],
+                       [enable loggin in utmpx / wtmpx @<:@default=no@:>@])],
+       [case "${enableval}" in
+        yes) enable_utmpx="yes" ;;
+         no) enable_utmpx="no" ;;
+          *) AC_MSG_ERROR(bad value ${enableval} for --enable-utmpx) ;;
+        esac],
+       [enable_utmpx="no"]
 )
 
 AC_ARG_WITH(audit, 
        [AC_HELP_STRING([--with-audit], [use auditing support @<:@default=yes if found@:>@])],
-       [with_audit=$withval], [with_audit=yes])
+       [with_audit=$withval], [with_audit=maybe])
 AC_ARG_WITH(libpam,
        [AC_HELP_STRING([--with-libpam], [use libpam for PAM support @<:@default=yes if found@:>@])],
-       [with_libpam=$withval], [with_libpam=yes])
+       [with_libpam=$withval], [with_libpam=maybe])
 AC_ARG_WITH(selinux,
-       [AC_HELP_STRING([--with-selinux], [use SELinux support @<:@default=autodetect@:>@])],
-       [with_selinux=$withval], [with_selinux=yes])
+       [AC_HELP_STRING([--with-selinux], [use SELinux support @<:@default=yes if found@:>@])],
+       [with_selinux=$withval], [with_selinux=maybe])
+AC_ARG_WITH(acl,
+       [AC_HELP_STRING([--with-acl], [use ACL support @<:@default=yes if found@:>@])],
+       [with_acl=$withval], [with_acl=maybe])
+AC_ARG_WITH(attr,
+       [AC_HELP_STRING([--with-attr], [use Extended Attribute support @<:@default=yes if found@:>@])],
+       [with_attr=$withval], [with_attr=maybe])
 AC_ARG_WITH(skey,
        [AC_HELP_STRING([--with-skey], [use S/Key support @<:@default=no@:>@])],
        [with_skey=$withval], [with_skey=no])
+AC_ARG_WITH(tcb,
+       [AC_HELP_STRING([--with-tcb], [use tcb support (incomplete) @<:@default=yes if found@:>@])],
+       [with_tcb=$withval], [with_tcb=maybe])
 AC_ARG_WITH(libcrack,
-       [AC_HELP_STRING([--with-libcrack], [use libcrack @<:@default=yes if found and if PAM not enabled@:>@])],
+       [AC_HELP_STRING([--with-libcrack], [use libcrack @<:@default=no@:>@])],
        [with_libcrack=$withval], [with_libcrack=no])
+AC_ARG_WITH(sha-crypt,
+       [AC_HELP_STRING([--with-sha-crypt], [allow the SHA256 and SHA512 password encryption algorithms @<:@default=yes@:>@])],
+       [with_sha_crypt=$withval], [with_sha_crypt=yes])
+AC_ARG_WITH(nscd,
+       [AC_HELP_STRING([--with-nscd], [enable support for nscd @<:@default=yes@:>@])],
+       [with_nscd=$withval], [with_nscd=yes])
+AC_ARG_WITH(group-name-max-length,
+       [AC_HELP_STRING([--with-group-name-max-length], [set max group name length @<:@default=16@:>@])],
+       [with_group_name_max_length=$withval], [with_group_name_max_length=yes])
+
+if test "$with_group_name_max_length" = "no" ; then
+       with_group_name_max_length=0
+elif test "$with_group_name_max_length" = "yes" ; then
+       with_group_name_max_length=16
+fi
+AC_DEFINE_UNQUOTED(GROUP_NAME_MAX_LENGTH, $with_group_name_max_length, [max group name length])
+AC_SUBST(GROUP_NAME_MAX_LENGTH)
+GROUP_NAME_MAX_LENGTH="$with_group_name_max_length"
+
+AM_CONDITIONAL(USE_SHA_CRYPT, test "x$with_sha_crypt" = "xyes")
+if test "$with_sha_crypt" = "yes"; then
+       AC_DEFINE(USE_SHA_CRYPT, 1, [Define to allow the SHA256 and SHA512 password encryption algorithms])
+fi
+
+if test "$with_nscd" = "yes"; then
+       AC_CHECK_FUNC(posix_spawn,
+                     [AC_DEFINE(USE_NSCD, 1, [Define to support flushing of nscd caches])],
+                     [AC_MSG_ERROR([posix_spawn is needed for nscd support])])
+fi
 
 dnl Check for some functions in libc first, only if not found check for
 dnl other libraries.  This should prevent linking libnsl if not really
@@ -245,6 +303,7 @@ AC_SEARCH_LIBS(gethostbyname, nsl)
 if test "$enable_shadowgrp" = "yes"; then
        AC_DEFINE(SHADOWGRP, 1, [Define to support the shadow group file.])
 fi
+AM_CONDITIONAL(SHADOWGRP, test "x$enable_shadowgrp" = "xyes")
 
 if test "$enable_man" = "yes"; then
        dnl
@@ -259,21 +318,95 @@ if test "$enable_man" = "yes"; then
        JH_CHECK_XML_CATALOG([-//OASIS//DTD DocBook XML V4.1.2//EN],
                [DocBook XML DTD V4.1.2], [], enable_man=no)
        JH_CHECK_XML_CATALOG([http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl],
-               [DocBook XSL Stylesheets], [], enable_man=no)
+               [DocBook XSL Stylesheets >= 1.70.1], [], enable_man=no)
 fi
-AM_CONDITIONAL(ENABLE_REGENERATE_MAN, test x$enable_man != xno)
+AM_CONDITIONAL(ENABLE_REGENERATE_MAN, test "x$enable_man" != "xno")
 
 AC_SUBST(LIBCRYPT)
 AC_CHECK_LIB(crypt, crypt, [LIBCRYPT=-lcrypt],
        [AC_MSG_ERROR([crypt() not found])])
 
+AC_SUBST(LIBACL)
+if test "$with_acl" != "no"; then
+       AC_CHECK_HEADERS(acl/libacl.h attr/error_context.h, [acl_header="yes"], [acl_header="no"])
+       if test "$acl_header$with_acl" = "noyes" ; then
+               AC_MSG_ERROR([acl/libacl.h or attr/error_context.h is missing])
+       elif test "$acl_header" = "yes" ; then
+               AC_CHECK_LIB(acl, perm_copy_file,
+                            [AC_CHECK_LIB(acl, perm_copy_fd,
+                                          [acl_lib="yes"],
+                                          [acl_lib="no"])],
+                            [acl_lib="no"])
+               if test "$acl_lib$with_acl" = "noyes" ; then
+                       AC_MSG_ERROR([libacl not found])
+               elif test "$acl_lib" = "no" ; then
+                       with_acl="no"
+               else
+                       AC_DEFINE(WITH_ACL, 1,
+                                 [Build shadow with ACL support])
+                       LIBACL="-lacl"
+                       with_acl="yes"
+               fi
+       else
+               with_acl="no"
+       fi
+fi
+
+AC_SUBST(LIBATTR)
+if test "$with_attr" != "no"; then
+       AC_CHECK_HEADERS(attr/libattr.h attr/error_context.h, [attr_header="yes"], [attr_header="no"])
+       if test "$attr_header$with_attr" = "noyes" ; then
+               AC_MSG_ERROR([attr/libattr.h or attr/error_context.h is missing])
+       elif test "$attr_header" = "yes" ; then
+               AC_CHECK_LIB(attr, attr_copy_file,
+                            [AC_CHECK_LIB(attr, attr_copy_fd,
+                                          [attr_lib="yes"],
+                                          [attr_lib="no"])],
+                            [attr_lib="no"])
+               if test "$attr_lib$with_attr" = "noyes" ; then
+                       AC_MSG_ERROR([libattr not found])
+               elif test "$attr_lib" = "no" ; then
+                       with_attr="no"
+               else
+                       AC_DEFINE(WITH_ATTR, 1,
+                                 [Build shadow with Extended Attributes support])
+                       LIBATTR="-lattr"
+                       with_attr="yes"
+               fi
+       else
+               with_attr="no"
+       fi
+fi
+
 AC_SUBST(LIBAUDIT)
-if test "$with_audit" = "yes"; then
+if test "$with_audit" != "no"; then
        AC_CHECK_HEADER(libaudit.h, [audit_header="yes"], [audit_header="no"])
+       if test "$audit_header$with_audit" = "noyes" ; then
+               AC_MSG_ERROR([libaudit.h is missing])
+       elif test "$audit_header" = "yes"; then
+               AC_CHECK_DECL(AUDIT_ADD_USER,,[audit_header="no"],[#include <libaudit.h>])
+               AC_CHECK_DECL(AUDIT_DEL_USER,,[audit_header="no"],[#include <libaudit.h>])
+               AC_CHECK_DECL(AUDIT_ADD_GROUP,,[audit_header="no"],[#include <libaudit.h>])
+               AC_CHECK_DECL(AUDIT_DEL_GROUP,,[audit_header="no"],[#include <libaudit.h>])
+               if test "$audit_header$with_audit" = "noyes" ; then
+                       AC_MSG_ERROR([AUDIT_ADD_USER AUDIT_DEL_USER AUDIT_ADD_GROUP or AUDIT_DEL_GROUP missing from libaudit.h])
+               fi
+       fi
        if test "$audit_header" = "yes"; then
                AC_CHECK_LIB(audit, audit_log_acct_message,
-                       [AC_DEFINE(WITH_AUDIT, 1, [Define if you want to enable Audit messages])
-                       LIBAUDIT="-laudit"])
+                            [audit_lib="yes"], [audit_lib="no"])
+               if test "$audit_lib$with_audit" = "noyes" ; then
+                       AC_MSG_ERROR([libaudit not found])
+               elif test "$audit_lib" = "no" ; then
+                       with_audit="no"
+               else
+                       AC_DEFINE(WITH_AUDIT, 1,
+                                 [Define if you want to enable Audit messages])
+                       LIBAUDIT="-laudit"
+                       with_audit="yes"
+               fi
+       else
+               with_audit="no"
        fi
 fi
 
@@ -288,35 +421,135 @@ if test "$with_libcrack" = "yes"; then
                AC_DEFINE(HAVE_LIBCRACK_PW, 1, [Defined if it includes *Pw functions.]))
 fi
 
-if test "$with_selinux" = "yes"; then
-       AC_CHECK_LIB(selinux, is_selinux_enabled,
-               [LIBSELINUX="-lselinux"],
-               [AC_MSG_ERROR([libselinux not found])])
-       AC_SUBST(LIBSELINUX)
-       AC_CHECK_HEADERS(selinux/selinux.h, [], [selinux/selinux.h is missing])
-       AC_DEFINE(WITH_SELINUX, 1, [Build shadow with SELinux support])
+AC_SUBST(LIBSELINUX)
+if test "$with_selinux" != "no"; then
+       AC_CHECK_HEADERS(selinux/selinux.h, [selinux_header="yes"], [selinux_header="no"])
+       if test "$selinux_header$with_selinux" = "noyes" ; then
+               AC_MSG_ERROR([selinux/selinux.h is missing])
+       elif test "$selinux_header" = "yes" ; then
+               AC_CHECK_LIB(selinux, is_selinux_enabled,
+                            [selinux_lib="yes"], [selinux_lib="no"])
+               if test "$selinux_lib$with_selinux" = "noyes" ; then
+                       AC_MSG_ERROR([libselinux not found])
+               elif test "$selinux_lib" = "no" ; then
+                       with_selinux="no"
+               else
+                       AC_DEFINE(WITH_SELINUX, 1,
+                                 [Build shadow with SELinux support])
+                       LIBSELINUX="-lselinux"
+                       with_selinux="yes"
+               fi
+       else
+               with_selinux="no"
+       fi
 fi
 
+AC_SUBST(LIBTCB)
+if test "$with_tcb" != "no"; then
+       AC_CHECK_HEADERS(tcb.h, [tcb_header="yes"], [tcb_header="no"])
+       if test "$tcb_header$with_tcb" = "noyes" ; then
+               AC_MSG_ERROR([tcb.h is missing])
+       elif test "$tcb_header" = "yes" ; then
+               AC_CHECK_LIB(tcb, tcb_is_suspect, [tcb_lib="yes"], [tcb_lib="no"])
+               if test "$tcb_lib$with_tcb" = "noyes" ; then
+                       AC_MSG_ERROR([libtcb not found])
+               elif test "$tcb_lib" = "no" ; then
+                       with_tcb="no"
+               else
+                       AC_DEFINE(WITH_TCB, 1, [Build shadow with tcb support (incomplete)])
+                       LIBTCB="-ltcb"
+                       with_tcb="yes"
+               fi
+       else
+               with_tcb="no"
+       fi
+fi
+AM_CONDITIONAL(WITH_TCB, test x$with_tcb = xyes)
+
 AC_SUBST(LIBPAM)
-if test "$with_libpam" = "yes"; then
+if test "$with_libpam" != "no"; then
        AC_CHECK_LIB(pam, pam_start,
-               [AC_DEFINE(USE_PAM, 1, [Define to support Pluggable Authentication Modules])
-               LIBPAM="-lpam"
-               AC_CHECK_LIB(pam_misc, main,
-                       [LIBPAM="$LIBPAM -lpam_misc"],
-                       AC_MSG_ERROR(libpam_misc is missing for enable PAM support)
-               )],
-               [AC_MSG_CHECKING(use login access checking if PAM not used)
-               AC_MSG_RESULT(yes)]
-       )
+                    [pam_lib="yes"], [pam_lib="no"])
+       if test "$pam_lib$with_libpam" = "noyes" ; then
+               AC_MSG_ERROR(libpam not found)
+       fi
+
+       LIBPAM="-lpam"
+       pam_conv_function="no"
+
+       AC_CHECK_LIB(pam, openpam_ttyconv,
+                    [pam_conv_function="openpam_ttyconv"],
+                    AC_CHECK_LIB(pam_misc, misc_conv,
+                                 [pam_conv_function="misc_conv"; LIBPAM="$LIBPAM -lpam_misc"])
+                   )
+
+       if test "$pam_conv_function$with_libpam" = "noyes" ; then
+               AC_MSG_ERROR(PAM conversation function not found)
+       fi
+
+       pam_headers_found=no
+       AC_CHECK_HEADERS( [security/openpam.h security/pam_misc.h],
+                        [ pam_headers_found=yes ; break ], [],
+                        [ #include <security/pam_appl.h> ] )
+       if test "$pam_headers_found$with_libpam" = "noyes" ; then
+                       AC_MSG_ERROR(PAM headers not found)
+       fi
+
+
+       if test "$pam_lib$pam_headers_found" = "yesyes" -a "$pam_conv_function" != "no" ; then
+               with_libpam="yes"
+       else
+               with_libpam="no"
+               unset LIBPAM
+       fi
+fi
+dnl Now with_libpam is either yes or no
+if test "$with_libpam" = "yes"; then
+       AC_CHECK_DECLS([PAM_ESTABLISH_CRED,
+                       PAM_DELETE_CRED,
+                       PAM_NEW_AUTHTOK_REQD,
+                       PAM_DATA_SILENT],
+                      [], [], [#include <security/pam_appl.h>])
+
+
+       save_libs=$LIBS
+       LIBS="$LIBS $LIBPAM"
+       # We do not use AC_CHECK_FUNCS to avoid duplicated definition with
+       # Linux PAM.
+       AC_CHECK_FUNC(pam_fail_delay, [AC_DEFINE(HAS_PAM_FAIL_DELAY, 1, [Define to 1 if you have the declaration of 'pam_fail_delay'])])
+       LIBS=$save_libs
+
+       AC_DEFINE(USE_PAM, 1, [Define to support Pluggable Authentication Modules])
+       AC_DEFINE_UNQUOTED(SHADOW_PAM_CONVERSATION, [$pam_conv_function],[PAM converstation to use])
+       AM_CONDITIONAL(USE_PAM, [true])
+
        AC_MSG_CHECKING(use login and su access checking if PAM not used)
        AC_MSG_RESULT(no)
 else
-       AC_MSG_CHECKING(use login and su access checking if PAM not used)
        AC_DEFINE(SU_ACCESS, 1, [Define to support /etc/suauth su access control.])
+       AM_CONDITIONAL(USE_PAM, [false])
+       AC_MSG_CHECKING(use login and su access checking if PAM not used)
        AC_MSG_RESULT(yes)
 fi
 
+if test "$enable_acct_tools_setuid" != "no"; then
+       if test "$with_libpam" != "yes"; then
+               if test "$enable_acct_tools_setuid" = "yes"; then
+                       AC_MSG_ERROR(PAM support is required for --enable-account-tools-setuid)
+               else
+                       enable_acct_tools_setuid="no"
+               fi
+       else
+               enable_acct_tools_setuid="yes"
+       fi
+       if test "$enable_acct_tools_setuid" = "yes"; then
+               AC_DEFINE(ACCT_TOOLS_SETUID,
+                         1,
+                         [Define if account management tools should be installed setuid and authenticate the callers])
+       fi
+fi
+AM_CONDITIONAL(ACCT_TOOLS_SETUID, test "x$enable_acct_tools_setuid" = "xyes")
+
 AC_SUBST(LIBSKEY)
 AC_SUBST(LIBMD)
 if test "$with_skey" = "yes"; then
@@ -324,16 +557,36 @@ if test "$with_skey" = "yes"; then
        AC_CHECK_LIB(skey, skeychallenge, [LIBSKEY=-lskey],
                [AC_MSG_ERROR([liskey missing. You can download S/Key source code from http://rsync1.it.gentoo.org/gentoo/distfiles/skey-1.1.5.tar.bz2])])
        AC_DEFINE(SKEY, 1, [Define to support S/Key logins.])
+       AC_TRY_COMPILE([
+               #include <stdio.h>
+               #include <skey.h>
+       ],[
+               skeychallenge((void*)0, (void*)0, (void*)0, 0);
+       ],[AC_DEFINE(SKEY_BSD_STYLE, 1, [Define to support newer BSD S/Key API])])
+fi
+
+if test "$enable_utmpx" = "yes"; then
+       if test "$ac_cv_header_utmpx_h" != "yes"; then
+               AC_MSG_ERROR([The utmpx.h header file is required for utmpx support.])
+       fi
+       AC_DEFINE(USE_UTMPX,
+                 1,
+                 [Define if utmpx should be used])
 fi
 
-AM_GNU_GETTEXT_VERSION(0.12.1)
+AC_DEFINE_UNQUOTED(SHELL, ["$SHELL"], [The default shell.])
+
+AM_GNU_GETTEXT_VERSION(0.16)
 AM_GNU_GETTEXT([external], [need-ngettext])
+AM_CONDITIONAL(USE_NLS, test "x$USE_NLS" = "xyes")
 
 AC_CONFIG_FILES([
        Makefile
        po/Makefile.in
        doc/Makefile
        man/Makefile
+       man/config.xml
+       man/po/Makefile
        man/cs/Makefile
        man/de/Makefile
        man/es/Makefile
@@ -347,6 +600,7 @@ AC_CONFIG_FILES([
        man/pl/Makefile
        man/pt_BR/Makefile
        man/ru/Makefile
+       man/sv/Makefile
        man/tr/Makefile
        man/zh_CN/Makefile
        man/zh_TW/Makefile
@@ -361,12 +615,20 @@ AC_CONFIG_FILES([
 AC_OUTPUT
 
 echo
-echo "shadow will be compiled with the followig feactures:"
+echo "shadow will be compiled with the following features:"
 echo
 echo " auditing support:               $with_audit"
 echo " CrackLib support:               $with_libcrack"
 echo " PAM support:                    $with_libpam"
+if test "$with_libpam" = "yes"; then
+echo " suid account management tools:  $enable_acct_tools_setuid"
+fi
 echo " SELinux support:                $with_selinux"
+echo " ACL support:                    $with_acl"
+echo " Extended Attributes support:    $with_attr"
+echo " tcb support (incomplete):       $with_tcb"
 echo " shadow group support:           $enable_shadowgrp"
 echo " S/Key support:                  $with_skey"
+echo " SHA passwords encryption:       $with_sha_crypt"
+echo " nscd support:                   $with_nscd"
 echo