diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/.gitignore | 35 | ||||
-rw-r--r-- | src/Makefile.am | 12 | ||||
-rw-r--r-- | src/Makefile.in | 1254 | ||||
-rw-r--r-- | src/chfn.c | 2 | ||||
-rw-r--r-- | src/chgpasswd.c | 2 | ||||
-rw-r--r-- | src/chpasswd.c | 11 | ||||
-rw-r--r-- | src/chsh.c | 2 | ||||
-rw-r--r-- | src/gpasswd.c | 2 | ||||
-rw-r--r-- | src/groupadd.c | 2 | ||||
-rw-r--r-- | src/groupdel.c | 2 | ||||
-rw-r--r-- | src/groupmod.c | 2 | ||||
-rw-r--r-- | src/grpck.c | 6 | ||||
-rw-r--r-- | src/grpconv.c | 2 | ||||
-rw-r--r-- | src/grpunconv.c | 2 | ||||
-rw-r--r-- | src/lastlog.c | 21 | ||||
-rw-r--r-- | src/login.c | 32 | ||||
-rw-r--r-- | src/newgidmap.c | 2 | ||||
-rw-r--r-- | src/newuidmap.c | 2 | ||||
-rw-r--r-- | src/newusers.c | 2 | ||||
-rw-r--r-- | src/nologin.c | 5 | ||||
-rw-r--r-- | src/passwd.c | 2 | ||||
-rw-r--r-- | src/pwck.c | 8 | ||||
-rw-r--r-- | src/pwconv.c | 4 | ||||
-rw-r--r-- | src/pwunconv.c | 2 | ||||
-rw-r--r-- | src/su.c | 35 | ||||
-rw-r--r-- | src/useradd.c | 156 | ||||
-rw-r--r-- | src/userdel.c | 19 | ||||
-rw-r--r-- | src/usermod.c | 35 | ||||
-rw-r--r-- | src/vipw.c | 2 |
29 files changed, 1558 insertions, 105 deletions
diff --git a/src/.gitignore b/src/.gitignore deleted file mode 100644 index d5716b98..00000000 --- a/src/.gitignore +++ /dev/null @@ -1,35 +0,0 @@ -/chage -/chfn -/chgpasswd -/chpasswd -/chsh -/expiry -/faillog -/gpasswd -/groupadd -/groupdel -/groupmems -/groupmod -/groups -/grpck -/grpconv -/grpunconv -/id -/lastlog -/login -/logoutd -/newgrp -/newgidmap -/newuidmap -/newusers -/nologin -/passwd -/pwck -/pwconv -/pwunconv -/su -/sulogin -/useradd -/userdel -/usermod -/vipw diff --git a/src/Makefile.am b/src/Makefile.am index 3c98a8d3..34690ced 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -61,8 +61,10 @@ if ACCT_TOOLS_SETUID suidubins += chgpasswd chpasswd groupadd groupdel groupmod newusers useradd userdel usermod endif if ENABLE_SUBIDS +if !FCAPS suidubins += newgidmap newuidmap endif +endif if WITH_TCB shadowsgidubins = passwd @@ -86,8 +88,8 @@ LIBCRYPT_NOPAM = $(LIBCRYPT) endif chage_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX) -newuidmap_LDADD = $(LDADD) $(LIBSELINUX) -newgidmap_LDADD = $(LDADD) $(LIBSELINUX) +newuidmap_LDADD = $(LDADD) $(LIBSELINUX) $(LIBCAP) +newgidmap_LDADD = $(LDADD) $(LIBSELINUX) $(LIBCAP) chfn_LDADD = $(LDADD) $(LIBPAM) $(LIBSELINUX) $(LIBCRYPT_NOPAM) $(LIBSKEY) $(LIBMD) chgpasswd_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBSELINUX) $(LIBCRYPT) chsh_LDADD = $(LDADD) $(LIBPAM) $(LIBSELINUX) $(LIBCRYPT_NOPAM) $(LIBSKEY) $(LIBMD) @@ -138,3 +140,9 @@ if WITH_TCB chmod $(sgidperms) $(DESTDIR)$(ubindir)/$$i; \ done endif +if ENABLE_SUBIDS +if FCAPS + setcap cap_setuid+ep $(DESTDIR)$(ubindir)/newuidmap + setcap cap_setgid+ep $(DESTDIR)$(ubindir)/newgidmap +endif +endif diff --git a/src/Makefile.in b/src/Makefile.in new file mode 100644 index 00000000..4eb8b30a --- /dev/null +++ b/src/Makefile.in @@ -0,0 +1,1254 @@ +# Makefile.in generated by automake 1.15.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994-2017 Free Software Foundation, Inc. + +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +VPATH = @srcdir@ +am__is_gnu_make = { \ + if test -z '$(MAKELEVEL)'; then \ + false; \ + elif test -n '$(MAKE_HOST)'; then \ + true; \ + elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ + true; \ + else \ + false; \ + fi; \ +} +am__make_running_with_option = \ + case $${target_option-} in \ + ?) ;; \ + *) echo "am__make_running_with_option: internal error: invalid" \ + "target option '$${target_option-}' specified" >&2; \ + exit 1;; \ + esac; \ + has_opt=no; \ + sane_makeflags=$$MAKEFLAGS; \ + if $(am__is_gnu_make); then \ + sane_makeflags=$$MFLAGS; \ + else \ + case $$MAKEFLAGS in \ + *\\[\ \ ]*) \ + bs=\\; \ + sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ + | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ + esac; \ + fi; \ + skip_next=no; \ + strip_trailopt () \ + { \ + flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ + }; \ + for flg in $$sane_makeflags; do \ + test $$skip_next = yes && { skip_next=no; continue; }; \ + case $$flg in \ + *=*|--*) continue;; \ + -*I) strip_trailopt 'I'; skip_next=yes;; \ + -*I?*) strip_trailopt 'I';; \ + -*O) strip_trailopt 'O'; skip_next=yes;; \ + -*O?*) strip_trailopt 'O';; \ + -*l) strip_trailopt 'l'; skip_next=yes;; \ + -*l?*) strip_trailopt 'l';; \ + -[dEDm]) skip_next=yes;; \ + -[JT]) skip_next=yes;; \ + esac; \ + case $$flg in \ + *$$target_option*) has_opt=yes; break;; \ + esac; \ + done; \ + test $$has_opt = yes +am__make_dryrun = (target_option=n; $(am__make_running_with_option)) +am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +bin_PROGRAMS = groups$(EXEEXT) login$(EXEEXT) su$(EXEEXT) +sbin_PROGRAMS = nologin$(EXEEXT) +ubin_PROGRAMS = faillog$(EXEEXT) lastlog$(EXEEXT) chage$(EXEEXT) \ + chfn$(EXEEXT) chsh$(EXEEXT) expiry$(EXEEXT) gpasswd$(EXEEXT) \ + newgrp$(EXEEXT) passwd$(EXEEXT) $(am__EXEEXT_1) +@ENABLE_SUBIDS_TRUE@am__append_1 = newgidmap newuidmap +usbin_PROGRAMS = chgpasswd$(EXEEXT) chpasswd$(EXEEXT) \ + groupadd$(EXEEXT) groupdel$(EXEEXT) groupmems$(EXEEXT) \ + groupmod$(EXEEXT) grpck$(EXEEXT) grpconv$(EXEEXT) \ + grpunconv$(EXEEXT) logoutd$(EXEEXT) newusers$(EXEEXT) \ + pwck$(EXEEXT) pwconv$(EXEEXT) pwunconv$(EXEEXT) \ + useradd$(EXEEXT) userdel$(EXEEXT) usermod$(EXEEXT) \ + vipw$(EXEEXT) +noinst_PROGRAMS = id$(EXEEXT) sulogin$(EXEEXT) +@WITH_TCB_FALSE@am__append_2 = passwd +@ACCT_TOOLS_SETUID_TRUE@am__append_3 = chgpasswd chpasswd groupadd groupdel groupmod newusers useradd userdel usermod +@ENABLE_SUBIDS_TRUE@@FCAPS_FALSE@am__append_4 = newgidmap newuidmap +subdir = src +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)" \ + "$(DESTDIR)$(ubindir)" "$(DESTDIR)$(usbindir)" +@ENABLE_SUBIDS_TRUE@am__EXEEXT_1 = newgidmap$(EXEEXT) \ +@ENABLE_SUBIDS_TRUE@ newuidmap$(EXEEXT) +PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) $(sbin_PROGRAMS) \ + $(ubin_PROGRAMS) $(usbin_PROGRAMS) +chage_SOURCES = chage.c +chage_OBJECTS = chage.$(OBJEXT) +am__DEPENDENCIES_1 = +am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) \ + $(top_builddir)/libmisc/libmisc.a \ + $(top_builddir)/lib/libshadow.la $(am__DEPENDENCIES_1) +@ACCT_TOOLS_SETUID_TRUE@am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1) +chage_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = +chfn_SOURCES = chfn.c +chfn_OBJECTS = chfn.$(OBJEXT) +@USE_PAM_FALSE@am__DEPENDENCIES_4 = $(am__DEPENDENCIES_1) +chfn_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +chgpasswd_SOURCES = chgpasswd.c +chgpasswd_OBJECTS = chgpasswd.$(OBJEXT) +chgpasswd_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +chpasswd_SOURCES = chpasswd.c +chpasswd_OBJECTS = chpasswd.$(OBJEXT) +chpasswd_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +chsh_SOURCES = chsh.c +chsh_OBJECTS = chsh.$(OBJEXT) +chsh_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +expiry_SOURCES = expiry.c +expiry_OBJECTS = expiry.$(OBJEXT) +expiry_LDADD = $(LDADD) +expiry_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(top_builddir)/libmisc/libmisc.a \ + $(top_builddir)/lib/libshadow.la $(am__DEPENDENCIES_1) +faillog_SOURCES = faillog.c +faillog_OBJECTS = faillog.$(OBJEXT) +faillog_LDADD = $(LDADD) +faillog_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(top_builddir)/libmisc/libmisc.a \ + $(top_builddir)/lib/libshadow.la $(am__DEPENDENCIES_1) +gpasswd_SOURCES = gpasswd.c +gpasswd_OBJECTS = gpasswd.$(OBJEXT) +gpasswd_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +groupadd_SOURCES = groupadd.c +groupadd_OBJECTS = groupadd.$(OBJEXT) +groupadd_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +groupdel_SOURCES = groupdel.c +groupdel_OBJECTS = groupdel.$(OBJEXT) +groupdel_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +groupmems_SOURCES = groupmems.c +groupmems_OBJECTS = groupmems.$(OBJEXT) +groupmems_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +groupmod_SOURCES = groupmod.c +groupmod_OBJECTS = groupmod.$(OBJEXT) +groupmod_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +groups_SOURCES = groups.c +groups_OBJECTS = groups.$(OBJEXT) +groups_LDADD = $(LDADD) +groups_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(top_builddir)/libmisc/libmisc.a \ + $(top_builddir)/lib/libshadow.la $(am__DEPENDENCIES_1) +grpck_SOURCES = grpck.c +grpck_OBJECTS = grpck.$(OBJEXT) +grpck_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) +grpconv_SOURCES = grpconv.c +grpconv_OBJECTS = grpconv.$(OBJEXT) +grpconv_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) +grpunconv_SOURCES = grpunconv.c +grpunconv_OBJECTS = grpunconv.$(OBJEXT) +grpunconv_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) +id_SOURCES = id.c +id_OBJECTS = id.$(OBJEXT) +id_LDADD = $(LDADD) +id_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(top_builddir)/libmisc/libmisc.a \ + $(top_builddir)/lib/libshadow.la $(am__DEPENDENCIES_1) +lastlog_SOURCES = lastlog.c +lastlog_OBJECTS = lastlog.$(OBJEXT) +lastlog_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) +am_login_OBJECTS = login.$(OBJEXT) login_nopam.$(OBJEXT) +login_OBJECTS = $(am_login_OBJECTS) +login_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +logoutd_SOURCES = logoutd.c +logoutd_OBJECTS = logoutd.$(OBJEXT) +logoutd_LDADD = $(LDADD) +logoutd_DEPENDENCIES = $(am__DEPENDENCIES_1) \ + $(top_builddir)/libmisc/libmisc.a \ + $(top_builddir)/lib/libshadow.la $(am__DEPENDENCIES_1) +newgidmap_SOURCES = newgidmap.c +newgidmap_OBJECTS = newgidmap.$(OBJEXT) +newgidmap_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) +newgrp_SOURCES = newgrp.c +newgrp_OBJECTS = newgrp.$(OBJEXT) +newgrp_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +newuidmap_SOURCES = newuidmap.c +newuidmap_OBJECTS = newuidmap.$(OBJEXT) +newuidmap_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) +newusers_SOURCES = newusers.c +newusers_OBJECTS = newusers.$(OBJEXT) +newusers_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +nologin_SOURCES = nologin.c +nologin_OBJECTS = nologin.$(OBJEXT) +nologin_DEPENDENCIES = +passwd_SOURCES = passwd.c +passwd_OBJECTS = passwd.$(OBJEXT) +passwd_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4) +pwck_SOURCES = pwck.c +pwck_OBJECTS = pwck.$(OBJEXT) +pwck_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) +pwconv_SOURCES = pwconv.c +pwconv_OBJECTS = pwconv.$(OBJEXT) +pwconv_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) +pwunconv_SOURCES = pwunconv.c +pwunconv_OBJECTS = pwunconv.$(OBJEXT) +pwunconv_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) +am_su_OBJECTS = su.$(OBJEXT) suauth.$(OBJEXT) +su_OBJECTS = $(am_su_OBJECTS) +su_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_4) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +sulogin_SOURCES = sulogin.c +sulogin_OBJECTS = sulogin.$(OBJEXT) +sulogin_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) +useradd_SOURCES = useradd.c +useradd_OBJECTS = useradd.$(OBJEXT) +useradd_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +userdel_SOURCES = userdel.c +userdel_OBJECTS = userdel.$(OBJEXT) +userdel_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +usermod_SOURCES = usermod.c +usermod_OBJECTS = usermod.$(OBJEXT) +usermod_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) +vipw_SOURCES = vipw.c +vipw_OBJECTS = vipw.$(OBJEXT) +vipw_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) +AM_V_P = $(am__v_P_@AM_V@) +am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) +am__v_P_0 = false +am__v_P_1 = : +AM_V_GEN = $(am__v_GEN_@AM_V@) +am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) +am__v_GEN_0 = @echo " GEN " $@; +am__v_GEN_1 = +AM_V_at = $(am__v_at_@AM_V@) +am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) +am__v_at_0 = @ +am__v_at_1 = +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_@AM_V@) +am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) +am__v_CC_0 = @echo " CC " $@; +am__v_CC_1 = +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_@AM_V@) +am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) +am__v_CCLD_0 = @echo " CCLD " $@; +am__v_CCLD_1 = +SOURCES = chage.c chfn.c chgpasswd.c chpasswd.c chsh.c expiry.c \ + faillog.c gpasswd.c groupadd.c groupdel.c groupmems.c \ + groupmod.c groups.c grpck.c grpconv.c grpunconv.c id.c \ + lastlog.c $(login_SOURCES) logoutd.c newgidmap.c newgrp.c \ + newuidmap.c newusers.c nologin.c passwd.c pwck.c pwconv.c \ + pwunconv.c $(su_SOURCES) sulogin.c useradd.c userdel.c \ + usermod.c vipw.c +DIST_SOURCES = chage.c chfn.c chgpasswd.c chpasswd.c chsh.c expiry.c \ + faillog.c gpasswd.c groupadd.c groupdel.c groupmems.c \ + groupmod.c groups.c grpck.c grpconv.c grpunconv.c id.c \ + lastlog.c $(login_SOURCES) logoutd.c newgidmap.c newgrp.c \ + newuidmap.c newusers.c nologin.c passwd.c pwck.c pwconv.c \ + pwunconv.c $(su_SOURCES) sulogin.c useradd.c userdel.c \ + usermod.c vipw.c +am__can_run_installinfo = \ + case $$AM_UPDATE_INFO_DIR in \ + n|no|NO) false;; \ + *) (install-info --version) >/dev/null 2>&1;; \ + esac +am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) +# Read a list of newline-separated strings from the standard input, +# and print each of them once, without duplicates. Input order is +# *not* preserved. +am__uniquify_input = $(AWK) '\ + BEGIN { nonempty = 0; } \ + { items[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in items) print i; }; } \ +' +# Make sure the list of sources is unique. This is necessary because, +# e.g., the same source file might be shared among _SOURCES variables +# for different programs/libraries. +am__define_uniq_tagged_files = \ + list='$(am__tagged_files)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | $(am__uniquify_input)` +ETAGS = etags +CTAGS = ctags +am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DLLTOOL = @DLLTOOL@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +FGREP = @FGREP@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +GROUP_NAME_MAX_LENGTH = @GROUP_NAME_MAX_LENGTH@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBACL = @LIBACL@ +LIBATTR = @LIBATTR@ +LIBAUDIT = @LIBAUDIT@ +LIBCRACK = @LIBCRACK@ +LIBCRYPT = @LIBCRYPT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBMD = @LIBMD@ +LIBOBJS = @LIBOBJS@ +LIBPAM = @LIBPAM@ +LIBS = @LIBS@ +LIBSELINUX = @LIBSELINUX@ +LIBSEMANAGE = @LIBSEMANAGE@ +LIBSKEY = @LIBSKEY@ +LIBTCB = @LIBTCB@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ +MAINT = @MAINT@ +MAKEINFO = @MAKEINFO@ +MANIFEST_TOOL = @MANIFEST_TOOL@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SED = @SED@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +XMLCATALOG = @XMLCATALOG@ +XML_CATALOG_FILE = @XML_CATALOG_FILE@ +XSLTPROC = @XSLTPROC@ +YACC = @YACC@ +YFLAGS = @YFLAGS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_AR = @ac_ct_AR@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +capcmd = @capcmd@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +runstatedir = @runstatedir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = \ + .indent.pro + +ubindir = ${prefix}/bin +usbindir = ${prefix}/sbin +suidperms = 4755 +sgidperms = 2755 +AM_CPPFLAGS = \ + -I${top_srcdir}/lib \ + -I$(top_srcdir)/libmisc \ + -DLOCALEDIR=\"$(datadir)/locale\" + +suidbins = su +suidubins = chage chfn chsh expiry gpasswd newgrp $(am__append_2) \ + $(am__append_3) $(am__append_4) +@WITH_TCB_TRUE@shadowsgidubins = passwd +LDADD = $(INTLLIBS) \ + $(top_builddir)/libmisc/libmisc.a \ + $(top_builddir)/lib/libshadow.la \ + $(LIBTCB) + +@ACCT_TOOLS_SETUID_FALSE@LIBPAM_SUID = +@ACCT_TOOLS_SETUID_TRUE@LIBPAM_SUID = $(LIBPAM) +@USE_PAM_FALSE@LIBCRYPT_NOPAM = $(LIBCRYPT) +@USE_PAM_TRUE@LIBCRYPT_NOPAM = +chage_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX) +newuidmap_LDADD = $(LDADD) $(LIBSELINUX) $(LIBCAP) +newgidmap_LDADD = $(LDADD) $(LIBSELINUX) $(LIBCAP) +chfn_LDADD = $(LDADD) $(LIBPAM) $(LIBSELINUX) $(LIBCRYPT_NOPAM) $(LIBSKEY) $(LIBMD) +chgpasswd_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBSELINUX) $(LIBCRYPT) +chsh_LDADD = $(LDADD) $(LIBPAM) $(LIBSELINUX) $(LIBCRYPT_NOPAM) $(LIBSKEY) $(LIBMD) +chpasswd_LDADD = $(LDADD) $(LIBPAM) $(LIBSELINUX) $(LIBCRYPT) +gpasswd_LDADD = $(LDADD) $(LIBAUDIT) $(LIBSELINUX) $(LIBCRYPT) +groupadd_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX) +groupdel_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX) +groupmems_LDADD = $(LDADD) $(LIBPAM) $(LIBSELINUX) +groupmod_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX) +grpck_LDADD = $(LDADD) $(LIBSELINUX) +grpconv_LDADD = $(LDADD) $(LIBSELINUX) +grpunconv_LDADD = $(LDADD) $(LIBSELINUX) +lastlog_LDADD = $(LDADD) $(LIBAUDIT) +login_SOURCES = \ + login.c \ + login_nopam.c + +login_LDADD = $(LDADD) $(LIBPAM) $(LIBAUDIT) $(LIBCRYPT_NOPAM) $(LIBSKEY) $(LIBMD) +newgrp_LDADD = $(LDADD) $(LIBAUDIT) $(LIBCRYPT) +newusers_LDADD = $(LDADD) $(LIBPAM) $(LIBSELINUX) $(LIBCRYPT) +nologin_LDADD = +passwd_LDADD = $(LDADD) $(LIBPAM) $(LIBCRACK) $(LIBAUDIT) $(LIBSELINUX) $(LIBCRYPT_NOPAM) +pwck_LDADD = $(LDADD) $(LIBSELINUX) +pwconv_LDADD = $(LDADD) $(LIBSELINUX) +pwunconv_LDADD = $(LDADD) $(LIBSELINUX) +su_SOURCES = \ + su.c \ + suauth.c + +su_LDADD = $(LDADD) $(LIBPAM) $(LIBAUDIT) $(LIBCRYPT_NOPAM) $(LIBSKEY) $(LIBMD) +sulogin_LDADD = $(LDADD) $(LIBCRYPT) +useradd_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX) $(LIBSEMANAGE) $(LIBACL) $(LIBATTR) +userdel_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX) $(LIBSEMANAGE) +usermod_LDADD = $(LDADD) $(LIBPAM_SUID) $(LIBAUDIT) $(LIBSELINUX) $(LIBSEMANAGE) $(LIBACL) $(LIBATTR) +vipw_LDADD = $(LDADD) $(LIBSELINUX) +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + || test -f $$p1 \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +clean-noinstPROGRAMS: + @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +install-sbinPROGRAMS: $(sbin_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(sbindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(sbindir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + || test -f $$p1 \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(sbindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-sbinPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(sbindir)" && rm -f $$files + +clean-sbinPROGRAMS: + @list='$(sbin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +install-ubinPROGRAMS: $(ubin_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(ubin_PROGRAMS)'; test -n "$(ubindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(ubindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(ubindir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + || test -f $$p1 \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(ubindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(ubindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-ubinPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(ubin_PROGRAMS)'; test -n "$(ubindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(ubindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(ubindir)" && rm -f $$files + +clean-ubinPROGRAMS: + @list='$(ubin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +install-usbinPROGRAMS: $(usbin_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(usbin_PROGRAMS)'; test -n "$(usbindir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(usbindir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(usbindir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + || test -f $$p1 \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(usbindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(usbindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-usbinPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(usbin_PROGRAMS)'; test -n "$(usbindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(usbindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(usbindir)" && rm -f $$files + +clean-usbinPROGRAMS: + @list='$(usbin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list + +chage$(EXEEXT): $(chage_OBJECTS) $(chage_DEPENDENCIES) $(EXTRA_chage_DEPENDENCIES) + @rm -f chage$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(chage_OBJECTS) $(chage_LDADD) $(LIBS) + +chfn$(EXEEXT): $(chfn_OBJECTS) $(chfn_DEPENDENCIES) $(EXTRA_chfn_DEPENDENCIES) + @rm -f chfn$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(chfn_OBJECTS) $(chfn_LDADD) $(LIBS) + +chgpasswd$(EXEEXT): $(chgpasswd_OBJECTS) $(chgpasswd_DEPENDENCIES) $(EXTRA_chgpasswd_DEPENDENCIES) + @rm -f chgpasswd$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(chgpasswd_OBJECTS) $(chgpasswd_LDADD) $(LIBS) + +chpasswd$(EXEEXT): $(chpasswd_OBJECTS) $(chpasswd_DEPENDENCIES) $(EXTRA_chpasswd_DEPENDENCIES) + @rm -f chpasswd$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(chpasswd_OBJECTS) $(chpasswd_LDADD) $(LIBS) + +chsh$(EXEEXT): $(chsh_OBJECTS) $(chsh_DEPENDENCIES) $(EXTRA_chsh_DEPENDENCIES) + @rm -f chsh$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(chsh_OBJECTS) $(chsh_LDADD) $(LIBS) + +expiry$(EXEEXT): $(expiry_OBJECTS) $(expiry_DEPENDENCIES) $(EXTRA_expiry_DEPENDENCIES) + @rm -f expiry$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(expiry_OBJECTS) $(expiry_LDADD) $(LIBS) + +faillog$(EXEEXT): $(faillog_OBJECTS) $(faillog_DEPENDENCIES) $(EXTRA_faillog_DEPENDENCIES) + @rm -f faillog$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(faillog_OBJECTS) $(faillog_LDADD) $(LIBS) + +gpasswd$(EXEEXT): $(gpasswd_OBJECTS) $(gpasswd_DEPENDENCIES) $(EXTRA_gpasswd_DEPENDENCIES) + @rm -f gpasswd$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(gpasswd_OBJECTS) $(gpasswd_LDADD) $(LIBS) + +groupadd$(EXEEXT): $(groupadd_OBJECTS) $(groupadd_DEPENDENCIES) $(EXTRA_groupadd_DEPENDENCIES) + @rm -f groupadd$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(groupadd_OBJECTS) $(groupadd_LDADD) $(LIBS) + +groupdel$(EXEEXT): $(groupdel_OBJECTS) $(groupdel_DEPENDENCIES) $(EXTRA_groupdel_DEPENDENCIES) + @rm -f groupdel$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(groupdel_OBJECTS) $(groupdel_LDADD) $(LIBS) + +groupmems$(EXEEXT): $(groupmems_OBJECTS) $(groupmems_DEPENDENCIES) $(EXTRA_groupmems_DEPENDENCIES) + @rm -f groupmems$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(groupmems_OBJECTS) $(groupmems_LDADD) $(LIBS) + +groupmod$(EXEEXT): $(groupmod_OBJECTS) $(groupmod_DEPENDENCIES) $(EXTRA_groupmod_DEPENDENCIES) + @rm -f groupmod$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(groupmod_OBJECTS) $(groupmod_LDADD) $(LIBS) + +groups$(EXEEXT): $(groups_OBJECTS) $(groups_DEPENDENCIES) $(EXTRA_groups_DEPENDENCIES) + @rm -f groups$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(groups_OBJECTS) $(groups_LDADD) $(LIBS) + +grpck$(EXEEXT): $(grpck_OBJECTS) $(grpck_DEPENDENCIES) $(EXTRA_grpck_DEPENDENCIES) + @rm -f grpck$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(grpck_OBJECTS) $(grpck_LDADD) $(LIBS) + +grpconv$(EXEEXT): $(grpconv_OBJECTS) $(grpconv_DEPENDENCIES) $(EXTRA_grpconv_DEPENDENCIES) + @rm -f grpconv$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(grpconv_OBJECTS) $(grpconv_LDADD) $(LIBS) + +grpunconv$(EXEEXT): $(grpunconv_OBJECTS) $(grpunconv_DEPENDENCIES) $(EXTRA_grpunconv_DEPENDENCIES) + @rm -f grpunconv$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(grpunconv_OBJECTS) $(grpunconv_LDADD) $(LIBS) + +id$(EXEEXT): $(id_OBJECTS) $(id_DEPENDENCIES) $(EXTRA_id_DEPENDENCIES) + @rm -f id$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(id_OBJECTS) $(id_LDADD) $(LIBS) + +lastlog$(EXEEXT): $(lastlog_OBJECTS) $(lastlog_DEPENDENCIES) $(EXTRA_lastlog_DEPENDENCIES) + @rm -f lastlog$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(lastlog_OBJECTS) $(lastlog_LDADD) $(LIBS) + +login$(EXEEXT): $(login_OBJECTS) $(login_DEPENDENCIES) $(EXTRA_login_DEPENDENCIES) + @rm -f login$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(login_OBJECTS) $(login_LDADD) $(LIBS) + +logoutd$(EXEEXT): $(logoutd_OBJECTS) $(logoutd_DEPENDENCIES) $(EXTRA_logoutd_DEPENDENCIES) + @rm -f logoutd$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(logoutd_OBJECTS) $(logoutd_LDADD) $(LIBS) + +newgidmap$(EXEEXT): $(newgidmap_OBJECTS) $(newgidmap_DEPENDENCIES) $(EXTRA_newgidmap_DEPENDENCIES) + @rm -f newgidmap$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(newgidmap_OBJECTS) $(newgidmap_LDADD) $(LIBS) + +newgrp$(EXEEXT): $(newgrp_OBJECTS) $(newgrp_DEPENDENCIES) $(EXTRA_newgrp_DEPENDENCIES) + @rm -f newgrp$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(newgrp_OBJECTS) $(newgrp_LDADD) $(LIBS) + +newuidmap$(EXEEXT): $(newuidmap_OBJECTS) $(newuidmap_DEPENDENCIES) $(EXTRA_newuidmap_DEPENDENCIES) + @rm -f newuidmap$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(newuidmap_OBJECTS) $(newuidmap_LDADD) $(LIBS) + +newusers$(EXEEXT): $(newusers_OBJECTS) $(newusers_DEPENDENCIES) $(EXTRA_newusers_DEPENDENCIES) + @rm -f newusers$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(newusers_OBJECTS) $(newusers_LDADD) $(LIBS) + +nologin$(EXEEXT): $(nologin_OBJECTS) $(nologin_DEPENDENCIES) $(EXTRA_nologin_DEPENDENCIES) + @rm -f nologin$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(nologin_OBJECTS) $(nologin_LDADD) $(LIBS) + +passwd$(EXEEXT): $(passwd_OBJECTS) $(passwd_DEPENDENCIES) $(EXTRA_passwd_DEPENDENCIES) + @rm -f passwd$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(passwd_OBJECTS) $(passwd_LDADD) $(LIBS) + +pwck$(EXEEXT): $(pwck_OBJECTS) $(pwck_DEPENDENCIES) $(EXTRA_pwck_DEPENDENCIES) + @rm -f pwck$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(pwck_OBJECTS) $(pwck_LDADD) $(LIBS) + +pwconv$(EXEEXT): $(pwconv_OBJECTS) $(pwconv_DEPENDENCIES) $(EXTRA_pwconv_DEPENDENCIES) + @rm -f pwconv$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(pwconv_OBJECTS) $(pwconv_LDADD) $(LIBS) + +pwunconv$(EXEEXT): $(pwunconv_OBJECTS) $(pwunconv_DEPENDENCIES) $(EXTRA_pwunconv_DEPENDENCIES) + @rm -f pwunconv$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(pwunconv_OBJECTS) $(pwunconv_LDADD) $(LIBS) + +su$(EXEEXT): $(su_OBJECTS) $(su_DEPENDENCIES) $(EXTRA_su_DEPENDENCIES) + @rm -f su$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(su_OBJECTS) $(su_LDADD) $(LIBS) + +sulogin$(EXEEXT): $(sulogin_OBJECTS) $(sulogin_DEPENDENCIES) $(EXTRA_sulogin_DEPENDENCIES) + @rm -f sulogin$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(sulogin_OBJECTS) $(sulogin_LDADD) $(LIBS) + +useradd$(EXEEXT): $(useradd_OBJECTS) $(useradd_DEPENDENCIES) $(EXTRA_useradd_DEPENDENCIES) + @rm -f useradd$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(useradd_OBJECTS) $(useradd_LDADD) $(LIBS) + +userdel$(EXEEXT): $(userdel_OBJECTS) $(userdel_DEPENDENCIES) $(EXTRA_userdel_DEPENDENCIES) + @rm -f userdel$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(userdel_OBJECTS) $(userdel_LDADD) $(LIBS) + +usermod$(EXEEXT): $(usermod_OBJECTS) $(usermod_DEPENDENCIES) $(EXTRA_usermod_DEPENDENCIES) + @rm -f usermod$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(usermod_OBJECTS) $(usermod_LDADD) $(LIBS) + +vipw$(EXEEXT): $(vipw_OBJECTS) $(vipw_DEPENDENCIES) $(EXTRA_vipw_DEPENDENCIES) + @rm -f vipw$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(vipw_OBJECTS) $(vipw_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chage.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chfn.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chgpasswd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chpasswd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chsh.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/expiry.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/faillog.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpasswd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/groupadd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/groupdel.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/groupmems.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/groupmod.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/groups.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/grpck.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/grpconv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/grpunconv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/id.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lastlog.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/login.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/login_nopam.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/logoutd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/newgidmap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/newgrp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/newuidmap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/newusers.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nologin.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/passwd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pwck.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pwconv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pwunconv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/su.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/suauth.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sulogin.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/useradd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/userdel.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/usermod.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vipw.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(am__tagged_files) + $(am__define_uniq_tagged_files); mkid -fID $$unique +tags: tags-am +TAGS: tags + +tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + set x; \ + here=`pwd`; \ + $(am__define_uniq_tagged_files); \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: ctags-am + +CTAGS: ctags +ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) + $(am__define_uniq_tagged_files); \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" +cscopelist: cscopelist-am + +cscopelist-am: $(am__tagged_files) + list='$(am__tagged_files)'; \ + case "$(srcdir)" in \ + [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ + *) sdir=$(subdir)/$(srcdir) ;; \ + esac; \ + for i in $$list; do \ + if test -f "$$i"; then \ + echo "$(subdir)/$$i"; \ + else \ + echo "$$sdir/$$i"; \ + fi; \ + done >> $(top_builddir)/cscope.files + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: + for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(ubindir)" "$(DESTDIR)$(usbindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +installcheck: installcheck-am +install-strip: + if test -z '$(STRIP)'; then \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + install; \ + else \ + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ + fi +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic clean-libtool \ + clean-noinstPROGRAMS clean-sbinPROGRAMS clean-ubinPROGRAMS \ + clean-usbinPROGRAMS mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-ubinPROGRAMS install-usbinPROGRAMS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-binPROGRAMS install-sbinPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS uninstall-sbinPROGRAMS \ + uninstall-ubinPROGRAMS uninstall-usbinPROGRAMS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ + clean-binPROGRAMS clean-generic clean-libtool \ + clean-noinstPROGRAMS clean-sbinPROGRAMS clean-ubinPROGRAMS \ + clean-usbinPROGRAMS cscopelist-am ctags ctags-am distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-binPROGRAMS install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-sbinPROGRAMS install-strip \ + install-ubinPROGRAMS install-usbinPROGRAMS installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags tags-am uninstall uninstall-am uninstall-binPROGRAMS \ + uninstall-sbinPROGRAMS uninstall-ubinPROGRAMS \ + uninstall-usbinPROGRAMS + +.PRECIOUS: Makefile + + +install-am: all-am + $(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + ln -sf newgrp $(DESTDIR)$(ubindir)/sg + ln -sf vipw $(DESTDIR)$(usbindir)/vigr + for i in $(suidbins); do \ + chmod $(suidperms) $(DESTDIR)$(bindir)/$$i; \ + done + for i in $(suidubins); do \ + chmod $(suidperms) $(DESTDIR)$(ubindir)/$$i; \ + done +@WITH_TCB_TRUE@ for i in $(shadowsgidubins); do \ +@WITH_TCB_TRUE@ chown root:shadow $(DESTDIR)$(ubindir)/$$i; \ +@WITH_TCB_TRUE@ chmod $(sgidperms) $(DESTDIR)$(ubindir)/$$i; \ +@WITH_TCB_TRUE@ done +@ENABLE_SUBIDS_TRUE@@FCAPS_TRUE@ setcap cap_setuid+ep $(DESTDIR)$(ubindir)/newuidmap +@ENABLE_SUBIDS_TRUE@@FCAPS_TRUE@ setcap cap_setgid+ep $(DESTDIR)$(ubindir)/newgidmap + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: @@ -47,6 +47,7 @@ #include "defines.h" #include "getdef.h" #include "nscd.h" +#include "sssd.h" #ifdef USE_PAM #include "pam_defs.h" #endif @@ -746,6 +747,7 @@ int main (int argc, char **argv) SYSLOG ((LOG_INFO, "changed user '%s' information", user)); nscd_flush_cache ("passwd"); + sssd_flush_cache (SSSD_DB_PASSWD); closelog (); exit (E_SUCCESS); diff --git a/src/chgpasswd.c b/src/chgpasswd.c index 13203a46..e5f2eb7e 100644 --- a/src/chgpasswd.c +++ b/src/chgpasswd.c @@ -46,6 +46,7 @@ #endif /* ACCT_TOOLS_SETUID */ #include "defines.h" #include "nscd.h" +#include "sssd.h" #include "prototypes.h" #include "groupio.h" #ifdef SHADOWGRP @@ -581,6 +582,7 @@ int main (int argc, char **argv) close_files (); nscd_flush_cache ("group"); + sssd_flush_cache (SSSD_DB_GROUP); return (0); } diff --git a/src/chpasswd.c b/src/chpasswd.c index 918b27ee..d1c1043a 100644 --- a/src/chpasswd.c +++ b/src/chpasswd.c @@ -44,6 +44,7 @@ #endif /* USE_PAM */ #include "defines.h" #include "nscd.h" +#include "sssd.h" #include "getdef.h" #include "prototypes.h" #include "pwio.h" @@ -431,6 +432,15 @@ int main (int argc, char **argv) *cp = '\0'; } else { if (feof (stdin) == 0) { + + // Drop all remaining characters on this line. + while (fgets (buf, (int) sizeof buf, stdin) != (char *) 0) { + cp = strchr (buf, '\n'); + if (cp != NULL) { + break; + } + } + fprintf (stderr, _("%s: line %d: line too long\n"), Prog, line); @@ -624,6 +634,7 @@ int main (int argc, char **argv) } nscd_flush_cache ("passwd"); + sssd_flush_cache (SSSD_DB_PASSWD); return (0); } @@ -46,6 +46,7 @@ #include "defines.h" #include "getdef.h" #include "nscd.h" +#include "sssd.h" #include "prototypes.h" #include "pwauth.h" #include "pwio.h" @@ -557,6 +558,7 @@ int main (int argc, char **argv) SYSLOG ((LOG_INFO, "changed user '%s' shell to '%s'", user, loginsh)); nscd_flush_cache ("passwd"); + sssd_flush_cache (SSSD_DB_PASSWD); closelog (); exit (E_SUCCESS); diff --git a/src/gpasswd.c b/src/gpasswd.c index c4a492b1..4d75af96 100644 --- a/src/gpasswd.c +++ b/src/gpasswd.c @@ -45,6 +45,7 @@ #include "defines.h" #include "groupio.h" #include "nscd.h" +#include "sssd.h" #include "prototypes.h" #ifdef SHADOWGRP #include "sgroupio.h" @@ -1201,6 +1202,7 @@ int main (int argc, char **argv) close_files (); nscd_flush_cache ("group"); + sssd_flush_cache (SSSD_DB_GROUP); exit (E_SUCCESS); } diff --git a/src/groupadd.c b/src/groupadd.c index b57006c5..2dd8eec9 100644 --- a/src/groupadd.c +++ b/src/groupadd.c @@ -51,6 +51,7 @@ #include "getdef.h" #include "groupio.h" #include "nscd.h" +#include "sssd.h" #include "prototypes.h" #ifdef SHADOWGRP #include "sgroupio.h" @@ -625,6 +626,7 @@ int main (int argc, char **argv) close_files (); nscd_flush_cache ("group"); + sssd_flush_cache (SSSD_DB_GROUP); return E_SUCCESS; } diff --git a/src/groupdel.c b/src/groupdel.c index 70bed010..f941a84a 100644 --- a/src/groupdel.c +++ b/src/groupdel.c @@ -49,6 +49,7 @@ #include "defines.h" #include "groupio.h" #include "nscd.h" +#include "sssd.h" #include "prototypes.h" #ifdef SHADOWGRP #include "sgroupio.h" @@ -492,6 +493,7 @@ int main (int argc, char **argv) close_files (); nscd_flush_cache ("group"); + sssd_flush_cache (SSSD_DB_GROUP); return E_SUCCESS; } diff --git a/src/groupmod.c b/src/groupmod.c index b293b98f..1dca5fc9 100644 --- a/src/groupmod.c +++ b/src/groupmod.c @@ -51,6 +51,7 @@ #include "groupio.h" #include "pwio.h" #include "nscd.h" +#include "sssd.h" #include "prototypes.h" #ifdef SHADOWGRP #include "sgroupio.h" @@ -877,6 +878,7 @@ int main (int argc, char **argv) close_files (); nscd_flush_cache ("group"); + sssd_flush_cache (SSSD_DB_GROUP); return E_SUCCESS; } diff --git a/src/grpck.c b/src/grpck.c index ea5d3b39..e6216efa 100644 --- a/src/grpck.c +++ b/src/grpck.c @@ -45,6 +45,7 @@ #include "defines.h" #include "groupio.h" #include "nscd.h" +#include "sssd.h" #include "prototypes.h" #ifdef SHADOWGRP @@ -869,7 +870,10 @@ int main (int argc, char **argv) /* Commit the change in the database if needed */ close_files (changed); - nscd_flush_cache ("group"); + if (!read_only) { + nscd_flush_cache ("group"); + sssd_flush_cache (SSSD_DB_GROUP); + } /* * Tell the user what we did and exit. diff --git a/src/grpconv.c b/src/grpconv.c index f95f4960..5e5eaaca 100644 --- a/src/grpconv.c +++ b/src/grpconv.c @@ -48,6 +48,7 @@ #include <unistd.h> #include <getopt.h> #include "nscd.h" +#include "sssd.h" #include "prototypes.h" /*@-exitarg@*/ #include "exitcodes.h" @@ -273,6 +274,7 @@ int main (int argc, char **argv) } nscd_flush_cache ("group"); + sssd_flush_cache (SSSD_DB_GROUP); return 0; } diff --git a/src/grpunconv.c b/src/grpunconv.c index 253f06f5..e4105c26 100644 --- a/src/grpunconv.c +++ b/src/grpunconv.c @@ -48,6 +48,7 @@ #include <grp.h> #include <getopt.h> #include "nscd.h" +#include "sssd.h" #include "prototypes.h" /*@-exitarg@*/ #include "exitcodes.h" @@ -236,6 +237,7 @@ int main (int argc, char **argv) } nscd_flush_cache ("group"); + sssd_flush_cache (SSSD_DB_GROUP); return 0; } diff --git a/src/lastlog.c b/src/lastlog.c index 965691db..c1caedb0 100644 --- a/src/lastlog.c +++ b/src/lastlog.c @@ -44,6 +44,7 @@ #include <assert.h> #include "defines.h" #include "prototypes.h" +#include "getdef.h" /*@-exitarg@*/ #include "exitcodes.h" @@ -182,6 +183,15 @@ static void print_one (/*@null@*/const struct passwd *pw) static void print (void) { const struct passwd *pwent; + unsigned long lastlog_uid_max; + + lastlog_uid_max = getdef_ulong ("LASTLOG_UID_MAX", 0xFFFFFFFFUL); + if ( (has_umin && umin > lastlog_uid_max) + || (has_umax && umax > lastlog_uid_max)) { + fprintf (stderr, _("%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n" + "\tthe output might be incorrect.\n"), Prog, lastlog_uid_max); + } + if (uflg && has_umin && has_umax && (umin == umax)) { print_one (getpwuid ((uid_t)umin)); } else { @@ -191,6 +201,8 @@ static void print (void) && ( (has_umin && (pwent->pw_uid < (uid_t)umin)) || (has_umax && (pwent->pw_uid > (uid_t)umax)))) { continue; + } else if ( !uflg && pwent->pw_uid > (uid_t) lastlog_uid_max) { + continue; } print_one (pwent); } @@ -246,10 +258,19 @@ static void update_one (/*@null@*/const struct passwd *pw) static void update (void) { const struct passwd *pwent; + unsigned long lastlog_uid_max; if (!uflg) /* safety measure */ return; + lastlog_uid_max = getdef_ulong ("LASTLOG_UID_MAX", 0xFFFFFFFFUL); + if ( (has_umin && umin > lastlog_uid_max) + || (has_umax && umax > lastlog_uid_max)) { + fprintf (stderr, _("%s: Selected uid(s) are higher than LASTLOG_UID_MAX (%lu),\n" + "\tthey will not be updated.\n"), Prog, lastlog_uid_max); + return; + } + if (has_umin && has_umax && (umin == umax)) { update_one (getpwuid ((uid_t)umin)); } else { diff --git a/src/login.c b/src/login.c index e287cb0b..492021a1 100644 --- a/src/login.c +++ b/src/login.c @@ -129,7 +129,12 @@ static /*@observer@*/const char *get_failent_user (/*@returned@*/const char *use static void update_utmp (const char *user, const char *tty, const char *host, - /*@null@*/const struct utmp *utent); +#ifdef USE_UTMPX + /*@null@*/const struct utmpx *utent +#else + /*@null@*/const struct utmp *utent +#endif + ); #ifndef USE_PAM static struct faillog faillog; @@ -481,17 +486,23 @@ static /*@observer@*/const char *get_failent_user (/*@returned@*/const char *use static void update_utmp (const char *user, const char *tty, const char *host, - /*@null@*/const struct utmp *utent) +#ifdef USE_UTMPX + /*@null@*/const struct utmpx *utent +#else + /*@null@*/const struct utmp *utent +#endif + ) { - struct utmp *ut = prepare_utmp (user, tty, host, utent); #ifdef USE_UTMPX struct utmpx *utx = prepare_utmpx (user, tty, host, utent); +#else + struct utmp *ut = prepare_utmp (user, tty, host, utent); #endif /* USE_UTMPX */ +#ifndef USE_UTMPX (void) setutmp (ut); /* make entry in the utmp & wtmp files */ free (ut); - -#ifdef USE_UTMPX +#else (void) setutmpx (utx); /* make entry in the utmpx & wtmpx files */ free (utx); #endif /* USE_UTMPX */ @@ -539,7 +550,11 @@ int main (int argc, char **argv) struct passwd *pwd = NULL; char **envp = environ; const char *failent_user; +#ifdef USE_UTMPX + /*@null@*/struct utmpx *utent; +#else /*@null@*/struct utmp *utent; +#endif #ifdef USE_PAM int retcode; @@ -681,7 +696,7 @@ int main (int argc, char **argv) if (rflg || hflg) { cp = hostname; -#ifdef HAVE_STRUCT_UTMP_UT_HOST +#if defined(HAVE_STRUCT_UTMP_UT_HOST) || defined(USE_UTMPX) } else if ((NULL != utent) && ('\0' != utent->ut_host[0])) { cp = utent->ut_host; #endif /* HAVE_STRUCT_UTMP_UT_HOST */ @@ -1147,7 +1162,9 @@ int main (int argc, char **argv) #endif /* WITH_AUDIT */ #ifndef USE_PAM /* pam_lastlog handles this */ - if (getdef_bool ("LASTLOG_ENAB")) { /* give last login and log this one */ + if ( getdef_bool ("LASTLOG_ENAB") + && pwd->pw_uid <= (uid_t) getdef_ulong ("LASTLOG_UID_MAX", 0xFFFFFFFFUL)) { + /* give last login and log this one */ dolastlog (&ll, pwd, tty, hostname); } #endif @@ -1283,6 +1300,7 @@ int main (int argc, char **argv) } } if ( getdef_bool ("LASTLOG_ENAB") + && pwd->pw_uid <= (uid_t) getdef_ulong ("LASTLOG_UID_MAX", 0xFFFFFFFFUL) && (ll.ll_time != 0)) { time_t ll_time = ll.ll_time; diff --git a/src/newgidmap.c b/src/newgidmap.c index 59a2e75c..70b87888 100644 --- a/src/newgidmap.c +++ b/src/newgidmap.c @@ -250,7 +250,7 @@ int main(int argc, char **argv) verify_ranges(pw, ranges, mappings, &allow_setgroups); write_setgroups(proc_dir_fd, allow_setgroups); - write_mapping(proc_dir_fd, ranges, mappings, "gid_map"); + write_mapping(proc_dir_fd, ranges, mappings, "gid_map", pw->pw_uid); sub_gid_close(); return EXIT_SUCCESS; diff --git a/src/newuidmap.c b/src/newuidmap.c index 1ba25e7a..45636a3c 100644 --- a/src/newuidmap.c +++ b/src/newuidmap.c @@ -179,7 +179,7 @@ int main(int argc, char **argv) verify_ranges(pw, ranges, mappings); - write_mapping(proc_dir_fd, ranges, mappings, "uid_map"); + write_mapping(proc_dir_fd, ranges, mappings, "uid_map", pw->pw_uid); sub_uid_close(); return EXIT_SUCCESS; diff --git a/src/newusers.c b/src/newusers.c index 8e4bef97..7c3bb1c2 100644 --- a/src/newusers.c +++ b/src/newusers.c @@ -62,6 +62,7 @@ #include "getdef.h" #include "groupio.h" #include "nscd.h" +#include "sssd.h" #include "pwio.h" #include "sgroupio.h" #include "shadowio.h" @@ -1233,6 +1234,7 @@ int main (int argc, char **argv) nscd_flush_cache ("passwd"); nscd_flush_cache ("group"); + sssd_flush_cache (SSSD_DB_PASSWD | SSSD_DB_GROUP); #ifdef USE_PAM unsigned int i; diff --git a/src/nologin.c b/src/nologin.c index 7fe8a6a2..98989d26 100644 --- a/src/nologin.c +++ b/src/nologin.c @@ -24,7 +24,6 @@ * SUCH DAMAGE. */ -#include <config.h> #ident "$Id$" @@ -36,6 +35,7 @@ int main (void) { const char *user, *tty; + uid_t uid; tty = ttyname (0); if (NULL == tty) { @@ -45,8 +45,9 @@ int main (void) if (NULL == user) { user = "UNKNOWN"; } + uid = getuid (); /* getuid() is always successful */ openlog ("nologin", LOG_CONS, LOG_AUTH); - syslog (LOG_CRIT, "Attempted login by %s on %s", user, tty); + syslog (LOG_CRIT, "Attempted login by %s (UID: %d) on %s", user, uid, tty); closelog (); printf ("%s", "This account is currently not available.\n"); diff --git a/src/passwd.c b/src/passwd.c index 3af3e651..5bea2765 100644 --- a/src/passwd.c +++ b/src/passwd.c @@ -51,6 +51,7 @@ #include "defines.h" #include "getdef.h" #include "nscd.h" +#include "sssd.h" #include "prototypes.h" #include "pwauth.h" #include "pwio.h" @@ -1150,6 +1151,7 @@ int main (int argc, char **argv) nscd_flush_cache ("passwd"); nscd_flush_cache ("group"); + sssd_flush_cache (SSSD_DB_PASSWD | SSSD_DB_GROUP); SYSLOG ((LOG_INFO, "password for '%s' changed by '%s'", name, myname)); closelog (); @@ -48,6 +48,7 @@ #include "shadowio.h" #include "getdef.h" #include "nscd.h" +#include "sssd.h" #ifdef WITH_TCB #include "tcbfuncs.h" #endif /* WITH_TCB */ @@ -608,7 +609,7 @@ static void check_pw_file (int *errors, bool *changed) sp.sp_inact = -1; sp.sp_expire = -1; sp.sp_flag = SHADOW_SP_FLAG_UNSET; - sp.sp_lstchg = (long) time ((time_t *) 0) / SCALE; + sp.sp_lstchg = (long) gettime () / SCALE; if (0 == sp.sp_lstchg) { /* Better disable aging than * requiring a password change @@ -876,7 +877,10 @@ int main (int argc, char **argv) close_files (changed); - nscd_flush_cache ("passwd"); + if (!read_only) { + nscd_flush_cache ("passwd"); + sssd_flush_cache (SSSD_DB_PASSWD); + } /* * Tell the user what we did and exit. diff --git a/src/pwconv.c b/src/pwconv.c index d6ee31a8..f932f266 100644 --- a/src/pwconv.c +++ b/src/pwconv.c @@ -72,6 +72,7 @@ #include "pwio.h" #include "shadowio.h" #include "nscd.h" +#include "sssd.h" /* * exit status values @@ -266,7 +267,7 @@ int main (int argc, char **argv) spent.sp_flag = SHADOW_SP_FLAG_UNSET; } spent.sp_pwdp = pw->pw_passwd; - spent.sp_lstchg = (long) time ((time_t *) 0) / SCALE; + spent.sp_lstchg = (long) gettime () / SCALE; if (0 == spent.sp_lstchg) { /* Better disable aging than requiring a password * change */ @@ -328,6 +329,7 @@ int main (int argc, char **argv) } nscd_flush_cache ("passwd"); + sssd_flush_cache (SSSD_DB_PASSWD); return E_SUCCESS; } diff --git a/src/pwunconv.c b/src/pwunconv.c index fabf0237..e11ea494 100644 --- a/src/pwunconv.c +++ b/src/pwunconv.c @@ -42,6 +42,7 @@ #include <getopt.h> #include "defines.h" #include "nscd.h" +#include "sssd.h" #include "prototypes.h" #include "pwio.h" #include "shadowio.h" @@ -250,6 +251,7 @@ int main (int argc, char **argv) } nscd_flush_cache ("passwd"); + sssd_flush_cache (SSSD_DB_PASSWD); return 0; } @@ -913,27 +913,7 @@ static void set_environment (struct passwd *pw) addenv ("IFS= \t\n", NULL); /* ... instead, set a safe IFS */ } -#ifdef USE_PAM - /* we need to setup the environment *after* pam_open_session(), - * else the UID is changed before stuff like pam_xauth could - * run, and we cannot access /etc/shadow and co - */ - environ = newenvp; /* make new environment active */ - - if (change_environment) { - /* update environment with all pam set variables */ - char **envcp = pam_getenvlist (pamh); - if (NULL != envcp) { - while (NULL != *envcp) { - addenv (*envcp, NULL); - envcp++; - } - } - } - -#else /* !USE_PAM */ environ = newenvp; /* make new environment active */ -#endif /* !USE_PAM */ if (change_environment) { if (fakelogin) { @@ -948,6 +928,21 @@ static void set_environment (struct passwd *pw) addenv ("LOGNAME", pw->pw_name); addenv ("SHELL", shellstr); } + +#ifdef USE_PAM + /* we need to setup the environment *after* pam_open_session(), + * else the UID is changed before stuff like pam_xauth could + * run, and we cannot access /etc/shadow and co + */ + /* update environment with all pam set variables */ + char **envcp = pam_getenvlist (pamh); + if (NULL != envcp) { + while (NULL != *envcp) { + addenv (*envcp, NULL); + envcp++; + } + } +#endif /* !USE_PAM */ } } diff --git a/src/useradd.c b/src/useradd.c index e721e52b..bdd7fe8c 100644 --- a/src/useradd.c +++ b/src/useradd.c @@ -60,6 +60,7 @@ #include "getdef.h" #include "groupio.h" #include "nscd.h" +#include "sssd.h" #include "prototypes.h" #include "pwauth.h" #include "pwio.h" @@ -164,6 +165,7 @@ static bool oflg = false, /* permit non-unique user ID to be specified with -u */ rflg = false, /* create a system account */ sflg = false, /* shell program for new account */ + subvolflg = false, /* create subvolume home on BTRFS */ uflg = false, /* specify user ID for new account */ Uflg = false; /* create a group having the same name as the user */ @@ -343,7 +345,7 @@ static void fail_exit (int code) static void get_defaults (void) { FILE *fp; - char* default_file = USER_DEFAULTS_FILE; + char *default_file = USER_DEFAULTS_FILE; char buf[1024]; char *cp; @@ -353,6 +355,8 @@ static void get_defaults (void) len = strlen(prefix) + strlen(USER_DEFAULTS_FILE) + 2; default_file = malloc(len); + if (default_file == NULL) + return; wlen = snprintf(default_file, len, "%s/%s", prefix, USER_DEFAULTS_FILE); assert (wlen == (int) len -1); } @@ -363,7 +367,7 @@ static void get_defaults (void) fp = fopen (default_file, "r"); if (NULL == fp) { - return; + goto getdef_err; } /* @@ -474,7 +478,7 @@ static void get_defaults (void) } } (void) fclose (fp); - + getdef_err: if(prefix[0]) { free(default_file); } @@ -509,8 +513,8 @@ static int set_defaults (void) FILE *ifp; FILE *ofp; char buf[1024]; - char* new_file = NEW_USER_FILE; - char* default_file = USER_DEFAULTS_FILE; + char *new_file = NULL; + char *default_file = USER_DEFAULTS_FILE; char *cp; int ofd; int wlen; @@ -521,17 +525,30 @@ static int set_defaults (void) bool out_shell = false; bool out_skel = false; bool out_create_mail_spool = false; + size_t len; + int ret = -1; - if(prefix[0]) { - size_t len; - len = strlen(prefix) + strlen(NEW_USER_FILE) + 2; - new_file = malloc(len); - wlen = snprintf(new_file, len, "%s/%s", prefix, NEW_USER_FILE); - assert (wlen == (int) len -1); + len = strlen(prefix) + strlen(NEW_USER_FILE) + 2; + new_file = malloc(len); + if (new_file == NULL) { + fprintf (stderr, + _("%s: cannot create new defaults file: %s\n"), + Prog, strerror(errno)); + return -1; + } + wlen = snprintf(new_file, len, "%s%s%s", prefix, prefix[0]?"/":"", NEW_USER_FILE); + assert (wlen <= (int) len -1); + if(prefix[0]) { len = strlen(prefix) + strlen(USER_DEFAULTS_FILE) + 2; default_file = malloc(len); + if (default_file == NULL) { + fprintf (stderr, + _("%s: cannot create new defaults file: %s\n"), + Prog, strerror(errno)); + goto setdef_err; + } wlen = snprintf(default_file, len, "%s/%s", prefix, USER_DEFAULTS_FILE); assert (wlen == (int) len -1); } @@ -544,7 +561,7 @@ static int set_defaults (void) fprintf (stderr, _("%s: cannot create new defaults file\n"), Prog); - return -1; + goto setdef_err; } ofp = fdopen (ofd, "w"); @@ -552,7 +569,7 @@ static int set_defaults (void) fprintf (stderr, _("%s: cannot open new defaults file\n"), Prog); - return -1; + goto setdef_err; } /* @@ -579,7 +596,7 @@ static int set_defaults (void) _("%s: line too long in %s: %s..."), Prog, default_file, buf); (void) fclose (ifp); - return -1; + goto setdef_err; } } @@ -643,7 +660,7 @@ static int set_defaults (void) || (fsync (fileno (ofp)) != 0) || (fclose (ofp) != 0)) { unlink (new_file); - return -1; + goto setdef_err; } /* @@ -658,7 +675,7 @@ static int set_defaults (void) _("%s: Cannot create backup file (%s): %s\n"), Prog, buf, strerror (err)); unlink (new_file); - return -1; + goto setdef_err; } /* @@ -669,7 +686,7 @@ static int set_defaults (void) fprintf (stderr, _("%s: rename: %s: %s\n"), Prog, new_file, strerror (err)); - return -1; + goto setdef_err; } #ifdef WITH_AUDIT audit_logger (AUDIT_USYS_CONFIG, Prog, @@ -683,13 +700,14 @@ static int set_defaults (void) (unsigned int) def_group, def_home, def_shell, def_inactive, def_expire, def_template, def_create_mail_spool)); - + ret = 0; + setdef_err: + free(new_file); if(prefix[0]) { - free(new_file); free(default_file); } - return 0; + return ret; } /* @@ -805,6 +823,9 @@ static void usage (int status) Prog, Prog, Prog); (void) fputs (_(" -b, --base-dir BASE_DIR base directory for the home directory of the\n" " new account\n"), usageout); +#ifdef WITH_BTRFS + (void) fputs (_(" --btrfs-subvolume-home use BTRFS subvolume for home directory\n"), usageout); +#endif (void) fputs (_(" -c, --comment COMMENT GECOS field of the new account\n"), usageout); (void) fputs (_(" -d, --home-dir HOME_DIR home directory of the new account\n"), usageout); (void) fputs (_(" -D, --defaults print or change default useradd configuration\n"), usageout); @@ -1085,6 +1106,9 @@ static void process_flags (int argc, char **argv) int c; static struct option long_options[] = { {"base-dir", required_argument, NULL, 'b'}, +#ifdef WITH_BTRFS + {"btrfs-subvolume-home", no_argument, NULL, 200}, +#endif {"comment", required_argument, NULL, 'c'}, {"home-dir", required_argument, NULL, 'd'}, {"defaults", no_argument, NULL, 'D'}, @@ -1131,6 +1155,9 @@ static void process_flags (int argc, char **argv) def_home = optarg; bflg = true; break; + case 200: + subvolflg = true; + break; case 'c': if (!VALID (optarg)) { fprintf (stderr, @@ -1846,11 +1873,18 @@ static void lastlog_reset (uid_t uid) struct lastlog ll; int fd; off_t offset_uid = (off_t) (sizeof ll) * uid; + uid_t max_uid; if (access (LASTLOG_FILE, F_OK) != 0) { return; } + max_uid = (uid_t) getdef_ulong ("LASTLOG_UID_MAX", 0xFFFFFFFFUL); + if (uid > max_uid) { + /* do not touch lastlog for large uids */ + return; + } + memzero (&ll, sizeof (ll)); fd = open (LASTLOG_FILE, O_RDWR); @@ -2018,6 +2052,19 @@ static void usr_update (void) static void create_home (void) { if (access (prefix_user_home, F_OK) != 0) { + char path[strlen (prefix_user_home) + 2]; + char *bhome, *cp; + + path[0] = '\0'; + bhome = strdup (prefix_user_home); + if (!bhome) { + fprintf (stderr, + _("%s: error while duplicating string %s\n"), + Prog, user_home); + fail_exit (E_HOMEDIR); + } + ++bhome; + #ifdef WITH_SELINUX if (set_selinux_file_context (prefix_user_home) != 0) { fprintf (stderr, @@ -2026,19 +2073,73 @@ static void create_home (void) fail_exit (E_HOMEDIR); } #endif - /* XXX - create missing parent directories. --marekm */ - if (mkdir (prefix_user_home, 0) != 0) { + + /* Check for every part of the path, if the directory + exists. If not, create it with permissions 755 and + owner root:root. + */ + cp = strtok (bhome, "/"); + while (cp) { + strcat (path, "/"); + strcat (path, cp); + if (access (path, F_OK) != 0) { + /* Check if parent directory is BTRFS, fail if requesting + subvolume but no BTRFS. The paths cound be different by the + trailing slash + */ +#if WITH_BTRFS + if (subvolflg && (strlen(prefix_user_home) - (int)strlen(path)) <= 1) { + char *btrfs_check = strdup(path); + + if (!btrfs_check) { + fprintf (stderr, + _("%s: error while duplicating string in BTRFS check %s\n"), + Prog, path); + fail_exit (E_HOMEDIR); + } + btrfs_check[strlen(path) - strlen(cp) - 1] = '\0'; + if (is_btrfs(btrfs_check) <= 0) { + fprintf (stderr, + _("%s: home directory \"%s\" must be mounted on BTRFS\n"), + Prog, path); + fail_exit (E_HOMEDIR); + } + // make subvolume to mount for user instead of directory + if (btrfs_create_subvolume(path)) { + fprintf (stderr, + _("%s: failed to create BTRFS subvolume: %s\n"), + Prog, path); + fail_exit (E_HOMEDIR); + } + } + else +#endif + if (mkdir (path, 0) != 0) { fprintf (stderr, - _("%s: cannot create directory %s\n"), - Prog, prefix_user_home); + _("%s: cannot create directory %s\n"), + Prog, path); #ifdef WITH_AUDIT audit_logger (AUDIT_ADD_USER, Prog, - "adding home directory", - user_name, (unsigned int) user_id, - SHADOW_AUDIT_FAILURE); + "adding home directory", + user_name, (unsigned int) user_id, + SHADOW_AUDIT_FAILURE); #endif fail_exit (E_HOMEDIR); } + if (chown (path, 0, 0) < 0) { + fprintf (stderr, + _("%s: warning: chown on `%s' failed: %m\n"), + Prog, path); + } + if (chmod (path, 0755) < 0) { + fprintf (stderr, + _("%s: warning: chmod on `%s' failed: %m\n"), + Prog, path); + } + } + cp = strtok (NULL, "/"); + } + (void) chown (prefix_user_home, user_id, user_gid); chmod (prefix_user_home, 0777 & ~getdef_num ("UMASK", GETDEF_DEFAULT_UMASK)); @@ -2389,6 +2490,7 @@ int main (int argc, char **argv) nscd_flush_cache ("passwd"); nscd_flush_cache ("group"); + sssd_flush_cache (SSSD_DB_PASSWD | SSSD_DB_GROUP); return E_SUCCESS; } diff --git a/src/userdel.c b/src/userdel.c index c8de1d31..7be46e8d 100644 --- a/src/userdel.c +++ b/src/userdel.c @@ -53,6 +53,7 @@ #include "getdef.h" #include "groupio.h" #include "nscd.h" +#include "sssd.h" #include "prototypes.h" #include "pwauth.h" #include "pwio.h" @@ -1271,6 +1272,23 @@ int main (int argc, char **argv) #endif /* EXTRA_CHECK_HOME_DIR */ if (rflg) { +#ifdef WITH_BTRFS + int is_subvolume = btrfs_is_subvolume (user_home); + if (is_subvolume < 0) { + errors++; + /* continue */ + } + else if (is_subvolume > 0) { + if (btrfs_remove_subvolume (user_home)) { + fprintf (stderr, + _("%s: error removing subvolume %s\n"), + Prog, user_home); + errors++; + /* continue */ + } + } + else +#endif if (remove_tree (user_home, true) != 0) { fprintf (stderr, _("%s: error removing directory %s\n"), @@ -1328,6 +1346,7 @@ int main (int argc, char **argv) nscd_flush_cache ("passwd"); nscd_flush_cache ("group"); + sssd_flush_cache (SSSD_DB_PASSWD | SSSD_DB_GROUP); return ((0 != errors) ? E_HOMEDIR : E_SUCCESS); } diff --git a/src/usermod.c b/src/usermod.c index e571426f..c3718864 100644 --- a/src/usermod.c +++ b/src/usermod.c @@ -57,6 +57,7 @@ #include "getdef.h" #include "groupio.h" #include "nscd.h" +#include "sssd.h" #include "prototypes.h" #include "pwauth.h" #include "pwio.h" @@ -1251,11 +1252,13 @@ static void process_flags (int argc, char **argv) prefix_user_home = xmalloc(len); wlen = snprintf(prefix_user_home, len, "%s/%s", prefix, user_home); assert (wlen == (int) len -1); + if (user_newhome) { + len = strlen(prefix) + strlen(user_newhome) + 2; + prefix_user_newhome = xmalloc(len); + wlen = snprintf(prefix_user_newhome, len, "%s/%s", prefix, user_newhome); + assert (wlen == (int) len -1); + } - len = strlen(prefix) + strlen(user_newhome) + 2; - prefix_user_newhome = xmalloc(len); - wlen = snprintf(prefix_user_newhome, len, "%s/%s", prefix, user_newhome); - assert (wlen == (int) len -1); } else { prefix_user_home = user_home; @@ -1365,7 +1368,7 @@ static void process_flags (int argc, char **argv) || Zflg #endif /* WITH_SELINUX */ )) { - fprintf (stderr, _("%s: no changes\n"), Prog); + fprintf (stdout, _("%s: no changes\n"), Prog); exit (E_SUCCESS); } @@ -1816,6 +1819,15 @@ static void move_home (void) return; } else { if (EXDEV == errno) { +#ifdef WITH_BTRFS + if (btrfs_is_subvolume (prefix_user_home) > 0) { + fprintf (stderr, + _("%s: error: cannot move subvolume from %s to %s - different device\n"), + Prog, prefix_user_home, prefix_user_newhome); + fail_exit (E_HOMEDIR); + } +#endif + if (copy_tree (prefix_user_home, prefix_user_newhome, true, true, user_id, @@ -1861,11 +1873,18 @@ static void update_lastlog (void) int fd; off_t off_uid = (off_t) user_id * sizeof ll; off_t off_newuid = (off_t) user_newid * sizeof ll; + uid_t max_uid; if (access (LASTLOG_FILE, F_OK) != 0) { return; } + max_uid = (uid_t) getdef_ulong ("LASTLOG_MAX_UID", 0xFFFFFFFFUL); + if (user_newid > max_uid) { + /* do not touch lastlog for large uids */ + return; + } + fd = open (LASTLOG_FILE, O_RDWR); if (-1 == fd) { @@ -2253,6 +2272,7 @@ int main (int argc, char **argv) nscd_flush_cache ("passwd"); nscd_flush_cache ("group"); + sssd_flush_cache (SSSD_DB_PASSWD | SSSD_DB_GROUP); #ifdef WITH_SELINUX if (Zflg) { @@ -2302,7 +2322,10 @@ int main (int argc, char **argv) } if (!mflg && (uflg || gflg)) { - if (access (dflg ? prefix_user_newhome : prefix_user_home, F_OK) == 0) { + struct stat sb; + + if (stat (dflg ? prefix_user_newhome : prefix_user_home, &sb) == 0 && + ((uflg && sb.st_uid == user_newid) || sb.st_uid == user_id)) { /* * Change the UID on all of the files owned by * `user_id' to `user_newid' in the user's home @@ -42,6 +42,7 @@ #include "defines.h" #include "groupio.h" #include "nscd.h" +#include "sssd.h" #include "prototypes.h" #include "pwio.h" #include "sgroupio.h" @@ -556,6 +557,7 @@ int main (int argc, char **argv) nscd_flush_cache ("passwd"); nscd_flush_cache ("group"); + sssd_flush_cache (SSSD_DB_PASSWD | SSSD_DB_GROUP); return E_SUCCESS; } |