Compare commits
25 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 4c944d236c | |||
| 46cc41933b | |||
| 388cb97893 | |||
| 81c4e06c3b | |||
| 4fcb8d510b | |||
| 2ff61e3c80 | |||
| 61472718df | |||
| b63aced4b3 | |||
| b532614a3b | |||
| 02f8995749 | |||
| cb56b9d10e | |||
| bdb2aa7202 | |||
| 7a3935ef98 | |||
| 9d0f797494 | |||
| 862809e6de | |||
| 0e71b4600c | |||
| fcee2d4028 | |||
| 3ee8ec58bb | |||
| d20c220441 | |||
| 451264e2b2 | |||
| d2ea0055d4 | |||
| d48226e507 | |||
| 1a19ece5ee | |||
| a70f9f8694 | |||
| 02ea908972 |
-98
@@ -1,98 +0,0 @@
|
|||||||
Thanks to at least the following people for sending patches, bug
|
|
||||||
reports and various comments. This list may be incomplete, I received
|
|
||||||
a lot of mail...
|
|
||||||
|
|
||||||
# Maintainers
|
|
||||||
* Marek Michałkiewicz <marekm72@gmail.com> (1995-2000)
|
|
||||||
* Tomasz Kłoczko <kloczek@pld.org.pl> (2000-2007)
|
|
||||||
* Nicolas François <nicolas.francois@centraliens.net> (2007-2014)
|
|
||||||
* Serge E. Hallyn <serge@hallyn.com> (2014-now)
|
|
||||||
* Christian Brauner <christian@brauner.io> (2019-now)
|
|
||||||
* Iker Pedrosa <ipedrosa@redhat.com> (2022-now)
|
|
||||||
* Alejandro Colomar <alx@kernel.org> (2023-now) (4.14 stable)
|
|
||||||
|
|
||||||
To verify signatures on releases, use the following keys under keys/ :
|
|
||||||
|
|
||||||
* Serge Hallyn: keys/66D0387DB85D320F8408166DB175CFA98F192AF2.asc
|
|
||||||
* Christian Brauner: keys/4880B8C9BD0E5106FC070F4F7B3C391EFEA93624.asc
|
|
||||||
* Iker Pedrosa: keys/4E80EF49C7987B6DE2F81F5005079C6C3A653E57.asc
|
|
||||||
* Alejandro Colomar: keys/A9348594CE31283A826FBDD8D57633D441E25BB5.asc
|
|
||||||
|
|
||||||
# Authors and contributors
|
|
||||||
* Adam Rudnicki <adam@v-lo.krakow.pl>
|
|
||||||
* Alan Curry <pacman@tardis.mars.net>
|
|
||||||
* Aleksa Sarai <cyphar@cyphar.com>
|
|
||||||
* Alexander O. Yuriev <alex@bach.cis.temple.edu>
|
|
||||||
* Algis Rudys <arudys@rice.edu>
|
|
||||||
* Andreas Jaeger <aj@arthur.rhein-neckar.de>
|
|
||||||
* Andy Zaugg <andy.zaugg@gmail.com>
|
|
||||||
* Aniello Del Sorbo <anidel@edu-gw.dia.unisa.it>
|
|
||||||
* Anton Gluck <gluc@midway.uchicago.edu>
|
|
||||||
* Arkadiusz Miskiewicz <misiek@pld.org.pl>
|
|
||||||
* Ben Collins <bcollins@debian.org>
|
|
||||||
* Brian R. Gaeke <brg@dgate.org>
|
|
||||||
* Calle Karlsson <ckn@kash.se>
|
|
||||||
* Chip Rosenthal <chip@unicom.com>
|
|
||||||
* Chris Evans <lady0110@sable.ox.ac.uk>
|
|
||||||
* Chris Lamb <chris@chris-lamb.co.uk>
|
|
||||||
* Cristian Gafton <gafton@sorosis.ro>
|
|
||||||
* Dan Walsh <dwalsh@redhat.com>
|
|
||||||
* Darcy Boese <possum@chardonnay.niagara.com>
|
|
||||||
* Dave Hagewood <admin@arrowweb.com>
|
|
||||||
* David A. Holland <dholland@hcs.harvard.edu>
|
|
||||||
* David Frey <David.Frey@lugs.ch>
|
|
||||||
* Ed Carp <ecarp@netcom.com>
|
|
||||||
* Ed Neville <ed@s5h.net>
|
|
||||||
* Eric W. Biederman" <ebiederm@xmission.com>
|
|
||||||
* Floody <flood@evcom.net>
|
|
||||||
* Frank Denis <j@4u.net>
|
|
||||||
* George Kraft IV <gk4@us.ibm.com>
|
|
||||||
* Greg Mortensen <loki@world.std.com>
|
|
||||||
* Guido van Rooij
|
|
||||||
* Guy Maor <maor@debian.org>
|
|
||||||
* Hrvoje Dogan <hdogan@bjesomar.srce.hr>
|
|
||||||
* Jakub Hrozek <jhrozek@redhat.com>
|
|
||||||
* Janos Farkas <chexum@bankinf.banki.hu>
|
|
||||||
* Jason Franklin <jason.franklin@quoininc.com>
|
|
||||||
* Jay Soffian <jay@lw.net>
|
|
||||||
* Jesse Thilo <Jesse.Thilo@pobox.com>
|
|
||||||
* Joey Hess <joey@kite.ml.org>
|
|
||||||
* John Adelsberger <jja@umr.edu>
|
|
||||||
* Jonathan Hankins <jhankins@mailserv.homewood.k12.al.us>
|
|
||||||
* Jon Lewis <jlewis@lewis.org>
|
|
||||||
* Joshua Cowan <jcowan@hermit.reslife.okstate.edu>
|
|
||||||
* Judd Bourgeois <shagboy@bluesky.net>
|
|
||||||
* Juergen Heinzl <unicorn@noris.net>
|
|
||||||
* Juha Virtanen <jiivee@iki.fi>
|
|
||||||
* Julian Pidancet <julian.pidancet@gmail.com>
|
|
||||||
* Julianne Frances Haugh <julie78787@gmail.com>
|
|
||||||
* Leonard N. Zubkoff <lnz@dandelion.com>
|
|
||||||
* Luca Berra <bluca@www.polimi.it>
|
|
||||||
* Lukáš Kuklínek <lkukline@redhat.com>
|
|
||||||
* Lutz Schwalowsky <schwalow@mineralogie.uni-hamburg.de>
|
|
||||||
* Marc Ewing <marc@redhat.com>
|
|
||||||
* Martin Bene <mb@sime.com>
|
|
||||||
* Martin Mares <mj@gts.cz>
|
|
||||||
* Michael Meskes <meskes@topsystem.de>
|
|
||||||
* Michael Talbot-Wilson <mike@calypso.bns.com.au>
|
|
||||||
* Michael Vetter <jubalh@iodoru.org>
|
|
||||||
* Mike Frysinger <vapier@gentoo.org>
|
|
||||||
* Mike Pakovic <mpakovic@users.southeast.net>
|
|
||||||
* Nicolas François <nicolas.francois@centraliens.net>
|
|
||||||
* Nikos Mavroyanopoulos <nmav@i-net.paiko.gr>
|
|
||||||
* Pavel Machek <pavel@bug.ucw.cz>
|
|
||||||
* Peter Vrabec <pvrabec@redhat.com>
|
|
||||||
* Phillip Street
|
|
||||||
* Rafał Maszkowski <rzm@icm.edu.pl>
|
|
||||||
* Rani Chouha <ranibey@smartec.com>
|
|
||||||
* Sami Kerola <kerolasa@rocketmail.com>
|
|
||||||
* Scott Garman <scott.a.garman@intel.com>
|
|
||||||
* Sebastian Rick Rijkers <srrijkers@gmail.com>
|
|
||||||
* Seraphim Mellos <mellos@ceid.upatras.gr>
|
|
||||||
* Shane Watts <shane@nexus.mlckew.edu.au>
|
|
||||||
* Steve M. Robbins <steve@nyongwa.montreal.qc.ca>
|
|
||||||
* Thorsten Kukuk <kukuk@suse.de>
|
|
||||||
* Tim Hockin <thockin@eagle.ais.net>
|
|
||||||
* Timo Karjalainen <timok@iki.fi>
|
|
||||||
* Ulisses Alonso Camaro <ulisses@pusa.eleinf.uv.es>
|
|
||||||
* Werner Fink <werner@suse.de>
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
|
|
||||||
All files under this project either
|
|
||||||
|
|
||||||
1. fall under the BSD 3 clause license (by default).
|
|
||||||
|
|
||||||
2. carry an SPDX header declaring what license applies.
|
|
||||||
|
|
||||||
or
|
|
||||||
|
|
||||||
3. list a full custom license
|
|
||||||
|
|
||||||
This software is originally
|
|
||||||
|
|
||||||
* Copyright (c) 1989 - 1994, Julianne Frances Haugh
|
|
||||||
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions
|
|
||||||
* are met:
|
|
||||||
* 1. Redistributions of source code must retain the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer.
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
|
||||||
* documentation and/or other materials provided with the distribution.
|
|
||||||
* 3. The name of the copyright holders or contributors may not be used to
|
|
||||||
* endorse or promote products derived from this software without
|
|
||||||
* specific prior written permission.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
|
||||||
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
||||||
* HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
||||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
||||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
||||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
||||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
-28
@@ -1,28 +0,0 @@
|
|||||||
## Process this file with automake to produce Makefile.in
|
|
||||||
ACLOCAL_AMFLAGS = -I m4
|
|
||||||
|
|
||||||
SUBDIRS = lib
|
|
||||||
|
|
||||||
if ENABLE_SUBIDS
|
|
||||||
SUBDIRS += libsubid
|
|
||||||
endif
|
|
||||||
|
|
||||||
SUBDIRS += src po doc etc tests/unit
|
|
||||||
|
|
||||||
if ENABLE_REGENERATE_MAN
|
|
||||||
SUBDIRS += man
|
|
||||||
endif
|
|
||||||
|
|
||||||
CLEANFILES = man/8.out man/po/remove-potcdate.* man/*/login.defs.d man/*/*.mo
|
|
||||||
|
|
||||||
EXTRA_DIST = NEWS README tests/
|
|
||||||
|
|
||||||
dist-hook:
|
|
||||||
chmod -R u+w $(distdir)/tests
|
|
||||||
chmod u+w $(distdir)
|
|
||||||
mv $(distdir)/tests/unit $(distdir)/realunittest
|
|
||||||
mv $(distdir)/tests/tests $(distdir)/realtests
|
|
||||||
rm -rf $(distdir)/tests
|
|
||||||
mv $(distdir)/realtests $(distdir)/tests
|
|
||||||
rm -rf $(distdir)/tests/unit $(distdir)/tests/Makefile*
|
|
||||||
mv $(distdir)/realunittest $(distdir)/tests/unit
|
|
||||||
-911
@@ -1,911 +0,0 @@
|
|||||||
# Makefile.in generated by automake 1.16.5 from Makefile.am.
|
|
||||||
# @configure_input@
|
|
||||||
|
|
||||||
# Copyright (C) 1994-2021 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@
|
|
||||||
@ENABLE_SUBIDS_TRUE@am__append_1 = libsubid
|
|
||||||
@ENABLE_REGENERATE_MAN_TRUE@am__append_2 = man
|
|
||||||
subdir = .
|
|
||||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
|
||||||
am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
|
|
||||||
$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
|
|
||||||
$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
|
|
||||||
$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
|
|
||||||
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
|
|
||||||
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
|
|
||||||
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
|
|
||||||
$(top_srcdir)/m4/progtest.m4 $(top_srcdir)/acinclude.m4 \
|
|
||||||
$(top_srcdir)/configure.ac
|
|
||||||
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
|
|
||||||
$(ACLOCAL_M4)
|
|
||||||
DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
|
|
||||||
$(am__configure_deps) $(am__DIST_COMMON)
|
|
||||||
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
|
|
||||||
configure.lineno config.status.lineno
|
|
||||||
mkinstalldirs = $(install_sh) -d
|
|
||||||
CONFIG_HEADER = config.h
|
|
||||||
CONFIG_CLEAN_FILES = man/po/Makefile
|
|
||||||
CONFIG_CLEAN_VPATH_FILES =
|
|
||||||
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 =
|
|
||||||
SOURCES =
|
|
||||||
DIST_SOURCES =
|
|
||||||
RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
|
|
||||||
ctags-recursive dvi-recursive html-recursive info-recursive \
|
|
||||||
install-data-recursive install-dvi-recursive \
|
|
||||||
install-exec-recursive install-html-recursive \
|
|
||||||
install-info-recursive install-pdf-recursive \
|
|
||||||
install-ps-recursive install-recursive installcheck-recursive \
|
|
||||||
installdirs-recursive pdf-recursive ps-recursive \
|
|
||||||
tags-recursive uninstall-recursive
|
|
||||||
am__can_run_installinfo = \
|
|
||||||
case $$AM_UPDATE_INFO_DIR in \
|
|
||||||
n|no|NO) false;; \
|
|
||||||
*) (install-info --version) >/dev/null 2>&1;; \
|
|
||||||
esac
|
|
||||||
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
|
|
||||||
distclean-recursive maintainer-clean-recursive
|
|
||||||
am__recursive_targets = \
|
|
||||||
$(RECURSIVE_TARGETS) \
|
|
||||||
$(RECURSIVE_CLEAN_TARGETS) \
|
|
||||||
$(am__extra_recursive_targets)
|
|
||||||
AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
|
|
||||||
cscope distdir distdir-am dist dist-all distcheck
|
|
||||||
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \
|
|
||||||
config.h.in
|
|
||||||
# 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)`
|
|
||||||
DIST_SUBDIRS = lib libsubid src po doc etc tests/unit man
|
|
||||||
am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \
|
|
||||||
$(top_srcdir)/build-aux/compile \
|
|
||||||
$(top_srcdir)/build-aux/config.guess \
|
|
||||||
$(top_srcdir)/build-aux/config.rpath \
|
|
||||||
$(top_srcdir)/build-aux/config.sub \
|
|
||||||
$(top_srcdir)/build-aux/install-sh \
|
|
||||||
$(top_srcdir)/build-aux/ltmain.sh \
|
|
||||||
$(top_srcdir)/build-aux/missing \
|
|
||||||
$(top_srcdir)/man/po/Makefile.in ABOUT-NLS AUTHORS.md COPYING \
|
|
||||||
ChangeLog NEWS README build-aux/compile build-aux/config.guess \
|
|
||||||
build-aux/config.rpath build-aux/config.sub \
|
|
||||||
build-aux/install-sh build-aux/ltmain.sh build-aux/missing
|
|
||||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
|
||||||
distdir = $(PACKAGE)-$(VERSION)
|
|
||||||
top_distdir = $(distdir)
|
|
||||||
am__remove_distdir = \
|
|
||||||
if test -d "$(distdir)"; then \
|
|
||||||
find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
|
|
||||||
&& rm -rf "$(distdir)" \
|
|
||||||
|| { sleep 5 && rm -rf "$(distdir)"; }; \
|
|
||||||
else :; fi
|
|
||||||
am__post_remove_distdir = $(am__remove_distdir)
|
|
||||||
am__relativize = \
|
|
||||||
dir0=`pwd`; \
|
|
||||||
sed_first='s,^\([^/]*\)/.*$$,\1,'; \
|
|
||||||
sed_rest='s,^[^/]*/*,,'; \
|
|
||||||
sed_last='s,^.*/\([^/]*\)$$,\1,'; \
|
|
||||||
sed_butlast='s,/*[^/]*$$,,'; \
|
|
||||||
while test -n "$$dir1"; do \
|
|
||||||
first=`echo "$$dir1" | sed -e "$$sed_first"`; \
|
|
||||||
if test "$$first" != "."; then \
|
|
||||||
if test "$$first" = ".."; then \
|
|
||||||
dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
|
|
||||||
dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
|
|
||||||
else \
|
|
||||||
first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
|
|
||||||
if test "$$first2" = "$$first"; then \
|
|
||||||
dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
|
|
||||||
else \
|
|
||||||
dir2="../$$dir2"; \
|
|
||||||
fi; \
|
|
||||||
dir0="$$dir0"/"$$first"; \
|
|
||||||
fi; \
|
|
||||||
fi; \
|
|
||||||
dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
|
|
||||||
done; \
|
|
||||||
reldir="$$dir2"
|
|
||||||
DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.xz
|
|
||||||
GZIP_ENV = --best
|
|
||||||
DIST_TARGETS = dist-xz dist-gzip
|
|
||||||
# Exists only to be overridden by the user if desired.
|
|
||||||
AM_DISTCHECK_DVI_TARGET = dvi
|
|
||||||
distuninstallcheck_listfiles = find . -type f -print
|
|
||||||
am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
|
|
||||||
| sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
|
|
||||||
distcleancheck_listfiles = find . -type f -print
|
|
||||||
ACLOCAL = @ACLOCAL@
|
|
||||||
AMTAR = @AMTAR@
|
|
||||||
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
|
|
||||||
AM_DISTCHECK_CONFIGURE_FLAGS = @AM_DISTCHECK_CONFIGURE_FLAGS@
|
|
||||||
AR = @AR@
|
|
||||||
AUTOCONF = @AUTOCONF@
|
|
||||||
AUTOHEADER = @AUTOHEADER@
|
|
||||||
AUTOMAKE = @AUTOMAKE@
|
|
||||||
AWK = @AWK@
|
|
||||||
CC = @CC@
|
|
||||||
CCDEPMODE = @CCDEPMODE@
|
|
||||||
CFLAGS = @CFLAGS@
|
|
||||||
CMOCKA_CFLAGS = @CMOCKA_CFLAGS@
|
|
||||||
CMOCKA_LIBS = @CMOCKA_LIBS@
|
|
||||||
CPP = @CPP@
|
|
||||||
CPPFLAGS = @CPPFLAGS@
|
|
||||||
CSCOPE = @CSCOPE@
|
|
||||||
CTAGS = @CTAGS@
|
|
||||||
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@
|
|
||||||
ECONF_CPPFLAGS = @ECONF_CPPFLAGS@
|
|
||||||
EGREP = @EGREP@
|
|
||||||
ETAGS = @ETAGS@
|
|
||||||
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@
|
|
||||||
LIBADD_DL = @LIBADD_DL@
|
|
||||||
LIBADD_DLD_LINK = @LIBADD_DLD_LINK@
|
|
||||||
LIBADD_DLOPEN = @LIBADD_DLOPEN@
|
|
||||||
LIBADD_SHL_LOAD = @LIBADD_SHL_LOAD@
|
|
||||||
LIBATTR = @LIBATTR@
|
|
||||||
LIBAUDIT = @LIBAUDIT@
|
|
||||||
LIBBSD = @LIBBSD@
|
|
||||||
LIBBSD_CFLAGS = @LIBBSD_CFLAGS@
|
|
||||||
LIBBSD_LIBS = @LIBBSD_LIBS@
|
|
||||||
LIBCRYPT = @LIBCRYPT@
|
|
||||||
LIBECONF = @LIBECONF@
|
|
||||||
LIBICONV = @LIBICONV@
|
|
||||||
LIBINTL = @LIBINTL@
|
|
||||||
LIBMD = @LIBMD@
|
|
||||||
LIBOBJS = @LIBOBJS@
|
|
||||||
LIBPAM = @LIBPAM@
|
|
||||||
LIBS = @LIBS@
|
|
||||||
LIBSELINUX = @LIBSELINUX@
|
|
||||||
LIBSEMANAGE = @LIBSEMANAGE@
|
|
||||||
LIBSKEY = @LIBSKEY@
|
|
||||||
LIBSUBID_ABI = @LIBSUBID_ABI@
|
|
||||||
LIBSUBID_ABI_MAJOR = @LIBSUBID_ABI_MAJOR@
|
|
||||||
LIBSUBID_ABI_MICRO = @LIBSUBID_ABI_MICRO@
|
|
||||||
LIBSUBID_ABI_MINOR = @LIBSUBID_ABI_MINOR@
|
|
||||||
LIBSYSTEMD = @LIBSYSTEMD@
|
|
||||||
LIBTCB = @LIBTCB@
|
|
||||||
LIBTOOL = @LIBTOOL@
|
|
||||||
LIPO = @LIPO@
|
|
||||||
LN_S = @LN_S@
|
|
||||||
LTLIBICONV = @LTLIBICONV@
|
|
||||||
LTLIBINTL = @LTLIBINTL@
|
|
||||||
LTLIBOBJS = @LTLIBOBJS@
|
|
||||||
LT_DLLOADERS = @LT_DLLOADERS@
|
|
||||||
LT_DLPREOPEN = @LT_DLPREOPEN@
|
|
||||||
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@
|
|
||||||
PKG_CONFIG = @PKG_CONFIG@
|
|
||||||
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
|
|
||||||
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
|
|
||||||
POSUB = @POSUB@
|
|
||||||
RANLIB = @RANLIB@
|
|
||||||
SED = @SED@
|
|
||||||
SET_MAKE = @SET_MAKE@
|
|
||||||
SHELL = @SHELL@
|
|
||||||
STRIP = @STRIP@
|
|
||||||
USE_NLS = @USE_NLS@
|
|
||||||
VENDORDIR = @VENDORDIR@
|
|
||||||
VERSION = @VERSION@
|
|
||||||
XGETTEXT = @XGETTEXT@
|
|
||||||
XGETTEXT_015 = @XGETTEXT_015@
|
|
||||||
XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
|
|
||||||
XMLCATALOG = @XMLCATALOG@
|
|
||||||
XML_CATALOG_FILE = @XML_CATALOG_FILE@
|
|
||||||
XSLTPROC = @XSLTPROC@
|
|
||||||
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@
|
|
||||||
ACLOCAL_AMFLAGS = -I m4
|
|
||||||
SUBDIRS = lib $(am__append_1) src po doc etc tests/unit \
|
|
||||||
$(am__append_2)
|
|
||||||
CLEANFILES = man/8.out man/po/remove-potcdate.* man/*/login.defs.d man/*/*.mo
|
|
||||||
EXTRA_DIST = NEWS README tests/
|
|
||||||
all: config.h
|
|
||||||
$(MAKE) $(AM_MAKEFLAGS) all-recursive
|
|
||||||
|
|
||||||
.SUFFIXES:
|
|
||||||
am--refresh: Makefile
|
|
||||||
@:
|
|
||||||
$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
|
|
||||||
@for dep in $?; do \
|
|
||||||
case '$(am__configure_deps)' in \
|
|
||||||
*$$dep*) \
|
|
||||||
echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
|
|
||||||
$(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
|
|
||||||
&& exit 0; \
|
|
||||||
exit 1;; \
|
|
||||||
esac; \
|
|
||||||
done; \
|
|
||||||
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
|
|
||||||
$(am__cd) $(top_srcdir) && \
|
|
||||||
$(AUTOMAKE) --foreign Makefile
|
|
||||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
|
||||||
@case '$?' in \
|
|
||||||
*config.status*) \
|
|
||||||
echo ' $(SHELL) ./config.status'; \
|
|
||||||
$(SHELL) ./config.status;; \
|
|
||||||
*) \
|
|
||||||
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \
|
|
||||||
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \
|
|
||||||
esac;
|
|
||||||
|
|
||||||
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
|
|
||||||
$(SHELL) ./config.status --recheck
|
|
||||||
|
|
||||||
$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
|
|
||||||
$(am__cd) $(srcdir) && $(AUTOCONF)
|
|
||||||
$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
|
|
||||||
$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
|
|
||||||
$(am__aclocal_m4_deps):
|
|
||||||
|
|
||||||
config.h: stamp-h1
|
|
||||||
@test -f $@ || rm -f stamp-h1
|
|
||||||
@test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1
|
|
||||||
|
|
||||||
stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
|
|
||||||
@rm -f stamp-h1
|
|
||||||
cd $(top_builddir) && $(SHELL) ./config.status config.h
|
|
||||||
$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
|
|
||||||
($(am__cd) $(top_srcdir) && $(AUTOHEADER))
|
|
||||||
rm -f stamp-h1
|
|
||||||
touch $@
|
|
||||||
|
|
||||||
distclean-hdr:
|
|
||||||
-rm -f config.h stamp-h1
|
|
||||||
man/po/Makefile: $(top_builddir)/config.status $(top_srcdir)/man/po/Makefile.in
|
|
||||||
cd $(top_builddir) && $(SHELL) ./config.status $@
|
|
||||||
|
|
||||||
mostlyclean-libtool:
|
|
||||||
-rm -f *.lo
|
|
||||||
|
|
||||||
clean-libtool:
|
|
||||||
-rm -rf .libs _libs
|
|
||||||
|
|
||||||
distclean-libtool:
|
|
||||||
-rm -f libtool config.lt
|
|
||||||
|
|
||||||
# This directory's subdirectories are mostly independent; you can cd
|
|
||||||
# into them and run 'make' without going through this Makefile.
|
|
||||||
# To change the values of 'make' variables: instead of editing Makefiles,
|
|
||||||
# (1) if the variable is set in 'config.status', edit 'config.status'
|
|
||||||
# (which will cause the Makefiles to be regenerated when you run 'make');
|
|
||||||
# (2) otherwise, pass the desired values on the 'make' command line.
|
|
||||||
$(am__recursive_targets):
|
|
||||||
@fail=; \
|
|
||||||
if $(am__make_keepgoing); then \
|
|
||||||
failcom='fail=yes'; \
|
|
||||||
else \
|
|
||||||
failcom='exit 1'; \
|
|
||||||
fi; \
|
|
||||||
dot_seen=no; \
|
|
||||||
target=`echo $@ | sed s/-recursive//`; \
|
|
||||||
case "$@" in \
|
|
||||||
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
|
|
||||||
*) list='$(SUBDIRS)' ;; \
|
|
||||||
esac; \
|
|
||||||
for subdir in $$list; do \
|
|
||||||
echo "Making $$target in $$subdir"; \
|
|
||||||
if test "$$subdir" = "."; then \
|
|
||||||
dot_seen=yes; \
|
|
||||||
local_target="$$target-am"; \
|
|
||||||
else \
|
|
||||||
local_target="$$target"; \
|
|
||||||
fi; \
|
|
||||||
($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
|
||||||
|| eval $$failcom; \
|
|
||||||
done; \
|
|
||||||
if test "$$dot_seen" = "no"; then \
|
|
||||||
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
|
|
||||||
fi; test -z "$$fail"
|
|
||||||
|
|
||||||
ID: $(am__tagged_files)
|
|
||||||
$(am__define_uniq_tagged_files); mkid -fID $$unique
|
|
||||||
tags: tags-recursive
|
|
||||||
TAGS: tags
|
|
||||||
|
|
||||||
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
|
|
||||||
set x; \
|
|
||||||
here=`pwd`; \
|
|
||||||
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
|
|
||||||
include_option=--etags-include; \
|
|
||||||
empty_fix=.; \
|
|
||||||
else \
|
|
||||||
include_option=--include; \
|
|
||||||
empty_fix=; \
|
|
||||||
fi; \
|
|
||||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
|
||||||
if test "$$subdir" = .; then :; else \
|
|
||||||
test ! -f $$subdir/TAGS || \
|
|
||||||
set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
|
|
||||||
fi; \
|
|
||||||
done; \
|
|
||||||
$(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-recursive
|
|
||||||
|
|
||||||
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"
|
|
||||||
cscope: cscope.files
|
|
||||||
test ! -s cscope.files \
|
|
||||||
|| $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
|
|
||||||
clean-cscope:
|
|
||||||
-rm -f cscope.files
|
|
||||||
cscope.files: clean-cscope cscopelist
|
|
||||||
cscopelist: cscopelist-recursive
|
|
||||||
|
|
||||||
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
|
|
||||||
-rm -f cscope.out cscope.in.out cscope.po.out cscope.files
|
|
||||||
distdir: $(BUILT_SOURCES)
|
|
||||||
$(MAKE) $(AM_MAKEFLAGS) distdir-am
|
|
||||||
|
|
||||||
distdir-am: $(DISTFILES)
|
|
||||||
$(am__remove_distdir)
|
|
||||||
test -d "$(distdir)" || mkdir "$(distdir)"
|
|
||||||
@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
|
|
||||||
@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
|
|
||||||
if test "$$subdir" = .; then :; else \
|
|
||||||
$(am__make_dryrun) \
|
|
||||||
|| test -d "$(distdir)/$$subdir" \
|
|
||||||
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|
|
||||||
|| exit 1; \
|
|
||||||
dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
|
|
||||||
$(am__relativize); \
|
|
||||||
new_distdir=$$reldir; \
|
|
||||||
dir1=$$subdir; dir2="$(top_distdir)"; \
|
|
||||||
$(am__relativize); \
|
|
||||||
new_top_distdir=$$reldir; \
|
|
||||||
echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
|
|
||||||
echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
|
|
||||||
($(am__cd) $$subdir && \
|
|
||||||
$(MAKE) $(AM_MAKEFLAGS) \
|
|
||||||
top_distdir="$$new_top_distdir" \
|
|
||||||
distdir="$$new_distdir" \
|
|
||||||
am__remove_distdir=: \
|
|
||||||
am__skip_length_check=: \
|
|
||||||
am__skip_mode_fix=: \
|
|
||||||
distdir) \
|
|
||||||
|| exit 1; \
|
|
||||||
fi; \
|
|
||||||
done
|
|
||||||
$(MAKE) $(AM_MAKEFLAGS) \
|
|
||||||
top_distdir="$(top_distdir)" distdir="$(distdir)" \
|
|
||||||
dist-hook
|
|
||||||
-test -n "$(am__skip_mode_fix)" \
|
|
||||||
|| find "$(distdir)" -type d ! -perm -755 \
|
|
||||||
-exec chmod u+rwx,go+rx {} \; -o \
|
|
||||||
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
|
|
||||||
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
|
|
||||||
! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
|
|
||||||
|| chmod -R a+r "$(distdir)"
|
|
||||||
dist-gzip: distdir
|
|
||||||
tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz
|
|
||||||
$(am__post_remove_distdir)
|
|
||||||
|
|
||||||
dist-bzip2: distdir
|
|
||||||
tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
|
|
||||||
$(am__post_remove_distdir)
|
|
||||||
|
|
||||||
dist-lzip: distdir
|
|
||||||
tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
|
|
||||||
$(am__post_remove_distdir)
|
|
||||||
dist-xz: distdir
|
|
||||||
tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
|
|
||||||
$(am__post_remove_distdir)
|
|
||||||
|
|
||||||
dist-zstd: distdir
|
|
||||||
tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst
|
|
||||||
$(am__post_remove_distdir)
|
|
||||||
|
|
||||||
dist-tarZ: distdir
|
|
||||||
@echo WARNING: "Support for distribution archives compressed with" \
|
|
||||||
"legacy program 'compress' is deprecated." >&2
|
|
||||||
@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
|
|
||||||
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
|
|
||||||
$(am__post_remove_distdir)
|
|
||||||
|
|
||||||
dist-shar: distdir
|
|
||||||
@echo WARNING: "Support for shar distribution archives is" \
|
|
||||||
"deprecated." >&2
|
|
||||||
@echo WARNING: "It will be removed altogether in Automake 2.0" >&2
|
|
||||||
shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz
|
|
||||||
$(am__post_remove_distdir)
|
|
||||||
|
|
||||||
dist-zip: distdir
|
|
||||||
-rm -f $(distdir).zip
|
|
||||||
zip -rq $(distdir).zip $(distdir)
|
|
||||||
$(am__post_remove_distdir)
|
|
||||||
|
|
||||||
dist dist-all:
|
|
||||||
$(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
|
|
||||||
$(am__post_remove_distdir)
|
|
||||||
|
|
||||||
# This target untars the dist file and tries a VPATH configuration. Then
|
|
||||||
# it guarantees that the distribution is self-contained by making another
|
|
||||||
# tarfile.
|
|
||||||
distcheck: dist
|
|
||||||
case '$(DIST_ARCHIVES)' in \
|
|
||||||
*.tar.gz*) \
|
|
||||||
eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\
|
|
||||||
*.tar.bz2*) \
|
|
||||||
bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
|
|
||||||
*.tar.lz*) \
|
|
||||||
lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
|
|
||||||
*.tar.xz*) \
|
|
||||||
xz -dc $(distdir).tar.xz | $(am__untar) ;;\
|
|
||||||
*.tar.Z*) \
|
|
||||||
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
|
|
||||||
*.shar.gz*) \
|
|
||||||
eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\
|
|
||||||
*.zip*) \
|
|
||||||
unzip $(distdir).zip ;;\
|
|
||||||
*.tar.zst*) \
|
|
||||||
zstd -dc $(distdir).tar.zst | $(am__untar) ;;\
|
|
||||||
esac
|
|
||||||
chmod -R a-w $(distdir)
|
|
||||||
chmod u+w $(distdir)
|
|
||||||
mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst
|
|
||||||
chmod a-w $(distdir)
|
|
||||||
test -d $(distdir)/_build || exit 0; \
|
|
||||||
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
|
|
||||||
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
|
|
||||||
&& am__cwd=`pwd` \
|
|
||||||
&& $(am__cd) $(distdir)/_build/sub \
|
|
||||||
&& ../../configure \
|
|
||||||
$(AM_DISTCHECK_CONFIGURE_FLAGS) \
|
|
||||||
$(DISTCHECK_CONFIGURE_FLAGS) \
|
|
||||||
--srcdir=../.. --prefix="$$dc_install_base" \
|
|
||||||
&& $(MAKE) $(AM_MAKEFLAGS) \
|
|
||||||
&& $(MAKE) $(AM_MAKEFLAGS) $(AM_DISTCHECK_DVI_TARGET) \
|
|
||||||
&& $(MAKE) $(AM_MAKEFLAGS) check \
|
|
||||||
&& $(MAKE) $(AM_MAKEFLAGS) install \
|
|
||||||
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
|
|
||||||
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
|
|
||||||
&& $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
|
|
||||||
distuninstallcheck \
|
|
||||||
&& chmod -R a-w "$$dc_install_base" \
|
|
||||||
&& ({ \
|
|
||||||
(cd ../.. && umask 077 && mkdir "$$dc_destdir") \
|
|
||||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
|
|
||||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
|
|
||||||
&& $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
|
|
||||||
distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
|
|
||||||
} || { rm -rf "$$dc_destdir"; exit 1; }) \
|
|
||||||
&& rm -rf "$$dc_destdir" \
|
|
||||||
&& $(MAKE) $(AM_MAKEFLAGS) dist \
|
|
||||||
&& rm -rf $(DIST_ARCHIVES) \
|
|
||||||
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
|
|
||||||
&& cd "$$am__cwd" \
|
|
||||||
|| exit 1
|
|
||||||
$(am__post_remove_distdir)
|
|
||||||
@(echo "$(distdir) archives ready for distribution: "; \
|
|
||||||
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
|
|
||||||
sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
|
|
||||||
distuninstallcheck:
|
|
||||||
@test -n '$(distuninstallcheck_dir)' || { \
|
|
||||||
echo 'ERROR: trying to run $@ with an empty' \
|
|
||||||
'$$(distuninstallcheck_dir)' >&2; \
|
|
||||||
exit 1; \
|
|
||||||
}; \
|
|
||||||
$(am__cd) '$(distuninstallcheck_dir)' || { \
|
|
||||||
echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
|
|
||||||
exit 1; \
|
|
||||||
}; \
|
|
||||||
test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
|
|
||||||
|| { echo "ERROR: files left after uninstall:" ; \
|
|
||||||
if test -n "$(DESTDIR)"; then \
|
|
||||||
echo " (check DESTDIR support)"; \
|
|
||||||
fi ; \
|
|
||||||
$(distuninstallcheck_listfiles) ; \
|
|
||||||
exit 1; } >&2
|
|
||||||
distcleancheck: distclean
|
|
||||||
@if test '$(srcdir)' = . ; then \
|
|
||||||
echo "ERROR: distcleancheck can only run from a VPATH build" ; \
|
|
||||||
exit 1 ; \
|
|
||||||
fi
|
|
||||||
@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
|
|
||||||
|| { echo "ERROR: files left in build directory after distclean:" ; \
|
|
||||||
$(distcleancheck_listfiles) ; \
|
|
||||||
exit 1; } >&2
|
|
||||||
check-am: all-am
|
|
||||||
check: check-recursive
|
|
||||||
all-am: Makefile config.h
|
|
||||||
installdirs: installdirs-recursive
|
|
||||||
installdirs-am:
|
|
||||||
install: install-recursive
|
|
||||||
install-exec: install-exec-recursive
|
|
||||||
install-data: install-data-recursive
|
|
||||||
uninstall: uninstall-recursive
|
|
||||||
|
|
||||||
install-am: all-am
|
|
||||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
|
||||||
|
|
||||||
installcheck: installcheck-recursive
|
|
||||||
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:
|
|
||||||
-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
|
|
||||||
|
|
||||||
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-recursive
|
|
||||||
|
|
||||||
clean-am: clean-generic clean-libtool mostlyclean-am
|
|
||||||
|
|
||||||
distclean: distclean-recursive
|
|
||||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
|
||||||
-rm -f Makefile
|
|
||||||
distclean-am: clean-am distclean-generic distclean-hdr \
|
|
||||||
distclean-libtool distclean-tags
|
|
||||||
|
|
||||||
dvi: dvi-recursive
|
|
||||||
|
|
||||||
dvi-am:
|
|
||||||
|
|
||||||
html: html-recursive
|
|
||||||
|
|
||||||
html-am:
|
|
||||||
|
|
||||||
info: info-recursive
|
|
||||||
|
|
||||||
info-am:
|
|
||||||
|
|
||||||
install-data-am:
|
|
||||||
|
|
||||||
install-dvi: install-dvi-recursive
|
|
||||||
|
|
||||||
install-dvi-am:
|
|
||||||
|
|
||||||
install-exec-am:
|
|
||||||
|
|
||||||
install-html: install-html-recursive
|
|
||||||
|
|
||||||
install-html-am:
|
|
||||||
|
|
||||||
install-info: install-info-recursive
|
|
||||||
|
|
||||||
install-info-am:
|
|
||||||
|
|
||||||
install-man:
|
|
||||||
|
|
||||||
install-pdf: install-pdf-recursive
|
|
||||||
|
|
||||||
install-pdf-am:
|
|
||||||
|
|
||||||
install-ps: install-ps-recursive
|
|
||||||
|
|
||||||
install-ps-am:
|
|
||||||
|
|
||||||
installcheck-am:
|
|
||||||
|
|
||||||
maintainer-clean: maintainer-clean-recursive
|
|
||||||
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
|
|
||||||
-rm -rf $(top_srcdir)/autom4te.cache
|
|
||||||
-rm -f Makefile
|
|
||||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
|
||||||
|
|
||||||
mostlyclean: mostlyclean-recursive
|
|
||||||
|
|
||||||
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
|
||||||
|
|
||||||
pdf: pdf-recursive
|
|
||||||
|
|
||||||
pdf-am:
|
|
||||||
|
|
||||||
ps: ps-recursive
|
|
||||||
|
|
||||||
ps-am:
|
|
||||||
|
|
||||||
uninstall-am:
|
|
||||||
|
|
||||||
.MAKE: $(am__recursive_targets) all install-am install-strip
|
|
||||||
|
|
||||||
.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
|
|
||||||
am--refresh check check-am clean clean-cscope clean-generic \
|
|
||||||
clean-libtool cscope cscopelist-am ctags ctags-am dist \
|
|
||||||
dist-all dist-bzip2 dist-gzip dist-hook dist-lzip dist-shar \
|
|
||||||
dist-tarZ dist-xz dist-zip dist-zstd distcheck distclean \
|
|
||||||
distclean-generic distclean-hdr distclean-libtool \
|
|
||||||
distclean-tags distcleancheck distdir distuninstallcheck dvi \
|
|
||||||
dvi-am html html-am info info-am install install-am \
|
|
||||||
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-strip \
|
|
||||||
installcheck installcheck-am installdirs installdirs-am \
|
|
||||||
maintainer-clean maintainer-clean-generic mostlyclean \
|
|
||||||
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
|
|
||||||
tags tags-am uninstall uninstall-am
|
|
||||||
|
|
||||||
.PRECIOUS: Makefile
|
|
||||||
|
|
||||||
|
|
||||||
dist-hook:
|
|
||||||
chmod -R u+w $(distdir)/tests
|
|
||||||
chmod u+w $(distdir)
|
|
||||||
mv $(distdir)/tests/unit $(distdir)/realunittest
|
|
||||||
mv $(distdir)/tests/tests $(distdir)/realtests
|
|
||||||
rm -rf $(distdir)/tests
|
|
||||||
mv $(distdir)/realtests $(distdir)/tests
|
|
||||||
rm -rf $(distdir)/tests/unit $(distdir)/tests/Makefile*
|
|
||||||
mv $(distdir)/realunittest $(distdir)/tests/unit
|
|
||||||
|
|
||||||
# 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:
|
|
||||||
@@ -1,47 +0,0 @@
|
|||||||
# shadow-utils
|
|
||||||
|
|
||||||
## Introduction
|
|
||||||
The shadow-utils package includes the necessary programs for
|
|
||||||
converting UNIX password files to the shadow password format, plus
|
|
||||||
programs for managing user and group accounts. The pwconv command
|
|
||||||
converts passwords to the shadow password format. The pwunconv command
|
|
||||||
unconverts shadow passwords and generates a passwd file (a standard
|
|
||||||
UNIX password file). The pwck command checks the integrity of password
|
|
||||||
and shadow files. The lastlog command prints out the last login times
|
|
||||||
for all users. The useradd, userdel, and usermod commands are used for
|
|
||||||
managing user accounts. The groupadd, groupdel, and groupmod commands
|
|
||||||
are used for managing group accounts.
|
|
||||||
|
|
||||||
## Sites
|
|
||||||
* [Homepage](https://github.com/shadow-maint/shadow)
|
|
||||||
* [Issue tracker](https://github.com/shadow-maint/shadow/issues)
|
|
||||||
* [Releases](https://github.com/shadow-maint/shadow/releases)
|
|
||||||
|
|
||||||
## Code
|
|
||||||
|
|
||||||
The main development branch is at [https://github.com/shadow-maint/shadow.git](https://github.com/shadow-maint/shadow)
|
|
||||||
|
|
||||||
See [STABLE.md](https://github.com/shadow-maint/shadow/blob/master/STABLE.md) for a list of supported stable branches.
|
|
||||||
|
|
||||||
## Contacts
|
|
||||||
There are several ways to contact us:
|
|
||||||
* [the general discussion mailing list](
|
|
||||||
https://alioth-lists.debian.net/mailman/listinfo/pkg-shadow-devel)
|
|
||||||
* the #shadow IRC channel on libera.chat:
|
|
||||||
* irc://irc.libera.chat/shadow
|
|
||||||
|
|
||||||
### Mailing archives
|
|
||||||
* [the general discussion mailing list archive](
|
|
||||||
https://alioth-lists.debian.net/pipermail/pkg-shadow-devel/)
|
|
||||||
* [the commit mailing list archive](
|
|
||||||
https://alioth-lists-archive.debian.net/pipermail/pkg-shadow-commits/),
|
|
||||||
only used for historical purposes
|
|
||||||
|
|
||||||
## Contributions
|
|
||||||
|
|
||||||
Contributions are welcome. Follow the
|
|
||||||
[guidelines](doc/contributions/introduction.md) before posting any patches.
|
|
||||||
|
|
||||||
## Authors and maintainers
|
|
||||||
Authors and maintainers are listed in [AUTHORS.md](
|
|
||||||
https://github.com/shadow-maint/shadow/blob/master/AUTHORS.md).
|
|
||||||
@@ -1,54 +0,0 @@
|
|||||||
# Checks the location of the XML Catalog
|
|
||||||
# Usage:
|
|
||||||
# JH_PATH_XML_CATALOG([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
|
|
||||||
# Defines XMLCATALOG and XML_CATALOG_FILE substitutions
|
|
||||||
AC_DEFUN([JH_PATH_XML_CATALOG],
|
|
||||||
[
|
|
||||||
# check for the presence of the XML catalog
|
|
||||||
AC_ARG_WITH([xml-catalog],
|
|
||||||
AS_HELP_STRING([--with-xml-catalog=CATALOG],
|
|
||||||
[path to xml catalog to use]),,
|
|
||||||
[with_xml_catalog=/etc/xml/catalog])
|
|
||||||
jh_found_xmlcatalog=true
|
|
||||||
XML_CATALOG_FILE="$with_xml_catalog"
|
|
||||||
AC_SUBST([XML_CATALOG_FILE])
|
|
||||||
AC_MSG_CHECKING([for XML catalog ($XML_CATALOG_FILE)])
|
|
||||||
if test -f "$XML_CATALOG_FILE"; then
|
|
||||||
AC_MSG_RESULT([found])
|
|
||||||
else
|
|
||||||
jh_found_xmlcatalog=false
|
|
||||||
AC_MSG_RESULT([not found])
|
|
||||||
fi
|
|
||||||
|
|
||||||
# check for the xmlcatalog program
|
|
||||||
AC_PATH_PROG(XMLCATALOG, xmlcatalog, no)
|
|
||||||
if test "x$XMLCATALOG" = xno; then
|
|
||||||
jh_found_xmlcatalog=false
|
|
||||||
fi
|
|
||||||
|
|
||||||
if $jh_found_xmlcatalog; then
|
|
||||||
ifelse([$1],,[:],[$1])
|
|
||||||
else
|
|
||||||
ifelse([$2],,[AC_MSG_ERROR([could not find XML catalog])],[$2])
|
|
||||||
fi
|
|
||||||
])
|
|
||||||
|
|
||||||
# Checks if a particular URI appears in the XML catalog
|
|
||||||
# Usage:
|
|
||||||
# JH_CHECK_XML_CATALOG(URI, [FRIENDLY-NAME], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
|
|
||||||
AC_DEFUN([JH_CHECK_XML_CATALOG],
|
|
||||||
[
|
|
||||||
AC_REQUIRE([JH_PATH_XML_CATALOG],[JH_PATH_XML_CATALOG(,[:])])dnl
|
|
||||||
AC_MSG_CHECKING([for ifelse([$2],,[$1],[$2]) in XML catalog])
|
|
||||||
if $jh_found_xmlcatalog && \
|
|
||||||
AC_RUN_LOG([$XMLCATALOG --noout "$XML_CATALOG_FILE" "$1" >&2]); then
|
|
||||||
AC_MSG_RESULT([found])
|
|
||||||
ifelse([$3],,,[$3
|
|
||||||
])dnl
|
|
||||||
else
|
|
||||||
AC_MSG_RESULT([not found])
|
|
||||||
ifelse([$4],,
|
|
||||||
[AC_MSG_ERROR([could not find ifelse([$2],,[$1],[$2]) in XML catalog])],
|
|
||||||
[$4])
|
|
||||||
fi
|
|
||||||
])
|
|
||||||
Vendored
-2455
File diff suppressed because it is too large
Load Diff
@@ -1,348 +0,0 @@
|
|||||||
#! /bin/sh
|
|
||||||
# Wrapper for compilers which do not understand '-c -o'.
|
|
||||||
|
|
||||||
scriptversion=2018-03-07.03; # UTC
|
|
||||||
|
|
||||||
# Copyright (C) 1999-2021 Free Software Foundation, Inc.
|
|
||||||
# Written by Tom Tromey <tromey@cygnus.com>.
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2, or (at your option)
|
|
||||||
# any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
# As a special exception to the GNU General Public License, if you
|
|
||||||
# distribute this file as part of a program that contains a
|
|
||||||
# configuration script generated by Autoconf, you may include it under
|
|
||||||
# the same distribution terms that you use for the rest of that program.
|
|
||||||
|
|
||||||
# This file is maintained in Automake, please report
|
|
||||||
# bugs to <bug-automake@gnu.org> or send patches to
|
|
||||||
# <automake-patches@gnu.org>.
|
|
||||||
|
|
||||||
nl='
|
|
||||||
'
|
|
||||||
|
|
||||||
# We need space, tab and new line, in precisely that order. Quoting is
|
|
||||||
# there to prevent tools from complaining about whitespace usage.
|
|
||||||
IFS=" "" $nl"
|
|
||||||
|
|
||||||
file_conv=
|
|
||||||
|
|
||||||
# func_file_conv build_file lazy
|
|
||||||
# Convert a $build file to $host form and store it in $file
|
|
||||||
# Currently only supports Windows hosts. If the determined conversion
|
|
||||||
# type is listed in (the comma separated) LAZY, no conversion will
|
|
||||||
# take place.
|
|
||||||
func_file_conv ()
|
|
||||||
{
|
|
||||||
file=$1
|
|
||||||
case $file in
|
|
||||||
/ | /[!/]*) # absolute file, and not a UNC file
|
|
||||||
if test -z "$file_conv"; then
|
|
||||||
# lazily determine how to convert abs files
|
|
||||||
case `uname -s` in
|
|
||||||
MINGW*)
|
|
||||||
file_conv=mingw
|
|
||||||
;;
|
|
||||||
CYGWIN* | MSYS*)
|
|
||||||
file_conv=cygwin
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
file_conv=wine
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
case $file_conv/,$2, in
|
|
||||||
*,$file_conv,*)
|
|
||||||
;;
|
|
||||||
mingw/*)
|
|
||||||
file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
|
|
||||||
;;
|
|
||||||
cygwin/* | msys/*)
|
|
||||||
file=`cygpath -m "$file" || echo "$file"`
|
|
||||||
;;
|
|
||||||
wine/*)
|
|
||||||
file=`winepath -w "$file" || echo "$file"`
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
# func_cl_dashL linkdir
|
|
||||||
# Make cl look for libraries in LINKDIR
|
|
||||||
func_cl_dashL ()
|
|
||||||
{
|
|
||||||
func_file_conv "$1"
|
|
||||||
if test -z "$lib_path"; then
|
|
||||||
lib_path=$file
|
|
||||||
else
|
|
||||||
lib_path="$lib_path;$file"
|
|
||||||
fi
|
|
||||||
linker_opts="$linker_opts -LIBPATH:$file"
|
|
||||||
}
|
|
||||||
|
|
||||||
# func_cl_dashl library
|
|
||||||
# Do a library search-path lookup for cl
|
|
||||||
func_cl_dashl ()
|
|
||||||
{
|
|
||||||
lib=$1
|
|
||||||
found=no
|
|
||||||
save_IFS=$IFS
|
|
||||||
IFS=';'
|
|
||||||
for dir in $lib_path $LIB
|
|
||||||
do
|
|
||||||
IFS=$save_IFS
|
|
||||||
if $shared && test -f "$dir/$lib.dll.lib"; then
|
|
||||||
found=yes
|
|
||||||
lib=$dir/$lib.dll.lib
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
if test -f "$dir/$lib.lib"; then
|
|
||||||
found=yes
|
|
||||||
lib=$dir/$lib.lib
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
if test -f "$dir/lib$lib.a"; then
|
|
||||||
found=yes
|
|
||||||
lib=$dir/lib$lib.a
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
IFS=$save_IFS
|
|
||||||
|
|
||||||
if test "$found" != yes; then
|
|
||||||
lib=$lib.lib
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# func_cl_wrapper cl arg...
|
|
||||||
# Adjust compile command to suit cl
|
|
||||||
func_cl_wrapper ()
|
|
||||||
{
|
|
||||||
# Assume a capable shell
|
|
||||||
lib_path=
|
|
||||||
shared=:
|
|
||||||
linker_opts=
|
|
||||||
for arg
|
|
||||||
do
|
|
||||||
if test -n "$eat"; then
|
|
||||||
eat=
|
|
||||||
else
|
|
||||||
case $1 in
|
|
||||||
-o)
|
|
||||||
# configure might choose to run compile as 'compile cc -o foo foo.c'.
|
|
||||||
eat=1
|
|
||||||
case $2 in
|
|
||||||
*.o | *.[oO][bB][jJ])
|
|
||||||
func_file_conv "$2"
|
|
||||||
set x "$@" -Fo"$file"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
func_file_conv "$2"
|
|
||||||
set x "$@" -Fe"$file"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
-I)
|
|
||||||
eat=1
|
|
||||||
func_file_conv "$2" mingw
|
|
||||||
set x "$@" -I"$file"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
-I*)
|
|
||||||
func_file_conv "${1#-I}" mingw
|
|
||||||
set x "$@" -I"$file"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
-l)
|
|
||||||
eat=1
|
|
||||||
func_cl_dashl "$2"
|
|
||||||
set x "$@" "$lib"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
-l*)
|
|
||||||
func_cl_dashl "${1#-l}"
|
|
||||||
set x "$@" "$lib"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
-L)
|
|
||||||
eat=1
|
|
||||||
func_cl_dashL "$2"
|
|
||||||
;;
|
|
||||||
-L*)
|
|
||||||
func_cl_dashL "${1#-L}"
|
|
||||||
;;
|
|
||||||
-static)
|
|
||||||
shared=false
|
|
||||||
;;
|
|
||||||
-Wl,*)
|
|
||||||
arg=${1#-Wl,}
|
|
||||||
save_ifs="$IFS"; IFS=','
|
|
||||||
for flag in $arg; do
|
|
||||||
IFS="$save_ifs"
|
|
||||||
linker_opts="$linker_opts $flag"
|
|
||||||
done
|
|
||||||
IFS="$save_ifs"
|
|
||||||
;;
|
|
||||||
-Xlinker)
|
|
||||||
eat=1
|
|
||||||
linker_opts="$linker_opts $2"
|
|
||||||
;;
|
|
||||||
-*)
|
|
||||||
set x "$@" "$1"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
*.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
|
|
||||||
func_file_conv "$1"
|
|
||||||
set x "$@" -Tp"$file"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
*.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
|
|
||||||
func_file_conv "$1" mingw
|
|
||||||
set x "$@" "$file"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
set x "$@" "$1"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
shift
|
|
||||||
done
|
|
||||||
if test -n "$linker_opts"; then
|
|
||||||
linker_opts="-link$linker_opts"
|
|
||||||
fi
|
|
||||||
exec "$@" $linker_opts
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
eat=
|
|
||||||
|
|
||||||
case $1 in
|
|
||||||
'')
|
|
||||||
echo "$0: No command. Try '$0 --help' for more information." 1>&2
|
|
||||||
exit 1;
|
|
||||||
;;
|
|
||||||
-h | --h*)
|
|
||||||
cat <<\EOF
|
|
||||||
Usage: compile [--help] [--version] PROGRAM [ARGS]
|
|
||||||
|
|
||||||
Wrapper for compilers which do not understand '-c -o'.
|
|
||||||
Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
|
|
||||||
arguments, and rename the output as expected.
|
|
||||||
|
|
||||||
If you are trying to build a whole package this is not the
|
|
||||||
right script to run: please start by reading the file 'INSTALL'.
|
|
||||||
|
|
||||||
Report bugs to <bug-automake@gnu.org>.
|
|
||||||
EOF
|
|
||||||
exit $?
|
|
||||||
;;
|
|
||||||
-v | --v*)
|
|
||||||
echo "compile $scriptversion"
|
|
||||||
exit $?
|
|
||||||
;;
|
|
||||||
cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \
|
|
||||||
icl | *[/\\]icl | icl.exe | *[/\\]icl.exe )
|
|
||||||
func_cl_wrapper "$@" # Doesn't return...
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
ofile=
|
|
||||||
cfile=
|
|
||||||
|
|
||||||
for arg
|
|
||||||
do
|
|
||||||
if test -n "$eat"; then
|
|
||||||
eat=
|
|
||||||
else
|
|
||||||
case $1 in
|
|
||||||
-o)
|
|
||||||
# configure might choose to run compile as 'compile cc -o foo foo.c'.
|
|
||||||
# So we strip '-o arg' only if arg is an object.
|
|
||||||
eat=1
|
|
||||||
case $2 in
|
|
||||||
*.o | *.obj)
|
|
||||||
ofile=$2
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
set x "$@" -o "$2"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
*.c)
|
|
||||||
cfile=$1
|
|
||||||
set x "$@" "$1"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
set x "$@" "$1"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
shift
|
|
||||||
done
|
|
||||||
|
|
||||||
if test -z "$ofile" || test -z "$cfile"; then
|
|
||||||
# If no '-o' option was seen then we might have been invoked from a
|
|
||||||
# pattern rule where we don't need one. That is ok -- this is a
|
|
||||||
# normal compilation that the losing compiler can handle. If no
|
|
||||||
# '.c' file was seen then we are probably linking. That is also
|
|
||||||
# ok.
|
|
||||||
exec "$@"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Name of file we expect compiler to create.
|
|
||||||
cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
|
|
||||||
|
|
||||||
# Create the lock directory.
|
|
||||||
# Note: use '[/\\:.-]' here to ensure that we don't use the same name
|
|
||||||
# that we are using for the .o file. Also, base the name on the expected
|
|
||||||
# object file name, since that is what matters with a parallel build.
|
|
||||||
lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
|
|
||||||
while true; do
|
|
||||||
if mkdir "$lockdir" >/dev/null 2>&1; then
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
sleep 1
|
|
||||||
done
|
|
||||||
# FIXME: race condition here if user kills between mkdir and trap.
|
|
||||||
trap "rmdir '$lockdir'; exit 1" 1 2 15
|
|
||||||
|
|
||||||
# Run the compile.
|
|
||||||
"$@"
|
|
||||||
ret=$?
|
|
||||||
|
|
||||||
if test -f "$cofile"; then
|
|
||||||
test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
|
|
||||||
elif test -f "${cofile}bj"; then
|
|
||||||
test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
|
|
||||||
fi
|
|
||||||
|
|
||||||
rmdir "$lockdir"
|
|
||||||
exit $ret
|
|
||||||
|
|
||||||
# Local Variables:
|
|
||||||
# mode: shell-script
|
|
||||||
# sh-indentation: 2
|
|
||||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
|
||||||
# time-stamp-start: "scriptversion="
|
|
||||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
|
||||||
# time-stamp-time-zone: "UTC0"
|
|
||||||
# time-stamp-end: "; # UTC"
|
|
||||||
# End:
|
|
||||||
Vendored
-1754
File diff suppressed because it is too large
Load Diff
@@ -1,690 +0,0 @@
|
|||||||
#! /bin/sh
|
|
||||||
# Output a system dependent set of variables, describing how to set the
|
|
||||||
# run time search path of shared libraries in an executable.
|
|
||||||
#
|
|
||||||
# Copyright 1996-2014 Free Software Foundation, Inc.
|
|
||||||
# Taken from GNU libtool, 2001
|
|
||||||
# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
|
|
||||||
#
|
|
||||||
# This file 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.
|
|
||||||
#
|
|
||||||
# The first argument passed to this file is the canonical host specification,
|
|
||||||
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
|
|
||||||
# or
|
|
||||||
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
|
|
||||||
# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
|
|
||||||
# should be set by the caller.
|
|
||||||
#
|
|
||||||
# The set of defined variables is at the end of this script.
|
|
||||||
|
|
||||||
# Known limitations:
|
|
||||||
# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
|
|
||||||
# than 256 bytes, otherwise the compiler driver will dump core. The only
|
|
||||||
# known workaround is to choose shorter directory names for the build
|
|
||||||
# directory and/or the installation directory.
|
|
||||||
|
|
||||||
# All known linkers require a '.a' archive for static linking (except MSVC,
|
|
||||||
# which needs '.lib').
|
|
||||||
libext=a
|
|
||||||
shrext=.so
|
|
||||||
|
|
||||||
host="$1"
|
|
||||||
host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
|
|
||||||
host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
|
|
||||||
host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
|
|
||||||
|
|
||||||
# Code taken from libtool.m4's _LT_CC_BASENAME.
|
|
||||||
|
|
||||||
for cc_temp in $CC""; do
|
|
||||||
case $cc_temp in
|
|
||||||
compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
|
|
||||||
distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
|
|
||||||
\-*) ;;
|
|
||||||
*) break;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'`
|
|
||||||
|
|
||||||
# Code taken from libtool.m4's _LT_COMPILER_PIC.
|
|
||||||
|
|
||||||
wl=
|
|
||||||
if test "$GCC" = yes; then
|
|
||||||
wl='-Wl,'
|
|
||||||
else
|
|
||||||
case "$host_os" in
|
|
||||||
aix*)
|
|
||||||
wl='-Wl,'
|
|
||||||
;;
|
|
||||||
mingw* | cygwin* | pw32* | os2* | cegcc*)
|
|
||||||
;;
|
|
||||||
hpux9* | hpux10* | hpux11*)
|
|
||||||
wl='-Wl,'
|
|
||||||
;;
|
|
||||||
irix5* | irix6* | nonstopux*)
|
|
||||||
wl='-Wl,'
|
|
||||||
;;
|
|
||||||
linux* | k*bsd*-gnu | kopensolaris*-gnu)
|
|
||||||
case $cc_basename in
|
|
||||||
ecc*)
|
|
||||||
wl='-Wl,'
|
|
||||||
;;
|
|
||||||
icc* | ifort*)
|
|
||||||
wl='-Wl,'
|
|
||||||
;;
|
|
||||||
lf95*)
|
|
||||||
wl='-Wl,'
|
|
||||||
;;
|
|
||||||
nagfor*)
|
|
||||||
wl='-Wl,-Wl,,'
|
|
||||||
;;
|
|
||||||
pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
|
|
||||||
wl='-Wl,'
|
|
||||||
;;
|
|
||||||
ccc*)
|
|
||||||
wl='-Wl,'
|
|
||||||
;;
|
|
||||||
xl* | bgxl* | bgf* | mpixl*)
|
|
||||||
wl='-Wl,'
|
|
||||||
;;
|
|
||||||
como)
|
|
||||||
wl='-lopt='
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
case `$CC -V 2>&1 | sed 5q` in
|
|
||||||
*Sun\ F* | *Sun*Fortran*)
|
|
||||||
wl=
|
|
||||||
;;
|
|
||||||
*Sun\ C*)
|
|
||||||
wl='-Wl,'
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
newsos6)
|
|
||||||
;;
|
|
||||||
*nto* | *qnx*)
|
|
||||||
;;
|
|
||||||
osf3* | osf4* | osf5*)
|
|
||||||
wl='-Wl,'
|
|
||||||
;;
|
|
||||||
rdos*)
|
|
||||||
;;
|
|
||||||
solaris*)
|
|
||||||
case $cc_basename in
|
|
||||||
f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
|
|
||||||
wl='-Qoption ld '
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
wl='-Wl,'
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
sunos4*)
|
|
||||||
wl='-Qoption ld '
|
|
||||||
;;
|
|
||||||
sysv4 | sysv4.2uw2* | sysv4.3*)
|
|
||||||
wl='-Wl,'
|
|
||||||
;;
|
|
||||||
sysv4*MP*)
|
|
||||||
;;
|
|
||||||
sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
|
|
||||||
wl='-Wl,'
|
|
||||||
;;
|
|
||||||
unicos*)
|
|
||||||
wl='-Wl,'
|
|
||||||
;;
|
|
||||||
uts4*)
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Code taken from libtool.m4's _LT_LINKER_SHLIBS.
|
|
||||||
|
|
||||||
hardcode_libdir_flag_spec=
|
|
||||||
hardcode_libdir_separator=
|
|
||||||
hardcode_direct=no
|
|
||||||
hardcode_minus_L=no
|
|
||||||
|
|
||||||
case "$host_os" in
|
|
||||||
cygwin* | mingw* | pw32* | cegcc*)
|
|
||||||
# FIXME: the MSVC++ port hasn't been tested in a loooong time
|
|
||||||
# When not using gcc, we currently assume that we are using
|
|
||||||
# Microsoft Visual C++.
|
|
||||||
if test "$GCC" != yes; then
|
|
||||||
with_gnu_ld=no
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
interix*)
|
|
||||||
# we just hope/assume this is gcc and not c89 (= MSVC++)
|
|
||||||
with_gnu_ld=yes
|
|
||||||
;;
|
|
||||||
openbsd*)
|
|
||||||
with_gnu_ld=no
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
ld_shlibs=yes
|
|
||||||
if test "$with_gnu_ld" = yes; then
|
|
||||||
# Set some defaults for GNU ld with shared library support. These
|
|
||||||
# are reset later if shared libraries are not supported. Putting them
|
|
||||||
# here allows them to be overridden if necessary.
|
|
||||||
# Unlike libtool, we use -rpath here, not --rpath, since the documented
|
|
||||||
# option of GNU ld is called -rpath, not --rpath.
|
|
||||||
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
|
||||||
case "$host_os" in
|
|
||||||
aix[3-9]*)
|
|
||||||
# On AIX/PPC, the GNU linker is very broken
|
|
||||||
if test "$host_cpu" != ia64; then
|
|
||||||
ld_shlibs=no
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
amigaos*)
|
|
||||||
case "$host_cpu" in
|
|
||||||
powerpc)
|
|
||||||
;;
|
|
||||||
m68k)
|
|
||||||
hardcode_libdir_flag_spec='-L$libdir'
|
|
||||||
hardcode_minus_L=yes
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
beos*)
|
|
||||||
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
|
|
||||||
:
|
|
||||||
else
|
|
||||||
ld_shlibs=no
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
cygwin* | mingw* | pw32* | cegcc*)
|
|
||||||
# hardcode_libdir_flag_spec is actually meaningless, as there is
|
|
||||||
# no search path for DLLs.
|
|
||||||
hardcode_libdir_flag_spec='-L$libdir'
|
|
||||||
if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
|
|
||||||
:
|
|
||||||
else
|
|
||||||
ld_shlibs=no
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
haiku*)
|
|
||||||
;;
|
|
||||||
interix[3-9]*)
|
|
||||||
hardcode_direct=no
|
|
||||||
hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
|
|
||||||
;;
|
|
||||||
gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
|
|
||||||
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
|
|
||||||
:
|
|
||||||
else
|
|
||||||
ld_shlibs=no
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
netbsd*)
|
|
||||||
;;
|
|
||||||
solaris*)
|
|
||||||
if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
|
|
||||||
ld_shlibs=no
|
|
||||||
elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
|
|
||||||
:
|
|
||||||
else
|
|
||||||
ld_shlibs=no
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
|
|
||||||
case `$LD -v 2>&1` in
|
|
||||||
*\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
|
|
||||||
ld_shlibs=no
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
|
|
||||||
hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
|
|
||||||
else
|
|
||||||
ld_shlibs=no
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
sunos4*)
|
|
||||||
hardcode_direct=yes
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
|
|
||||||
:
|
|
||||||
else
|
|
||||||
ld_shlibs=no
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
if test "$ld_shlibs" = no; then
|
|
||||||
hardcode_libdir_flag_spec=
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
case "$host_os" in
|
|
||||||
aix3*)
|
|
||||||
# Note: this linker hardcodes the directories in LIBPATH if there
|
|
||||||
# are no directories specified by -L.
|
|
||||||
hardcode_minus_L=yes
|
|
||||||
if test "$GCC" = yes; then
|
|
||||||
# Neither direct hardcoding nor static linking is supported with a
|
|
||||||
# broken collect2.
|
|
||||||
hardcode_direct=unsupported
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
aix[4-9]*)
|
|
||||||
if test "$host_cpu" = ia64; then
|
|
||||||
# On IA64, the linker does run time linking by default, so we don't
|
|
||||||
# have to do anything special.
|
|
||||||
aix_use_runtimelinking=no
|
|
||||||
else
|
|
||||||
aix_use_runtimelinking=no
|
|
||||||
# Test if we are trying to use run time linking or normal
|
|
||||||
# AIX style linking. If -brtl is somewhere in LDFLAGS, we
|
|
||||||
# need to do runtime linking.
|
|
||||||
case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
|
|
||||||
for ld_flag in $LDFLAGS; do
|
|
||||||
if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
|
|
||||||
aix_use_runtimelinking=yes
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
hardcode_direct=yes
|
|
||||||
hardcode_libdir_separator=':'
|
|
||||||
if test "$GCC" = yes; then
|
|
||||||
case $host_os in aix4.[012]|aix4.[012].*)
|
|
||||||
collect2name=`${CC} -print-prog-name=collect2`
|
|
||||||
if test -f "$collect2name" && \
|
|
||||||
strings "$collect2name" | grep resolve_lib_name >/dev/null
|
|
||||||
then
|
|
||||||
# We have reworked collect2
|
|
||||||
:
|
|
||||||
else
|
|
||||||
# We have old collect2
|
|
||||||
hardcode_direct=unsupported
|
|
||||||
hardcode_minus_L=yes
|
|
||||||
hardcode_libdir_flag_spec='-L$libdir'
|
|
||||||
hardcode_libdir_separator=
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
# Begin _LT_AC_SYS_LIBPATH_AIX.
|
|
||||||
echo 'int main () { return 0; }' > conftest.c
|
|
||||||
${CC} ${LDFLAGS} conftest.c -o conftest
|
|
||||||
aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
|
|
||||||
}'`
|
|
||||||
if test -z "$aix_libpath"; then
|
|
||||||
aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
|
|
||||||
}'`
|
|
||||||
fi
|
|
||||||
if test -z "$aix_libpath"; then
|
|
||||||
aix_libpath="/usr/lib:/lib"
|
|
||||||
fi
|
|
||||||
rm -f conftest.c conftest
|
|
||||||
# End _LT_AC_SYS_LIBPATH_AIX.
|
|
||||||
if test "$aix_use_runtimelinking" = yes; then
|
|
||||||
hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
|
|
||||||
else
|
|
||||||
if test "$host_cpu" = ia64; then
|
|
||||||
hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
|
|
||||||
else
|
|
||||||
hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
amigaos*)
|
|
||||||
case "$host_cpu" in
|
|
||||||
powerpc)
|
|
||||||
;;
|
|
||||||
m68k)
|
|
||||||
hardcode_libdir_flag_spec='-L$libdir'
|
|
||||||
hardcode_minus_L=yes
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
bsdi[45]*)
|
|
||||||
;;
|
|
||||||
cygwin* | mingw* | pw32* | cegcc*)
|
|
||||||
# When not using gcc, we currently assume that we are using
|
|
||||||
# Microsoft Visual C++.
|
|
||||||
# hardcode_libdir_flag_spec is actually meaningless, as there is
|
|
||||||
# no search path for DLLs.
|
|
||||||
hardcode_libdir_flag_spec=' '
|
|
||||||
libext=lib
|
|
||||||
;;
|
|
||||||
darwin* | rhapsody*)
|
|
||||||
hardcode_direct=no
|
|
||||||
if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then
|
|
||||||
:
|
|
||||||
else
|
|
||||||
ld_shlibs=no
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
dgux*)
|
|
||||||
hardcode_libdir_flag_spec='-L$libdir'
|
|
||||||
;;
|
|
||||||
freebsd2.2*)
|
|
||||||
hardcode_libdir_flag_spec='-R$libdir'
|
|
||||||
hardcode_direct=yes
|
|
||||||
;;
|
|
||||||
freebsd2*)
|
|
||||||
hardcode_direct=yes
|
|
||||||
hardcode_minus_L=yes
|
|
||||||
;;
|
|
||||||
freebsd* | dragonfly*)
|
|
||||||
hardcode_libdir_flag_spec='-R$libdir'
|
|
||||||
hardcode_direct=yes
|
|
||||||
;;
|
|
||||||
hpux9*)
|
|
||||||
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
|
|
||||||
hardcode_libdir_separator=:
|
|
||||||
hardcode_direct=yes
|
|
||||||
# hardcode_minus_L: Not really in the search PATH,
|
|
||||||
# but as the default location of the library.
|
|
||||||
hardcode_minus_L=yes
|
|
||||||
;;
|
|
||||||
hpux10*)
|
|
||||||
if test "$with_gnu_ld" = no; then
|
|
||||||
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
|
|
||||||
hardcode_libdir_separator=:
|
|
||||||
hardcode_direct=yes
|
|
||||||
# hardcode_minus_L: Not really in the search PATH,
|
|
||||||
# but as the default location of the library.
|
|
||||||
hardcode_minus_L=yes
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
hpux11*)
|
|
||||||
if test "$with_gnu_ld" = no; then
|
|
||||||
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
|
|
||||||
hardcode_libdir_separator=:
|
|
||||||
case $host_cpu in
|
|
||||||
hppa*64*|ia64*)
|
|
||||||
hardcode_direct=no
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
hardcode_direct=yes
|
|
||||||
# hardcode_minus_L: Not really in the search PATH,
|
|
||||||
# but as the default location of the library.
|
|
||||||
hardcode_minus_L=yes
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
irix5* | irix6* | nonstopux*)
|
|
||||||
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
|
||||||
hardcode_libdir_separator=:
|
|
||||||
;;
|
|
||||||
netbsd*)
|
|
||||||
hardcode_libdir_flag_spec='-R$libdir'
|
|
||||||
hardcode_direct=yes
|
|
||||||
;;
|
|
||||||
newsos6)
|
|
||||||
hardcode_direct=yes
|
|
||||||
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
|
||||||
hardcode_libdir_separator=:
|
|
||||||
;;
|
|
||||||
*nto* | *qnx*)
|
|
||||||
;;
|
|
||||||
openbsd*)
|
|
||||||
if test -f /usr/libexec/ld.so; then
|
|
||||||
hardcode_direct=yes
|
|
||||||
if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
|
|
||||||
hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
|
|
||||||
else
|
|
||||||
case "$host_os" in
|
|
||||||
openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
|
|
||||||
hardcode_libdir_flag_spec='-R$libdir'
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
ld_shlibs=no
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
os2*)
|
|
||||||
hardcode_libdir_flag_spec='-L$libdir'
|
|
||||||
hardcode_minus_L=yes
|
|
||||||
;;
|
|
||||||
osf3*)
|
|
||||||
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
|
||||||
hardcode_libdir_separator=:
|
|
||||||
;;
|
|
||||||
osf4* | osf5*)
|
|
||||||
if test "$GCC" = yes; then
|
|
||||||
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
|
||||||
else
|
|
||||||
# Both cc and cxx compiler support -rpath directly
|
|
||||||
hardcode_libdir_flag_spec='-rpath $libdir'
|
|
||||||
fi
|
|
||||||
hardcode_libdir_separator=:
|
|
||||||
;;
|
|
||||||
solaris*)
|
|
||||||
hardcode_libdir_flag_spec='-R$libdir'
|
|
||||||
;;
|
|
||||||
sunos4*)
|
|
||||||
hardcode_libdir_flag_spec='-L$libdir'
|
|
||||||
hardcode_direct=yes
|
|
||||||
hardcode_minus_L=yes
|
|
||||||
;;
|
|
||||||
sysv4)
|
|
||||||
case $host_vendor in
|
|
||||||
sni)
|
|
||||||
hardcode_direct=yes # is this really true???
|
|
||||||
;;
|
|
||||||
siemens)
|
|
||||||
hardcode_direct=no
|
|
||||||
;;
|
|
||||||
motorola)
|
|
||||||
hardcode_direct=no #Motorola manual says yes, but my tests say they lie
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
sysv4.3*)
|
|
||||||
;;
|
|
||||||
sysv4*MP*)
|
|
||||||
if test -d /usr/nec; then
|
|
||||||
ld_shlibs=yes
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
|
|
||||||
;;
|
|
||||||
sysv5* | sco3.2v5* | sco5v6*)
|
|
||||||
hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
|
|
||||||
hardcode_libdir_separator=':'
|
|
||||||
;;
|
|
||||||
uts4*)
|
|
||||||
hardcode_libdir_flag_spec='-L$libdir'
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
ld_shlibs=no
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Check dynamic linker characteristics
|
|
||||||
# Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER.
|
|
||||||
# Unlike libtool.m4, here we don't care about _all_ names of the library, but
|
|
||||||
# only about the one the linker finds when passed -lNAME. This is the last
|
|
||||||
# element of library_names_spec in libtool.m4, or possibly two of them if the
|
|
||||||
# linker has special search rules.
|
|
||||||
library_names_spec= # the last element of library_names_spec in libtool.m4
|
|
||||||
libname_spec='lib$name'
|
|
||||||
case "$host_os" in
|
|
||||||
aix3*)
|
|
||||||
library_names_spec='$libname.a'
|
|
||||||
;;
|
|
||||||
aix[4-9]*)
|
|
||||||
library_names_spec='$libname$shrext'
|
|
||||||
;;
|
|
||||||
amigaos*)
|
|
||||||
case "$host_cpu" in
|
|
||||||
powerpc*)
|
|
||||||
library_names_spec='$libname$shrext' ;;
|
|
||||||
m68k)
|
|
||||||
library_names_spec='$libname.a' ;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
beos*)
|
|
||||||
library_names_spec='$libname$shrext'
|
|
||||||
;;
|
|
||||||
bsdi[45]*)
|
|
||||||
library_names_spec='$libname$shrext'
|
|
||||||
;;
|
|
||||||
cygwin* | mingw* | pw32* | cegcc*)
|
|
||||||
shrext=.dll
|
|
||||||
library_names_spec='$libname.dll.a $libname.lib'
|
|
||||||
;;
|
|
||||||
darwin* | rhapsody*)
|
|
||||||
shrext=.dylib
|
|
||||||
library_names_spec='$libname$shrext'
|
|
||||||
;;
|
|
||||||
dgux*)
|
|
||||||
library_names_spec='$libname$shrext'
|
|
||||||
;;
|
|
||||||
freebsd* | dragonfly*)
|
|
||||||
case "$host_os" in
|
|
||||||
freebsd[123]*)
|
|
||||||
library_names_spec='$libname$shrext$versuffix' ;;
|
|
||||||
*)
|
|
||||||
library_names_spec='$libname$shrext' ;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
gnu*)
|
|
||||||
library_names_spec='$libname$shrext'
|
|
||||||
;;
|
|
||||||
haiku*)
|
|
||||||
library_names_spec='$libname$shrext'
|
|
||||||
;;
|
|
||||||
hpux9* | hpux10* | hpux11*)
|
|
||||||
case $host_cpu in
|
|
||||||
ia64*)
|
|
||||||
shrext=.so
|
|
||||||
;;
|
|
||||||
hppa*64*)
|
|
||||||
shrext=.sl
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
shrext=.sl
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
library_names_spec='$libname$shrext'
|
|
||||||
;;
|
|
||||||
interix[3-9]*)
|
|
||||||
library_names_spec='$libname$shrext'
|
|
||||||
;;
|
|
||||||
irix5* | irix6* | nonstopux*)
|
|
||||||
library_names_spec='$libname$shrext'
|
|
||||||
case "$host_os" in
|
|
||||||
irix5* | nonstopux*)
|
|
||||||
libsuff= shlibsuff=
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
case $LD in
|
|
||||||
*-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
|
|
||||||
*-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
|
|
||||||
*-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
|
|
||||||
*) libsuff= shlibsuff= ;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
linux*oldld* | linux*aout* | linux*coff*)
|
|
||||||
;;
|
|
||||||
linux* | k*bsd*-gnu | kopensolaris*-gnu)
|
|
||||||
library_names_spec='$libname$shrext'
|
|
||||||
;;
|
|
||||||
knetbsd*-gnu)
|
|
||||||
library_names_spec='$libname$shrext'
|
|
||||||
;;
|
|
||||||
netbsd*)
|
|
||||||
library_names_spec='$libname$shrext'
|
|
||||||
;;
|
|
||||||
newsos6)
|
|
||||||
library_names_spec='$libname$shrext'
|
|
||||||
;;
|
|
||||||
*nto* | *qnx*)
|
|
||||||
library_names_spec='$libname$shrext'
|
|
||||||
;;
|
|
||||||
openbsd*)
|
|
||||||
library_names_spec='$libname$shrext$versuffix'
|
|
||||||
;;
|
|
||||||
os2*)
|
|
||||||
libname_spec='$name'
|
|
||||||
shrext=.dll
|
|
||||||
library_names_spec='$libname.a'
|
|
||||||
;;
|
|
||||||
osf3* | osf4* | osf5*)
|
|
||||||
library_names_spec='$libname$shrext'
|
|
||||||
;;
|
|
||||||
rdos*)
|
|
||||||
;;
|
|
||||||
solaris*)
|
|
||||||
library_names_spec='$libname$shrext'
|
|
||||||
;;
|
|
||||||
sunos4*)
|
|
||||||
library_names_spec='$libname$shrext$versuffix'
|
|
||||||
;;
|
|
||||||
sysv4 | sysv4.3*)
|
|
||||||
library_names_spec='$libname$shrext'
|
|
||||||
;;
|
|
||||||
sysv4*MP*)
|
|
||||||
library_names_spec='$libname$shrext'
|
|
||||||
;;
|
|
||||||
sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
|
|
||||||
library_names_spec='$libname$shrext'
|
|
||||||
;;
|
|
||||||
tpf*)
|
|
||||||
library_names_spec='$libname$shrext'
|
|
||||||
;;
|
|
||||||
uts4*)
|
|
||||||
library_names_spec='$libname$shrext'
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
|
|
||||||
escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
|
|
||||||
shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
|
|
||||||
escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
|
|
||||||
escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
|
|
||||||
escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
|
|
||||||
|
|
||||||
LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
|
|
||||||
|
|
||||||
# How to pass a linker flag through the compiler.
|
|
||||||
wl="$escaped_wl"
|
|
||||||
|
|
||||||
# Static library suffix (normally "a").
|
|
||||||
libext="$libext"
|
|
||||||
|
|
||||||
# Shared library suffix (normally "so").
|
|
||||||
shlibext="$shlibext"
|
|
||||||
|
|
||||||
# Format of library name prefix.
|
|
||||||
libname_spec="$escaped_libname_spec"
|
|
||||||
|
|
||||||
# Library names that the linker finds when passed -lNAME.
|
|
||||||
library_names_spec="$escaped_library_names_spec"
|
|
||||||
|
|
||||||
# Flag to hardcode \$libdir into a binary during linking.
|
|
||||||
# This must work even if \$libdir does not exist.
|
|
||||||
hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
|
|
||||||
|
|
||||||
# Whether we need a single -rpath flag with a separated argument.
|
|
||||||
hardcode_libdir_separator="$hardcode_libdir_separator"
|
|
||||||
|
|
||||||
# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
|
|
||||||
# resulting binary.
|
|
||||||
hardcode_direct="$hardcode_direct"
|
|
||||||
|
|
||||||
# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
|
|
||||||
# resulting binary.
|
|
||||||
hardcode_minus_L="$hardcode_minus_L"
|
|
||||||
|
|
||||||
EOF
|
|
||||||
Vendored
-1890
File diff suppressed because it is too large
Load Diff
@@ -1,791 +0,0 @@
|
|||||||
#! /bin/sh
|
|
||||||
# depcomp - compile a program generating dependencies as side-effects
|
|
||||||
|
|
||||||
scriptversion=2018-03-07.03; # UTC
|
|
||||||
|
|
||||||
# Copyright (C) 1999-2021 Free Software Foundation, Inc.
|
|
||||||
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2, or (at your option)
|
|
||||||
# any later version.
|
|
||||||
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
# As a special exception to the GNU General Public License, if you
|
|
||||||
# distribute this file as part of a program that contains a
|
|
||||||
# configuration script generated by Autoconf, you may include it under
|
|
||||||
# the same distribution terms that you use for the rest of that program.
|
|
||||||
|
|
||||||
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
|
|
||||||
|
|
||||||
case $1 in
|
|
||||||
'')
|
|
||||||
echo "$0: No command. Try '$0 --help' for more information." 1>&2
|
|
||||||
exit 1;
|
|
||||||
;;
|
|
||||||
-h | --h*)
|
|
||||||
cat <<\EOF
|
|
||||||
Usage: depcomp [--help] [--version] PROGRAM [ARGS]
|
|
||||||
|
|
||||||
Run PROGRAMS ARGS to compile a file, generating dependencies
|
|
||||||
as side-effects.
|
|
||||||
|
|
||||||
Environment variables:
|
|
||||||
depmode Dependency tracking mode.
|
|
||||||
source Source file read by 'PROGRAMS ARGS'.
|
|
||||||
object Object file output by 'PROGRAMS ARGS'.
|
|
||||||
DEPDIR directory where to store dependencies.
|
|
||||||
depfile Dependency file to output.
|
|
||||||
tmpdepfile Temporary file to use when outputting dependencies.
|
|
||||||
libtool Whether libtool is used (yes/no).
|
|
||||||
|
|
||||||
Report bugs to <bug-automake@gnu.org>.
|
|
||||||
EOF
|
|
||||||
exit $?
|
|
||||||
;;
|
|
||||||
-v | --v*)
|
|
||||||
echo "depcomp $scriptversion"
|
|
||||||
exit $?
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# Get the directory component of the given path, and save it in the
|
|
||||||
# global variables '$dir'. Note that this directory component will
|
|
||||||
# be either empty or ending with a '/' character. This is deliberate.
|
|
||||||
set_dir_from ()
|
|
||||||
{
|
|
||||||
case $1 in
|
|
||||||
*/*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
|
|
||||||
*) dir=;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
# Get the suffix-stripped basename of the given path, and save it the
|
|
||||||
# global variable '$base'.
|
|
||||||
set_base_from ()
|
|
||||||
{
|
|
||||||
base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
|
|
||||||
}
|
|
||||||
|
|
||||||
# If no dependency file was actually created by the compiler invocation,
|
|
||||||
# we still have to create a dummy depfile, to avoid errors with the
|
|
||||||
# Makefile "include basename.Plo" scheme.
|
|
||||||
make_dummy_depfile ()
|
|
||||||
{
|
|
||||||
echo "#dummy" > "$depfile"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Factor out some common post-processing of the generated depfile.
|
|
||||||
# Requires the auxiliary global variable '$tmpdepfile' to be set.
|
|
||||||
aix_post_process_depfile ()
|
|
||||||
{
|
|
||||||
# If the compiler actually managed to produce a dependency file,
|
|
||||||
# post-process it.
|
|
||||||
if test -f "$tmpdepfile"; then
|
|
||||||
# Each line is of the form 'foo.o: dependency.h'.
|
|
||||||
# Do two passes, one to just change these to
|
|
||||||
# $object: dependency.h
|
|
||||||
# and one to simply output
|
|
||||||
# dependency.h:
|
|
||||||
# which is needed to avoid the deleted-header problem.
|
|
||||||
{ sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
|
|
||||||
sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
|
|
||||||
} > "$depfile"
|
|
||||||
rm -f "$tmpdepfile"
|
|
||||||
else
|
|
||||||
make_dummy_depfile
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# A tabulation character.
|
|
||||||
tab=' '
|
|
||||||
# A newline character.
|
|
||||||
nl='
|
|
||||||
'
|
|
||||||
# Character ranges might be problematic outside the C locale.
|
|
||||||
# These definitions help.
|
|
||||||
upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
|
|
||||||
lower=abcdefghijklmnopqrstuvwxyz
|
|
||||||
digits=0123456789
|
|
||||||
alpha=${upper}${lower}
|
|
||||||
|
|
||||||
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
|
|
||||||
echo "depcomp: Variables source, object and depmode must be set" 1>&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
|
|
||||||
depfile=${depfile-`echo "$object" |
|
|
||||||
sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
|
|
||||||
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
|
|
||||||
|
|
||||||
rm -f "$tmpdepfile"
|
|
||||||
|
|
||||||
# Avoid interferences from the environment.
|
|
||||||
gccflag= dashmflag=
|
|
||||||
|
|
||||||
# Some modes work just like other modes, but use different flags. We
|
|
||||||
# parameterize here, but still list the modes in the big case below,
|
|
||||||
# to make depend.m4 easier to write. Note that we *cannot* use a case
|
|
||||||
# here, because this file can only contain one case statement.
|
|
||||||
if test "$depmode" = hp; then
|
|
||||||
# HP compiler uses -M and no extra arg.
|
|
||||||
gccflag=-M
|
|
||||||
depmode=gcc
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "$depmode" = dashXmstdout; then
|
|
||||||
# This is just like dashmstdout with a different argument.
|
|
||||||
dashmflag=-xM
|
|
||||||
depmode=dashmstdout
|
|
||||||
fi
|
|
||||||
|
|
||||||
cygpath_u="cygpath -u -f -"
|
|
||||||
if test "$depmode" = msvcmsys; then
|
|
||||||
# This is just like msvisualcpp but w/o cygpath translation.
|
|
||||||
# Just convert the backslash-escaped backslashes to single forward
|
|
||||||
# slashes to satisfy depend.m4
|
|
||||||
cygpath_u='sed s,\\\\,/,g'
|
|
||||||
depmode=msvisualcpp
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "$depmode" = msvc7msys; then
|
|
||||||
# This is just like msvc7 but w/o cygpath translation.
|
|
||||||
# Just convert the backslash-escaped backslashes to single forward
|
|
||||||
# slashes to satisfy depend.m4
|
|
||||||
cygpath_u='sed s,\\\\,/,g'
|
|
||||||
depmode=msvc7
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "$depmode" = xlc; then
|
|
||||||
# IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
|
|
||||||
gccflag=-qmakedep=gcc,-MF
|
|
||||||
depmode=gcc
|
|
||||||
fi
|
|
||||||
|
|
||||||
case "$depmode" in
|
|
||||||
gcc3)
|
|
||||||
## gcc 3 implements dependency tracking that does exactly what
|
|
||||||
## we want. Yay! Note: for some reason libtool 1.4 doesn't like
|
|
||||||
## it if -MD -MP comes after the -MF stuff. Hmm.
|
|
||||||
## Unfortunately, FreeBSD c89 acceptance of flags depends upon
|
|
||||||
## the command line argument order; so add the flags where they
|
|
||||||
## appear in depend2.am. Note that the slowdown incurred here
|
|
||||||
## affects only configure: in makefiles, %FASTDEP% shortcuts this.
|
|
||||||
for arg
|
|
||||||
do
|
|
||||||
case $arg in
|
|
||||||
-c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
|
|
||||||
*) set fnord "$@" "$arg" ;;
|
|
||||||
esac
|
|
||||||
shift # fnord
|
|
||||||
shift # $arg
|
|
||||||
done
|
|
||||||
"$@"
|
|
||||||
stat=$?
|
|
||||||
if test $stat -ne 0; then
|
|
||||||
rm -f "$tmpdepfile"
|
|
||||||
exit $stat
|
|
||||||
fi
|
|
||||||
mv "$tmpdepfile" "$depfile"
|
|
||||||
;;
|
|
||||||
|
|
||||||
gcc)
|
|
||||||
## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
|
|
||||||
## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
|
|
||||||
## (see the conditional assignment to $gccflag above).
|
|
||||||
## There are various ways to get dependency output from gcc. Here's
|
|
||||||
## why we pick this rather obscure method:
|
|
||||||
## - Don't want to use -MD because we'd like the dependencies to end
|
|
||||||
## up in a subdir. Having to rename by hand is ugly.
|
|
||||||
## (We might end up doing this anyway to support other compilers.)
|
|
||||||
## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
|
|
||||||
## -MM, not -M (despite what the docs say). Also, it might not be
|
|
||||||
## supported by the other compilers which use the 'gcc' depmode.
|
|
||||||
## - Using -M directly means running the compiler twice (even worse
|
|
||||||
## than renaming).
|
|
||||||
if test -z "$gccflag"; then
|
|
||||||
gccflag=-MD,
|
|
||||||
fi
|
|
||||||
"$@" -Wp,"$gccflag$tmpdepfile"
|
|
||||||
stat=$?
|
|
||||||
if test $stat -ne 0; then
|
|
||||||
rm -f "$tmpdepfile"
|
|
||||||
exit $stat
|
|
||||||
fi
|
|
||||||
rm -f "$depfile"
|
|
||||||
echo "$object : \\" > "$depfile"
|
|
||||||
# The second -e expression handles DOS-style file names with drive
|
|
||||||
# letters.
|
|
||||||
sed -e 's/^[^:]*: / /' \
|
|
||||||
-e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
|
|
||||||
## This next piece of magic avoids the "deleted header file" problem.
|
|
||||||
## The problem is that when a header file which appears in a .P file
|
|
||||||
## is deleted, the dependency causes make to die (because there is
|
|
||||||
## typically no way to rebuild the header). We avoid this by adding
|
|
||||||
## dummy dependencies for each header file. Too bad gcc doesn't do
|
|
||||||
## this for us directly.
|
|
||||||
## Some versions of gcc put a space before the ':'. On the theory
|
|
||||||
## that the space means something, we add a space to the output as
|
|
||||||
## well. hp depmode also adds that space, but also prefixes the VPATH
|
|
||||||
## to the object. Take care to not repeat it in the output.
|
|
||||||
## Some versions of the HPUX 10.20 sed can't process this invocation
|
|
||||||
## correctly. Breaking it into two sed invocations is a workaround.
|
|
||||||
tr ' ' "$nl" < "$tmpdepfile" \
|
|
||||||
| sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
|
|
||||||
| sed -e 's/$/ :/' >> "$depfile"
|
|
||||||
rm -f "$tmpdepfile"
|
|
||||||
;;
|
|
||||||
|
|
||||||
hp)
|
|
||||||
# This case exists only to let depend.m4 do its work. It works by
|
|
||||||
# looking at the text of this script. This case will never be run,
|
|
||||||
# since it is checked for above.
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
|
|
||||||
sgi)
|
|
||||||
if test "$libtool" = yes; then
|
|
||||||
"$@" "-Wp,-MDupdate,$tmpdepfile"
|
|
||||||
else
|
|
||||||
"$@" -MDupdate "$tmpdepfile"
|
|
||||||
fi
|
|
||||||
stat=$?
|
|
||||||
if test $stat -ne 0; then
|
|
||||||
rm -f "$tmpdepfile"
|
|
||||||
exit $stat
|
|
||||||
fi
|
|
||||||
rm -f "$depfile"
|
|
||||||
|
|
||||||
if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
|
|
||||||
echo "$object : \\" > "$depfile"
|
|
||||||
# Clip off the initial element (the dependent). Don't try to be
|
|
||||||
# clever and replace this with sed code, as IRIX sed won't handle
|
|
||||||
# lines with more than a fixed number of characters (4096 in
|
|
||||||
# IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
|
|
||||||
# the IRIX cc adds comments like '#:fec' to the end of the
|
|
||||||
# dependency line.
|
|
||||||
tr ' ' "$nl" < "$tmpdepfile" \
|
|
||||||
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
|
|
||||||
| tr "$nl" ' ' >> "$depfile"
|
|
||||||
echo >> "$depfile"
|
|
||||||
# The second pass generates a dummy entry for each header file.
|
|
||||||
tr ' ' "$nl" < "$tmpdepfile" \
|
|
||||||
| sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
|
|
||||||
>> "$depfile"
|
|
||||||
else
|
|
||||||
make_dummy_depfile
|
|
||||||
fi
|
|
||||||
rm -f "$tmpdepfile"
|
|
||||||
;;
|
|
||||||
|
|
||||||
xlc)
|
|
||||||
# This case exists only to let depend.m4 do its work. It works by
|
|
||||||
# looking at the text of this script. This case will never be run,
|
|
||||||
# since it is checked for above.
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
|
|
||||||
aix)
|
|
||||||
# The C for AIX Compiler uses -M and outputs the dependencies
|
|
||||||
# in a .u file. In older versions, this file always lives in the
|
|
||||||
# current directory. Also, the AIX compiler puts '$object:' at the
|
|
||||||
# start of each line; $object doesn't have directory information.
|
|
||||||
# Version 6 uses the directory in both cases.
|
|
||||||
set_dir_from "$object"
|
|
||||||
set_base_from "$object"
|
|
||||||
if test "$libtool" = yes; then
|
|
||||||
tmpdepfile1=$dir$base.u
|
|
||||||
tmpdepfile2=$base.u
|
|
||||||
tmpdepfile3=$dir.libs/$base.u
|
|
||||||
"$@" -Wc,-M
|
|
||||||
else
|
|
||||||
tmpdepfile1=$dir$base.u
|
|
||||||
tmpdepfile2=$dir$base.u
|
|
||||||
tmpdepfile3=$dir$base.u
|
|
||||||
"$@" -M
|
|
||||||
fi
|
|
||||||
stat=$?
|
|
||||||
if test $stat -ne 0; then
|
|
||||||
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
|
|
||||||
exit $stat
|
|
||||||
fi
|
|
||||||
|
|
||||||
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
|
|
||||||
do
|
|
||||||
test -f "$tmpdepfile" && break
|
|
||||||
done
|
|
||||||
aix_post_process_depfile
|
|
||||||
;;
|
|
||||||
|
|
||||||
tcc)
|
|
||||||
# tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
|
|
||||||
# FIXME: That version still under development at the moment of writing.
|
|
||||||
# Make that this statement remains true also for stable, released
|
|
||||||
# versions.
|
|
||||||
# It will wrap lines (doesn't matter whether long or short) with a
|
|
||||||
# trailing '\', as in:
|
|
||||||
#
|
|
||||||
# foo.o : \
|
|
||||||
# foo.c \
|
|
||||||
# foo.h \
|
|
||||||
#
|
|
||||||
# It will put a trailing '\' even on the last line, and will use leading
|
|
||||||
# spaces rather than leading tabs (at least since its commit 0394caf7
|
|
||||||
# "Emit spaces for -MD").
|
|
||||||
"$@" -MD -MF "$tmpdepfile"
|
|
||||||
stat=$?
|
|
||||||
if test $stat -ne 0; then
|
|
||||||
rm -f "$tmpdepfile"
|
|
||||||
exit $stat
|
|
||||||
fi
|
|
||||||
rm -f "$depfile"
|
|
||||||
# Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
|
|
||||||
# We have to change lines of the first kind to '$object: \'.
|
|
||||||
sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
|
|
||||||
# And for each line of the second kind, we have to emit a 'dep.h:'
|
|
||||||
# dummy dependency, to avoid the deleted-header problem.
|
|
||||||
sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
|
|
||||||
rm -f "$tmpdepfile"
|
|
||||||
;;
|
|
||||||
|
|
||||||
## The order of this option in the case statement is important, since the
|
|
||||||
## shell code in configure will try each of these formats in the order
|
|
||||||
## listed in this file. A plain '-MD' option would be understood by many
|
|
||||||
## compilers, so we must ensure this comes after the gcc and icc options.
|
|
||||||
pgcc)
|
|
||||||
# Portland's C compiler understands '-MD'.
|
|
||||||
# Will always output deps to 'file.d' where file is the root name of the
|
|
||||||
# source file under compilation, even if file resides in a subdirectory.
|
|
||||||
# The object file name does not affect the name of the '.d' file.
|
|
||||||
# pgcc 10.2 will output
|
|
||||||
# foo.o: sub/foo.c sub/foo.h
|
|
||||||
# and will wrap long lines using '\' :
|
|
||||||
# foo.o: sub/foo.c ... \
|
|
||||||
# sub/foo.h ... \
|
|
||||||
# ...
|
|
||||||
set_dir_from "$object"
|
|
||||||
# Use the source, not the object, to determine the base name, since
|
|
||||||
# that's sadly what pgcc will do too.
|
|
||||||
set_base_from "$source"
|
|
||||||
tmpdepfile=$base.d
|
|
||||||
|
|
||||||
# For projects that build the same source file twice into different object
|
|
||||||
# files, the pgcc approach of using the *source* file root name can cause
|
|
||||||
# problems in parallel builds. Use a locking strategy to avoid stomping on
|
|
||||||
# the same $tmpdepfile.
|
|
||||||
lockdir=$base.d-lock
|
|
||||||
trap "
|
|
||||||
echo '$0: caught signal, cleaning up...' >&2
|
|
||||||
rmdir '$lockdir'
|
|
||||||
exit 1
|
|
||||||
" 1 2 13 15
|
|
||||||
numtries=100
|
|
||||||
i=$numtries
|
|
||||||
while test $i -gt 0; do
|
|
||||||
# mkdir is a portable test-and-set.
|
|
||||||
if mkdir "$lockdir" 2>/dev/null; then
|
|
||||||
# This process acquired the lock.
|
|
||||||
"$@" -MD
|
|
||||||
stat=$?
|
|
||||||
# Release the lock.
|
|
||||||
rmdir "$lockdir"
|
|
||||||
break
|
|
||||||
else
|
|
||||||
# If the lock is being held by a different process, wait
|
|
||||||
# until the winning process is done or we timeout.
|
|
||||||
while test -d "$lockdir" && test $i -gt 0; do
|
|
||||||
sleep 1
|
|
||||||
i=`expr $i - 1`
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
i=`expr $i - 1`
|
|
||||||
done
|
|
||||||
trap - 1 2 13 15
|
|
||||||
if test $i -le 0; then
|
|
||||||
echo "$0: failed to acquire lock after $numtries attempts" >&2
|
|
||||||
echo "$0: check lockdir '$lockdir'" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test $stat -ne 0; then
|
|
||||||
rm -f "$tmpdepfile"
|
|
||||||
exit $stat
|
|
||||||
fi
|
|
||||||
rm -f "$depfile"
|
|
||||||
# Each line is of the form `foo.o: dependent.h',
|
|
||||||
# or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
|
|
||||||
# Do two passes, one to just change these to
|
|
||||||
# `$object: dependent.h' and one to simply `dependent.h:'.
|
|
||||||
sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
|
|
||||||
# Some versions of the HPUX 10.20 sed can't process this invocation
|
|
||||||
# correctly. Breaking it into two sed invocations is a workaround.
|
|
||||||
sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
|
|
||||||
| sed -e 's/$/ :/' >> "$depfile"
|
|
||||||
rm -f "$tmpdepfile"
|
|
||||||
;;
|
|
||||||
|
|
||||||
hp2)
|
|
||||||
# The "hp" stanza above does not work with aCC (C++) and HP's ia64
|
|
||||||
# compilers, which have integrated preprocessors. The correct option
|
|
||||||
# to use with these is +Maked; it writes dependencies to a file named
|
|
||||||
# 'foo.d', which lands next to the object file, wherever that
|
|
||||||
# happens to be.
|
|
||||||
# Much of this is similar to the tru64 case; see comments there.
|
|
||||||
set_dir_from "$object"
|
|
||||||
set_base_from "$object"
|
|
||||||
if test "$libtool" = yes; then
|
|
||||||
tmpdepfile1=$dir$base.d
|
|
||||||
tmpdepfile2=$dir.libs/$base.d
|
|
||||||
"$@" -Wc,+Maked
|
|
||||||
else
|
|
||||||
tmpdepfile1=$dir$base.d
|
|
||||||
tmpdepfile2=$dir$base.d
|
|
||||||
"$@" +Maked
|
|
||||||
fi
|
|
||||||
stat=$?
|
|
||||||
if test $stat -ne 0; then
|
|
||||||
rm -f "$tmpdepfile1" "$tmpdepfile2"
|
|
||||||
exit $stat
|
|
||||||
fi
|
|
||||||
|
|
||||||
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
|
|
||||||
do
|
|
||||||
test -f "$tmpdepfile" && break
|
|
||||||
done
|
|
||||||
if test -f "$tmpdepfile"; then
|
|
||||||
sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
|
|
||||||
# Add 'dependent.h:' lines.
|
|
||||||
sed -ne '2,${
|
|
||||||
s/^ *//
|
|
||||||
s/ \\*$//
|
|
||||||
s/$/:/
|
|
||||||
p
|
|
||||||
}' "$tmpdepfile" >> "$depfile"
|
|
||||||
else
|
|
||||||
make_dummy_depfile
|
|
||||||
fi
|
|
||||||
rm -f "$tmpdepfile" "$tmpdepfile2"
|
|
||||||
;;
|
|
||||||
|
|
||||||
tru64)
|
|
||||||
# The Tru64 compiler uses -MD to generate dependencies as a side
|
|
||||||
# effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
|
|
||||||
# At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
|
|
||||||
# dependencies in 'foo.d' instead, so we check for that too.
|
|
||||||
# Subdirectories are respected.
|
|
||||||
set_dir_from "$object"
|
|
||||||
set_base_from "$object"
|
|
||||||
|
|
||||||
if test "$libtool" = yes; then
|
|
||||||
# Libtool generates 2 separate objects for the 2 libraries. These
|
|
||||||
# two compilations output dependencies in $dir.libs/$base.o.d and
|
|
||||||
# in $dir$base.o.d. We have to check for both files, because
|
|
||||||
# one of the two compilations can be disabled. We should prefer
|
|
||||||
# $dir$base.o.d over $dir.libs/$base.o.d because the latter is
|
|
||||||
# automatically cleaned when .libs/ is deleted, while ignoring
|
|
||||||
# the former would cause a distcleancheck panic.
|
|
||||||
tmpdepfile1=$dir$base.o.d # libtool 1.5
|
|
||||||
tmpdepfile2=$dir.libs/$base.o.d # Likewise.
|
|
||||||
tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504
|
|
||||||
"$@" -Wc,-MD
|
|
||||||
else
|
|
||||||
tmpdepfile1=$dir$base.d
|
|
||||||
tmpdepfile2=$dir$base.d
|
|
||||||
tmpdepfile3=$dir$base.d
|
|
||||||
"$@" -MD
|
|
||||||
fi
|
|
||||||
|
|
||||||
stat=$?
|
|
||||||
if test $stat -ne 0; then
|
|
||||||
rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
|
|
||||||
exit $stat
|
|
||||||
fi
|
|
||||||
|
|
||||||
for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
|
|
||||||
do
|
|
||||||
test -f "$tmpdepfile" && break
|
|
||||||
done
|
|
||||||
# Same post-processing that is required for AIX mode.
|
|
||||||
aix_post_process_depfile
|
|
||||||
;;
|
|
||||||
|
|
||||||
msvc7)
|
|
||||||
if test "$libtool" = yes; then
|
|
||||||
showIncludes=-Wc,-showIncludes
|
|
||||||
else
|
|
||||||
showIncludes=-showIncludes
|
|
||||||
fi
|
|
||||||
"$@" $showIncludes > "$tmpdepfile"
|
|
||||||
stat=$?
|
|
||||||
grep -v '^Note: including file: ' "$tmpdepfile"
|
|
||||||
if test $stat -ne 0; then
|
|
||||||
rm -f "$tmpdepfile"
|
|
||||||
exit $stat
|
|
||||||
fi
|
|
||||||
rm -f "$depfile"
|
|
||||||
echo "$object : \\" > "$depfile"
|
|
||||||
# The first sed program below extracts the file names and escapes
|
|
||||||
# backslashes for cygpath. The second sed program outputs the file
|
|
||||||
# name when reading, but also accumulates all include files in the
|
|
||||||
# hold buffer in order to output them again at the end. This only
|
|
||||||
# works with sed implementations that can handle large buffers.
|
|
||||||
sed < "$tmpdepfile" -n '
|
|
||||||
/^Note: including file: *\(.*\)/ {
|
|
||||||
s//\1/
|
|
||||||
s/\\/\\\\/g
|
|
||||||
p
|
|
||||||
}' | $cygpath_u | sort -u | sed -n '
|
|
||||||
s/ /\\ /g
|
|
||||||
s/\(.*\)/'"$tab"'\1 \\/p
|
|
||||||
s/.\(.*\) \\/\1:/
|
|
||||||
H
|
|
||||||
$ {
|
|
||||||
s/.*/'"$tab"'/
|
|
||||||
G
|
|
||||||
p
|
|
||||||
}' >> "$depfile"
|
|
||||||
echo >> "$depfile" # make sure the fragment doesn't end with a backslash
|
|
||||||
rm -f "$tmpdepfile"
|
|
||||||
;;
|
|
||||||
|
|
||||||
msvc7msys)
|
|
||||||
# This case exists only to let depend.m4 do its work. It works by
|
|
||||||
# looking at the text of this script. This case will never be run,
|
|
||||||
# since it is checked for above.
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
|
|
||||||
#nosideeffect)
|
|
||||||
# This comment above is used by automake to tell side-effect
|
|
||||||
# dependency tracking mechanisms from slower ones.
|
|
||||||
|
|
||||||
dashmstdout)
|
|
||||||
# Important note: in order to support this mode, a compiler *must*
|
|
||||||
# always write the preprocessed file to stdout, regardless of -o.
|
|
||||||
"$@" || exit $?
|
|
||||||
|
|
||||||
# Remove the call to Libtool.
|
|
||||||
if test "$libtool" = yes; then
|
|
||||||
while test "X$1" != 'X--mode=compile'; do
|
|
||||||
shift
|
|
||||||
done
|
|
||||||
shift
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Remove '-o $object'.
|
|
||||||
IFS=" "
|
|
||||||
for arg
|
|
||||||
do
|
|
||||||
case $arg in
|
|
||||||
-o)
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
$object)
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
set fnord "$@" "$arg"
|
|
||||||
shift # fnord
|
|
||||||
shift # $arg
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
test -z "$dashmflag" && dashmflag=-M
|
|
||||||
# Require at least two characters before searching for ':'
|
|
||||||
# in the target name. This is to cope with DOS-style filenames:
|
|
||||||
# a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
|
|
||||||
"$@" $dashmflag |
|
|
||||||
sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
|
|
||||||
rm -f "$depfile"
|
|
||||||
cat < "$tmpdepfile" > "$depfile"
|
|
||||||
# Some versions of the HPUX 10.20 sed can't process this sed invocation
|
|
||||||
# correctly. Breaking it into two sed invocations is a workaround.
|
|
||||||
tr ' ' "$nl" < "$tmpdepfile" \
|
|
||||||
| sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
|
|
||||||
| sed -e 's/$/ :/' >> "$depfile"
|
|
||||||
rm -f "$tmpdepfile"
|
|
||||||
;;
|
|
||||||
|
|
||||||
dashXmstdout)
|
|
||||||
# This case only exists to satisfy depend.m4. It is never actually
|
|
||||||
# run, as this mode is specially recognized in the preamble.
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
|
|
||||||
makedepend)
|
|
||||||
"$@" || exit $?
|
|
||||||
# Remove any Libtool call
|
|
||||||
if test "$libtool" = yes; then
|
|
||||||
while test "X$1" != 'X--mode=compile'; do
|
|
||||||
shift
|
|
||||||
done
|
|
||||||
shift
|
|
||||||
fi
|
|
||||||
# X makedepend
|
|
||||||
shift
|
|
||||||
cleared=no eat=no
|
|
||||||
for arg
|
|
||||||
do
|
|
||||||
case $cleared in
|
|
||||||
no)
|
|
||||||
set ""; shift
|
|
||||||
cleared=yes ;;
|
|
||||||
esac
|
|
||||||
if test $eat = yes; then
|
|
||||||
eat=no
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
case "$arg" in
|
|
||||||
-D*|-I*)
|
|
||||||
set fnord "$@" "$arg"; shift ;;
|
|
||||||
# Strip any option that makedepend may not understand. Remove
|
|
||||||
# the object too, otherwise makedepend will parse it as a source file.
|
|
||||||
-arch)
|
|
||||||
eat=yes ;;
|
|
||||||
-*|$object)
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
set fnord "$@" "$arg"; shift ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
obj_suffix=`echo "$object" | sed 's/^.*\././'`
|
|
||||||
touch "$tmpdepfile"
|
|
||||||
${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
|
|
||||||
rm -f "$depfile"
|
|
||||||
# makedepend may prepend the VPATH from the source file name to the object.
|
|
||||||
# No need to regex-escape $object, excess matching of '.' is harmless.
|
|
||||||
sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
|
|
||||||
# Some versions of the HPUX 10.20 sed can't process the last invocation
|
|
||||||
# correctly. Breaking it into two sed invocations is a workaround.
|
|
||||||
sed '1,2d' "$tmpdepfile" \
|
|
||||||
| tr ' ' "$nl" \
|
|
||||||
| sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
|
|
||||||
| sed -e 's/$/ :/' >> "$depfile"
|
|
||||||
rm -f "$tmpdepfile" "$tmpdepfile".bak
|
|
||||||
;;
|
|
||||||
|
|
||||||
cpp)
|
|
||||||
# Important note: in order to support this mode, a compiler *must*
|
|
||||||
# always write the preprocessed file to stdout.
|
|
||||||
"$@" || exit $?
|
|
||||||
|
|
||||||
# Remove the call to Libtool.
|
|
||||||
if test "$libtool" = yes; then
|
|
||||||
while test "X$1" != 'X--mode=compile'; do
|
|
||||||
shift
|
|
||||||
done
|
|
||||||
shift
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Remove '-o $object'.
|
|
||||||
IFS=" "
|
|
||||||
for arg
|
|
||||||
do
|
|
||||||
case $arg in
|
|
||||||
-o)
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
$object)
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
set fnord "$@" "$arg"
|
|
||||||
shift # fnord
|
|
||||||
shift # $arg
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
"$@" -E \
|
|
||||||
| sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
|
|
||||||
-e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
|
|
||||||
| sed '$ s: \\$::' > "$tmpdepfile"
|
|
||||||
rm -f "$depfile"
|
|
||||||
echo "$object : \\" > "$depfile"
|
|
||||||
cat < "$tmpdepfile" >> "$depfile"
|
|
||||||
sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
|
|
||||||
rm -f "$tmpdepfile"
|
|
||||||
;;
|
|
||||||
|
|
||||||
msvisualcpp)
|
|
||||||
# Important note: in order to support this mode, a compiler *must*
|
|
||||||
# always write the preprocessed file to stdout.
|
|
||||||
"$@" || exit $?
|
|
||||||
|
|
||||||
# Remove the call to Libtool.
|
|
||||||
if test "$libtool" = yes; then
|
|
||||||
while test "X$1" != 'X--mode=compile'; do
|
|
||||||
shift
|
|
||||||
done
|
|
||||||
shift
|
|
||||||
fi
|
|
||||||
|
|
||||||
IFS=" "
|
|
||||||
for arg
|
|
||||||
do
|
|
||||||
case "$arg" in
|
|
||||||
-o)
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
$object)
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
"-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
|
|
||||||
set fnord "$@"
|
|
||||||
shift
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
set fnord "$@" "$arg"
|
|
||||||
shift
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
"$@" -E 2>/dev/null |
|
|
||||||
sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
|
|
||||||
rm -f "$depfile"
|
|
||||||
echo "$object : \\" > "$depfile"
|
|
||||||
sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
|
|
||||||
echo "$tab" >> "$depfile"
|
|
||||||
sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
|
|
||||||
rm -f "$tmpdepfile"
|
|
||||||
;;
|
|
||||||
|
|
||||||
msvcmsys)
|
|
||||||
# This case exists only to let depend.m4 do its work. It works by
|
|
||||||
# looking at the text of this script. This case will never be run,
|
|
||||||
# since it is checked for above.
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
|
|
||||||
none)
|
|
||||||
exec "$@"
|
|
||||||
;;
|
|
||||||
|
|
||||||
*)
|
|
||||||
echo "Unknown depmode $depmode" 1>&2
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
exit 0
|
|
||||||
|
|
||||||
# Local Variables:
|
|
||||||
# mode: shell-script
|
|
||||||
# sh-indentation: 2
|
|
||||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
|
||||||
# time-stamp-start: "scriptversion="
|
|
||||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
|
||||||
# time-stamp-time-zone: "UTC0"
|
|
||||||
# time-stamp-end: "; # UTC"
|
|
||||||
# End:
|
|
||||||
@@ -1,541 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
# install - install a program, script, or datafile
|
|
||||||
|
|
||||||
scriptversion=2020-11-14.01; # UTC
|
|
||||||
|
|
||||||
# This originates from X11R5 (mit/util/scripts/install.sh), which was
|
|
||||||
# later released in X11R6 (xc/config/util/install.sh) with the
|
|
||||||
# following copyright and license.
|
|
||||||
#
|
|
||||||
# Copyright (C) 1994 X Consortium
|
|
||||||
#
|
|
||||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
# of this software and associated documentation files (the "Software"), to
|
|
||||||
# deal in the Software without restriction, including without limitation the
|
|
||||||
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
|
||||||
# sell copies of the Software, and to permit persons to whom the Software is
|
|
||||||
# furnished to do so, subject to the following conditions:
|
|
||||||
#
|
|
||||||
# The above copyright notice and this permission notice shall be included in
|
|
||||||
# all copies or substantial portions of the Software.
|
|
||||||
#
|
|
||||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
|
||||||
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
|
|
||||||
# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
#
|
|
||||||
# Except as contained in this notice, the name of the X Consortium shall not
|
|
||||||
# be used in advertising or otherwise to promote the sale, use or other deal-
|
|
||||||
# ings in this Software without prior written authorization from the X Consor-
|
|
||||||
# tium.
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# FSF changes to this file are in the public domain.
|
|
||||||
#
|
|
||||||
# Calling this script install-sh is preferred over install.sh, to prevent
|
|
||||||
# 'make' implicit rules from creating a file called install from it
|
|
||||||
# when there is no Makefile.
|
|
||||||
#
|
|
||||||
# This script is compatible with the BSD install script, but was written
|
|
||||||
# from scratch.
|
|
||||||
|
|
||||||
tab=' '
|
|
||||||
nl='
|
|
||||||
'
|
|
||||||
IFS=" $tab$nl"
|
|
||||||
|
|
||||||
# Set DOITPROG to "echo" to test this script.
|
|
||||||
|
|
||||||
doit=${DOITPROG-}
|
|
||||||
doit_exec=${doit:-exec}
|
|
||||||
|
|
||||||
# Put in absolute file names if you don't have them in your path;
|
|
||||||
# or use environment vars.
|
|
||||||
|
|
||||||
chgrpprog=${CHGRPPROG-chgrp}
|
|
||||||
chmodprog=${CHMODPROG-chmod}
|
|
||||||
chownprog=${CHOWNPROG-chown}
|
|
||||||
cmpprog=${CMPPROG-cmp}
|
|
||||||
cpprog=${CPPROG-cp}
|
|
||||||
mkdirprog=${MKDIRPROG-mkdir}
|
|
||||||
mvprog=${MVPROG-mv}
|
|
||||||
rmprog=${RMPROG-rm}
|
|
||||||
stripprog=${STRIPPROG-strip}
|
|
||||||
|
|
||||||
posix_mkdir=
|
|
||||||
|
|
||||||
# Desired mode of installed file.
|
|
||||||
mode=0755
|
|
||||||
|
|
||||||
# Create dirs (including intermediate dirs) using mode 755.
|
|
||||||
# This is like GNU 'install' as of coreutils 8.32 (2020).
|
|
||||||
mkdir_umask=22
|
|
||||||
|
|
||||||
backupsuffix=
|
|
||||||
chgrpcmd=
|
|
||||||
chmodcmd=$chmodprog
|
|
||||||
chowncmd=
|
|
||||||
mvcmd=$mvprog
|
|
||||||
rmcmd="$rmprog -f"
|
|
||||||
stripcmd=
|
|
||||||
|
|
||||||
src=
|
|
||||||
dst=
|
|
||||||
dir_arg=
|
|
||||||
dst_arg=
|
|
||||||
|
|
||||||
copy_on_change=false
|
|
||||||
is_target_a_directory=possibly
|
|
||||||
|
|
||||||
usage="\
|
|
||||||
Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
|
|
||||||
or: $0 [OPTION]... SRCFILES... DIRECTORY
|
|
||||||
or: $0 [OPTION]... -t DIRECTORY SRCFILES...
|
|
||||||
or: $0 [OPTION]... -d DIRECTORIES...
|
|
||||||
|
|
||||||
In the 1st form, copy SRCFILE to DSTFILE.
|
|
||||||
In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
|
|
||||||
In the 4th, create DIRECTORIES.
|
|
||||||
|
|
||||||
Options:
|
|
||||||
--help display this help and exit.
|
|
||||||
--version display version info and exit.
|
|
||||||
|
|
||||||
-c (ignored)
|
|
||||||
-C install only if different (preserve data modification time)
|
|
||||||
-d create directories instead of installing files.
|
|
||||||
-g GROUP $chgrpprog installed files to GROUP.
|
|
||||||
-m MODE $chmodprog installed files to MODE.
|
|
||||||
-o USER $chownprog installed files to USER.
|
|
||||||
-p pass -p to $cpprog.
|
|
||||||
-s $stripprog installed files.
|
|
||||||
-S SUFFIX attempt to back up existing files, with suffix SUFFIX.
|
|
||||||
-t DIRECTORY install into DIRECTORY.
|
|
||||||
-T report an error if DSTFILE is a directory.
|
|
||||||
|
|
||||||
Environment variables override the default commands:
|
|
||||||
CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
|
|
||||||
RMPROG STRIPPROG
|
|
||||||
|
|
||||||
By default, rm is invoked with -f; when overridden with RMPROG,
|
|
||||||
it's up to you to specify -f if you want it.
|
|
||||||
|
|
||||||
If -S is not specified, no backups are attempted.
|
|
||||||
|
|
||||||
Email bug reports to bug-automake@gnu.org.
|
|
||||||
Automake home page: https://www.gnu.org/software/automake/
|
|
||||||
"
|
|
||||||
|
|
||||||
while test $# -ne 0; do
|
|
||||||
case $1 in
|
|
||||||
-c) ;;
|
|
||||||
|
|
||||||
-C) copy_on_change=true;;
|
|
||||||
|
|
||||||
-d) dir_arg=true;;
|
|
||||||
|
|
||||||
-g) chgrpcmd="$chgrpprog $2"
|
|
||||||
shift;;
|
|
||||||
|
|
||||||
--help) echo "$usage"; exit $?;;
|
|
||||||
|
|
||||||
-m) mode=$2
|
|
||||||
case $mode in
|
|
||||||
*' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
|
|
||||||
echo "$0: invalid mode: $mode" >&2
|
|
||||||
exit 1;;
|
|
||||||
esac
|
|
||||||
shift;;
|
|
||||||
|
|
||||||
-o) chowncmd="$chownprog $2"
|
|
||||||
shift;;
|
|
||||||
|
|
||||||
-p) cpprog="$cpprog -p";;
|
|
||||||
|
|
||||||
-s) stripcmd=$stripprog;;
|
|
||||||
|
|
||||||
-S) backupsuffix="$2"
|
|
||||||
shift;;
|
|
||||||
|
|
||||||
-t)
|
|
||||||
is_target_a_directory=always
|
|
||||||
dst_arg=$2
|
|
||||||
# Protect names problematic for 'test' and other utilities.
|
|
||||||
case $dst_arg in
|
|
||||||
-* | [=\(\)!]) dst_arg=./$dst_arg;;
|
|
||||||
esac
|
|
||||||
shift;;
|
|
||||||
|
|
||||||
-T) is_target_a_directory=never;;
|
|
||||||
|
|
||||||
--version) echo "$0 $scriptversion"; exit $?;;
|
|
||||||
|
|
||||||
--) shift
|
|
||||||
break;;
|
|
||||||
|
|
||||||
-*) echo "$0: invalid option: $1" >&2
|
|
||||||
exit 1;;
|
|
||||||
|
|
||||||
*) break;;
|
|
||||||
esac
|
|
||||||
shift
|
|
||||||
done
|
|
||||||
|
|
||||||
# We allow the use of options -d and -T together, by making -d
|
|
||||||
# take the precedence; this is for compatibility with GNU install.
|
|
||||||
|
|
||||||
if test -n "$dir_arg"; then
|
|
||||||
if test -n "$dst_arg"; then
|
|
||||||
echo "$0: target directory not allowed when installing a directory." >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
|
|
||||||
# When -d is used, all remaining arguments are directories to create.
|
|
||||||
# When -t is used, the destination is already specified.
|
|
||||||
# Otherwise, the last argument is the destination. Remove it from $@.
|
|
||||||
for arg
|
|
||||||
do
|
|
||||||
if test -n "$dst_arg"; then
|
|
||||||
# $@ is not empty: it contains at least $arg.
|
|
||||||
set fnord "$@" "$dst_arg"
|
|
||||||
shift # fnord
|
|
||||||
fi
|
|
||||||
shift # arg
|
|
||||||
dst_arg=$arg
|
|
||||||
# Protect names problematic for 'test' and other utilities.
|
|
||||||
case $dst_arg in
|
|
||||||
-* | [=\(\)!]) dst_arg=./$dst_arg;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test $# -eq 0; then
|
|
||||||
if test -z "$dir_arg"; then
|
|
||||||
echo "$0: no input file specified." >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
# It's OK to call 'install-sh -d' without argument.
|
|
||||||
# This can happen when creating conditional directories.
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test -z "$dir_arg"; then
|
|
||||||
if test $# -gt 1 || test "$is_target_a_directory" = always; then
|
|
||||||
if test ! -d "$dst_arg"; then
|
|
||||||
echo "$0: $dst_arg: Is not a directory." >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test -z "$dir_arg"; then
|
|
||||||
do_exit='(exit $ret); exit $ret'
|
|
||||||
trap "ret=129; $do_exit" 1
|
|
||||||
trap "ret=130; $do_exit" 2
|
|
||||||
trap "ret=141; $do_exit" 13
|
|
||||||
trap "ret=143; $do_exit" 15
|
|
||||||
|
|
||||||
# Set umask so as not to create temps with too-generous modes.
|
|
||||||
# However, 'strip' requires both read and write access to temps.
|
|
||||||
case $mode in
|
|
||||||
# Optimize common cases.
|
|
||||||
*644) cp_umask=133;;
|
|
||||||
*755) cp_umask=22;;
|
|
||||||
|
|
||||||
*[0-7])
|
|
||||||
if test -z "$stripcmd"; then
|
|
||||||
u_plus_rw=
|
|
||||||
else
|
|
||||||
u_plus_rw='% 200'
|
|
||||||
fi
|
|
||||||
cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
|
|
||||||
*)
|
|
||||||
if test -z "$stripcmd"; then
|
|
||||||
u_plus_rw=
|
|
||||||
else
|
|
||||||
u_plus_rw=,u+rw
|
|
||||||
fi
|
|
||||||
cp_umask=$mode$u_plus_rw;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
for src
|
|
||||||
do
|
|
||||||
# Protect names problematic for 'test' and other utilities.
|
|
||||||
case $src in
|
|
||||||
-* | [=\(\)!]) src=./$src;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
if test -n "$dir_arg"; then
|
|
||||||
dst=$src
|
|
||||||
dstdir=$dst
|
|
||||||
test -d "$dstdir"
|
|
||||||
dstdir_status=$?
|
|
||||||
# Don't chown directories that already exist.
|
|
||||||
if test $dstdir_status = 0; then
|
|
||||||
chowncmd=""
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
|
|
||||||
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command
|
|
||||||
# might cause directories to be created, which would be especially bad
|
|
||||||
# if $src (and thus $dsttmp) contains '*'.
|
|
||||||
if test ! -f "$src" && test ! -d "$src"; then
|
|
||||||
echo "$0: $src does not exist." >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test -z "$dst_arg"; then
|
|
||||||
echo "$0: no destination specified." >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
dst=$dst_arg
|
|
||||||
|
|
||||||
# If destination is a directory, append the input filename.
|
|
||||||
if test -d "$dst"; then
|
|
||||||
if test "$is_target_a_directory" = never; then
|
|
||||||
echo "$0: $dst_arg: Is a directory" >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
dstdir=$dst
|
|
||||||
dstbase=`basename "$src"`
|
|
||||||
case $dst in
|
|
||||||
*/) dst=$dst$dstbase;;
|
|
||||||
*) dst=$dst/$dstbase;;
|
|
||||||
esac
|
|
||||||
dstdir_status=0
|
|
||||||
else
|
|
||||||
dstdir=`dirname "$dst"`
|
|
||||||
test -d "$dstdir"
|
|
||||||
dstdir_status=$?
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
case $dstdir in
|
|
||||||
*/) dstdirslash=$dstdir;;
|
|
||||||
*) dstdirslash=$dstdir/;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
obsolete_mkdir_used=false
|
|
||||||
|
|
||||||
if test $dstdir_status != 0; then
|
|
||||||
case $posix_mkdir in
|
|
||||||
'')
|
|
||||||
# With -d, create the new directory with the user-specified mode.
|
|
||||||
# Otherwise, rely on $mkdir_umask.
|
|
||||||
if test -n "$dir_arg"; then
|
|
||||||
mkdir_mode=-m$mode
|
|
||||||
else
|
|
||||||
mkdir_mode=
|
|
||||||
fi
|
|
||||||
|
|
||||||
posix_mkdir=false
|
|
||||||
# The $RANDOM variable is not portable (e.g., dash). Use it
|
|
||||||
# here however when possible just to lower collision chance.
|
|
||||||
tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
|
|
||||||
|
|
||||||
trap '
|
|
||||||
ret=$?
|
|
||||||
rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null
|
|
||||||
exit $ret
|
|
||||||
' 0
|
|
||||||
|
|
||||||
# Because "mkdir -p" follows existing symlinks and we likely work
|
|
||||||
# directly in world-writeable /tmp, make sure that the '$tmpdir'
|
|
||||||
# directory is successfully created first before we actually test
|
|
||||||
# 'mkdir -p'.
|
|
||||||
if (umask $mkdir_umask &&
|
|
||||||
$mkdirprog $mkdir_mode "$tmpdir" &&
|
|
||||||
exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
|
|
||||||
then
|
|
||||||
if test -z "$dir_arg" || {
|
|
||||||
# Check for POSIX incompatibilities with -m.
|
|
||||||
# HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
|
|
||||||
# other-writable bit of parent directory when it shouldn't.
|
|
||||||
# FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
|
|
||||||
test_tmpdir="$tmpdir/a"
|
|
||||||
ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
|
|
||||||
case $ls_ld_tmpdir in
|
|
||||||
d????-?r-*) different_mode=700;;
|
|
||||||
d????-?--*) different_mode=755;;
|
|
||||||
*) false;;
|
|
||||||
esac &&
|
|
||||||
$mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
|
|
||||||
ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
|
|
||||||
test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
then posix_mkdir=:
|
|
||||||
fi
|
|
||||||
rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
|
|
||||||
else
|
|
||||||
# Remove any dirs left behind by ancient mkdir implementations.
|
|
||||||
rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
|
|
||||||
fi
|
|
||||||
trap '' 0;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
if
|
|
||||||
$posix_mkdir && (
|
|
||||||
umask $mkdir_umask &&
|
|
||||||
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
|
|
||||||
)
|
|
||||||
then :
|
|
||||||
else
|
|
||||||
|
|
||||||
# mkdir does not conform to POSIX,
|
|
||||||
# or it failed possibly due to a race condition. Create the
|
|
||||||
# directory the slow way, step by step, checking for races as we go.
|
|
||||||
|
|
||||||
case $dstdir in
|
|
||||||
/*) prefix='/';;
|
|
||||||
[-=\(\)!]*) prefix='./';;
|
|
||||||
*) prefix='';;
|
|
||||||
esac
|
|
||||||
|
|
||||||
oIFS=$IFS
|
|
||||||
IFS=/
|
|
||||||
set -f
|
|
||||||
set fnord $dstdir
|
|
||||||
shift
|
|
||||||
set +f
|
|
||||||
IFS=$oIFS
|
|
||||||
|
|
||||||
prefixes=
|
|
||||||
|
|
||||||
for d
|
|
||||||
do
|
|
||||||
test X"$d" = X && continue
|
|
||||||
|
|
||||||
prefix=$prefix$d
|
|
||||||
if test -d "$prefix"; then
|
|
||||||
prefixes=
|
|
||||||
else
|
|
||||||
if $posix_mkdir; then
|
|
||||||
(umask $mkdir_umask &&
|
|
||||||
$doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
|
|
||||||
# Don't fail if two instances are running concurrently.
|
|
||||||
test -d "$prefix" || exit 1
|
|
||||||
else
|
|
||||||
case $prefix in
|
|
||||||
*\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
|
|
||||||
*) qprefix=$prefix;;
|
|
||||||
esac
|
|
||||||
prefixes="$prefixes '$qprefix'"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
prefix=$prefix/
|
|
||||||
done
|
|
||||||
|
|
||||||
if test -n "$prefixes"; then
|
|
||||||
# Don't fail if two instances are running concurrently.
|
|
||||||
(umask $mkdir_umask &&
|
|
||||||
eval "\$doit_exec \$mkdirprog $prefixes") ||
|
|
||||||
test -d "$dstdir" || exit 1
|
|
||||||
obsolete_mkdir_used=true
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test -n "$dir_arg"; then
|
|
||||||
{ test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
|
|
||||||
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
|
|
||||||
{ test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
|
|
||||||
test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
|
|
||||||
else
|
|
||||||
|
|
||||||
# Make a couple of temp file names in the proper directory.
|
|
||||||
dsttmp=${dstdirslash}_inst.$$_
|
|
||||||
rmtmp=${dstdirslash}_rm.$$_
|
|
||||||
|
|
||||||
# Trap to clean up those temp files at exit.
|
|
||||||
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
|
|
||||||
|
|
||||||
# Copy the file name to the temp name.
|
|
||||||
(umask $cp_umask &&
|
|
||||||
{ test -z "$stripcmd" || {
|
|
||||||
# Create $dsttmp read-write so that cp doesn't create it read-only,
|
|
||||||
# which would cause strip to fail.
|
|
||||||
if test -z "$doit"; then
|
|
||||||
: >"$dsttmp" # No need to fork-exec 'touch'.
|
|
||||||
else
|
|
||||||
$doit touch "$dsttmp"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
} &&
|
|
||||||
$doit_exec $cpprog "$src" "$dsttmp") &&
|
|
||||||
|
|
||||||
# and set any options; do chmod last to preserve setuid bits.
|
|
||||||
#
|
|
||||||
# If any of these fail, we abort the whole thing. If we want to
|
|
||||||
# ignore errors from any of these, just make sure not to ignore
|
|
||||||
# errors from the above "$doit $cpprog $src $dsttmp" command.
|
|
||||||
#
|
|
||||||
{ test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
|
|
||||||
{ test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
|
|
||||||
{ test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
|
|
||||||
{ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
|
|
||||||
|
|
||||||
# If -C, don't bother to copy if it wouldn't change the file.
|
|
||||||
if $copy_on_change &&
|
|
||||||
old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
|
|
||||||
new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
|
|
||||||
set -f &&
|
|
||||||
set X $old && old=:$2:$4:$5:$6 &&
|
|
||||||
set X $new && new=:$2:$4:$5:$6 &&
|
|
||||||
set +f &&
|
|
||||||
test "$old" = "$new" &&
|
|
||||||
$cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
|
|
||||||
then
|
|
||||||
rm -f "$dsttmp"
|
|
||||||
else
|
|
||||||
# If $backupsuffix is set, and the file being installed
|
|
||||||
# already exists, attempt a backup. Don't worry if it fails,
|
|
||||||
# e.g., if mv doesn't support -f.
|
|
||||||
if test -n "$backupsuffix" && test -f "$dst"; then
|
|
||||||
$doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Rename the file to the real destination.
|
|
||||||
$doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
|
|
||||||
|
|
||||||
# The rename failed, perhaps because mv can't rename something else
|
|
||||||
# to itself, or perhaps because mv is so ancient that it does not
|
|
||||||
# support -f.
|
|
||||||
{
|
|
||||||
# Now remove or move aside any old file at destination location.
|
|
||||||
# We try this two ways since rm can't unlink itself on some
|
|
||||||
# systems and the destination file might be busy for other
|
|
||||||
# reasons. In this case, the final cleanup might fail but the new
|
|
||||||
# file should still install successfully.
|
|
||||||
{
|
|
||||||
test ! -f "$dst" ||
|
|
||||||
$doit $rmcmd "$dst" 2>/dev/null ||
|
|
||||||
{ $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
|
|
||||||
{ $doit $rmcmd "$rmtmp" 2>/dev/null; :; }
|
|
||||||
} ||
|
|
||||||
{ echo "$0: cannot unlink or rename $dst" >&2
|
|
||||||
(exit 1); exit 1
|
|
||||||
}
|
|
||||||
} &&
|
|
||||||
|
|
||||||
# Now rename the file to the real destination.
|
|
||||||
$doit $mvcmd "$dsttmp" "$dst"
|
|
||||||
}
|
|
||||||
fi || exit 1
|
|
||||||
|
|
||||||
trap '' 0
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
# Local variables:
|
|
||||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
|
||||||
# time-stamp-start: "scriptversion="
|
|
||||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
|
||||||
# time-stamp-time-zone: "UTC0"
|
|
||||||
# time-stamp-end: "; # UTC"
|
|
||||||
# End:
|
|
||||||
-11251
File diff suppressed because it is too large
Load Diff
@@ -1,215 +0,0 @@
|
|||||||
#! /bin/sh
|
|
||||||
# Common wrapper for a few potentially missing GNU programs.
|
|
||||||
|
|
||||||
scriptversion=2018-03-07.03; # UTC
|
|
||||||
|
|
||||||
# Copyright (C) 1996-2021 Free Software Foundation, Inc.
|
|
||||||
# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
|
|
||||||
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2, or (at your option)
|
|
||||||
# any later version.
|
|
||||||
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
# As a special exception to the GNU General Public License, if you
|
|
||||||
# distribute this file as part of a program that contains a
|
|
||||||
# configuration script generated by Autoconf, you may include it under
|
|
||||||
# the same distribution terms that you use for the rest of that program.
|
|
||||||
|
|
||||||
if test $# -eq 0; then
|
|
||||||
echo 1>&2 "Try '$0 --help' for more information"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
case $1 in
|
|
||||||
|
|
||||||
--is-lightweight)
|
|
||||||
# Used by our autoconf macros to check whether the available missing
|
|
||||||
# script is modern enough.
|
|
||||||
exit 0
|
|
||||||
;;
|
|
||||||
|
|
||||||
--run)
|
|
||||||
# Back-compat with the calling convention used by older automake.
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
|
|
||||||
-h|--h|--he|--hel|--help)
|
|
||||||
echo "\
|
|
||||||
$0 [OPTION]... PROGRAM [ARGUMENT]...
|
|
||||||
|
|
||||||
Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
|
|
||||||
to PROGRAM being missing or too old.
|
|
||||||
|
|
||||||
Options:
|
|
||||||
-h, --help display this help and exit
|
|
||||||
-v, --version output version information and exit
|
|
||||||
|
|
||||||
Supported PROGRAM values:
|
|
||||||
aclocal autoconf autoheader autom4te automake makeinfo
|
|
||||||
bison yacc flex lex help2man
|
|
||||||
|
|
||||||
Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
|
|
||||||
'g' are ignored when checking the name.
|
|
||||||
|
|
||||||
Send bug reports to <bug-automake@gnu.org>."
|
|
||||||
exit $?
|
|
||||||
;;
|
|
||||||
|
|
||||||
-v|--v|--ve|--ver|--vers|--versi|--versio|--version)
|
|
||||||
echo "missing $scriptversion (GNU Automake)"
|
|
||||||
exit $?
|
|
||||||
;;
|
|
||||||
|
|
||||||
-*)
|
|
||||||
echo 1>&2 "$0: unknown '$1' option"
|
|
||||||
echo 1>&2 "Try '$0 --help' for more information"
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
|
|
||||||
esac
|
|
||||||
|
|
||||||
# Run the given program, remember its exit status.
|
|
||||||
"$@"; st=$?
|
|
||||||
|
|
||||||
# If it succeeded, we are done.
|
|
||||||
test $st -eq 0 && exit 0
|
|
||||||
|
|
||||||
# Also exit now if we it failed (or wasn't found), and '--version' was
|
|
||||||
# passed; such an option is passed most likely to detect whether the
|
|
||||||
# program is present and works.
|
|
||||||
case $2 in --version|--help) exit $st;; esac
|
|
||||||
|
|
||||||
# Exit code 63 means version mismatch. This often happens when the user
|
|
||||||
# tries to use an ancient version of a tool on a file that requires a
|
|
||||||
# minimum version.
|
|
||||||
if test $st -eq 63; then
|
|
||||||
msg="probably too old"
|
|
||||||
elif test $st -eq 127; then
|
|
||||||
# Program was missing.
|
|
||||||
msg="missing on your system"
|
|
||||||
else
|
|
||||||
# Program was found and executed, but failed. Give up.
|
|
||||||
exit $st
|
|
||||||
fi
|
|
||||||
|
|
||||||
perl_URL=https://www.perl.org/
|
|
||||||
flex_URL=https://github.com/westes/flex
|
|
||||||
gnu_software_URL=https://www.gnu.org/software
|
|
||||||
|
|
||||||
program_details ()
|
|
||||||
{
|
|
||||||
case $1 in
|
|
||||||
aclocal|automake)
|
|
||||||
echo "The '$1' program is part of the GNU Automake package:"
|
|
||||||
echo "<$gnu_software_URL/automake>"
|
|
||||||
echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
|
|
||||||
echo "<$gnu_software_URL/autoconf>"
|
|
||||||
echo "<$gnu_software_URL/m4/>"
|
|
||||||
echo "<$perl_URL>"
|
|
||||||
;;
|
|
||||||
autoconf|autom4te|autoheader)
|
|
||||||
echo "The '$1' program is part of the GNU Autoconf package:"
|
|
||||||
echo "<$gnu_software_URL/autoconf/>"
|
|
||||||
echo "It also requires GNU m4 and Perl in order to run:"
|
|
||||||
echo "<$gnu_software_URL/m4/>"
|
|
||||||
echo "<$perl_URL>"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
give_advice ()
|
|
||||||
{
|
|
||||||
# Normalize program name to check for.
|
|
||||||
normalized_program=`echo "$1" | sed '
|
|
||||||
s/^gnu-//; t
|
|
||||||
s/^gnu//; t
|
|
||||||
s/^g//; t'`
|
|
||||||
|
|
||||||
printf '%s\n' "'$1' is $msg."
|
|
||||||
|
|
||||||
configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
|
|
||||||
case $normalized_program in
|
|
||||||
autoconf*)
|
|
||||||
echo "You should only need it if you modified 'configure.ac',"
|
|
||||||
echo "or m4 files included by it."
|
|
||||||
program_details 'autoconf'
|
|
||||||
;;
|
|
||||||
autoheader*)
|
|
||||||
echo "You should only need it if you modified 'acconfig.h' or"
|
|
||||||
echo "$configure_deps."
|
|
||||||
program_details 'autoheader'
|
|
||||||
;;
|
|
||||||
automake*)
|
|
||||||
echo "You should only need it if you modified 'Makefile.am' or"
|
|
||||||
echo "$configure_deps."
|
|
||||||
program_details 'automake'
|
|
||||||
;;
|
|
||||||
aclocal*)
|
|
||||||
echo "You should only need it if you modified 'acinclude.m4' or"
|
|
||||||
echo "$configure_deps."
|
|
||||||
program_details 'aclocal'
|
|
||||||
;;
|
|
||||||
autom4te*)
|
|
||||||
echo "You might have modified some maintainer files that require"
|
|
||||||
echo "the 'autom4te' program to be rebuilt."
|
|
||||||
program_details 'autom4te'
|
|
||||||
;;
|
|
||||||
bison*|yacc*)
|
|
||||||
echo "You should only need it if you modified a '.y' file."
|
|
||||||
echo "You may want to install the GNU Bison package:"
|
|
||||||
echo "<$gnu_software_URL/bison/>"
|
|
||||||
;;
|
|
||||||
lex*|flex*)
|
|
||||||
echo "You should only need it if you modified a '.l' file."
|
|
||||||
echo "You may want to install the Fast Lexical Analyzer package:"
|
|
||||||
echo "<$flex_URL>"
|
|
||||||
;;
|
|
||||||
help2man*)
|
|
||||||
echo "You should only need it if you modified a dependency" \
|
|
||||||
"of a man page."
|
|
||||||
echo "You may want to install the GNU Help2man package:"
|
|
||||||
echo "<$gnu_software_URL/help2man/>"
|
|
||||||
;;
|
|
||||||
makeinfo*)
|
|
||||||
echo "You should only need it if you modified a '.texi' file, or"
|
|
||||||
echo "any other file indirectly affecting the aspect of the manual."
|
|
||||||
echo "You might want to install the Texinfo package:"
|
|
||||||
echo "<$gnu_software_URL/texinfo/>"
|
|
||||||
echo "The spurious makeinfo call might also be the consequence of"
|
|
||||||
echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might"
|
|
||||||
echo "want to install GNU make:"
|
|
||||||
echo "<$gnu_software_URL/make/>"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "You might have modified some files without having the proper"
|
|
||||||
echo "tools for further handling them. Check the 'README' file, it"
|
|
||||||
echo "often tells you about the needed prerequisites for installing"
|
|
||||||
echo "this package. You may also peek at any GNU archive site, in"
|
|
||||||
echo "case some other package contains this missing '$1' program."
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
}
|
|
||||||
|
|
||||||
give_advice "$1" | sed -e '1s/^/WARNING: /' \
|
|
||||||
-e '2,$s/^/ /' >&2
|
|
||||||
|
|
||||||
# Propagate the correct exit status (expected to be 127 for a program
|
|
||||||
# not found, 63 for a program that failed due to version mismatch).
|
|
||||||
exit $st
|
|
||||||
|
|
||||||
# Local variables:
|
|
||||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
|
||||||
# time-stamp-start: "scriptversion="
|
|
||||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
|
||||||
# time-stamp-time-zone: "UTC0"
|
|
||||||
# time-stamp-end: "; # UTC"
|
|
||||||
# End:
|
|
||||||
@@ -1,153 +0,0 @@
|
|||||||
#! /bin/sh
|
|
||||||
# test-driver - basic testsuite driver script.
|
|
||||||
|
|
||||||
scriptversion=2018-03-07.03; # UTC
|
|
||||||
|
|
||||||
# Copyright (C) 2011-2021 Free Software Foundation, Inc.
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2, or (at your option)
|
|
||||||
# any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
# As a special exception to the GNU General Public License, if you
|
|
||||||
# distribute this file as part of a program that contains a
|
|
||||||
# configuration script generated by Autoconf, you may include it under
|
|
||||||
# the same distribution terms that you use for the rest of that program.
|
|
||||||
|
|
||||||
# This file is maintained in Automake, please report
|
|
||||||
# bugs to <bug-automake@gnu.org> or send patches to
|
|
||||||
# <automake-patches@gnu.org>.
|
|
||||||
|
|
||||||
# Make unconditional expansion of undefined variables an error. This
|
|
||||||
# helps a lot in preventing typo-related bugs.
|
|
||||||
set -u
|
|
||||||
|
|
||||||
usage_error ()
|
|
||||||
{
|
|
||||||
echo "$0: $*" >&2
|
|
||||||
print_usage >&2
|
|
||||||
exit 2
|
|
||||||
}
|
|
||||||
|
|
||||||
print_usage ()
|
|
||||||
{
|
|
||||||
cat <<END
|
|
||||||
Usage:
|
|
||||||
test-driver --test-name NAME --log-file PATH --trs-file PATH
|
|
||||||
[--expect-failure {yes|no}] [--color-tests {yes|no}]
|
|
||||||
[--enable-hard-errors {yes|no}] [--]
|
|
||||||
TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS]
|
|
||||||
|
|
||||||
The '--test-name', '--log-file' and '--trs-file' options are mandatory.
|
|
||||||
See the GNU Automake documentation for information.
|
|
||||||
END
|
|
||||||
}
|
|
||||||
|
|
||||||
test_name= # Used for reporting.
|
|
||||||
log_file= # Where to save the output of the test script.
|
|
||||||
trs_file= # Where to save the metadata of the test run.
|
|
||||||
expect_failure=no
|
|
||||||
color_tests=no
|
|
||||||
enable_hard_errors=yes
|
|
||||||
while test $# -gt 0; do
|
|
||||||
case $1 in
|
|
||||||
--help) print_usage; exit $?;;
|
|
||||||
--version) echo "test-driver $scriptversion"; exit $?;;
|
|
||||||
--test-name) test_name=$2; shift;;
|
|
||||||
--log-file) log_file=$2; shift;;
|
|
||||||
--trs-file) trs_file=$2; shift;;
|
|
||||||
--color-tests) color_tests=$2; shift;;
|
|
||||||
--expect-failure) expect_failure=$2; shift;;
|
|
||||||
--enable-hard-errors) enable_hard_errors=$2; shift;;
|
|
||||||
--) shift; break;;
|
|
||||||
-*) usage_error "invalid option: '$1'";;
|
|
||||||
*) break;;
|
|
||||||
esac
|
|
||||||
shift
|
|
||||||
done
|
|
||||||
|
|
||||||
missing_opts=
|
|
||||||
test x"$test_name" = x && missing_opts="$missing_opts --test-name"
|
|
||||||
test x"$log_file" = x && missing_opts="$missing_opts --log-file"
|
|
||||||
test x"$trs_file" = x && missing_opts="$missing_opts --trs-file"
|
|
||||||
if test x"$missing_opts" != x; then
|
|
||||||
usage_error "the following mandatory options are missing:$missing_opts"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test $# -eq 0; then
|
|
||||||
usage_error "missing argument"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test $color_tests = yes; then
|
|
||||||
# Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'.
|
|
||||||
red='[0;31m' # Red.
|
|
||||||
grn='[0;32m' # Green.
|
|
||||||
lgn='[1;32m' # Light green.
|
|
||||||
blu='[1;34m' # Blue.
|
|
||||||
mgn='[0;35m' # Magenta.
|
|
||||||
std='[m' # No color.
|
|
||||||
else
|
|
||||||
red= grn= lgn= blu= mgn= std=
|
|
||||||
fi
|
|
||||||
|
|
||||||
do_exit='rm -f $log_file $trs_file; (exit $st); exit $st'
|
|
||||||
trap "st=129; $do_exit" 1
|
|
||||||
trap "st=130; $do_exit" 2
|
|
||||||
trap "st=141; $do_exit" 13
|
|
||||||
trap "st=143; $do_exit" 15
|
|
||||||
|
|
||||||
# Test script is run here. We create the file first, then append to it,
|
|
||||||
# to ameliorate tests themselves also writing to the log file. Our tests
|
|
||||||
# don't, but others can (automake bug#35762).
|
|
||||||
: >"$log_file"
|
|
||||||
"$@" >>"$log_file" 2>&1
|
|
||||||
estatus=$?
|
|
||||||
|
|
||||||
if test $enable_hard_errors = no && test $estatus -eq 99; then
|
|
||||||
tweaked_estatus=1
|
|
||||||
else
|
|
||||||
tweaked_estatus=$estatus
|
|
||||||
fi
|
|
||||||
|
|
||||||
case $tweaked_estatus:$expect_failure in
|
|
||||||
0:yes) col=$red res=XPASS recheck=yes gcopy=yes;;
|
|
||||||
0:*) col=$grn res=PASS recheck=no gcopy=no;;
|
|
||||||
77:*) col=$blu res=SKIP recheck=no gcopy=yes;;
|
|
||||||
99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;;
|
|
||||||
*:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;;
|
|
||||||
*:*) col=$red res=FAIL recheck=yes gcopy=yes;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# Report the test outcome and exit status in the logs, so that one can
|
|
||||||
# know whether the test passed or failed simply by looking at the '.log'
|
|
||||||
# file, without the need of also peaking into the corresponding '.trs'
|
|
||||||
# file (automake bug#11814).
|
|
||||||
echo "$res $test_name (exit status: $estatus)" >>"$log_file"
|
|
||||||
|
|
||||||
# Report outcome to console.
|
|
||||||
echo "${col}${res}${std}: $test_name"
|
|
||||||
|
|
||||||
# Register the test result, and other relevant metadata.
|
|
||||||
echo ":test-result: $res" > $trs_file
|
|
||||||
echo ":global-test-result: $res" >> $trs_file
|
|
||||||
echo ":recheck: $recheck" >> $trs_file
|
|
||||||
echo ":copy-in-global-log: $gcopy" >> $trs_file
|
|
||||||
|
|
||||||
# Local Variables:
|
|
||||||
# mode: shell-script
|
|
||||||
# sh-indentation: 2
|
|
||||||
# eval: (add-hook 'before-save-hook 'time-stamp)
|
|
||||||
# time-stamp-start: "scriptversion="
|
|
||||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
|
||||||
# time-stamp-time-zone: "UTC0"
|
|
||||||
# time-stamp-end: "; # UTC"
|
|
||||||
# End:
|
|
||||||
-455
@@ -1,455 +0,0 @@
|
|||||||
/* config.h.in. Generated from configure.ac by autoheader. */
|
|
||||||
|
|
||||||
/* Define if account management tools should be installed setuid and
|
|
||||||
authenticate the callers */
|
|
||||||
#undef ACCT_TOOLS_SETUID
|
|
||||||
|
|
||||||
/* Define to support lastlog. */
|
|
||||||
#undef ENABLE_LASTLOG
|
|
||||||
|
|
||||||
/* Define to manage session support with logind. */
|
|
||||||
#undef ENABLE_LOGIND
|
|
||||||
|
|
||||||
/* Define to 1 if translation of program messages to the user's native
|
|
||||||
language is requested. */
|
|
||||||
#undef ENABLE_NLS
|
|
||||||
|
|
||||||
/* Define to support the subordinate IDs. */
|
|
||||||
#undef ENABLE_SUBIDS
|
|
||||||
|
|
||||||
/* Path for faillog file. */
|
|
||||||
#undef FAILLOG_FILE
|
|
||||||
|
|
||||||
/* max group name length */
|
|
||||||
#undef GROUP_NAME_MAX_LENGTH
|
|
||||||
|
|
||||||
/* Define to 1 if you have the declaration of 'pam_fail_delay' */
|
|
||||||
#undef HAS_PAM_FAIL_DELAY
|
|
||||||
|
|
||||||
/* Defined to 1 if you have the declaration of 'secure_getenv' */
|
|
||||||
#undef HAS_SECURE_GETENV
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <acl/libacl.h> header file. */
|
|
||||||
#undef HAVE_ACL_LIBACL_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `arc4random_buf' function. */
|
|
||||||
#undef HAVE_ARC4RANDOM_BUF
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <attr/error_context.h> header file. */
|
|
||||||
#undef HAVE_ATTR_ERROR_CONTEXT_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <attr/libattr.h> header file. */
|
|
||||||
#undef HAVE_ATTR_LIBATTR_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the
|
|
||||||
CoreFoundation framework. */
|
|
||||||
#undef HAVE_CFLOCALECOPYCURRENT
|
|
||||||
|
|
||||||
/* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in
|
|
||||||
the CoreFoundation framework. */
|
|
||||||
#undef HAVE_CFPREFERENCESCOPYAPPVALUE
|
|
||||||
|
|
||||||
/* Define if the GNU dcgettext() function is already present or preinstalled.
|
|
||||||
*/
|
|
||||||
#undef HAVE_DCGETTEXT
|
|
||||||
|
|
||||||
/* Define to 1 if you have the declaration of `cygwin_conv_path', and to 0 if
|
|
||||||
you don't. */
|
|
||||||
#undef HAVE_DECL_CYGWIN_CONV_PATH
|
|
||||||
|
|
||||||
/* Define to 1 if you have the declaration of `PAM_DATA_SILENT', and to 0 if
|
|
||||||
you don't. */
|
|
||||||
#undef HAVE_DECL_PAM_DATA_SILENT
|
|
||||||
|
|
||||||
/* Define to 1 if you have the declaration of `PAM_DELETE_CRED', and to 0 if
|
|
||||||
you don't. */
|
|
||||||
#undef HAVE_DECL_PAM_DELETE_CRED
|
|
||||||
|
|
||||||
/* Define to 1 if you have the declaration of `PAM_ESTABLISH_CRED', and to 0
|
|
||||||
if you don't. */
|
|
||||||
#undef HAVE_DECL_PAM_ESTABLISH_CRED
|
|
||||||
|
|
||||||
/* Define to 1 if you have the declaration of `PAM_NEW_AUTHTOK_REQD', and to 0
|
|
||||||
if you don't. */
|
|
||||||
#undef HAVE_DECL_PAM_NEW_AUTHTOK_REQD
|
|
||||||
|
|
||||||
/* Define if you have the GNU dld library. */
|
|
||||||
#undef HAVE_DLD
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `dlerror' function. */
|
|
||||||
#undef HAVE_DLERROR
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <dlfcn.h> header file. */
|
|
||||||
#undef HAVE_DLFCN_H
|
|
||||||
|
|
||||||
/* Define if you have the _dyld_func_lookup function. */
|
|
||||||
#undef HAVE_DYLD
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `explicit_bzero' function. */
|
|
||||||
#undef HAVE_EXPLICIT_BZERO
|
|
||||||
|
|
||||||
/* Defined to 1 if you have the declaration of 'fgetpwent_r' */
|
|
||||||
#undef HAVE_FGETPWENT_R
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `getentropy' function. */
|
|
||||||
#undef HAVE_GETENTROPY
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `getrandom' function. */
|
|
||||||
#undef HAVE_GETRANDOM
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `getspnam_r' function. */
|
|
||||||
#undef HAVE_GETSPNAM_R
|
|
||||||
|
|
||||||
/* Define if the GNU gettext() function is already present or preinstalled. */
|
|
||||||
#undef HAVE_GETTEXT
|
|
||||||
|
|
||||||
/* Define if you have the iconv() function and it works. */
|
|
||||||
#undef HAVE_ICONV
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `innetgr' function. */
|
|
||||||
#undef HAVE_INNETGR
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
|
||||||
#undef HAVE_INTTYPES_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `lckpwdf' function. */
|
|
||||||
#undef HAVE_LCKPWDF
|
|
||||||
|
|
||||||
/* Define if you have the libdl library or equivalent. */
|
|
||||||
#undef HAVE_LIBDL
|
|
||||||
|
|
||||||
/* Define if libdlloader will be built on this platform */
|
|
||||||
#undef HAVE_LIBDLLOADER
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <linux/btrfs_tree.h> header file. */
|
|
||||||
#undef HAVE_LINUX_BTRFS_TREE_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <linux/magic.h> header file. */
|
|
||||||
#undef HAVE_LINUX_MAGIC_H
|
|
||||||
|
|
||||||
/* Define if struct lastlog has ll_host */
|
|
||||||
#undef HAVE_LL_HOST
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `lutimes' function. */
|
|
||||||
#undef HAVE_LUTIMES
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `memset_explicit' function. */
|
|
||||||
#undef HAVE_MEMSET_EXPLICIT
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <minix/config.h> header file. */
|
|
||||||
#undef HAVE_MINIX_CONFIG_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `putgrent' function. */
|
|
||||||
#undef HAVE_PUTGRENT
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `putpwent' function. */
|
|
||||||
#undef HAVE_PUTPWENT
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `putspent' function. */
|
|
||||||
#undef HAVE_PUTSPENT
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <readpassphrase.h> header file. */
|
|
||||||
#undef HAVE_READPASSPHRASE_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `rpmatch' function. */
|
|
||||||
#undef HAVE_RPMATCH
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <security/openpam.h> header file. */
|
|
||||||
#undef HAVE_SECURITY_OPENPAM_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <security/pam_misc.h> header file. */
|
|
||||||
#undef HAVE_SECURITY_PAM_MISC_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <selinux/selinux.h> header file. */
|
|
||||||
#undef HAVE_SELINUX_SELINUX_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <semanage/semanage.h> header file. */
|
|
||||||
#undef HAVE_SEMANAGE_SEMANAGE_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `sgetgrent' function. */
|
|
||||||
#undef HAVE_SGETGRENT
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `sgetpwent' function. */
|
|
||||||
#undef HAVE_SGETPWENT
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `sgetspent' function. */
|
|
||||||
#undef HAVE_SGETSPENT
|
|
||||||
|
|
||||||
/* Define if you have the shl_load function. */
|
|
||||||
#undef HAVE_SHL_LOAD
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <stdint.h> header file. */
|
|
||||||
#undef HAVE_STDINT_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <stdio.h> header file. */
|
|
||||||
#undef HAVE_STDIO_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <stdlib.h> header file. */
|
|
||||||
#undef HAVE_STDLIB_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `stpecpy' function. */
|
|
||||||
#undef HAVE_STPECPY
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `stpeprintf' function. */
|
|
||||||
#undef HAVE_STPEPRINTF
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <strings.h> header file. */
|
|
||||||
#undef HAVE_STRINGS_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <string.h> header file. */
|
|
||||||
#undef HAVE_STRING_H
|
|
||||||
|
|
||||||
/* Define to 1 if `ut_addr' is a member of `struct utmpx'. */
|
|
||||||
#undef HAVE_STRUCT_UTMPX_UT_ADDR
|
|
||||||
|
|
||||||
/* Define to 1 if `ut_addr_v6' is a member of `struct utmpx'. */
|
|
||||||
#undef HAVE_STRUCT_UTMPX_UT_ADDR_V6
|
|
||||||
|
|
||||||
/* Define to 1 if `ut_host' is a member of `struct utmpx'. */
|
|
||||||
#undef HAVE_STRUCT_UTMPX_UT_HOST
|
|
||||||
|
|
||||||
/* Define to 1 if `ut_name' is a member of `struct utmpx'. */
|
|
||||||
#undef HAVE_STRUCT_UTMPX_UT_NAME
|
|
||||||
|
|
||||||
/* Define to 1 if `ut_syslen' is a member of `struct utmpx'. */
|
|
||||||
#undef HAVE_STRUCT_UTMPX_UT_SYSLEN
|
|
||||||
|
|
||||||
/* Define to 1 if `ut_time' is a member of `struct utmpx'. */
|
|
||||||
#undef HAVE_STRUCT_UTMPX_UT_TIME
|
|
||||||
|
|
||||||
/* Define to 1 if `ut_xtime' is a member of `struct utmpx'. */
|
|
||||||
#undef HAVE_STRUCT_UTMPX_UT_XTIME
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <sys/statfs.h> header file. */
|
|
||||||
#undef HAVE_SYS_STATFS_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <sys/stat.h> header file. */
|
|
||||||
#undef HAVE_SYS_STAT_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
|
||||||
#undef HAVE_SYS_TYPES_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <tcb.h> header file. */
|
|
||||||
#undef HAVE_TCB_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <unistd.h> header file. */
|
|
||||||
#undef HAVE_UNISTD_H
|
|
||||||
|
|
||||||
/* Define to 1 if you have the `updwtmpx' function. */
|
|
||||||
#undef HAVE_UPDWTMPX
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <utime.h> header file. */
|
|
||||||
#undef HAVE_UTIME_H
|
|
||||||
|
|
||||||
/* Define to 1 if `utime(file, NULL)' sets file's timestamp to the present. */
|
|
||||||
#undef HAVE_UTIME_NULL
|
|
||||||
|
|
||||||
/* Define to support vendor settings. */
|
|
||||||
#undef HAVE_VENDORDIR
|
|
||||||
|
|
||||||
/* Define to 1 if you have the <wchar.h> header file. */
|
|
||||||
#undef HAVE_WCHAR_H
|
|
||||||
|
|
||||||
/* Define to the sub-directory where libtool stores uninstalled libraries. */
|
|
||||||
#undef LT_OBJDIR
|
|
||||||
|
|
||||||
/* Location of system mail spool directory. */
|
|
||||||
#undef MAIL_SPOOL_DIR
|
|
||||||
|
|
||||||
/* Name of user's mail spool file if stored in user's home directory. */
|
|
||||||
#undef MAIL_SPOOL_FILE
|
|
||||||
|
|
||||||
/* Name of package */
|
|
||||||
#undef PACKAGE
|
|
||||||
|
|
||||||
/* Define to the address where bug reports for this package should be sent. */
|
|
||||||
#undef PACKAGE_BUGREPORT
|
|
||||||
|
|
||||||
/* Define to the full name of this package. */
|
|
||||||
#undef PACKAGE_NAME
|
|
||||||
|
|
||||||
/* Define to the full name and version of this package. */
|
|
||||||
#undef PACKAGE_STRING
|
|
||||||
|
|
||||||
/* Define to the one symbol short name of this package. */
|
|
||||||
#undef PACKAGE_TARNAME
|
|
||||||
|
|
||||||
/* Define to the home page for this package. */
|
|
||||||
#undef PACKAGE_URL
|
|
||||||
|
|
||||||
/* Define to the version of this package. */
|
|
||||||
#undef PACKAGE_VERSION
|
|
||||||
|
|
||||||
/* Path to passwd program. */
|
|
||||||
#undef PASSWD_PROGRAM
|
|
||||||
|
|
||||||
/* Define to support the shadow group file. */
|
|
||||||
#undef SHADOWGRP
|
|
||||||
|
|
||||||
/* PAM conversation to use */
|
|
||||||
#undef SHADOW_PAM_CONVERSATION
|
|
||||||
|
|
||||||
/* The default shell. */
|
|
||||||
#undef SHELL
|
|
||||||
|
|
||||||
/* The size of `gid_t', as computed by sizeof. */
|
|
||||||
#undef SIZEOF_GID_T
|
|
||||||
|
|
||||||
/* The size of `uid_t', as computed by sizeof. */
|
|
||||||
#undef SIZEOF_UID_T
|
|
||||||
|
|
||||||
/* Define to support S/Key logins. */
|
|
||||||
#undef SKEY
|
|
||||||
|
|
||||||
/* Define to support newer BSD S/Key API */
|
|
||||||
#undef SKEY_BSD_STYLE
|
|
||||||
|
|
||||||
/* Define to 1 if all of the C90 standard headers exist (not just the ones
|
|
||||||
required in a freestanding environment). This macro is provided for
|
|
||||||
backward compatibility; new code need not use it. */
|
|
||||||
#undef STDC_HEADERS
|
|
||||||
|
|
||||||
/* Define to support /etc/suauth su access control. */
|
|
||||||
#undef SU_ACCESS
|
|
||||||
|
|
||||||
/* Define to allow the bcrypt password encryption algorithm */
|
|
||||||
#undef USE_BCRYPT
|
|
||||||
|
|
||||||
/* Define to support flushing of nscd caches */
|
|
||||||
#undef USE_NSCD
|
|
||||||
|
|
||||||
/* Define to support Pluggable Authentication Modules */
|
|
||||||
#undef USE_PAM
|
|
||||||
|
|
||||||
/* Define to allow the SHA256 and SHA512 password encryption algorithms */
|
|
||||||
#undef USE_SHA_CRYPT
|
|
||||||
|
|
||||||
/* Define to support flushing of sssd caches */
|
|
||||||
#undef USE_SSSD
|
|
||||||
|
|
||||||
/* Enable extensions on AIX 3, Interix. */
|
|
||||||
#ifndef _ALL_SOURCE
|
|
||||||
# undef _ALL_SOURCE
|
|
||||||
#endif
|
|
||||||
/* Enable general extensions on macOS. */
|
|
||||||
#ifndef _DARWIN_C_SOURCE
|
|
||||||
# undef _DARWIN_C_SOURCE
|
|
||||||
#endif
|
|
||||||
/* Enable general extensions on Solaris. */
|
|
||||||
#ifndef __EXTENSIONS__
|
|
||||||
# undef __EXTENSIONS__
|
|
||||||
#endif
|
|
||||||
/* Enable GNU extensions on systems that have them. */
|
|
||||||
#ifndef _GNU_SOURCE
|
|
||||||
# undef _GNU_SOURCE
|
|
||||||
#endif
|
|
||||||
/* Enable X/Open compliant socket functions that do not require linking
|
|
||||||
with -lxnet on HP-UX 11.11. */
|
|
||||||
#ifndef _HPUX_ALT_XOPEN_SOCKET_API
|
|
||||||
# undef _HPUX_ALT_XOPEN_SOCKET_API
|
|
||||||
#endif
|
|
||||||
/* Identify the host operating system as Minix.
|
|
||||||
This macro does not affect the system headers' behavior.
|
|
||||||
A future release of Autoconf may stop defining this macro. */
|
|
||||||
#ifndef _MINIX
|
|
||||||
# undef _MINIX
|
|
||||||
#endif
|
|
||||||
/* Enable general extensions on NetBSD.
|
|
||||||
Enable NetBSD compatibility extensions on Minix. */
|
|
||||||
#ifndef _NETBSD_SOURCE
|
|
||||||
# undef _NETBSD_SOURCE
|
|
||||||
#endif
|
|
||||||
/* Enable OpenBSD compatibility extensions on NetBSD.
|
|
||||||
Oddly enough, this does nothing on OpenBSD. */
|
|
||||||
#ifndef _OPENBSD_SOURCE
|
|
||||||
# undef _OPENBSD_SOURCE
|
|
||||||
#endif
|
|
||||||
/* Define to 1 if needed for POSIX-compatible behavior. */
|
|
||||||
#ifndef _POSIX_SOURCE
|
|
||||||
# undef _POSIX_SOURCE
|
|
||||||
#endif
|
|
||||||
/* Define to 2 if needed for POSIX-compatible behavior. */
|
|
||||||
#ifndef _POSIX_1_SOURCE
|
|
||||||
# undef _POSIX_1_SOURCE
|
|
||||||
#endif
|
|
||||||
/* Enable POSIX-compatible threading on Solaris. */
|
|
||||||
#ifndef _POSIX_PTHREAD_SEMANTICS
|
|
||||||
# undef _POSIX_PTHREAD_SEMANTICS
|
|
||||||
#endif
|
|
||||||
/* Enable extensions specified by ISO/IEC TS 18661-5:2014. */
|
|
||||||
#ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__
|
|
||||||
# undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__
|
|
||||||
#endif
|
|
||||||
/* Enable extensions specified by ISO/IEC TS 18661-1:2014. */
|
|
||||||
#ifndef __STDC_WANT_IEC_60559_BFP_EXT__
|
|
||||||
# undef __STDC_WANT_IEC_60559_BFP_EXT__
|
|
||||||
#endif
|
|
||||||
/* Enable extensions specified by ISO/IEC TS 18661-2:2015. */
|
|
||||||
#ifndef __STDC_WANT_IEC_60559_DFP_EXT__
|
|
||||||
# undef __STDC_WANT_IEC_60559_DFP_EXT__
|
|
||||||
#endif
|
|
||||||
/* Enable extensions specified by ISO/IEC TS 18661-4:2015. */
|
|
||||||
#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__
|
|
||||||
# undef __STDC_WANT_IEC_60559_FUNCS_EXT__
|
|
||||||
#endif
|
|
||||||
/* Enable extensions specified by ISO/IEC TS 18661-3:2015. */
|
|
||||||
#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__
|
|
||||||
# undef __STDC_WANT_IEC_60559_TYPES_EXT__
|
|
||||||
#endif
|
|
||||||
/* Enable extensions specified by ISO/IEC TR 24731-2:2010. */
|
|
||||||
#ifndef __STDC_WANT_LIB_EXT2__
|
|
||||||
# undef __STDC_WANT_LIB_EXT2__
|
|
||||||
#endif
|
|
||||||
/* Enable extensions specified by ISO/IEC 24747:2009. */
|
|
||||||
#ifndef __STDC_WANT_MATH_SPEC_FUNCS__
|
|
||||||
# undef __STDC_WANT_MATH_SPEC_FUNCS__
|
|
||||||
#endif
|
|
||||||
/* Enable extensions on HP NonStop. */
|
|
||||||
#ifndef _TANDEM_SOURCE
|
|
||||||
# undef _TANDEM_SOURCE
|
|
||||||
#endif
|
|
||||||
/* Enable X/Open extensions. Define to 500 only if necessary
|
|
||||||
to make mbstate_t available. */
|
|
||||||
#ifndef _XOPEN_SOURCE
|
|
||||||
# undef _XOPEN_SOURCE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* Define to allow the yescrypt password encryption algorithm */
|
|
||||||
#undef USE_YESCRYPT
|
|
||||||
|
|
||||||
/* Directory for distribution provided configuration files */
|
|
||||||
#undef VENDORDIR
|
|
||||||
|
|
||||||
/* Version number of package */
|
|
||||||
#undef VERSION
|
|
||||||
|
|
||||||
/* Build shadow with ACL support */
|
|
||||||
#undef WITH_ACL
|
|
||||||
|
|
||||||
/* Build shadow with Extended Attributes support */
|
|
||||||
#undef WITH_ATTR
|
|
||||||
|
|
||||||
/* Define if you want to enable Audit messages */
|
|
||||||
#undef WITH_AUDIT
|
|
||||||
|
|
||||||
/* Build shadow with BtrFS support */
|
|
||||||
#undef WITH_BTRFS
|
|
||||||
|
|
||||||
/* Build shadow without libbsd support */
|
|
||||||
#undef WITH_LIBBSD
|
|
||||||
|
|
||||||
/* Build shadow with SELinux support */
|
|
||||||
#undef WITH_SELINUX
|
|
||||||
|
|
||||||
/* Build with su */
|
|
||||||
#undef WITH_SU
|
|
||||||
|
|
||||||
/* Build shadow with tcb support (incomplete) */
|
|
||||||
#undef WITH_TCB
|
|
||||||
|
|
||||||
/* Number of bits in a file offset, on hosts where this is settable. */
|
|
||||||
#undef _FILE_OFFSET_BITS
|
|
||||||
|
|
||||||
/* Define for large files, on AIX-style hosts. */
|
|
||||||
#undef _LARGE_FILES
|
|
||||||
-723
@@ -1,723 +0,0 @@
|
|||||||
dnl Process this file with autoconf to produce a configure script.
|
|
||||||
AC_PREREQ([2.69])
|
|
||||||
m4_define([libsubid_abi_major], [5])
|
|
||||||
m4_define([libsubid_abi_minor], [0])
|
|
||||||
m4_define([libsubid_abi_micro], [0])
|
|
||||||
m4_define([libsubid_abi], [libsubid_abi_major.libsubid_abi_minor.libsubid_abi_micro])
|
|
||||||
|
|
||||||
AC_INIT([shadow], [4.19.2], [pkg-shadow-devel@lists.alioth.debian.org], [],
|
|
||||||
[https://github.com/shadow-maint/shadow])
|
|
||||||
AC_CONFIG_MACRO_DIRS([m4])
|
|
||||||
AC_CONFIG_AUX_DIR([build-aux])
|
|
||||||
AC_CONFIG_HEADERS([config.h])
|
|
||||||
|
|
||||||
AM_INIT_AUTOMAKE([1.11 foreign dist-xz subdir-objects tar-pax])
|
|
||||||
AM_SILENT_RULES([yes])
|
|
||||||
|
|
||||||
AC_SUBST([AM_DISTCHECK_CONFIGURE_FLAGS], ["$ac_configure_args"])
|
|
||||||
|
|
||||||
AC_SUBST([LIBSUBID_ABI_MAJOR], [libsubid_abi_major])
|
|
||||||
AC_SUBST([LIBSUBID_ABI_MINOR], [libsubid_abi_minor])
|
|
||||||
AC_SUBST([LIBSUBID_ABI_MICRO], [libsubid_abi_micro])
|
|
||||||
AC_SUBST([LIBSUBID_ABI], [libsubid_abi])
|
|
||||||
|
|
||||||
dnl Some hacks...
|
|
||||||
test "x$prefix" = "xNONE" && prefix="/usr"
|
|
||||||
test "X$prefix" = "X/usr" && exec_prefix=""
|
|
||||||
|
|
||||||
AC_USE_SYSTEM_EXTENSIONS
|
|
||||||
|
|
||||||
AC_ENABLE_STATIC
|
|
||||||
AC_ENABLE_SHARED
|
|
||||||
|
|
||||||
AM_MAINTAINER_MODE
|
|
||||||
|
|
||||||
dnl Checks for programs.
|
|
||||||
AC_PROG_CC
|
|
||||||
AC_PROG_LN_S
|
|
||||||
LT_INIT
|
|
||||||
LT_LIB_DLLOAD
|
|
||||||
|
|
||||||
dnl Checks for libraries.
|
|
||||||
|
|
||||||
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([arc4random_buf \
|
|
||||||
getentropy getrandom \
|
|
||||||
lckpwdf lutimes \
|
|
||||||
updwtmpx innetgr \
|
|
||||||
getspnam_r \
|
|
||||||
rpmatch \
|
|
||||||
memset_explicit explicit_bzero stpecpy stpeprintf])
|
|
||||||
AC_SYS_LARGEFILE
|
|
||||||
|
|
||||||
dnl Checks for typedefs, structures, and compiler characteristics.
|
|
||||||
|
|
||||||
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>]])
|
|
||||||
|
|
||||||
dnl Checks for library functions.
|
|
||||||
AC_FUNC_UTIME_NULL
|
|
||||||
AC_REPLACE_FUNCS([putgrent putpwent putspent])
|
|
||||||
AC_REPLACE_FUNCS([sgetgrent sgetpwent sgetspent])
|
|
||||||
|
|
||||||
AC_CHECK_FUNC([setpgrp])
|
|
||||||
AC_CHECK_FUNC([secure_getenv],
|
|
||||||
[AC_DEFINE([HAS_SECURE_GETENV],[1],[Defined to 1 if you have the declaration of 'secure_getenv'])]
|
|
||||||
)
|
|
||||||
|
|
||||||
AC_CACHE_CHECK([location of shared mail directory], [shadow_cv_maildir],
|
|
||||||
[for shadow_cv_maildir in /var/mail /var/spool/mail /usr/spool/mail /usr/mail none; do
|
|
||||||
if test -d $shadow_cv_maildir; then
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done])
|
|
||||||
if test $shadow_cv_maildir != none; then
|
|
||||||
AC_DEFINE_UNQUOTED([MAIL_SPOOL_DIR], ["$shadow_cv_maildir"],
|
|
||||||
[Location of system mail spool directory.])
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_CACHE_CHECK([location of user mail file], [shadow_cv_mailfile],
|
|
||||||
[for shadow_cv_mailfile in Mailbox mailbox Mail mail .mail none; do
|
|
||||||
if test -f $HOME/$shadow_cv_mailfile; then
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done])
|
|
||||||
if test $shadow_cv_mailfile != none; then
|
|
||||||
AC_DEFINE_UNQUOTED([MAIL_SPOOL_FILE], ["$shadow_cv_mailfile"],
|
|
||||||
[Name of user's mail spool file if stored in user's home directory.])
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_CACHE_CHECK([location of faillog/lastlog/wtmp], [shadow_cv_logdir],
|
|
||||||
[for shadow_cv_logdir in /var/log /var/adm /usr/adm /etc; do
|
|
||||||
if test -d $shadow_cv_logdir; then
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done])
|
|
||||||
AC_DEFINE_UNQUOTED([FAILLOG_FILE], ["$shadow_cv_logdir/faillog"],
|
|
||||||
[Path for faillog file.])
|
|
||||||
|
|
||||||
AC_DEFINE_UNQUOTED([PASSWD_PROGRAM], ["$exec_prefix/bin/passwd"],
|
|
||||||
[Path to passwd program.])
|
|
||||||
|
|
||||||
AC_ARG_ENABLE([shadowgrp],
|
|
||||||
[AS_HELP_STRING([--enable-shadowgrp], [enable shadow group support @<:@default=yes@:>@])],
|
|
||||||
[case "${enableval}" in
|
|
||||||
yes) enable_shadowgrp="yes" ;;
|
|
||||||
no) enable_shadowgrp="no" ;;
|
|
||||||
*) AC_MSG_ERROR([bad value ${enableval} for --enable-shadowgrp]) ;;
|
|
||||||
esac],
|
|
||||||
[enable_shadowgrp="yes"]
|
|
||||||
)
|
|
||||||
|
|
||||||
AC_ARG_ENABLE([man],
|
|
||||||
[AS_HELP_STRING([--enable-man],
|
|
||||||
[regenerate roff man pages from Docbook @<:@default=no@:>@])],
|
|
||||||
[enable_man="${enableval}"],
|
|
||||||
[enable_man="no"]
|
|
||||||
)
|
|
||||||
|
|
||||||
AC_ARG_ENABLE([account-tools-setuid],
|
|
||||||
[AS_HELP_STRING([--enable-account-tools-setuid],
|
|
||||||
[Install the user and group management tools setuid and authenticate the callers. This requires --with-libpam.])],
|
|
||||||
[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="no"]
|
|
||||||
)
|
|
||||||
|
|
||||||
AC_ARG_ENABLE([subordinate-ids],
|
|
||||||
[AS_HELP_STRING([--enable-subordinate-ids],
|
|
||||||
[support subordinate ids @<:@default=yes@:>@])],
|
|
||||||
[enable_subids="${enableval}"],
|
|
||||||
[enable_subids="maybe"]
|
|
||||||
)
|
|
||||||
|
|
||||||
AC_ARG_ENABLE([lastlog],
|
|
||||||
[AS_HELP_STRING([--enable-lastlog],
|
|
||||||
[enable lastlog @<:@default=no@:>@])],
|
|
||||||
[enable_lastlog="${enableval}"],
|
|
||||||
[enable_lastlog="no"]
|
|
||||||
)
|
|
||||||
|
|
||||||
AC_ARG_ENABLE([logind],
|
|
||||||
[AS_HELP_STRING([--disable-logind],
|
|
||||||
[disable logind integration])],
|
|
||||||
[
|
|
||||||
AS_CASE([${enableval}],
|
|
||||||
[yes],[],
|
|
||||||
[no],[],
|
|
||||||
[AC_MSG_ERROR([bad parameter value for --enable-logind=${enableval}. ]dnl
|
|
||||||
[Supported values are: --enable-logind (or --enable-logind=yes) and --disable-logind (or --enable-logind=no).])]
|
|
||||||
)
|
|
||||||
],
|
|
||||||
[enable_logind="yes"]
|
|
||||||
)
|
|
||||||
|
|
||||||
AC_ARG_WITH([audit],
|
|
||||||
[AS_HELP_STRING([--with-audit], [use auditing support @<:@default=yes if found@:>@])],
|
|
||||||
[with_audit=$withval], [with_audit=maybe])
|
|
||||||
AC_ARG_WITH([libpam],
|
|
||||||
[AS_HELP_STRING([--with-libpam], [use libpam for PAM support @<:@default=yes if found@:>@])],
|
|
||||||
[with_libpam=$withval], [with_libpam=maybe])
|
|
||||||
AC_ARG_WITH([btrfs],
|
|
||||||
[AS_HELP_STRING([--with-btrfs], [add BtrFS support @<:@default=yes if found@:>@])],
|
|
||||||
[with_btrfs=$withval], [with_btrfs=maybe])
|
|
||||||
AC_ARG_WITH([selinux],
|
|
||||||
[AS_HELP_STRING([--with-selinux], [use SELinux support @<:@default=yes if found@:>@])],
|
|
||||||
[with_selinux=$withval], [with_selinux=maybe])
|
|
||||||
AC_ARG_WITH([acl],
|
|
||||||
[AS_HELP_STRING([--with-acl], [use ACL support @<:@default=yes if found@:>@])],
|
|
||||||
[with_acl=$withval], [with_acl=maybe])
|
|
||||||
AC_ARG_WITH([attr],
|
|
||||||
[AS_HELP_STRING([--with-attr], [use Extended Attribute support @<:@default=yes if found@:>@])],
|
|
||||||
[with_attr=$withval], [with_attr=maybe])
|
|
||||||
AC_ARG_WITH([skey],
|
|
||||||
[AS_HELP_STRING([--with-skey], [use S/Key support @<:@default=no@:>@])],
|
|
||||||
[with_skey=$withval], [with_skey=no])
|
|
||||||
AC_ARG_WITH([tcb],
|
|
||||||
[AS_HELP_STRING([--with-tcb], [use tcb support (incomplete) @<:@default=yes if found@:>@])],
|
|
||||||
[with_tcb=$withval], [with_tcb=maybe])
|
|
||||||
AC_ARG_WITH([sha-crypt],
|
|
||||||
[AS_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([bcrypt],
|
|
||||||
[AS_HELP_STRING([--with-bcrypt], [allow the bcrypt password encryption algorithm @<:@default=no@:>@])],
|
|
||||||
[with_bcrypt=$withval], [with_bcrypt=no])
|
|
||||||
AC_ARG_WITH([yescrypt],
|
|
||||||
[AS_HELP_STRING([--with-yescrypt], [allow the yescrypt password encryption algorithm @<:@default=no@:>@])],
|
|
||||||
[with_yescrypt=$withval], [with_yescrypt=no])
|
|
||||||
AC_ARG_WITH([nscd],
|
|
||||||
[AS_HELP_STRING([--with-nscd], [enable support for nscd @<:@default=yes@:>@])],
|
|
||||||
[with_nscd=$withval], [with_nscd=yes])
|
|
||||||
AC_ARG_WITH([sssd],
|
|
||||||
[AS_HELP_STRING([--with-sssd], [enable support for flushing sssd caches @<:@default=yes@:>@])],
|
|
||||||
[with_sssd=$withval], [with_sssd=yes])
|
|
||||||
AC_ARG_WITH([group-name-max-length],
|
|
||||||
[AS_HELP_STRING([--with-group-name-max-length], [set max group name length @<:@default=32@:>@])],
|
|
||||||
[with_group_name_max_length=$withval], [with_group_name_max_length=yes])
|
|
||||||
AC_ARG_WITH([su],
|
|
||||||
[AS_HELP_STRING([--with-su], [build and install su program and man page @<:@default=yes@:>@])],
|
|
||||||
[with_su=$withval], [with_su=yes])
|
|
||||||
AC_ARG_WITH([libbsd],
|
|
||||||
[AS_HELP_STRING([--with-libbsd], [use libbsd support @<:@default=yes if found@:>@])],
|
|
||||||
[with_libbsd=$withval], [with_libbsd=yes])
|
|
||||||
|
|
||||||
if test "X$with_group_name_max_length" = "Xno" ; then
|
|
||||||
with_group_name_max_length=0
|
|
||||||
elif test "X$with_group_name_max_length" = "Xyes" ; then
|
|
||||||
with_group_name_max_length=32
|
|
||||||
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 "X$with_sha_crypt" = "Xyes"; then
|
|
||||||
AC_DEFINE([USE_SHA_CRYPT], [1], [Define to allow the SHA256 and SHA512 password encryption algorithms])
|
|
||||||
fi
|
|
||||||
|
|
||||||
AM_CONDITIONAL([USE_BCRYPT], [test "x$with_bcrypt" = "xyes"])
|
|
||||||
if test "X$with_bcrypt" = "Xyes"; then
|
|
||||||
AC_DEFINE([USE_BCRYPT], [1], [Define to allow the bcrypt password encryption algorithm])
|
|
||||||
fi
|
|
||||||
|
|
||||||
AM_CONDITIONAL([USE_YESCRYPT], [test "x$with_yescrypt" = "xyes"])
|
|
||||||
if test "X$with_yescrypt" = "Xyes"; then
|
|
||||||
AC_DEFINE([USE_YESCRYPT], [1], [Define to allow the yescrypt password encryption algorithm])
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "X$with_nscd" = "Xyes"; 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
|
|
||||||
|
|
||||||
if test "X$with_sssd" = "Xyes"; then
|
|
||||||
AC_CHECK_FUNC([posix_spawn],
|
|
||||||
[AC_DEFINE([USE_SSSD], [1], [Define to support flushing of sssd caches])],
|
|
||||||
[AC_MSG_ERROR([posix_spawn is needed for sssd support])])
|
|
||||||
fi
|
|
||||||
|
|
||||||
AS_IF([test "$with_su" != "no"], [AC_DEFINE([WITH_SU], [1], [Build with su])])
|
|
||||||
AM_CONDITIONAL([WITH_SU], [test "x$with_su" != "xno"])
|
|
||||||
|
|
||||||
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
|
|
||||||
dnl needed (Linux glibc, Irix), but still link it if needed (Solaris).
|
|
||||||
|
|
||||||
AC_SEARCH_LIBS([gethostbyname], [nsl])
|
|
||||||
|
|
||||||
PKG_CHECK_MODULES([CMOCKA], [cmocka], [have_cmocka="yes"],
|
|
||||||
[AC_MSG_WARN([libcmocka not found, cmocka tests will not be built])])
|
|
||||||
AM_CONDITIONAL([HAVE_CMOCKA], [test x$have_cmocka = xyes])
|
|
||||||
|
|
||||||
AC_ARG_ENABLE([vendordir],
|
|
||||||
[AS_HELP_STRING([--enable-vendordir=DIR], [Directory for distribution provided configuration files])],[],[])
|
|
||||||
AC_CHECK_LIB([econf],[econf_readDirs],[LIBECONF="-leconf"],[LIBECONF=""])
|
|
||||||
if test -n "$LIBECONF"; then
|
|
||||||
AC_DEFINE_UNQUOTED([VENDORDIR], ["$enable_vendordir"],
|
|
||||||
[Directory for distribution provided configuration files])
|
|
||||||
ECONF_CPPFLAGS="-DUSE_ECONF=1"
|
|
||||||
fi
|
|
||||||
AC_SUBST([ECONF_CPPFLAGS])
|
|
||||||
AC_SUBST([LIBECONF])
|
|
||||||
AC_SUBST([VENDORDIR], [$enable_vendordir])
|
|
||||||
if test "x$enable_vendordir" != x; then
|
|
||||||
AC_DEFINE([HAVE_VENDORDIR], [1], [Define to support vendor settings.])
|
|
||||||
fi
|
|
||||||
AM_CONDITIONAL([HAVE_VENDORDIR], [test "x$enable_vendordir" != x])
|
|
||||||
|
|
||||||
if test "X$enable_shadowgrp" = "Xyes"; then
|
|
||||||
AC_DEFINE([SHADOWGRP], [1], [Define to support the shadow group file.])
|
|
||||||
fi
|
|
||||||
AM_CONDITIONAL([SHADOWGRP], [test "x$enable_shadowgrp" = "xyes"])
|
|
||||||
|
|
||||||
if test "X$enable_man" = "Xyes"; then
|
|
||||||
dnl
|
|
||||||
dnl Check for xsltproc
|
|
||||||
dnl
|
|
||||||
AC_PATH_PROG([XSLTPROC], [xsltproc])
|
|
||||||
if test -z "$XSLTPROC"; then
|
|
||||||
enable_man=no
|
|
||||||
AC_MSG_ERROR([xsltproc is missing.])
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl check for DocBook DTD and stylesheets in the local catalog.
|
|
||||||
JH_CHECK_XML_CATALOG([-//OASIS//DTD DocBook XML V4.5//EN],
|
|
||||||
[DocBook XML DTD V4.5], [], [enable_man=no])
|
|
||||||
JH_CHECK_XML_CATALOG([http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl],
|
|
||||||
[DocBook XSL Stylesheets >= 1.70.1], [], [enable_man=no])
|
|
||||||
fi
|
|
||||||
AM_CONDITIONAL([ENABLE_REGENERATE_MAN], [test "x$enable_man" != "xno"])
|
|
||||||
|
|
||||||
if test "$enable_subids" != "no"; then
|
|
||||||
dnl
|
|
||||||
dnl FIXME: check if 32 bit UIDs/GIDs are supported by libc
|
|
||||||
dnl
|
|
||||||
AC_CHECK_SIZEOF([uid_t],[], [[#include "sys/types.h"]])
|
|
||||||
AC_CHECK_SIZEOF([gid_t],[], [[#include "sys/types.h"]])
|
|
||||||
|
|
||||||
if test "$ac_cv_sizeof_uid_t" -ge 4 && test "$ac_cv_sizeof_gid_t" -ge 4; then
|
|
||||||
AC_DEFINE([ENABLE_SUBIDS], [1], [Define to support the subordinate IDs.])
|
|
||||||
enable_subids="yes"
|
|
||||||
else
|
|
||||||
if test "x$enable_subids" = "xyes"; then
|
|
||||||
AC_MSG_ERROR([Cannot enable support the subordinate IDs on systems where gid_t or uid_t has less than 32 bits])
|
|
||||||
fi
|
|
||||||
enable_subids="no"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
AM_CONDITIONAL([ENABLE_SUBIDS], [test "x$enable_subids" != "xno"])
|
|
||||||
|
|
||||||
if test "X$enable_lastlog" = "Xyes" && test "X$ac_cv_header_lastlog_h" = "Xyes"; then
|
|
||||||
AC_CACHE_CHECK([for ll_host in struct lastlog],
|
|
||||||
[ac_cv_struct_lastlog_ll_host],
|
|
||||||
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <lastlog.h>]],
|
|
||||||
[struct lastlog ll; char *cp = ll.ll_host;])],
|
|
||||||
[ac_cv_struct_lastlog_ll_host=yes],
|
|
||||||
[ac_cv_struct_lastlog_ll_host=no])
|
|
||||||
]
|
|
||||||
)
|
|
||||||
|
|
||||||
if test "X$ac_cv_struct_lastlog_ll_host" = "Xyes"; then
|
|
||||||
AC_DEFINE([HAVE_LL_HOST], [1],
|
|
||||||
[Define if struct lastlog has ll_host])
|
|
||||||
AC_DEFINE([ENABLE_LASTLOG], [1], [Define to support lastlog.])
|
|
||||||
enable_lastlog="yes"
|
|
||||||
else
|
|
||||||
AC_MSG_ERROR([Cannot enable support for lastlog on systems where the data structures aren't available])
|
|
||||||
enable_lastlog="no"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
AM_CONDITIONAL([ENABLE_LASTLOG], [test "x$enable_lastlog" != "xno"])
|
|
||||||
|
|
||||||
AC_SUBST([LIBSYSTEMD])
|
|
||||||
if test "X$enable_logind" = "Xyes"; then
|
|
||||||
AC_CHECK_LIB([systemd], [sd_session_get_remote_host],
|
|
||||||
[
|
|
||||||
LIBSYSTEMD=-lsystemd
|
|
||||||
AC_DEFINE([ENABLE_LOGIND], [1], [Define to manage session support with logind.])
|
|
||||||
],[
|
|
||||||
AC_MSG_ERROR([libsystemd not found. If logind integration is not required, disable it using the --disable-logind option. ]dnl
|
|
||||||
[ If logind integration is required, consider installing systemd or another package that provides libsystemd.])
|
|
||||||
]
|
|
||||||
)
|
|
||||||
fi
|
|
||||||
AM_CONDITIONAL([ENABLE_LOGIND], [test "X$enable_logind" = "Xyes"])
|
|
||||||
|
|
||||||
AC_CHECK_LIB([crypt], [crypt], [LIBCRYPT=-lcrypt],
|
|
||||||
[AC_MSG_ERROR([crypt() not found])])
|
|
||||||
AC_SUBST([LIBCRYPT])
|
|
||||||
|
|
||||||
AC_SUBST([LIBBSD])
|
|
||||||
if test "$with_libbsd" != "no"; then
|
|
||||||
AC_SEARCH_LIBS([readpassphrase], [bsd], [], [
|
|
||||||
AC_MSG_ERROR([readpassphrase() is missing, either from libc or libbsd])
|
|
||||||
])
|
|
||||||
AS_IF([test "X$ac_cv_search_readpassphrase" = "X-lbsd"], [
|
|
||||||
PKG_CHECK_MODULES([LIBBSD], [libbsd-overlay])
|
|
||||||
])
|
|
||||||
dnl Make sure either the libc or libbsd provide the header.
|
|
||||||
save_CFLAGS="$CFLAGS"
|
|
||||||
CFLAGS="$CFLAGS $LIBBSD_CFLAGS"
|
|
||||||
AC_CHECK_HEADERS([readpassphrase.h])
|
|
||||||
AS_IF([test "$ac_cv_header_readpassphrase_h" != "yes"], [
|
|
||||||
AC_MSG_ERROR([readpassphrase.h is missing])
|
|
||||||
])
|
|
||||||
CFLAGS="$save_CFLAGS"
|
|
||||||
AC_DEFINE([WITH_LIBBSD], [1], [Build shadow with libbsd support])
|
|
||||||
else
|
|
||||||
AC_DEFINE([WITH_LIBBSD], [0], [Build shadow without libbsd support])
|
|
||||||
fi
|
|
||||||
AM_CONDITIONAL([WITH_LIBBSD], [test x$with_libbsd = xyes])
|
|
||||||
|
|
||||||
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 "X$acl_header$with_acl" = "Xnoyes" ; then
|
|
||||||
AC_MSG_ERROR([acl/libacl.h or attr/error_context.h is missing])
|
|
||||||
elif test "X$acl_header" = "Xyes" ; 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 "X$acl_lib$with_acl" = "Xnoyes" ; then
|
|
||||||
AC_MSG_ERROR([libacl not found])
|
|
||||||
elif test "X$acl_lib" = "Xno" ; 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 "X$attr_header$with_attr" = "noyes" ; then
|
|
||||||
AC_MSG_ERROR([attr/libattr.h or attr/error_context.h is missing])
|
|
||||||
elif test "X$attr_header" = "Xyes" ; 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 "X$attr_lib$with_attr" = "Xnoyes" ; then
|
|
||||||
AC_MSG_ERROR([libattr not found])
|
|
||||||
elif test "X$attr_lib" = "Xno" ; 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" != "no"; then
|
|
||||||
AC_CHECK_HEADER([libaudit.h], [audit_header="yes"], [audit_header="no"])
|
|
||||||
if test "X$audit_header$with_audit" = "Xnoyes" ; then
|
|
||||||
AC_MSG_ERROR([libaudit.h is missing])
|
|
||||||
elif test "X$audit_header" = "Xyes"; 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 "X$audit_header$with_audit" = "Xnoyes" ; 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 "X$audit_header" = "Xyes"; then
|
|
||||||
AC_CHECK_LIB([audit], [audit_log_acct_message],
|
|
||||||
[audit_lib="yes"], [audit_lib="no"])
|
|
||||||
if test "X$audit_lib$with_audit" = "Xnoyes" ; then
|
|
||||||
AC_MSG_ERROR([libaudit not found])
|
|
||||||
elif test "X$audit_lib" = "Xno" ; 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
|
|
||||||
|
|
||||||
if test "$with_btrfs" != "no"; then
|
|
||||||
AC_CHECK_HEADERS([sys/statfs.h linux/magic.h linux/btrfs_tree.h], \
|
|
||||||
[btrfs_headers="yes"], [btrfs_headers="no"])
|
|
||||||
if test "X$btrfs_headers$with_btrfs" = "Xnoyes" ; then
|
|
||||||
AC_MSG_ERROR([One of sys/statfs.h linux/magic.h linux/btrfs_tree.h is missing])
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "X$btrfs_headers" = "Xyes" ; then
|
|
||||||
AC_DEFINE([WITH_BTRFS], [1], [Build shadow with BtrFS support])
|
|
||||||
with_btrfs="yes"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
AM_CONDITIONAL([WITH_BTRFS], [test x$with_btrfs = xyes])
|
|
||||||
|
|
||||||
AC_SUBST([LIBSELINUX])
|
|
||||||
AC_SUBST([LIBSEMANAGE])
|
|
||||||
if test "$with_selinux" != "no"; then
|
|
||||||
AC_CHECK_HEADERS([selinux/selinux.h], [selinux_header="yes"], [selinux_header="no"])
|
|
||||||
if test "X$selinux_header$with_selinux" = "Xnoyes" ; then
|
|
||||||
AC_MSG_ERROR([selinux/selinux.h is missing])
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_CHECK_HEADERS([semanage/semanage.h], [semanage_header="yes"], [semanage_header="no"])
|
|
||||||
if test "X$semanage_header$with_selinux" = "Xnoyes" ; then
|
|
||||||
AC_MSG_ERROR([semanage/semanage.h is missing])
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "X$selinux_header$semanage_header" = "Xyesyes" ; then
|
|
||||||
AC_CHECK_LIB([selinux], [is_selinux_enabled], [selinux_lib="yes"], [selinux_lib="no"])
|
|
||||||
if test "X$selinux_lib$with_selinux" = "Xnoyes" ; then
|
|
||||||
AC_MSG_ERROR([libselinux not found])
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_CHECK_LIB([semanage], [semanage_connect], [semanage_lib="yes"], [semanage_lib="no"])
|
|
||||||
if test "X$semanage_lib$with_selinux" = "Xnoyes" ; then
|
|
||||||
AC_MSG_ERROR([libsemanage not found])
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "X$selinux_lib$semanage_lib" = "Xyesyes" ; then
|
|
||||||
AC_DEFINE([WITH_SELINUX], [1],
|
|
||||||
[Build shadow with SELinux support])
|
|
||||||
LIBSELINUX="-lselinux"
|
|
||||||
LIBSEMANAGE="-lsemanage"
|
|
||||||
with_selinux="yes"
|
|
||||||
else
|
|
||||||
with_selinux="no"
|
|
||||||
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 "X$tcb_header$with_tcb" = "Xnoyes" ; then
|
|
||||||
AC_MSG_ERROR([tcb.h is missing])
|
|
||||||
elif test "X$tcb_header" = "Xyes" ; then
|
|
||||||
AC_CHECK_LIB([tcb], [tcb_is_suspect], [tcb_lib="yes"], [tcb_lib="no"])
|
|
||||||
if test "X$tcb_lib$with_tcb" = "Xnoyes" ; then
|
|
||||||
AC_MSG_ERROR([libtcb not found])
|
|
||||||
elif test "X$tcb_lib" = "Xno" ; 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" != "no"; then
|
|
||||||
AC_CHECK_LIB([pam], [pam_start],
|
|
||||||
[pam_lib="yes"], [pam_lib="no"])
|
|
||||||
if test "X$pam_lib$with_libpam" = "Xnoyes" ; 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 "X$pam_conv_function$with_libpam" = "Xnoyes" ; 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 "X$pam_headers_found$with_libpam" = "Xnoyes" ; then
|
|
||||||
AC_MSG_ERROR([PAM headers not found])
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
if test "X$pam_lib$pam_headers_found" = "Xyesyes" && test "$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 "X$with_libpam" = "Xyes"; 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 conversation to use])
|
|
||||||
|
|
||||||
AC_MSG_CHECKING([use login and su access checking if PAM not used])
|
|
||||||
AC_MSG_RESULT([no])
|
|
||||||
else
|
|
||||||
AC_DEFINE([SU_ACCESS], [1], [Define to support /etc/suauth su access control.])
|
|
||||||
AC_MSG_CHECKING([use login and su access checking if PAM not used])
|
|
||||||
AC_MSG_RESULT([yes])
|
|
||||||
fi
|
|
||||||
AM_CONDITIONAL([USE_PAM], [test "X$with_libpam" = "Xyes"])
|
|
||||||
|
|
||||||
if test "$enable_acct_tools_setuid" != "no"; then
|
|
||||||
if test "$with_libpam" != "yes"; then
|
|
||||||
if test "X$enable_acct_tools_setuid" = "Xyes"; 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 "X$enable_acct_tools_setuid" = "Xyes"; 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_ARG_WITH([fcaps],
|
|
||||||
[AS_HELP_STRING([--with-fcaps], [use file capabilities instead of suid binaries for newuidmap/newgidmap @<:@default=no@:>@])],
|
|
||||||
[with_fcaps=$withval], [with_fcaps=no])
|
|
||||||
AM_CONDITIONAL([FCAPS], [test "x$with_fcaps" = "xyes"])
|
|
||||||
|
|
||||||
if test "x$with_fcaps" = "xyes"; then
|
|
||||||
AC_CHECK_PROGS([capcmd], ["setcap"])
|
|
||||||
if test "x$capcmd" = "x" ; then
|
|
||||||
AC_MSG_ERROR([setcap command not available])
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_SUBST([LIBSKEY])
|
|
||||||
AC_SUBST([LIBMD])
|
|
||||||
if test "X$with_skey" = "Xyes"; then
|
|
||||||
AC_CHECK_LIB([md], [MD5Init], [LIBMD=-lmd])
|
|
||||||
AC_CHECK_LIB([skey], [skeychallenge], [LIBSKEY=-lskey],
|
|
||||||
[AC_MSG_ERROR([libskey 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_COMPILE_IFELSE([AC_LANG_PROGRAM([[
|
|
||||||
#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
|
|
||||||
|
|
||||||
AC_CHECK_FUNC([fgetpwent_r], [AC_DEFINE([HAVE_FGETPWENT_R], [1], [Defined to 1 if you have the declaration of 'fgetpwent_r'])])
|
|
||||||
|
|
||||||
AC_DEFINE_UNQUOTED([SHELL], ["$SHELL"], [The default shell.])
|
|
||||||
|
|
||||||
AM_GNU_GETTEXT_VERSION([0.19])
|
|
||||||
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/da/Makefile
|
|
||||||
man/de/Makefile
|
|
||||||
man/es/Makefile
|
|
||||||
man/fi/Makefile
|
|
||||||
man/fr/Makefile
|
|
||||||
man/hu/Makefile
|
|
||||||
man/id/Makefile
|
|
||||||
man/it/Makefile
|
|
||||||
man/ja/Makefile
|
|
||||||
man/ko/Makefile
|
|
||||||
man/pl/Makefile
|
|
||||||
man/pt_BR/Makefile
|
|
||||||
man/ru/Makefile
|
|
||||||
man/sv/Makefile
|
|
||||||
man/tr/Makefile
|
|
||||||
man/uk/Makefile
|
|
||||||
man/zh_CN/Makefile
|
|
||||||
man/zh_TW/Makefile
|
|
||||||
lib/Makefile
|
|
||||||
libsubid/Makefile
|
|
||||||
libsubid/subid.h
|
|
||||||
src/Makefile
|
|
||||||
etc/Makefile
|
|
||||||
etc/pam.d/Makefile
|
|
||||||
etc/shadow-maint/Makefile
|
|
||||||
tests/unit/Makefile
|
|
||||||
])
|
|
||||||
AC_OUTPUT
|
|
||||||
|
|
||||||
AC_MSG_NOTICE([shadow ${PACKAGE_VERSION} has been configured with the following features:
|
|
||||||
|
|
||||||
auditing support: $with_audit
|
|
||||||
PAM support: $with_libpam
|
|
||||||
suid account management tools: $enable_acct_tools_setuid
|
|
||||||
SELinux support: $with_selinux
|
|
||||||
BtrFS support: $with_btrfs
|
|
||||||
ACL support: $with_acl
|
|
||||||
Extended Attributes support: $with_attr
|
|
||||||
tcb support (incomplete): $with_tcb
|
|
||||||
shadow group support: $enable_shadowgrp
|
|
||||||
S/Key support: $with_skey
|
|
||||||
SHA passwords encryption: $with_sha_crypt
|
|
||||||
bcrypt passwords encryption: $with_bcrypt
|
|
||||||
yescrypt passwords encryption: $with_yescrypt
|
|
||||||
nscd support: $with_nscd
|
|
||||||
sssd support: $with_sssd
|
|
||||||
subordinate IDs support: $enable_subids
|
|
||||||
enable lastlog: $enable_lastlog
|
|
||||||
enable logind: $enable_logind
|
|
||||||
use file caps: $with_fcaps
|
|
||||||
install su: $with_su
|
|
||||||
enabled vendor dir: $enable_vendordir
|
|
||||||
|
|
||||||
])
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
# This is a dummy Makefile.am to get automake work flawlessly,
|
|
||||||
# and also cooperate to make a distribution for `make dist'
|
|
||||||
|
|
||||||
EXTRA_DIST = HOWTO README.limits
|
|
||||||
-505
@@ -1,505 +0,0 @@
|
|||||||
# Makefile.in generated by automake 1.16.5 from Makefile.am.
|
|
||||||
# @configure_input@
|
|
||||||
|
|
||||||
# Copyright (C) 1994-2021 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@
|
|
||||||
|
|
||||||
# This is a dummy Makefile.am to get automake work flawlessly,
|
|
||||||
# and also cooperate to make a distribution for `make dist'
|
|
||||||
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@
|
|
||||||
subdir = doc
|
|
||||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
|
||||||
am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
|
|
||||||
$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
|
|
||||||
$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
|
|
||||||
$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
|
|
||||||
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
|
|
||||||
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
|
|
||||||
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
|
|
||||||
$(top_srcdir)/m4/progtest.m4 $(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_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 =
|
|
||||||
SOURCES =
|
|
||||||
DIST_SOURCES =
|
|
||||||
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)
|
|
||||||
am__DIST_COMMON = $(srcdir)/Makefile.in
|
|
||||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
|
||||||
ACLOCAL = @ACLOCAL@
|
|
||||||
AMTAR = @AMTAR@
|
|
||||||
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
|
|
||||||
AM_DISTCHECK_CONFIGURE_FLAGS = @AM_DISTCHECK_CONFIGURE_FLAGS@
|
|
||||||
AR = @AR@
|
|
||||||
AUTOCONF = @AUTOCONF@
|
|
||||||
AUTOHEADER = @AUTOHEADER@
|
|
||||||
AUTOMAKE = @AUTOMAKE@
|
|
||||||
AWK = @AWK@
|
|
||||||
CC = @CC@
|
|
||||||
CCDEPMODE = @CCDEPMODE@
|
|
||||||
CFLAGS = @CFLAGS@
|
|
||||||
CMOCKA_CFLAGS = @CMOCKA_CFLAGS@
|
|
||||||
CMOCKA_LIBS = @CMOCKA_LIBS@
|
|
||||||
CPP = @CPP@
|
|
||||||
CPPFLAGS = @CPPFLAGS@
|
|
||||||
CSCOPE = @CSCOPE@
|
|
||||||
CTAGS = @CTAGS@
|
|
||||||
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@
|
|
||||||
ECONF_CPPFLAGS = @ECONF_CPPFLAGS@
|
|
||||||
EGREP = @EGREP@
|
|
||||||
ETAGS = @ETAGS@
|
|
||||||
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@
|
|
||||||
LIBADD_DL = @LIBADD_DL@
|
|
||||||
LIBADD_DLD_LINK = @LIBADD_DLD_LINK@
|
|
||||||
LIBADD_DLOPEN = @LIBADD_DLOPEN@
|
|
||||||
LIBADD_SHL_LOAD = @LIBADD_SHL_LOAD@
|
|
||||||
LIBATTR = @LIBATTR@
|
|
||||||
LIBAUDIT = @LIBAUDIT@
|
|
||||||
LIBBSD = @LIBBSD@
|
|
||||||
LIBBSD_CFLAGS = @LIBBSD_CFLAGS@
|
|
||||||
LIBBSD_LIBS = @LIBBSD_LIBS@
|
|
||||||
LIBCRYPT = @LIBCRYPT@
|
|
||||||
LIBECONF = @LIBECONF@
|
|
||||||
LIBICONV = @LIBICONV@
|
|
||||||
LIBINTL = @LIBINTL@
|
|
||||||
LIBMD = @LIBMD@
|
|
||||||
LIBOBJS = @LIBOBJS@
|
|
||||||
LIBPAM = @LIBPAM@
|
|
||||||
LIBS = @LIBS@
|
|
||||||
LIBSELINUX = @LIBSELINUX@
|
|
||||||
LIBSEMANAGE = @LIBSEMANAGE@
|
|
||||||
LIBSKEY = @LIBSKEY@
|
|
||||||
LIBSUBID_ABI = @LIBSUBID_ABI@
|
|
||||||
LIBSUBID_ABI_MAJOR = @LIBSUBID_ABI_MAJOR@
|
|
||||||
LIBSUBID_ABI_MICRO = @LIBSUBID_ABI_MICRO@
|
|
||||||
LIBSUBID_ABI_MINOR = @LIBSUBID_ABI_MINOR@
|
|
||||||
LIBSYSTEMD = @LIBSYSTEMD@
|
|
||||||
LIBTCB = @LIBTCB@
|
|
||||||
LIBTOOL = @LIBTOOL@
|
|
||||||
LIPO = @LIPO@
|
|
||||||
LN_S = @LN_S@
|
|
||||||
LTLIBICONV = @LTLIBICONV@
|
|
||||||
LTLIBINTL = @LTLIBINTL@
|
|
||||||
LTLIBOBJS = @LTLIBOBJS@
|
|
||||||
LT_DLLOADERS = @LT_DLLOADERS@
|
|
||||||
LT_DLPREOPEN = @LT_DLPREOPEN@
|
|
||||||
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@
|
|
||||||
PKG_CONFIG = @PKG_CONFIG@
|
|
||||||
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
|
|
||||||
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
|
|
||||||
POSUB = @POSUB@
|
|
||||||
RANLIB = @RANLIB@
|
|
||||||
SED = @SED@
|
|
||||||
SET_MAKE = @SET_MAKE@
|
|
||||||
SHELL = @SHELL@
|
|
||||||
STRIP = @STRIP@
|
|
||||||
USE_NLS = @USE_NLS@
|
|
||||||
VENDORDIR = @VENDORDIR@
|
|
||||||
VERSION = @VERSION@
|
|
||||||
XGETTEXT = @XGETTEXT@
|
|
||||||
XGETTEXT_015 = @XGETTEXT_015@
|
|
||||||
XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
|
|
||||||
XMLCATALOG = @XMLCATALOG@
|
|
||||||
XML_CATALOG_FILE = @XML_CATALOG_FILE@
|
|
||||||
XSLTPROC = @XSLTPROC@
|
|
||||||
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 = HOWTO README.limits
|
|
||||||
all: all-am
|
|
||||||
|
|
||||||
.SUFFIXES:
|
|
||||||
$(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 doc/Makefile'; \
|
|
||||||
$(am__cd) $(top_srcdir) && \
|
|
||||||
$(AUTOMAKE) --foreign doc/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__maybe_remake_depfiles)'; \
|
|
||||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
|
|
||||||
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):
|
|
||||||
|
|
||||||
mostlyclean-libtool:
|
|
||||||
-rm -f *.lo
|
|
||||||
|
|
||||||
clean-libtool:
|
|
||||||
-rm -rf .libs _libs
|
|
||||||
tags TAGS:
|
|
||||||
|
|
||||||
ctags CTAGS:
|
|
||||||
|
|
||||||
cscope cscopelist:
|
|
||||||
|
|
||||||
distdir: $(BUILT_SOURCES)
|
|
||||||
$(MAKE) $(AM_MAKEFLAGS) distdir-am
|
|
||||||
|
|
||||||
distdir-am: $(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
|
|
||||||
installdirs:
|
|
||||||
install: install-am
|
|
||||||
install-exec: install-exec-am
|
|
||||||
install-data: install-data-am
|
|
||||||
uninstall: uninstall-am
|
|
||||||
|
|
||||||
install-am: all-am
|
|
||||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-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-generic clean-libtool mostlyclean-am
|
|
||||||
|
|
||||||
distclean: distclean-am
|
|
||||||
-rm -f Makefile
|
|
||||||
distclean-am: clean-am distclean-generic
|
|
||||||
|
|
||||||
dvi: dvi-am
|
|
||||||
|
|
||||||
dvi-am:
|
|
||||||
|
|
||||||
html: html-am
|
|
||||||
|
|
||||||
html-am:
|
|
||||||
|
|
||||||
info: info-am
|
|
||||||
|
|
||||||
info-am:
|
|
||||||
|
|
||||||
install-data-am:
|
|
||||||
|
|
||||||
install-dvi: install-dvi-am
|
|
||||||
|
|
||||||
install-dvi-am:
|
|
||||||
|
|
||||||
install-exec-am:
|
|
||||||
|
|
||||||
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 -f Makefile
|
|
||||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
|
||||||
|
|
||||||
mostlyclean: mostlyclean-am
|
|
||||||
|
|
||||||
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
|
||||||
|
|
||||||
pdf: pdf-am
|
|
||||||
|
|
||||||
pdf-am:
|
|
||||||
|
|
||||||
ps: ps-am
|
|
||||||
|
|
||||||
ps-am:
|
|
||||||
|
|
||||||
uninstall-am:
|
|
||||||
|
|
||||||
.MAKE: install-am install-strip
|
|
||||||
|
|
||||||
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
|
|
||||||
cscopelist-am ctags-am distclean distclean-generic \
|
|
||||||
distclean-libtool distdir dvi dvi-am html html-am info info-am \
|
|
||||||
install install-am 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-strip installcheck installcheck-am installdirs \
|
|
||||||
maintainer-clean maintainer-clean-generic mostlyclean \
|
|
||||||
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
|
|
||||||
tags-am uninstall uninstall-am
|
|
||||||
|
|
||||||
.PRECIOUS: Makefile
|
|
||||||
|
|
||||||
|
|
||||||
# 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:
|
|
||||||
@@ -1,65 +0,0 @@
|
|||||||
|
|
||||||
ABOUT shadow-login limits:
|
|
||||||
|
|
||||||
This code is merged into shadow login program from the original LShell 2.01
|
|
||||||
written by Joel Katz. The port and some additional features have been added
|
|
||||||
by Cristian Gafton (gafton@sorosis.ro).
|
|
||||||
|
|
||||||
|
|
||||||
Changes:
|
|
||||||
- 96/04/16
|
|
||||||
- {spaces,tabs} allowed within limits string
|
|
||||||
- Warn via syslog multiple default limits
|
|
||||||
- added few paragraphs to the login man page
|
|
||||||
- 96/04/14
|
|
||||||
- code merged into lmain.c --cristiang
|
|
||||||
|
|
||||||
TODO: - support groups in the limits file
|
|
||||||
(only usernames are supported at this moment :-( )
|
|
||||||
|
|
||||||
Setting user limits for shadow login program
|
|
||||||
|
|
||||||
First, make a root-only-readable file (/etc/limits by default or LIMITS_FILE
|
|
||||||
defined config.h) that describes the resource limits you wish to impose. By
|
|
||||||
default no quotas are imposed on 'root'. In fact, there is no way to impose
|
|
||||||
limits via this procedure to root-equiv accounts (accounts with UID 0).
|
|
||||||
|
|
||||||
Each line describes a limit for a user in the form:
|
|
||||||
|
|
||||||
user LIMITS_STRING
|
|
||||||
|
|
||||||
The LIMITS_STRING is a string of a concatenated list of resource limits.
|
|
||||||
Each limit consists of a letter identifier followed by a numerical limit.
|
|
||||||
The valid identifiers are:
|
|
||||||
|
|
||||||
A: max address space (KB)
|
|
||||||
C: max core file size (KB)
|
|
||||||
D: max data size (KB)
|
|
||||||
F: maximum filesize (KB)
|
|
||||||
M: max locked-in-memory address space (KB)
|
|
||||||
N: max number of open files
|
|
||||||
R: max resident set size (KB)
|
|
||||||
S: max stack size (KB)
|
|
||||||
T: max CPU time (MIN)
|
|
||||||
U: max number of processes
|
|
||||||
L: max number of logins for this user
|
|
||||||
|
|
||||||
For example, L2D2048N5 is a valid LIMITS_STRING. For reading convenience,
|
|
||||||
the following entries are equivalent:
|
|
||||||
|
|
||||||
username L2D2048N5
|
|
||||||
username L2 D2048 N5
|
|
||||||
|
|
||||||
Be aware that after <username> the rest of the line is considered a limit
|
|
||||||
string, thus comments are not allowed. A invalid limits string will be
|
|
||||||
rejected (not considered) by the login program.
|
|
||||||
|
|
||||||
The default entry is denoted by username '*'. If you have multiple 'default'
|
|
||||||
entries in your LIMITS_FILE, then the last one will be used as the default
|
|
||||||
entry.
|
|
||||||
|
|
||||||
To completely disable limits for a user, a single dash (-) will do.
|
|
||||||
|
|
||||||
Also, please note that all limit settings are set PER LOGIN. They are
|
|
||||||
not global, nor are they permanent. Perhaps global limits will come, but
|
|
||||||
for now this will have to do ;)
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
# This is a dummy Makefile.am to get automake work flawlessly,
|
|
||||||
# and also cooperate to make a distribution for `make dist'
|
|
||||||
|
|
||||||
sysconf_DATA = login.defs
|
|
||||||
|
|
||||||
defaultdir = $(sysconfdir)/default
|
|
||||||
default_DATA =
|
|
||||||
|
|
||||||
nonpam_files = \
|
|
||||||
limits \
|
|
||||||
login.access
|
|
||||||
|
|
||||||
if !USE_PAM
|
|
||||||
nonpamdir = $(sysconfdir)
|
|
||||||
nonpam_DATA = $(nonpam_files)
|
|
||||||
endif
|
|
||||||
|
|
||||||
EXTRA_DIST = \
|
|
||||||
$(nonpam_files) \
|
|
||||||
$(sysconf_DATA) \
|
|
||||||
$(default_DATA)
|
|
||||||
|
|
||||||
SUBDIRS = pam.d shadow-maint
|
|
||||||
-798
@@ -1,798 +0,0 @@
|
|||||||
# Makefile.in generated by automake 1.16.5 from Makefile.am.
|
|
||||||
# @configure_input@
|
|
||||||
|
|
||||||
# Copyright (C) 1994-2021 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@
|
|
||||||
|
|
||||||
# This is a dummy Makefile.am to get automake work flawlessly,
|
|
||||||
# and also cooperate to make a distribution for `make dist'
|
|
||||||
|
|
||||||
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@
|
|
||||||
subdir = etc
|
|
||||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
|
||||||
am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
|
|
||||||
$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
|
|
||||||
$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
|
|
||||||
$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
|
|
||||||
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
|
|
||||||
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
|
|
||||||
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
|
|
||||||
$(top_srcdir)/m4/progtest.m4 $(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_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 =
|
|
||||||
SOURCES =
|
|
||||||
DIST_SOURCES =
|
|
||||||
RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
|
|
||||||
ctags-recursive dvi-recursive html-recursive info-recursive \
|
|
||||||
install-data-recursive install-dvi-recursive \
|
|
||||||
install-exec-recursive install-html-recursive \
|
|
||||||
install-info-recursive install-pdf-recursive \
|
|
||||||
install-ps-recursive install-recursive installcheck-recursive \
|
|
||||||
installdirs-recursive pdf-recursive ps-recursive \
|
|
||||||
tags-recursive uninstall-recursive
|
|
||||||
am__can_run_installinfo = \
|
|
||||||
case $$AM_UPDATE_INFO_DIR in \
|
|
||||||
n|no|NO) false;; \
|
|
||||||
*) (install-info --version) >/dev/null 2>&1;; \
|
|
||||||
esac
|
|
||||||
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
|
|
||||||
am__vpath_adj = case $$p in \
|
|
||||||
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
|
|
||||||
*) f=$$p;; \
|
|
||||||
esac;
|
|
||||||
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
|
|
||||||
am__install_max = 40
|
|
||||||
am__nobase_strip_setup = \
|
|
||||||
srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
|
|
||||||
am__nobase_strip = \
|
|
||||||
for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
|
|
||||||
am__nobase_list = $(am__nobase_strip_setup); \
|
|
||||||
for p in $$list; do echo "$$p $$p"; done | \
|
|
||||||
sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
|
|
||||||
$(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
|
|
||||||
if (++n[$$2] == $(am__install_max)) \
|
|
||||||
{ print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
|
|
||||||
END { for (dir in files) print dir, files[dir] }'
|
|
||||||
am__base_list = \
|
|
||||||
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
|
|
||||||
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
|
|
||||||
am__uninstall_files_from_dir = { \
|
|
||||||
test -z "$$files" \
|
|
||||||
|| { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
|
|
||||||
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
|
|
||||||
$(am__cd) "$$dir" && rm -f $$files; }; \
|
|
||||||
}
|
|
||||||
am__installdirs = "$(DESTDIR)$(defaultdir)" "$(DESTDIR)$(nonpamdir)" \
|
|
||||||
"$(DESTDIR)$(sysconfdir)"
|
|
||||||
DATA = $(default_DATA) $(nonpam_DATA) $(sysconf_DATA)
|
|
||||||
RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
|
|
||||||
distclean-recursive maintainer-clean-recursive
|
|
||||||
am__recursive_targets = \
|
|
||||||
$(RECURSIVE_TARGETS) \
|
|
||||||
$(RECURSIVE_CLEAN_TARGETS) \
|
|
||||||
$(am__extra_recursive_targets)
|
|
||||||
AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
|
|
||||||
distdir distdir-am
|
|
||||||
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)`
|
|
||||||
DIST_SUBDIRS = $(SUBDIRS)
|
|
||||||
am__DIST_COMMON = $(srcdir)/Makefile.in
|
|
||||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
|
||||||
am__relativize = \
|
|
||||||
dir0=`pwd`; \
|
|
||||||
sed_first='s,^\([^/]*\)/.*$$,\1,'; \
|
|
||||||
sed_rest='s,^[^/]*/*,,'; \
|
|
||||||
sed_last='s,^.*/\([^/]*\)$$,\1,'; \
|
|
||||||
sed_butlast='s,/*[^/]*$$,,'; \
|
|
||||||
while test -n "$$dir1"; do \
|
|
||||||
first=`echo "$$dir1" | sed -e "$$sed_first"`; \
|
|
||||||
if test "$$first" != "."; then \
|
|
||||||
if test "$$first" = ".."; then \
|
|
||||||
dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
|
|
||||||
dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
|
|
||||||
else \
|
|
||||||
first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
|
|
||||||
if test "$$first2" = "$$first"; then \
|
|
||||||
dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
|
|
||||||
else \
|
|
||||||
dir2="../$$dir2"; \
|
|
||||||
fi; \
|
|
||||||
dir0="$$dir0"/"$$first"; \
|
|
||||||
fi; \
|
|
||||||
fi; \
|
|
||||||
dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
|
|
||||||
done; \
|
|
||||||
reldir="$$dir2"
|
|
||||||
ACLOCAL = @ACLOCAL@
|
|
||||||
AMTAR = @AMTAR@
|
|
||||||
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
|
|
||||||
AM_DISTCHECK_CONFIGURE_FLAGS = @AM_DISTCHECK_CONFIGURE_FLAGS@
|
|
||||||
AR = @AR@
|
|
||||||
AUTOCONF = @AUTOCONF@
|
|
||||||
AUTOHEADER = @AUTOHEADER@
|
|
||||||
AUTOMAKE = @AUTOMAKE@
|
|
||||||
AWK = @AWK@
|
|
||||||
CC = @CC@
|
|
||||||
CCDEPMODE = @CCDEPMODE@
|
|
||||||
CFLAGS = @CFLAGS@
|
|
||||||
CMOCKA_CFLAGS = @CMOCKA_CFLAGS@
|
|
||||||
CMOCKA_LIBS = @CMOCKA_LIBS@
|
|
||||||
CPP = @CPP@
|
|
||||||
CPPFLAGS = @CPPFLAGS@
|
|
||||||
CSCOPE = @CSCOPE@
|
|
||||||
CTAGS = @CTAGS@
|
|
||||||
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@
|
|
||||||
ECONF_CPPFLAGS = @ECONF_CPPFLAGS@
|
|
||||||
EGREP = @EGREP@
|
|
||||||
ETAGS = @ETAGS@
|
|
||||||
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@
|
|
||||||
LIBADD_DL = @LIBADD_DL@
|
|
||||||
LIBADD_DLD_LINK = @LIBADD_DLD_LINK@
|
|
||||||
LIBADD_DLOPEN = @LIBADD_DLOPEN@
|
|
||||||
LIBADD_SHL_LOAD = @LIBADD_SHL_LOAD@
|
|
||||||
LIBATTR = @LIBATTR@
|
|
||||||
LIBAUDIT = @LIBAUDIT@
|
|
||||||
LIBBSD = @LIBBSD@
|
|
||||||
LIBBSD_CFLAGS = @LIBBSD_CFLAGS@
|
|
||||||
LIBBSD_LIBS = @LIBBSD_LIBS@
|
|
||||||
LIBCRYPT = @LIBCRYPT@
|
|
||||||
LIBECONF = @LIBECONF@
|
|
||||||
LIBICONV = @LIBICONV@
|
|
||||||
LIBINTL = @LIBINTL@
|
|
||||||
LIBMD = @LIBMD@
|
|
||||||
LIBOBJS = @LIBOBJS@
|
|
||||||
LIBPAM = @LIBPAM@
|
|
||||||
LIBS = @LIBS@
|
|
||||||
LIBSELINUX = @LIBSELINUX@
|
|
||||||
LIBSEMANAGE = @LIBSEMANAGE@
|
|
||||||
LIBSKEY = @LIBSKEY@
|
|
||||||
LIBSUBID_ABI = @LIBSUBID_ABI@
|
|
||||||
LIBSUBID_ABI_MAJOR = @LIBSUBID_ABI_MAJOR@
|
|
||||||
LIBSUBID_ABI_MICRO = @LIBSUBID_ABI_MICRO@
|
|
||||||
LIBSUBID_ABI_MINOR = @LIBSUBID_ABI_MINOR@
|
|
||||||
LIBSYSTEMD = @LIBSYSTEMD@
|
|
||||||
LIBTCB = @LIBTCB@
|
|
||||||
LIBTOOL = @LIBTOOL@
|
|
||||||
LIPO = @LIPO@
|
|
||||||
LN_S = @LN_S@
|
|
||||||
LTLIBICONV = @LTLIBICONV@
|
|
||||||
LTLIBINTL = @LTLIBINTL@
|
|
||||||
LTLIBOBJS = @LTLIBOBJS@
|
|
||||||
LT_DLLOADERS = @LT_DLLOADERS@
|
|
||||||
LT_DLPREOPEN = @LT_DLPREOPEN@
|
|
||||||
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@
|
|
||||||
PKG_CONFIG = @PKG_CONFIG@
|
|
||||||
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
|
|
||||||
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
|
|
||||||
POSUB = @POSUB@
|
|
||||||
RANLIB = @RANLIB@
|
|
||||||
SED = @SED@
|
|
||||||
SET_MAKE = @SET_MAKE@
|
|
||||||
SHELL = @SHELL@
|
|
||||||
STRIP = @STRIP@
|
|
||||||
USE_NLS = @USE_NLS@
|
|
||||||
VENDORDIR = @VENDORDIR@
|
|
||||||
VERSION = @VERSION@
|
|
||||||
XGETTEXT = @XGETTEXT@
|
|
||||||
XGETTEXT_015 = @XGETTEXT_015@
|
|
||||||
XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
|
|
||||||
XMLCATALOG = @XMLCATALOG@
|
|
||||||
XML_CATALOG_FILE = @XML_CATALOG_FILE@
|
|
||||||
XSLTPROC = @XSLTPROC@
|
|
||||||
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@
|
|
||||||
sysconf_DATA = login.defs
|
|
||||||
defaultdir = $(sysconfdir)/default
|
|
||||||
default_DATA =
|
|
||||||
nonpam_files = \
|
|
||||||
limits \
|
|
||||||
login.access
|
|
||||||
|
|
||||||
@USE_PAM_FALSE@nonpamdir = $(sysconfdir)
|
|
||||||
@USE_PAM_FALSE@nonpam_DATA = $(nonpam_files)
|
|
||||||
EXTRA_DIST = \
|
|
||||||
$(nonpam_files) \
|
|
||||||
$(sysconf_DATA) \
|
|
||||||
$(default_DATA)
|
|
||||||
|
|
||||||
SUBDIRS = pam.d shadow-maint
|
|
||||||
all: all-recursive
|
|
||||||
|
|
||||||
.SUFFIXES:
|
|
||||||
$(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 etc/Makefile'; \
|
|
||||||
$(am__cd) $(top_srcdir) && \
|
|
||||||
$(AUTOMAKE) --foreign etc/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__maybe_remake_depfiles)'; \
|
|
||||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
|
|
||||||
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):
|
|
||||||
|
|
||||||
mostlyclean-libtool:
|
|
||||||
-rm -f *.lo
|
|
||||||
|
|
||||||
clean-libtool:
|
|
||||||
-rm -rf .libs _libs
|
|
||||||
install-defaultDATA: $(default_DATA)
|
|
||||||
@$(NORMAL_INSTALL)
|
|
||||||
@list='$(default_DATA)'; test -n "$(defaultdir)" || list=; \
|
|
||||||
if test -n "$$list"; then \
|
|
||||||
echo " $(MKDIR_P) '$(DESTDIR)$(defaultdir)'"; \
|
|
||||||
$(MKDIR_P) "$(DESTDIR)$(defaultdir)" || exit 1; \
|
|
||||||
fi; \
|
|
||||||
for p in $$list; do \
|
|
||||||
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
|
||||||
echo "$$d$$p"; \
|
|
||||||
done | $(am__base_list) | \
|
|
||||||
while read files; do \
|
|
||||||
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(defaultdir)'"; \
|
|
||||||
$(INSTALL_DATA) $$files "$(DESTDIR)$(defaultdir)" || exit $$?; \
|
|
||||||
done
|
|
||||||
|
|
||||||
uninstall-defaultDATA:
|
|
||||||
@$(NORMAL_UNINSTALL)
|
|
||||||
@list='$(default_DATA)'; test -n "$(defaultdir)" || list=; \
|
|
||||||
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
|
|
||||||
dir='$(DESTDIR)$(defaultdir)'; $(am__uninstall_files_from_dir)
|
|
||||||
install-nonpamDATA: $(nonpam_DATA)
|
|
||||||
@$(NORMAL_INSTALL)
|
|
||||||
@list='$(nonpam_DATA)'; test -n "$(nonpamdir)" || list=; \
|
|
||||||
if test -n "$$list"; then \
|
|
||||||
echo " $(MKDIR_P) '$(DESTDIR)$(nonpamdir)'"; \
|
|
||||||
$(MKDIR_P) "$(DESTDIR)$(nonpamdir)" || exit 1; \
|
|
||||||
fi; \
|
|
||||||
for p in $$list; do \
|
|
||||||
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
|
||||||
echo "$$d$$p"; \
|
|
||||||
done | $(am__base_list) | \
|
|
||||||
while read files; do \
|
|
||||||
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(nonpamdir)'"; \
|
|
||||||
$(INSTALL_DATA) $$files "$(DESTDIR)$(nonpamdir)" || exit $$?; \
|
|
||||||
done
|
|
||||||
|
|
||||||
uninstall-nonpamDATA:
|
|
||||||
@$(NORMAL_UNINSTALL)
|
|
||||||
@list='$(nonpam_DATA)'; test -n "$(nonpamdir)" || list=; \
|
|
||||||
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
|
|
||||||
dir='$(DESTDIR)$(nonpamdir)'; $(am__uninstall_files_from_dir)
|
|
||||||
install-sysconfDATA: $(sysconf_DATA)
|
|
||||||
@$(NORMAL_INSTALL)
|
|
||||||
@list='$(sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \
|
|
||||||
if test -n "$$list"; then \
|
|
||||||
echo " $(MKDIR_P) '$(DESTDIR)$(sysconfdir)'"; \
|
|
||||||
$(MKDIR_P) "$(DESTDIR)$(sysconfdir)" || exit 1; \
|
|
||||||
fi; \
|
|
||||||
for p in $$list; do \
|
|
||||||
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
|
||||||
echo "$$d$$p"; \
|
|
||||||
done | $(am__base_list) | \
|
|
||||||
while read files; do \
|
|
||||||
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(sysconfdir)'"; \
|
|
||||||
$(INSTALL_DATA) $$files "$(DESTDIR)$(sysconfdir)" || exit $$?; \
|
|
||||||
done
|
|
||||||
|
|
||||||
uninstall-sysconfDATA:
|
|
||||||
@$(NORMAL_UNINSTALL)
|
|
||||||
@list='$(sysconf_DATA)'; test -n "$(sysconfdir)" || list=; \
|
|
||||||
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
|
|
||||||
dir='$(DESTDIR)$(sysconfdir)'; $(am__uninstall_files_from_dir)
|
|
||||||
|
|
||||||
# This directory's subdirectories are mostly independent; you can cd
|
|
||||||
# into them and run 'make' without going through this Makefile.
|
|
||||||
# To change the values of 'make' variables: instead of editing Makefiles,
|
|
||||||
# (1) if the variable is set in 'config.status', edit 'config.status'
|
|
||||||
# (which will cause the Makefiles to be regenerated when you run 'make');
|
|
||||||
# (2) otherwise, pass the desired values on the 'make' command line.
|
|
||||||
$(am__recursive_targets):
|
|
||||||
@fail=; \
|
|
||||||
if $(am__make_keepgoing); then \
|
|
||||||
failcom='fail=yes'; \
|
|
||||||
else \
|
|
||||||
failcom='exit 1'; \
|
|
||||||
fi; \
|
|
||||||
dot_seen=no; \
|
|
||||||
target=`echo $@ | sed s/-recursive//`; \
|
|
||||||
case "$@" in \
|
|
||||||
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
|
|
||||||
*) list='$(SUBDIRS)' ;; \
|
|
||||||
esac; \
|
|
||||||
for subdir in $$list; do \
|
|
||||||
echo "Making $$target in $$subdir"; \
|
|
||||||
if test "$$subdir" = "."; then \
|
|
||||||
dot_seen=yes; \
|
|
||||||
local_target="$$target-am"; \
|
|
||||||
else \
|
|
||||||
local_target="$$target"; \
|
|
||||||
fi; \
|
|
||||||
($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
|
|
||||||
|| eval $$failcom; \
|
|
||||||
done; \
|
|
||||||
if test "$$dot_seen" = "no"; then \
|
|
||||||
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
|
|
||||||
fi; test -z "$$fail"
|
|
||||||
|
|
||||||
ID: $(am__tagged_files)
|
|
||||||
$(am__define_uniq_tagged_files); mkid -fID $$unique
|
|
||||||
tags: tags-recursive
|
|
||||||
TAGS: tags
|
|
||||||
|
|
||||||
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
|
|
||||||
set x; \
|
|
||||||
here=`pwd`; \
|
|
||||||
if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
|
|
||||||
include_option=--etags-include; \
|
|
||||||
empty_fix=.; \
|
|
||||||
else \
|
|
||||||
include_option=--include; \
|
|
||||||
empty_fix=; \
|
|
||||||
fi; \
|
|
||||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
|
||||||
if test "$$subdir" = .; then :; else \
|
|
||||||
test ! -f $$subdir/TAGS || \
|
|
||||||
set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
|
|
||||||
fi; \
|
|
||||||
done; \
|
|
||||||
$(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-recursive
|
|
||||||
|
|
||||||
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-recursive
|
|
||||||
|
|
||||||
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: $(BUILT_SOURCES)
|
|
||||||
$(MAKE) $(AM_MAKEFLAGS) distdir-am
|
|
||||||
|
|
||||||
distdir-am: $(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
|
|
||||||
@list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
|
|
||||||
if test "$$subdir" = .; then :; else \
|
|
||||||
$(am__make_dryrun) \
|
|
||||||
|| test -d "$(distdir)/$$subdir" \
|
|
||||||
|| $(MKDIR_P) "$(distdir)/$$subdir" \
|
|
||||||
|| exit 1; \
|
|
||||||
dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
|
|
||||||
$(am__relativize); \
|
|
||||||
new_distdir=$$reldir; \
|
|
||||||
dir1=$$subdir; dir2="$(top_distdir)"; \
|
|
||||||
$(am__relativize); \
|
|
||||||
new_top_distdir=$$reldir; \
|
|
||||||
echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
|
|
||||||
echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
|
|
||||||
($(am__cd) $$subdir && \
|
|
||||||
$(MAKE) $(AM_MAKEFLAGS) \
|
|
||||||
top_distdir="$$new_top_distdir" \
|
|
||||||
distdir="$$new_distdir" \
|
|
||||||
am__remove_distdir=: \
|
|
||||||
am__skip_length_check=: \
|
|
||||||
am__skip_mode_fix=: \
|
|
||||||
distdir) \
|
|
||||||
|| exit 1; \
|
|
||||||
fi; \
|
|
||||||
done
|
|
||||||
check-am: all-am
|
|
||||||
check: check-recursive
|
|
||||||
all-am: Makefile $(DATA)
|
|
||||||
installdirs: installdirs-recursive
|
|
||||||
installdirs-am:
|
|
||||||
for dir in "$(DESTDIR)$(defaultdir)" "$(DESTDIR)$(nonpamdir)" "$(DESTDIR)$(sysconfdir)"; do \
|
|
||||||
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
|
|
||||||
done
|
|
||||||
install: install-recursive
|
|
||||||
install-exec: install-exec-recursive
|
|
||||||
install-data: install-data-recursive
|
|
||||||
uninstall: uninstall-recursive
|
|
||||||
|
|
||||||
install-am: all-am
|
|
||||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
|
|
||||||
|
|
||||||
installcheck: installcheck-recursive
|
|
||||||
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-recursive
|
|
||||||
|
|
||||||
clean-am: clean-generic clean-libtool mostlyclean-am
|
|
||||||
|
|
||||||
distclean: distclean-recursive
|
|
||||||
-rm -f Makefile
|
|
||||||
distclean-am: clean-am distclean-generic distclean-tags
|
|
||||||
|
|
||||||
dvi: dvi-recursive
|
|
||||||
|
|
||||||
dvi-am:
|
|
||||||
|
|
||||||
html: html-recursive
|
|
||||||
|
|
||||||
html-am:
|
|
||||||
|
|
||||||
info: info-recursive
|
|
||||||
|
|
||||||
info-am:
|
|
||||||
|
|
||||||
install-data-am: install-defaultDATA install-nonpamDATA
|
|
||||||
|
|
||||||
install-dvi: install-dvi-recursive
|
|
||||||
|
|
||||||
install-dvi-am:
|
|
||||||
|
|
||||||
install-exec-am: install-sysconfDATA
|
|
||||||
|
|
||||||
install-html: install-html-recursive
|
|
||||||
|
|
||||||
install-html-am:
|
|
||||||
|
|
||||||
install-info: install-info-recursive
|
|
||||||
|
|
||||||
install-info-am:
|
|
||||||
|
|
||||||
install-man:
|
|
||||||
|
|
||||||
install-pdf: install-pdf-recursive
|
|
||||||
|
|
||||||
install-pdf-am:
|
|
||||||
|
|
||||||
install-ps: install-ps-recursive
|
|
||||||
|
|
||||||
install-ps-am:
|
|
||||||
|
|
||||||
installcheck-am:
|
|
||||||
|
|
||||||
maintainer-clean: maintainer-clean-recursive
|
|
||||||
-rm -f Makefile
|
|
||||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
|
||||||
|
|
||||||
mostlyclean: mostlyclean-recursive
|
|
||||||
|
|
||||||
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
|
||||||
|
|
||||||
pdf: pdf-recursive
|
|
||||||
|
|
||||||
pdf-am:
|
|
||||||
|
|
||||||
ps: ps-recursive
|
|
||||||
|
|
||||||
ps-am:
|
|
||||||
|
|
||||||
uninstall-am: uninstall-defaultDATA uninstall-nonpamDATA \
|
|
||||||
uninstall-sysconfDATA
|
|
||||||
|
|
||||||
.MAKE: $(am__recursive_targets) install-am install-strip
|
|
||||||
|
|
||||||
.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \
|
|
||||||
check-am clean clean-generic clean-libtool cscopelist-am ctags \
|
|
||||||
ctags-am distclean distclean-generic distclean-libtool \
|
|
||||||
distclean-tags distdir dvi dvi-am html html-am info info-am \
|
|
||||||
install install-am install-data install-data-am \
|
|
||||||
install-defaultDATA install-dvi install-dvi-am install-exec \
|
|
||||||
install-exec-am install-html install-html-am install-info \
|
|
||||||
install-info-am install-man install-nonpamDATA install-pdf \
|
|
||||||
install-pdf-am install-ps install-ps-am install-strip \
|
|
||||||
install-sysconfDATA installcheck installcheck-am installdirs \
|
|
||||||
installdirs-am maintainer-clean maintainer-clean-generic \
|
|
||||||
mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
|
|
||||||
ps ps-am tags tags-am uninstall uninstall-am \
|
|
||||||
uninstall-defaultDATA uninstall-nonpamDATA \
|
|
||||||
uninstall-sysconfDATA
|
|
||||||
|
|
||||||
.PRECIOUS: Makefile
|
|
||||||
|
|
||||||
|
|
||||||
# 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:
|
|
||||||
-30
@@ -1,30 +0,0 @@
|
|||||||
# /etc/limits contains user resource limits.
|
|
||||||
# See limits(5).
|
|
||||||
#
|
|
||||||
# Format:
|
|
||||||
# <username> <limits-string>
|
|
||||||
#
|
|
||||||
# default entry is '*' for username
|
|
||||||
#
|
|
||||||
# Valid flags are:
|
|
||||||
# A: max address space (KB)
|
|
||||||
# C: max core file size (KB)
|
|
||||||
# D: max data size (KB)
|
|
||||||
# F: maximum filesize (KB)
|
|
||||||
# M: max locked-in-memory address space (KB) [only for root on Linux 2.0.x]
|
|
||||||
# N: max number of open files
|
|
||||||
# R: max resident set size (KB) [no effect on Linux 2.0.x]
|
|
||||||
# S: max stack size (KB)
|
|
||||||
# T: max CPU time (MIN)
|
|
||||||
# U: max number of processes
|
|
||||||
# L: max number of logins for this user
|
|
||||||
# I: max nice value (0..39 translates to 20..-19)
|
|
||||||
# O: max real time priority (0..MAX_RT_PRIO)
|
|
||||||
#
|
|
||||||
# Examples:
|
|
||||||
# the default entry
|
|
||||||
#* L2 D6144 R2048 S2048 U32 N32 F16384 T5 C0 I20 O0
|
|
||||||
# another way of suspending a user login
|
|
||||||
#guest L0
|
|
||||||
# this account has no limits
|
|
||||||
#sysadm -
|
|
||||||
@@ -1,54 +0,0 @@
|
|||||||
# $Id$
|
|
||||||
#
|
|
||||||
# Login access control table.
|
|
||||||
#
|
|
||||||
# When someone logs in, the table is scanned for the first entry that
|
|
||||||
# matches the (user, host) combination, or, in case of non-networked
|
|
||||||
# logins, the first entry that matches the (user, tty) combination. The
|
|
||||||
# permissions field of that table entry determines whether the login will
|
|
||||||
# be accepted or refused.
|
|
||||||
#
|
|
||||||
# Format of the login access control table is three fields separated by a
|
|
||||||
# ":" character:
|
|
||||||
#
|
|
||||||
# permission : users : origins
|
|
||||||
#
|
|
||||||
# The first field should be a "+" (access granted) or "-" (access denied)
|
|
||||||
# character.
|
|
||||||
#
|
|
||||||
# The second field should be a list of one or more login names, group
|
|
||||||
# names, or ALL (always matches). A pattern of the form user@host is
|
|
||||||
# matched when the login name matches the "user" part, and when the
|
|
||||||
# "host" part matches the local machine name.
|
|
||||||
#
|
|
||||||
# The third field should be a list of one or more tty names (for
|
|
||||||
# non-networked logins), host names, domain names (begin with "."), host
|
|
||||||
# addresses, internet network numbers (end with "."), ALL (always
|
|
||||||
# matches) or LOCAL (matches any string that does not contain a "."
|
|
||||||
# character).
|
|
||||||
#
|
|
||||||
# If you run NIS you can use @netgroupname in host or user patterns; this
|
|
||||||
# even works for @usergroup@@hostgroup patterns. Weird.
|
|
||||||
#
|
|
||||||
# The EXCEPT operator makes it possible to write very compact rules.
|
|
||||||
#
|
|
||||||
# The group file is searched only when a name does not match that of the
|
|
||||||
# logged-in user. Only groups are matched in which users are explicitly
|
|
||||||
# listed: the program does not look at a user's primary group id value.
|
|
||||||
#
|
|
||||||
##############################################################################
|
|
||||||
#
|
|
||||||
# Disallow console logins to all but a few accounts.
|
|
||||||
#
|
|
||||||
#-:ALL EXCEPT wheel shutdown sync:console
|
|
||||||
#
|
|
||||||
# Disallow non-local logins to privileged accounts (group wheel).
|
|
||||||
#
|
|
||||||
#-:wheel:ALL EXCEPT LOCAL .win.tue.nl
|
|
||||||
#
|
|
||||||
# Some accounts are not allowed to login from anywhere:
|
|
||||||
#
|
|
||||||
#-:wsbscaro wsbsecr wsbspac wsbsym wscosor wstaiwde:ALL
|
|
||||||
#
|
|
||||||
# All other accounts are allowed to login from anywhere.
|
|
||||||
#
|
|
||||||
-473
@@ -1,473 +0,0 @@
|
|||||||
#
|
|
||||||
# /etc/login.defs - Configuration control definitions for the shadow package.
|
|
||||||
#
|
|
||||||
# $Id$
|
|
||||||
#
|
|
||||||
|
|
||||||
#
|
|
||||||
# Delay in seconds before being allowed another attempt after a login failure
|
|
||||||
# Note: when PAM is used, some modules may enforce a minimum delay (e.g.
|
|
||||||
# pam_unix(8) enforces a 2s delay)
|
|
||||||
#
|
|
||||||
FAIL_DELAY 3
|
|
||||||
|
|
||||||
#
|
|
||||||
# Enable logging and display of /var/log/faillog login(1) failure info.
|
|
||||||
#
|
|
||||||
FAILLOG_ENAB yes
|
|
||||||
|
|
||||||
#
|
|
||||||
# Enable display of unknown usernames when login(1) failures are recorded.
|
|
||||||
#
|
|
||||||
LOG_UNKFAIL_ENAB no
|
|
||||||
|
|
||||||
#
|
|
||||||
# Enable logging of successful logins
|
|
||||||
#
|
|
||||||
LOG_OK_LOGINS no
|
|
||||||
|
|
||||||
#
|
|
||||||
# Enable logging and display of /var/log/lastlog login(1) time info.
|
|
||||||
#
|
|
||||||
LASTLOG_ENAB yes
|
|
||||||
|
|
||||||
#
|
|
||||||
# Limit the highest user ID number for which the lastlog entries should
|
|
||||||
# be updated.
|
|
||||||
#
|
|
||||||
# No LASTLOG_UID_MAX means that there is no user ID limit for writing
|
|
||||||
# lastlog entries.
|
|
||||||
#
|
|
||||||
#LASTLOG_UID_MAX
|
|
||||||
|
|
||||||
#
|
|
||||||
# Enable checking and display of mailbox status upon login.
|
|
||||||
#
|
|
||||||
# Disable if the shell startup files already check for mail
|
|
||||||
# ("mailx -e" or equivalent).
|
|
||||||
#
|
|
||||||
MAIL_CHECK_ENAB yes
|
|
||||||
|
|
||||||
#
|
|
||||||
# Enable additional checks upon password changes.
|
|
||||||
#
|
|
||||||
OBSCURE_CHECKS_ENAB yes
|
|
||||||
|
|
||||||
#
|
|
||||||
# Enable checking of time restrictions specified in /etc/porttime.
|
|
||||||
#
|
|
||||||
PORTTIME_CHECKS_ENAB yes
|
|
||||||
|
|
||||||
#
|
|
||||||
# Enable setting of ulimit, umask, and niceness from passwd(5) gecos field.
|
|
||||||
#
|
|
||||||
QUOTAS_ENAB yes
|
|
||||||
|
|
||||||
#
|
|
||||||
# Enable "syslog" logging of su(1) activity - in addition to sulog file logging.
|
|
||||||
# SYSLOG_SG_ENAB does the same for newgrp(1) and sg(1).
|
|
||||||
#
|
|
||||||
SYSLOG_SU_ENAB yes
|
|
||||||
SYSLOG_SG_ENAB yes
|
|
||||||
|
|
||||||
#
|
|
||||||
# If defined, either full pathname of a file containing device names or
|
|
||||||
# a ":" delimited list of device names. Root logins will be allowed only
|
|
||||||
# from these devices.
|
|
||||||
#
|
|
||||||
CONSOLE /etc/securetty
|
|
||||||
#CONSOLE console:tty01:tty02:tty03:tty04
|
|
||||||
|
|
||||||
#
|
|
||||||
# If defined, all su(1) activity is logged to this file.
|
|
||||||
#
|
|
||||||
#SULOG_FILE /var/log/sulog
|
|
||||||
|
|
||||||
#
|
|
||||||
# If defined, ":" delimited list of "message of the day" files to
|
|
||||||
# be displayed upon login.
|
|
||||||
#
|
|
||||||
MOTD_FILE /etc/motd
|
|
||||||
#MOTD_FILE /etc/motd:/usr/lib/news/news-motd
|
|
||||||
|
|
||||||
#
|
|
||||||
# If defined, this file will be output before each login(1) prompt.
|
|
||||||
#
|
|
||||||
#ISSUE_FILE /etc/issue
|
|
||||||
|
|
||||||
#
|
|
||||||
# If defined, file which maps tty line to TERM environment parameter.
|
|
||||||
# Each line of the file is in a format similar to "vt100 tty01".
|
|
||||||
#
|
|
||||||
#TTYTYPE_FILE /etc/ttytype
|
|
||||||
|
|
||||||
#
|
|
||||||
# If defined, login(1) failures will be logged here in a utmp format.
|
|
||||||
# last(1), when invoked as lastb(1), will read /var/log/btmp, so...
|
|
||||||
#
|
|
||||||
FTMP_FILE /var/log/btmp
|
|
||||||
|
|
||||||
#
|
|
||||||
# If defined, name of file whose presence will inhibit non-root
|
|
||||||
# logins. The content of this file should be a message indicating
|
|
||||||
# why logins are inhibited.
|
|
||||||
#
|
|
||||||
NOLOGINS_FILE /etc/nologin
|
|
||||||
|
|
||||||
#
|
|
||||||
# If defined, the command name to display when running "su -". For
|
|
||||||
# example, if this is defined as "su" then ps(1) will display the
|
|
||||||
# command as "-su". If not defined, then ps(1) will display the
|
|
||||||
# name of the shell actually being run, e.g. something like "-sh".
|
|
||||||
#
|
|
||||||
SU_NAME su
|
|
||||||
|
|
||||||
#
|
|
||||||
# *REQUIRED*
|
|
||||||
# Directory where mailboxes reside, _or_ name of file, relative to the
|
|
||||||
# home directory. If you _do_ define both, MAIL_DIR takes precedence.
|
|
||||||
#
|
|
||||||
MAIL_DIR /var/spool/mail
|
|
||||||
#MAIL_FILE .mail
|
|
||||||
|
|
||||||
#
|
|
||||||
# If defined, file which inhibits all the usual chatter during the login
|
|
||||||
# sequence. If a full pathname, then hushed mode will be enabled if the
|
|
||||||
# user's name or shell are found in the file. If not a full pathname, then
|
|
||||||
# hushed mode will be enabled if the file exists in the user's home directory.
|
|
||||||
#
|
|
||||||
HUSHLOGIN_FILE .hushlogin
|
|
||||||
#HUSHLOGIN_FILE /etc/hushlogins
|
|
||||||
|
|
||||||
#
|
|
||||||
# If defined, either a TZ environment parameter spec or the
|
|
||||||
# fully-rooted pathname of a file containing such a spec.
|
|
||||||
#
|
|
||||||
#ENV_TZ TZ=CST6CDT
|
|
||||||
#ENV_TZ /etc/tzname
|
|
||||||
|
|
||||||
#
|
|
||||||
# If defined, an HZ environment parameter spec.
|
|
||||||
#
|
|
||||||
# for Linux/x86
|
|
||||||
ENV_HZ HZ=100
|
|
||||||
# For Linux/Alpha...
|
|
||||||
#ENV_HZ HZ=1024
|
|
||||||
|
|
||||||
#
|
|
||||||
# *REQUIRED* The default PATH settings, for superuser and normal users.
|
|
||||||
#
|
|
||||||
# (they are minimal, add the rest in the shell startup files)
|
|
||||||
ENV_SUPATH PATH=/sbin:/bin:/usr/sbin:/usr/bin
|
|
||||||
ENV_PATH PATH=/bin:/usr/bin
|
|
||||||
|
|
||||||
#
|
|
||||||
# Terminal permissions
|
|
||||||
#
|
|
||||||
# TTYGROUP Login tty will be assigned this group ownership.
|
|
||||||
# TTYPERM Login tty will be set to this permission.
|
|
||||||
#
|
|
||||||
# If you have a write(1) program which is "setgid" to a special group
|
|
||||||
# which owns the terminals, define TTYGROUP as the number of such group
|
|
||||||
# and TTYPERM as 0620. Otherwise leave TTYGROUP commented out and
|
|
||||||
# set TTYPERM to either 622 or 600.
|
|
||||||
#
|
|
||||||
TTYGROUP tty
|
|
||||||
TTYPERM 0600
|
|
||||||
|
|
||||||
#
|
|
||||||
# Login configuration initializations:
|
|
||||||
#
|
|
||||||
# ERASECHAR Terminal ERASE character ('\010' = backspace).
|
|
||||||
# KILLCHAR Terminal KILL character ('\025' = CTRL/U).
|
|
||||||
# ULIMIT Default "ulimit" value.
|
|
||||||
#
|
|
||||||
# The ERASECHAR and KILLCHAR are used only on System V machines.
|
|
||||||
# The ULIMIT is used only if the system supports it.
|
|
||||||
# (now it works with setrlimit too; ulimit is in 512-byte units)
|
|
||||||
#
|
|
||||||
# Prefix these values with "0" to get octal, "0x" to get hexadecimal.
|
|
||||||
#
|
|
||||||
ERASECHAR 0177
|
|
||||||
KILLCHAR 025
|
|
||||||
#ULIMIT 2097152
|
|
||||||
|
|
||||||
# Default initial "umask" value used by login(1) on non-PAM enabled systems.
|
|
||||||
# Default "umask" value for pam_umask(8) on PAM enabled systems.
|
|
||||||
# UMASK is also used by useradd(8) and newusers(8) to set the mode for new
|
|
||||||
# home directories if HOME_MODE is not set.
|
|
||||||
# 022 is the default value, but 027, or even 077, could be considered
|
|
||||||
# for increased privacy. There is no One True Answer here: each sysadmin
|
|
||||||
# must make up their mind.
|
|
||||||
UMASK 022
|
|
||||||
|
|
||||||
# HOME_MODE is used by useradd(8) and newusers(8) to set the mode for new
|
|
||||||
# home directories.
|
|
||||||
# If HOME_MODE is not set, the value of UMASK is used to create the mode.
|
|
||||||
#HOME_MODE 0700
|
|
||||||
|
|
||||||
#
|
|
||||||
# Password aging controls:
|
|
||||||
#
|
|
||||||
# PASS_MAX_DAYS Maximum number of days a password may be used.
|
|
||||||
# PASS_MIN_DAYS Minimum number of days allowed between password changes.
|
|
||||||
# PASS_MIN_LEN Minimum acceptable password length.
|
|
||||||
# PASS_WARN_AGE Number of days warning given before a password expires.
|
|
||||||
#
|
|
||||||
PASS_MAX_DAYS 99999
|
|
||||||
PASS_MIN_DAYS 0
|
|
||||||
PASS_MIN_LEN 5
|
|
||||||
PASS_WARN_AGE 7
|
|
||||||
|
|
||||||
#
|
|
||||||
# If "yes", the user must be listed as a member of the first gid 0 group
|
|
||||||
# in /etc/group (called "root" on most Linux systems) to be able to "su"
|
|
||||||
# to uid 0 accounts. If the group doesn't exist or is empty, no one
|
|
||||||
# will be able to "su" to uid 0.
|
|
||||||
#
|
|
||||||
SU_WHEEL_ONLY no
|
|
||||||
|
|
||||||
#
|
|
||||||
# Min/max values for automatic uid selection in useradd(8)
|
|
||||||
#
|
|
||||||
UID_MIN 1000
|
|
||||||
UID_MAX 60000
|
|
||||||
# System accounts
|
|
||||||
SYS_UID_MIN 101
|
|
||||||
SYS_UID_MAX 999
|
|
||||||
# Extra per user uids
|
|
||||||
SUB_UID_MIN 100000
|
|
||||||
SUB_UID_MAX 600100000
|
|
||||||
SUB_UID_COUNT 65536
|
|
||||||
|
|
||||||
#
|
|
||||||
# Min/max values for automatic gid selection in groupadd(8)
|
|
||||||
#
|
|
||||||
GID_MIN 1000
|
|
||||||
GID_MAX 60000
|
|
||||||
# System accounts
|
|
||||||
SYS_GID_MIN 101
|
|
||||||
SYS_GID_MAX 999
|
|
||||||
# Extra per user group ids
|
|
||||||
SUB_GID_MIN 100000
|
|
||||||
SUB_GID_MAX 600100000
|
|
||||||
SUB_GID_COUNT 65536
|
|
||||||
|
|
||||||
#
|
|
||||||
# Max number of login(1) retries if password is bad
|
|
||||||
#
|
|
||||||
LOGIN_RETRIES 5
|
|
||||||
|
|
||||||
#
|
|
||||||
# Max time in seconds for login(1)
|
|
||||||
#
|
|
||||||
LOGIN_TIMEOUT 60
|
|
||||||
|
|
||||||
#
|
|
||||||
# Maximum number of attempts to change password if rejected (too easy)
|
|
||||||
#
|
|
||||||
PASS_CHANGE_TRIES 5
|
|
||||||
|
|
||||||
#
|
|
||||||
# Warn about weak passwords (but still allow them) if you are root.
|
|
||||||
#
|
|
||||||
PASS_ALWAYS_WARN yes
|
|
||||||
|
|
||||||
#
|
|
||||||
# Number of significant characters in the password for crypt().
|
|
||||||
# Default is 8, don't change unless your crypt() is better.
|
|
||||||
# Only used for DES encryption algorithm.
|
|
||||||
#
|
|
||||||
#PASS_MAX_LEN 8
|
|
||||||
|
|
||||||
#
|
|
||||||
# Require password before chfn(1)/chsh(1) can make any changes.
|
|
||||||
#
|
|
||||||
CHFN_AUTH yes
|
|
||||||
|
|
||||||
#
|
|
||||||
# Which fields may be changed by regular users using chfn(1) - use
|
|
||||||
# any combination of letters "frwh" (full name, room number, work
|
|
||||||
# phone, home phone). If not defined, no changes are allowed.
|
|
||||||
# For backward compatibility, "yes" = "rwh" and "no" = "frwh".
|
|
||||||
#
|
|
||||||
CHFN_RESTRICT rwh
|
|
||||||
|
|
||||||
#
|
|
||||||
# Password prompt (%s will be replaced by user name).
|
|
||||||
#
|
|
||||||
# XXX - it doesn't work correctly yet, for now leave it commented out
|
|
||||||
# to use the default which is just "Password: ".
|
|
||||||
#LOGIN_STRING "%s's Password: "
|
|
||||||
|
|
||||||
#
|
|
||||||
# Only works if compiled with MD5_CRYPT defined:
|
|
||||||
# If set to "yes", new passwords will be encrypted using the MD5-based
|
|
||||||
# algorithm compatible with the one used by recent releases of FreeBSD.
|
|
||||||
# It supports passwords of unlimited length and longer salt strings.
|
|
||||||
# Set to "no" if you need to copy encrypted passwords to other systems
|
|
||||||
# which don't understand the new algorithm. Default is "no".
|
|
||||||
#
|
|
||||||
# Note: if you use PAM, it is recommended to use a value consistent with
|
|
||||||
# the PAM modules configuration.
|
|
||||||
#
|
|
||||||
# This variable is deprecated. You should use ENCRYPT_METHOD instead.
|
|
||||||
#
|
|
||||||
#MD5_CRYPT_ENAB no
|
|
||||||
|
|
||||||
#
|
|
||||||
# Only works if compiled with ENCRYPTMETHOD_SELECT defined:
|
|
||||||
# If set to MD5, MD5-based algorithm will be used for encrypting password
|
|
||||||
# If set to SHA256, SHA256-based algorithm will be used for encrypting password
|
|
||||||
# If set to SHA512, SHA512-based algorithm will be used for encrypting password
|
|
||||||
# If set to BCRYPT, BCRYPT-based algorithm will be used for encrypting password
|
|
||||||
# If set to YESCRYPT, YESCRYPT-based algorithm will be used for encrypting password
|
|
||||||
# If set to DES, DES-based algorithm will be used for encrypting password (default)
|
|
||||||
# MD5 and DES should not be used for new hashes, see crypt(5) for recommendations.
|
|
||||||
# Overrides the MD5_CRYPT_ENAB option
|
|
||||||
#
|
|
||||||
# Note: if you use PAM, it is recommended to use a value consistent with
|
|
||||||
# the PAM modules configuration.
|
|
||||||
#
|
|
||||||
#ENCRYPT_METHOD DES
|
|
||||||
|
|
||||||
#
|
|
||||||
# Only works if ENCRYPT_METHOD is set to SHA256 or SHA512.
|
|
||||||
#
|
|
||||||
# Define the number of SHA rounds.
|
|
||||||
# With a lot of rounds, it is more difficult to brute-force the password.
|
|
||||||
# However, more CPU resources will be needed to authenticate users if
|
|
||||||
# this value is increased.
|
|
||||||
#
|
|
||||||
# If not specified, the libc will choose the default number of rounds (5000),
|
|
||||||
# which is orders of magnitude too low for modern hardware.
|
|
||||||
# The values must be within the 1000-999999999 range.
|
|
||||||
# If only one of the MIN or MAX values is set, then this value will be used.
|
|
||||||
# If MIN > MAX, the highest value will be used.
|
|
||||||
#
|
|
||||||
#SHA_CRYPT_MIN_ROUNDS 5000
|
|
||||||
#SHA_CRYPT_MAX_ROUNDS 5000
|
|
||||||
|
|
||||||
#
|
|
||||||
# Only works if ENCRYPT_METHOD is set to BCRYPT.
|
|
||||||
#
|
|
||||||
# Define the number of BCRYPT rounds.
|
|
||||||
# With a lot of rounds, it is more difficult to brute-force the password.
|
|
||||||
# However, more CPU resources will be needed to authenticate users if
|
|
||||||
# this value is increased.
|
|
||||||
#
|
|
||||||
# If not specified, 13 rounds will be attempted.
|
|
||||||
# If only one of the MIN or MAX values is set, then this value will be used.
|
|
||||||
# If MIN > MAX, the highest value will be used.
|
|
||||||
#
|
|
||||||
#BCRYPT_MIN_ROUNDS 13
|
|
||||||
#BCRYPT_MAX_ROUNDS 13
|
|
||||||
|
|
||||||
#
|
|
||||||
# Only works if ENCRYPT_METHOD is set to YESCRYPT.
|
|
||||||
#
|
|
||||||
# Define the YESCRYPT cost factor.
|
|
||||||
# With a higher cost factor, it is more difficult to brute-force the password.
|
|
||||||
# However, more CPU time and more memory will be needed to authenticate users
|
|
||||||
# if this value is increased.
|
|
||||||
#
|
|
||||||
# If not specified, a cost factor of 5 will be used.
|
|
||||||
# The value must be within the 1-11 range.
|
|
||||||
#
|
|
||||||
#YESCRYPT_COST_FACTOR 5
|
|
||||||
|
|
||||||
#
|
|
||||||
# List of groups to add to the user's supplementary group set
|
|
||||||
# when logging in from the console (as determined by the CONSOLE
|
|
||||||
# setting). Default is none.
|
|
||||||
#
|
|
||||||
# Use with caution - it is possible for users to gain permanent
|
|
||||||
# access to these groups, even when not logged in from the console.
|
|
||||||
# How to do it is left as an exercise for the reader...
|
|
||||||
#
|
|
||||||
#CONSOLE_GROUPS floppy:audio:cdrom
|
|
||||||
|
|
||||||
#
|
|
||||||
# Should login be allowed if we can't cd to the home directory?
|
|
||||||
# Default is no.
|
|
||||||
#
|
|
||||||
DEFAULT_HOME yes
|
|
||||||
|
|
||||||
#
|
|
||||||
# The pwck(8) utility emits a warning for any system account with a home
|
|
||||||
# directory that does not exist. Some system accounts intentionally do
|
|
||||||
# not have a home directory. Such accounts may have this string as
|
|
||||||
# their home directory in /etc/passwd to avoid a spurious warning.
|
|
||||||
#
|
|
||||||
NONEXISTENT /nonexistent
|
|
||||||
|
|
||||||
#
|
|
||||||
# If this file exists and is readable, login environment will be
|
|
||||||
# read from it. Every line should be in the form name=value.
|
|
||||||
#
|
|
||||||
ENVIRON_FILE /etc/environment
|
|
||||||
|
|
||||||
#
|
|
||||||
# If defined, this command is run when removing a user.
|
|
||||||
# It should remove any at/cron/print jobs etc. owned by
|
|
||||||
# the user to be removed (passed as the first argument).
|
|
||||||
#
|
|
||||||
#USERDEL_CMD /usr/sbin/userdel_local
|
|
||||||
|
|
||||||
#
|
|
||||||
# Enable setting of the umask group bits to be the same as owner bits
|
|
||||||
# (examples: 022 -> 002, 077 -> 007) for non-root users, if the uid is
|
|
||||||
# the same as gid, and username is the same as the primary group name.
|
|
||||||
#
|
|
||||||
# This also enables userdel(8) to remove user groups if no members exist.
|
|
||||||
#
|
|
||||||
USERGROUPS_ENAB yes
|
|
||||||
|
|
||||||
#
|
|
||||||
# If set to a non-zero number, the shadow utilities will make sure that
|
|
||||||
# groups never have more than this number of users on one line.
|
|
||||||
# This permits to support split groups (groups split into multiple lines,
|
|
||||||
# with the same group ID, to avoid limitation of the line length in the
|
|
||||||
# group file).
|
|
||||||
#
|
|
||||||
# 0 is the default value and disables this feature.
|
|
||||||
#
|
|
||||||
#MAX_MEMBERS_PER_GROUP 0
|
|
||||||
|
|
||||||
#
|
|
||||||
# If useradd(8) should create home directories for users by default (non
|
|
||||||
# system users only).
|
|
||||||
# This option is overridden with the -M or -m flags on the useradd(8)
|
|
||||||
# command-line.
|
|
||||||
#
|
|
||||||
#CREATE_HOME yes
|
|
||||||
|
|
||||||
#
|
|
||||||
# Force use shadow, even if shadow passwd & shadow group files are
|
|
||||||
# missing.
|
|
||||||
#
|
|
||||||
#FORCE_SHADOW yes
|
|
||||||
|
|
||||||
#
|
|
||||||
# Allow newuidmap and newgidmap when running under an alternative
|
|
||||||
# primary group.
|
|
||||||
#
|
|
||||||
#GRANT_AUX_GROUP_SUBIDS yes
|
|
||||||
|
|
||||||
#
|
|
||||||
# Prevents an empty password field to be interpreted as "no authentication
|
|
||||||
# required".
|
|
||||||
# Set to "yes" to prevent for all accounts
|
|
||||||
# Set to "superuser" to prevent for UID 0 / root (default)
|
|
||||||
# Set to "no" to not prevent for any account (dangerous, historical default)
|
|
||||||
PREVENT_NO_AUTH superuser
|
|
||||||
|
|
||||||
#
|
|
||||||
# Select the HMAC cryptography algorithm.
|
|
||||||
# Used in pam_timestamp module to calculate the keyed-hash message
|
|
||||||
# authentication code.
|
|
||||||
#
|
|
||||||
# Note: it is recommended to check hmac(3) to see the possible algorithms
|
|
||||||
# that are available in your system.
|
|
||||||
#
|
|
||||||
#HMAC_CRYPTO_ALGO SHA512
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
# This is a dummy Makefile.am to get automake work flawlessly,
|
|
||||||
# and also cooperate to make a distribution for `make dist'
|
|
||||||
|
|
||||||
pamd_files = \
|
|
||||||
chpasswd \
|
|
||||||
chfn \
|
|
||||||
chsh \
|
|
||||||
groupmems \
|
|
||||||
login \
|
|
||||||
newusers \
|
|
||||||
passwd
|
|
||||||
|
|
||||||
pamd_acct_tools_files = \
|
|
||||||
chgpasswd \
|
|
||||||
groupadd \
|
|
||||||
groupdel \
|
|
||||||
groupmod \
|
|
||||||
useradd \
|
|
||||||
userdel \
|
|
||||||
usermod
|
|
||||||
|
|
||||||
if USE_PAM
|
|
||||||
pamddir = $(sysconfdir)/pam.d
|
|
||||||
pamd_DATA = $(pamd_files)
|
|
||||||
if ACCT_TOOLS_SETUID
|
|
||||||
pamd_DATA += $(pamd_acct_tools_files)
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
if WITH_SU
|
|
||||||
pamd_files += su
|
|
||||||
endif
|
|
||||||
|
|
||||||
EXTRA_DIST = $(pamd_files) $(pamd_acct_tools_files)
|
|
||||||
@@ -1,574 +0,0 @@
|
|||||||
# Makefile.in generated by automake 1.16.5 from Makefile.am.
|
|
||||||
# @configure_input@
|
|
||||||
|
|
||||||
# Copyright (C) 1994-2021 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@
|
|
||||||
|
|
||||||
# This is a dummy Makefile.am to get automake work flawlessly,
|
|
||||||
# and also cooperate to make a distribution for `make dist'
|
|
||||||
|
|
||||||
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@
|
|
||||||
@ACCT_TOOLS_SETUID_TRUE@@USE_PAM_TRUE@am__append_1 = $(pamd_acct_tools_files)
|
|
||||||
@WITH_SU_TRUE@am__append_2 = su
|
|
||||||
subdir = etc/pam.d
|
|
||||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
|
||||||
am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
|
|
||||||
$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
|
|
||||||
$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
|
|
||||||
$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
|
|
||||||
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
|
|
||||||
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
|
|
||||||
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
|
|
||||||
$(top_srcdir)/m4/progtest.m4 $(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_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 =
|
|
||||||
SOURCES =
|
|
||||||
DIST_SOURCES =
|
|
||||||
am__can_run_installinfo = \
|
|
||||||
case $$AM_UPDATE_INFO_DIR in \
|
|
||||||
n|no|NO) false;; \
|
|
||||||
*) (install-info --version) >/dev/null 2>&1;; \
|
|
||||||
esac
|
|
||||||
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
|
|
||||||
am__vpath_adj = case $$p in \
|
|
||||||
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
|
|
||||||
*) f=$$p;; \
|
|
||||||
esac;
|
|
||||||
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
|
|
||||||
am__install_max = 40
|
|
||||||
am__nobase_strip_setup = \
|
|
||||||
srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
|
|
||||||
am__nobase_strip = \
|
|
||||||
for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
|
|
||||||
am__nobase_list = $(am__nobase_strip_setup); \
|
|
||||||
for p in $$list; do echo "$$p $$p"; done | \
|
|
||||||
sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
|
|
||||||
$(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
|
|
||||||
if (++n[$$2] == $(am__install_max)) \
|
|
||||||
{ print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
|
|
||||||
END { for (dir in files) print dir, files[dir] }'
|
|
||||||
am__base_list = \
|
|
||||||
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
|
|
||||||
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
|
|
||||||
am__uninstall_files_from_dir = { \
|
|
||||||
test -z "$$files" \
|
|
||||||
|| { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
|
|
||||||
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
|
|
||||||
$(am__cd) "$$dir" && rm -f $$files; }; \
|
|
||||||
}
|
|
||||||
am__installdirs = "$(DESTDIR)$(pamddir)"
|
|
||||||
DATA = $(pamd_DATA)
|
|
||||||
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
|
|
||||||
am__DIST_COMMON = $(srcdir)/Makefile.in
|
|
||||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
|
||||||
ACLOCAL = @ACLOCAL@
|
|
||||||
AMTAR = @AMTAR@
|
|
||||||
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
|
|
||||||
AM_DISTCHECK_CONFIGURE_FLAGS = @AM_DISTCHECK_CONFIGURE_FLAGS@
|
|
||||||
AR = @AR@
|
|
||||||
AUTOCONF = @AUTOCONF@
|
|
||||||
AUTOHEADER = @AUTOHEADER@
|
|
||||||
AUTOMAKE = @AUTOMAKE@
|
|
||||||
AWK = @AWK@
|
|
||||||
CC = @CC@
|
|
||||||
CCDEPMODE = @CCDEPMODE@
|
|
||||||
CFLAGS = @CFLAGS@
|
|
||||||
CMOCKA_CFLAGS = @CMOCKA_CFLAGS@
|
|
||||||
CMOCKA_LIBS = @CMOCKA_LIBS@
|
|
||||||
CPP = @CPP@
|
|
||||||
CPPFLAGS = @CPPFLAGS@
|
|
||||||
CSCOPE = @CSCOPE@
|
|
||||||
CTAGS = @CTAGS@
|
|
||||||
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@
|
|
||||||
ECONF_CPPFLAGS = @ECONF_CPPFLAGS@
|
|
||||||
EGREP = @EGREP@
|
|
||||||
ETAGS = @ETAGS@
|
|
||||||
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@
|
|
||||||
LIBADD_DL = @LIBADD_DL@
|
|
||||||
LIBADD_DLD_LINK = @LIBADD_DLD_LINK@
|
|
||||||
LIBADD_DLOPEN = @LIBADD_DLOPEN@
|
|
||||||
LIBADD_SHL_LOAD = @LIBADD_SHL_LOAD@
|
|
||||||
LIBATTR = @LIBATTR@
|
|
||||||
LIBAUDIT = @LIBAUDIT@
|
|
||||||
LIBBSD = @LIBBSD@
|
|
||||||
LIBBSD_CFLAGS = @LIBBSD_CFLAGS@
|
|
||||||
LIBBSD_LIBS = @LIBBSD_LIBS@
|
|
||||||
LIBCRYPT = @LIBCRYPT@
|
|
||||||
LIBECONF = @LIBECONF@
|
|
||||||
LIBICONV = @LIBICONV@
|
|
||||||
LIBINTL = @LIBINTL@
|
|
||||||
LIBMD = @LIBMD@
|
|
||||||
LIBOBJS = @LIBOBJS@
|
|
||||||
LIBPAM = @LIBPAM@
|
|
||||||
LIBS = @LIBS@
|
|
||||||
LIBSELINUX = @LIBSELINUX@
|
|
||||||
LIBSEMANAGE = @LIBSEMANAGE@
|
|
||||||
LIBSKEY = @LIBSKEY@
|
|
||||||
LIBSUBID_ABI = @LIBSUBID_ABI@
|
|
||||||
LIBSUBID_ABI_MAJOR = @LIBSUBID_ABI_MAJOR@
|
|
||||||
LIBSUBID_ABI_MICRO = @LIBSUBID_ABI_MICRO@
|
|
||||||
LIBSUBID_ABI_MINOR = @LIBSUBID_ABI_MINOR@
|
|
||||||
LIBSYSTEMD = @LIBSYSTEMD@
|
|
||||||
LIBTCB = @LIBTCB@
|
|
||||||
LIBTOOL = @LIBTOOL@
|
|
||||||
LIPO = @LIPO@
|
|
||||||
LN_S = @LN_S@
|
|
||||||
LTLIBICONV = @LTLIBICONV@
|
|
||||||
LTLIBINTL = @LTLIBINTL@
|
|
||||||
LTLIBOBJS = @LTLIBOBJS@
|
|
||||||
LT_DLLOADERS = @LT_DLLOADERS@
|
|
||||||
LT_DLPREOPEN = @LT_DLPREOPEN@
|
|
||||||
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@
|
|
||||||
PKG_CONFIG = @PKG_CONFIG@
|
|
||||||
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
|
|
||||||
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
|
|
||||||
POSUB = @POSUB@
|
|
||||||
RANLIB = @RANLIB@
|
|
||||||
SED = @SED@
|
|
||||||
SET_MAKE = @SET_MAKE@
|
|
||||||
SHELL = @SHELL@
|
|
||||||
STRIP = @STRIP@
|
|
||||||
USE_NLS = @USE_NLS@
|
|
||||||
VENDORDIR = @VENDORDIR@
|
|
||||||
VERSION = @VERSION@
|
|
||||||
XGETTEXT = @XGETTEXT@
|
|
||||||
XGETTEXT_015 = @XGETTEXT_015@
|
|
||||||
XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
|
|
||||||
XMLCATALOG = @XMLCATALOG@
|
|
||||||
XML_CATALOG_FILE = @XML_CATALOG_FILE@
|
|
||||||
XSLTPROC = @XSLTPROC@
|
|
||||||
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@
|
|
||||||
pamd_files = chpasswd chfn chsh groupmems login newusers passwd \
|
|
||||||
$(am__append_2)
|
|
||||||
pamd_acct_tools_files = \
|
|
||||||
chgpasswd \
|
|
||||||
groupadd \
|
|
||||||
groupdel \
|
|
||||||
groupmod \
|
|
||||||
useradd \
|
|
||||||
userdel \
|
|
||||||
usermod
|
|
||||||
|
|
||||||
@USE_PAM_TRUE@pamddir = $(sysconfdir)/pam.d
|
|
||||||
@USE_PAM_TRUE@pamd_DATA = $(pamd_files) $(am__append_1)
|
|
||||||
EXTRA_DIST = $(pamd_files) $(pamd_acct_tools_files)
|
|
||||||
all: all-am
|
|
||||||
|
|
||||||
.SUFFIXES:
|
|
||||||
$(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 etc/pam.d/Makefile'; \
|
|
||||||
$(am__cd) $(top_srcdir) && \
|
|
||||||
$(AUTOMAKE) --foreign etc/pam.d/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__maybe_remake_depfiles)'; \
|
|
||||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
|
|
||||||
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):
|
|
||||||
|
|
||||||
mostlyclean-libtool:
|
|
||||||
-rm -f *.lo
|
|
||||||
|
|
||||||
clean-libtool:
|
|
||||||
-rm -rf .libs _libs
|
|
||||||
install-pamdDATA: $(pamd_DATA)
|
|
||||||
@$(NORMAL_INSTALL)
|
|
||||||
@list='$(pamd_DATA)'; test -n "$(pamddir)" || list=; \
|
|
||||||
if test -n "$$list"; then \
|
|
||||||
echo " $(MKDIR_P) '$(DESTDIR)$(pamddir)'"; \
|
|
||||||
$(MKDIR_P) "$(DESTDIR)$(pamddir)" || exit 1; \
|
|
||||||
fi; \
|
|
||||||
for p in $$list; do \
|
|
||||||
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
|
|
||||||
echo "$$d$$p"; \
|
|
||||||
done | $(am__base_list) | \
|
|
||||||
while read files; do \
|
|
||||||
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pamddir)'"; \
|
|
||||||
$(INSTALL_DATA) $$files "$(DESTDIR)$(pamddir)" || exit $$?; \
|
|
||||||
done
|
|
||||||
|
|
||||||
uninstall-pamdDATA:
|
|
||||||
@$(NORMAL_UNINSTALL)
|
|
||||||
@list='$(pamd_DATA)'; test -n "$(pamddir)" || list=; \
|
|
||||||
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
|
|
||||||
dir='$(DESTDIR)$(pamddir)'; $(am__uninstall_files_from_dir)
|
|
||||||
tags TAGS:
|
|
||||||
|
|
||||||
ctags CTAGS:
|
|
||||||
|
|
||||||
cscope cscopelist:
|
|
||||||
|
|
||||||
distdir: $(BUILT_SOURCES)
|
|
||||||
$(MAKE) $(AM_MAKEFLAGS) distdir-am
|
|
||||||
|
|
||||||
distdir-am: $(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 $(DATA)
|
|
||||||
installdirs:
|
|
||||||
for dir in "$(DESTDIR)$(pamddir)"; do \
|
|
||||||
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
|
|
||||||
done
|
|
||||||
install: install-am
|
|
||||||
install-exec: install-exec-am
|
|
||||||
install-data: install-data-am
|
|
||||||
uninstall: uninstall-am
|
|
||||||
|
|
||||||
install-am: all-am
|
|
||||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-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-generic clean-libtool mostlyclean-am
|
|
||||||
|
|
||||||
distclean: distclean-am
|
|
||||||
-rm -f Makefile
|
|
||||||
distclean-am: clean-am distclean-generic
|
|
||||||
|
|
||||||
dvi: dvi-am
|
|
||||||
|
|
||||||
dvi-am:
|
|
||||||
|
|
||||||
html: html-am
|
|
||||||
|
|
||||||
html-am:
|
|
||||||
|
|
||||||
info: info-am
|
|
||||||
|
|
||||||
info-am:
|
|
||||||
|
|
||||||
install-data-am: install-pamdDATA
|
|
||||||
|
|
||||||
install-dvi: install-dvi-am
|
|
||||||
|
|
||||||
install-dvi-am:
|
|
||||||
|
|
||||||
install-exec-am:
|
|
||||||
|
|
||||||
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 -f Makefile
|
|
||||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
|
||||||
|
|
||||||
mostlyclean: mostlyclean-am
|
|
||||||
|
|
||||||
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
|
||||||
|
|
||||||
pdf: pdf-am
|
|
||||||
|
|
||||||
pdf-am:
|
|
||||||
|
|
||||||
ps: ps-am
|
|
||||||
|
|
||||||
ps-am:
|
|
||||||
|
|
||||||
uninstall-am: uninstall-pamdDATA
|
|
||||||
|
|
||||||
.MAKE: install-am install-strip
|
|
||||||
|
|
||||||
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
|
|
||||||
cscopelist-am ctags-am distclean distclean-generic \
|
|
||||||
distclean-libtool distdir dvi dvi-am html html-am info info-am \
|
|
||||||
install install-am 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-pamdDATA install-pdf install-pdf-am install-ps \
|
|
||||||
install-ps-am install-strip installcheck installcheck-am \
|
|
||||||
installdirs maintainer-clean maintainer-clean-generic \
|
|
||||||
mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
|
|
||||||
ps ps-am tags-am uninstall uninstall-am uninstall-pamdDATA
|
|
||||||
|
|
||||||
.PRECIOUS: Makefile
|
|
||||||
|
|
||||||
|
|
||||||
# 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:
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
#%PAM-1.0
|
|
||||||
auth sufficient pam_rootok.so
|
|
||||||
account required pam_permit.so
|
|
||||||
password include system-auth
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
#%PAM-1.0
|
|
||||||
auth sufficient pam_rootok.so
|
|
||||||
account required pam_permit.so
|
|
||||||
password include system-auth
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
#%PAM-1.0
|
|
||||||
auth sufficient pam_rootok.so
|
|
||||||
account required pam_permit.so
|
|
||||||
password include system-auth
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
#%PAM-1.0
|
|
||||||
auth sufficient pam_rootok.so
|
|
||||||
account required pam_permit.so
|
|
||||||
password include system-auth
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
#%PAM-1.0
|
|
||||||
auth sufficient pam_rootok.so
|
|
||||||
account required pam_permit.so
|
|
||||||
password include system-auth
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
#%PAM-1.0
|
|
||||||
auth sufficient pam_rootok.so
|
|
||||||
account required pam_permit.so
|
|
||||||
password include system-auth
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
#%PAM-1.0
|
|
||||||
auth sufficient pam_rootok.so
|
|
||||||
account required pam_permit.so
|
|
||||||
password include system-auth
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
#%PAM-1.0
|
|
||||||
auth sufficient pam_rootok.so
|
|
||||||
account required pam_permit.so
|
|
||||||
password include system-auth
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
#%PAM-1.0
|
|
||||||
auth required pam_securetty.so
|
|
||||||
auth include system-auth
|
|
||||||
account required pam_nologin.so
|
|
||||||
account include system-auth
|
|
||||||
password include system-auth
|
|
||||||
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close
|
|
||||||
session include system-auth
|
|
||||||
session required pam_loginuid.so
|
|
||||||
session optional pam_console.so
|
|
||||||
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
#%PAM-1.0
|
|
||||||
auth sufficient pam_rootok.so
|
|
||||||
account required pam_permit.so
|
|
||||||
password include system-auth
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
#%PAM-1.0
|
|
||||||
auth include system-auth
|
|
||||||
account include system-auth
|
|
||||||
password include system-auth
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
#%PAM-1.0
|
|
||||||
auth sufficient pam_rootok.so
|
|
||||||
# Uncomment the following line to implicitly trust users in the "wheel" group.
|
|
||||||
#auth sufficient pam_wheel.so trust use_uid
|
|
||||||
# Uncomment the following line to require a user to be in the "wheel" group.
|
|
||||||
auth required pam_wheel.so use_uid
|
|
||||||
auth include system-auth
|
|
||||||
account include system-auth
|
|
||||||
password include system-auth
|
|
||||||
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close
|
|
||||||
session include system-auth
|
|
||||||
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open
|
|
||||||
session optional pam_xauth.so
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
#%PAM-1.0
|
|
||||||
auth sufficient pam_rootok.so
|
|
||||||
account required pam_permit.so
|
|
||||||
password include system-auth
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
#%PAM-1.0
|
|
||||||
auth sufficient pam_rootok.so
|
|
||||||
account required pam_permit.so
|
|
||||||
password include system-auth
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
#%PAM-1.0
|
|
||||||
auth sufficient pam_rootok.so
|
|
||||||
account required pam_permit.so
|
|
||||||
password include system-auth
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
shadowmaint_files = \
|
|
||||||
groupdel-pre.d/01-kill_group_procs.sh \
|
|
||||||
userdel-pre.d/01-kill_user_procs.sh
|
|
||||||
|
|
||||||
EXTRA_DIST = $(shadowmaint_files)
|
|
||||||
@@ -1,506 +0,0 @@
|
|||||||
# Makefile.in generated by automake 1.16.5 from Makefile.am.
|
|
||||||
# @configure_input@
|
|
||||||
|
|
||||||
# Copyright (C) 1994-2021 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@
|
|
||||||
subdir = etc/shadow-maint
|
|
||||||
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
|
|
||||||
am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \
|
|
||||||
$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \
|
|
||||||
$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
|
|
||||||
$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
|
|
||||||
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
|
|
||||||
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
|
|
||||||
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
|
|
||||||
$(top_srcdir)/m4/progtest.m4 $(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_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 =
|
|
||||||
SOURCES =
|
|
||||||
DIST_SOURCES =
|
|
||||||
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)
|
|
||||||
am__DIST_COMMON = $(srcdir)/Makefile.in
|
|
||||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
|
||||||
ACLOCAL = @ACLOCAL@
|
|
||||||
AMTAR = @AMTAR@
|
|
||||||
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
|
|
||||||
AM_DISTCHECK_CONFIGURE_FLAGS = @AM_DISTCHECK_CONFIGURE_FLAGS@
|
|
||||||
AR = @AR@
|
|
||||||
AUTOCONF = @AUTOCONF@
|
|
||||||
AUTOHEADER = @AUTOHEADER@
|
|
||||||
AUTOMAKE = @AUTOMAKE@
|
|
||||||
AWK = @AWK@
|
|
||||||
CC = @CC@
|
|
||||||
CCDEPMODE = @CCDEPMODE@
|
|
||||||
CFLAGS = @CFLAGS@
|
|
||||||
CMOCKA_CFLAGS = @CMOCKA_CFLAGS@
|
|
||||||
CMOCKA_LIBS = @CMOCKA_LIBS@
|
|
||||||
CPP = @CPP@
|
|
||||||
CPPFLAGS = @CPPFLAGS@
|
|
||||||
CSCOPE = @CSCOPE@
|
|
||||||
CTAGS = @CTAGS@
|
|
||||||
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@
|
|
||||||
ECONF_CPPFLAGS = @ECONF_CPPFLAGS@
|
|
||||||
EGREP = @EGREP@
|
|
||||||
ETAGS = @ETAGS@
|
|
||||||
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@
|
|
||||||
LIBADD_DL = @LIBADD_DL@
|
|
||||||
LIBADD_DLD_LINK = @LIBADD_DLD_LINK@
|
|
||||||
LIBADD_DLOPEN = @LIBADD_DLOPEN@
|
|
||||||
LIBADD_SHL_LOAD = @LIBADD_SHL_LOAD@
|
|
||||||
LIBATTR = @LIBATTR@
|
|
||||||
LIBAUDIT = @LIBAUDIT@
|
|
||||||
LIBBSD = @LIBBSD@
|
|
||||||
LIBBSD_CFLAGS = @LIBBSD_CFLAGS@
|
|
||||||
LIBBSD_LIBS = @LIBBSD_LIBS@
|
|
||||||
LIBCRYPT = @LIBCRYPT@
|
|
||||||
LIBECONF = @LIBECONF@
|
|
||||||
LIBICONV = @LIBICONV@
|
|
||||||
LIBINTL = @LIBINTL@
|
|
||||||
LIBMD = @LIBMD@
|
|
||||||
LIBOBJS = @LIBOBJS@
|
|
||||||
LIBPAM = @LIBPAM@
|
|
||||||
LIBS = @LIBS@
|
|
||||||
LIBSELINUX = @LIBSELINUX@
|
|
||||||
LIBSEMANAGE = @LIBSEMANAGE@
|
|
||||||
LIBSKEY = @LIBSKEY@
|
|
||||||
LIBSUBID_ABI = @LIBSUBID_ABI@
|
|
||||||
LIBSUBID_ABI_MAJOR = @LIBSUBID_ABI_MAJOR@
|
|
||||||
LIBSUBID_ABI_MICRO = @LIBSUBID_ABI_MICRO@
|
|
||||||
LIBSUBID_ABI_MINOR = @LIBSUBID_ABI_MINOR@
|
|
||||||
LIBSYSTEMD = @LIBSYSTEMD@
|
|
||||||
LIBTCB = @LIBTCB@
|
|
||||||
LIBTOOL = @LIBTOOL@
|
|
||||||
LIPO = @LIPO@
|
|
||||||
LN_S = @LN_S@
|
|
||||||
LTLIBICONV = @LTLIBICONV@
|
|
||||||
LTLIBINTL = @LTLIBINTL@
|
|
||||||
LTLIBOBJS = @LTLIBOBJS@
|
|
||||||
LT_DLLOADERS = @LT_DLLOADERS@
|
|
||||||
LT_DLPREOPEN = @LT_DLPREOPEN@
|
|
||||||
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@
|
|
||||||
PKG_CONFIG = @PKG_CONFIG@
|
|
||||||
PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
|
|
||||||
PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
|
|
||||||
POSUB = @POSUB@
|
|
||||||
RANLIB = @RANLIB@
|
|
||||||
SED = @SED@
|
|
||||||
SET_MAKE = @SET_MAKE@
|
|
||||||
SHELL = @SHELL@
|
|
||||||
STRIP = @STRIP@
|
|
||||||
USE_NLS = @USE_NLS@
|
|
||||||
VENDORDIR = @VENDORDIR@
|
|
||||||
VERSION = @VERSION@
|
|
||||||
XGETTEXT = @XGETTEXT@
|
|
||||||
XGETTEXT_015 = @XGETTEXT_015@
|
|
||||||
XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
|
|
||||||
XMLCATALOG = @XMLCATALOG@
|
|
||||||
XML_CATALOG_FILE = @XML_CATALOG_FILE@
|
|
||||||
XSLTPROC = @XSLTPROC@
|
|
||||||
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@
|
|
||||||
shadowmaint_files = \
|
|
||||||
groupdel-pre.d/01-kill_group_procs.sh \
|
|
||||||
userdel-pre.d/01-kill_user_procs.sh
|
|
||||||
|
|
||||||
EXTRA_DIST = $(shadowmaint_files)
|
|
||||||
all: all-am
|
|
||||||
|
|
||||||
.SUFFIXES:
|
|
||||||
$(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 etc/shadow-maint/Makefile'; \
|
|
||||||
$(am__cd) $(top_srcdir) && \
|
|
||||||
$(AUTOMAKE) --foreign etc/shadow-maint/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__maybe_remake_depfiles)'; \
|
|
||||||
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
|
|
||||||
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):
|
|
||||||
|
|
||||||
mostlyclean-libtool:
|
|
||||||
-rm -f *.lo
|
|
||||||
|
|
||||||
clean-libtool:
|
|
||||||
-rm -rf .libs _libs
|
|
||||||
tags TAGS:
|
|
||||||
|
|
||||||
ctags CTAGS:
|
|
||||||
|
|
||||||
cscope cscopelist:
|
|
||||||
|
|
||||||
distdir: $(BUILT_SOURCES)
|
|
||||||
$(MAKE) $(AM_MAKEFLAGS) distdir-am
|
|
||||||
|
|
||||||
distdir-am: $(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
|
|
||||||
installdirs:
|
|
||||||
install: install-am
|
|
||||||
install-exec: install-exec-am
|
|
||||||
install-data: install-data-am
|
|
||||||
uninstall: uninstall-am
|
|
||||||
|
|
||||||
install-am: all-am
|
|
||||||
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-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-generic clean-libtool mostlyclean-am
|
|
||||||
|
|
||||||
distclean: distclean-am
|
|
||||||
-rm -f Makefile
|
|
||||||
distclean-am: clean-am distclean-generic
|
|
||||||
|
|
||||||
dvi: dvi-am
|
|
||||||
|
|
||||||
dvi-am:
|
|
||||||
|
|
||||||
html: html-am
|
|
||||||
|
|
||||||
html-am:
|
|
||||||
|
|
||||||
info: info-am
|
|
||||||
|
|
||||||
info-am:
|
|
||||||
|
|
||||||
install-data-am:
|
|
||||||
|
|
||||||
install-dvi: install-dvi-am
|
|
||||||
|
|
||||||
install-dvi-am:
|
|
||||||
|
|
||||||
install-exec-am:
|
|
||||||
|
|
||||||
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 -f Makefile
|
|
||||||
maintainer-clean-am: distclean-am maintainer-clean-generic
|
|
||||||
|
|
||||||
mostlyclean: mostlyclean-am
|
|
||||||
|
|
||||||
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
|
|
||||||
|
|
||||||
pdf: pdf-am
|
|
||||||
|
|
||||||
pdf-am:
|
|
||||||
|
|
||||||
ps: ps-am
|
|
||||||
|
|
||||||
ps-am:
|
|
||||||
|
|
||||||
uninstall-am:
|
|
||||||
|
|
||||||
.MAKE: install-am install-strip
|
|
||||||
|
|
||||||
.PHONY: all all-am check check-am clean clean-generic clean-libtool \
|
|
||||||
cscopelist-am ctags-am distclean distclean-generic \
|
|
||||||
distclean-libtool distdir dvi dvi-am html html-am info info-am \
|
|
||||||
install install-am 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-strip installcheck installcheck-am installdirs \
|
|
||||||
maintainer-clean maintainer-clean-generic mostlyclean \
|
|
||||||
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
|
|
||||||
tags-am uninstall uninstall-am
|
|
||||||
|
|
||||||
.PRECIOUS: Makefile
|
|
||||||
|
|
||||||
|
|
||||||
# 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:
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
|
||||||
GROUPID=`awk -F: '$1 == "'"${SUBJECT}"'" { print $3 }' /etc/group`
|
|
||||||
|
|
||||||
if [ "${GROUPID}" = "" ]; then
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
for status in /proc/*/status; do
|
|
||||||
# either this isn't a process or its already dead since expanding the list
|
|
||||||
[ -f "$status" ] || continue
|
|
||||||
|
|
||||||
tbuf=${status%/status}
|
|
||||||
pid=${tbuf#/proc/}
|
|
||||||
case "$pid" in
|
|
||||||
"$$") continue;;
|
|
||||||
[0-9]*) :;;
|
|
||||||
*) continue
|
|
||||||
esac
|
|
||||||
|
|
||||||
grep -q '^Groups:.*\b'"${GROUPID}"'\b.*' "/proc/$pid/status" || continue
|
|
||||||
|
|
||||||
kill -9 "$pid" || echo "cannot kill $pid" 1>&2
|
|
||||||
done
|
|
||||||
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
|
||||||
|
|
||||||
# Check user exists, and if so, send sigkill to processes that the user owns
|
|
||||||
|
|
||||||
ps -eo user >/dev/null 2>&1
|
|
||||||
if [ $? -eq 0 ]; then
|
|
||||||
RUNNING=`ps -eo user | grep -Fx "$SUBJECT" | wc -l`
|
|
||||||
# if the user does not exist, RUNNING will be 0
|
|
||||||
if [ "${RUNNING}x" = "0x" ]; then
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# If there is no ps -eo, traverse the process directly.
|
|
||||||
|
|
||||||
ls -1 /proc | while IFS= read -r PROC; do
|
|
||||||
echo "$PROC" | grep -E '^[0-9]+$' >/dev/null
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
if [ -d "/proc/${PROC}" ]; then
|
|
||||||
USR=`stat -c "%U" /proc/${PROC}`
|
|
||||||
if [ "${USR}" = "${SUBJECT}" ]; then
|
|
||||||
echo "Killing ${SUBJECT} owned ${PROC}"
|
|
||||||
kill -9 "${PROC}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
Vendored
-5
@@ -1,5 +0,0 @@
|
|||||||
-kr
|
|
||||||
-i8
|
|
||||||
-bad
|
|
||||||
-pcs
|
|
||||||
-l80
|
|
||||||
-312
@@ -1,312 +0,0 @@
|
|||||||
|
|
||||||
AUTOMAKE_OPTIONS = 1.0 foreign
|
|
||||||
|
|
||||||
DEFS =
|
|
||||||
|
|
||||||
noinst_LTLIBRARIES = libshadow.la
|
|
||||||
|
|
||||||
if USE_PAM
|
|
||||||
LIBCRYPT_PAM = $(LIBCRYPT)
|
|
||||||
else
|
|
||||||
LIBCRYPT_PAM =
|
|
||||||
endif
|
|
||||||
|
|
||||||
AM_CPPFLAGS = -I$(top_srcdir)/lib -I$(top_srcdir) $(ECONF_CPPFLAGS)
|
|
||||||
|
|
||||||
libshadow_la_CPPFLAGS = $(ECONF_CPPFLAGS)
|
|
||||||
if HAVE_VENDORDIR
|
|
||||||
libshadow_la_CPPFLAGS += -DVENDORDIR=\"$(VENDORDIR)\"
|
|
||||||
endif
|
|
||||||
|
|
||||||
libshadow_la_CPPFLAGS += -I$(top_srcdir)
|
|
||||||
libshadow_la_CFLAGS = $(LIBBSD_CFLAGS) $(LIBCRYPT_PAM) $(LIBSYSTEMD)
|
|
||||||
libshadow_la_LIBADD = $(LIBADD_DLOPEN)
|
|
||||||
|
|
||||||
libshadow_la_SOURCES = \
|
|
||||||
addgrps.c \
|
|
||||||
adds.c \
|
|
||||||
adds.h \
|
|
||||||
age.c \
|
|
||||||
agetpass.c \
|
|
||||||
agetpass.h \
|
|
||||||
alloc/calloc.c \
|
|
||||||
alloc/calloc.h \
|
|
||||||
alloc/malloc.c \
|
|
||||||
alloc/malloc.h \
|
|
||||||
alloc/realloc.c \
|
|
||||||
alloc/realloc.h \
|
|
||||||
alloc/reallocf.c \
|
|
||||||
alloc/reallocf.h \
|
|
||||||
atoi/a2i.c \
|
|
||||||
atoi/a2i.h \
|
|
||||||
atoi/getnum.c \
|
|
||||||
atoi/getnum.h \
|
|
||||||
atoi/strtoi/strtoi.c \
|
|
||||||
atoi/strtoi/strtoi.h \
|
|
||||||
atoi/strtoi/strtou.c \
|
|
||||||
atoi/strtoi/strtou.h \
|
|
||||||
atoi/strtoi/strtou_noneg.c \
|
|
||||||
atoi/strtoi/strtou_noneg.h \
|
|
||||||
attr.h \
|
|
||||||
audit_help.c \
|
|
||||||
basename.c \
|
|
||||||
bit.c \
|
|
||||||
bit.h \
|
|
||||||
cast.h \
|
|
||||||
chkname.c \
|
|
||||||
chkname.h \
|
|
||||||
chkhash.c \
|
|
||||||
chkhash.h \
|
|
||||||
chowndir.c \
|
|
||||||
chowntty.c \
|
|
||||||
cleanup.c \
|
|
||||||
cleanup_group.c \
|
|
||||||
cleanup_user.c \
|
|
||||||
commonio.c \
|
|
||||||
commonio.h \
|
|
||||||
console.c \
|
|
||||||
copydir.c \
|
|
||||||
csrand.c \
|
|
||||||
defines.h \
|
|
||||||
encrypt.c \
|
|
||||||
env.c \
|
|
||||||
exit_if_null.c \
|
|
||||||
exit_if_null.h \
|
|
||||||
exitcodes.h \
|
|
||||||
faillog.h \
|
|
||||||
failure.c \
|
|
||||||
failure.h \
|
|
||||||
fd.c \
|
|
||||||
fields.c \
|
|
||||||
fields.h \
|
|
||||||
find_new_gid.c \
|
|
||||||
find_new_uid.c \
|
|
||||||
find_new_sub_gids.c \
|
|
||||||
find_new_sub_uids.c \
|
|
||||||
fs/mkstemp/fmkomstemp.c \
|
|
||||||
fs/mkstemp/fmkomstemp.h \
|
|
||||||
fs/mkstemp/mkomstemp.c \
|
|
||||||
fs/mkstemp/mkomstemp.h \
|
|
||||||
fs/readlink/areadlink.c \
|
|
||||||
fs/readlink/areadlink.h \
|
|
||||||
fs/readlink/readlinknul.c \
|
|
||||||
fs/readlink/readlinknul.h \
|
|
||||||
get_pid.c \
|
|
||||||
getdef.c \
|
|
||||||
getdef.h \
|
|
||||||
getgr_nam_gid.c \
|
|
||||||
getrange.c \
|
|
||||||
gettime.c \
|
|
||||||
groupio.c \
|
|
||||||
groupmem.c \
|
|
||||||
groupio.h \
|
|
||||||
hushed.c \
|
|
||||||
idmapping.h \
|
|
||||||
idmapping.c \
|
|
||||||
isexpired.c \
|
|
||||||
limits.c \
|
|
||||||
list.c \
|
|
||||||
lockpw.c \
|
|
||||||
loginprompt.c \
|
|
||||||
mail.c \
|
|
||||||
motd.c \
|
|
||||||
myname.c \
|
|
||||||
nss.c \
|
|
||||||
nscd.c \
|
|
||||||
nscd.h \
|
|
||||||
obscure.c \
|
|
||||||
pam_defs.h \
|
|
||||||
pam_pass.c \
|
|
||||||
pam_pass_non_interactive.c \
|
|
||||||
port.c \
|
|
||||||
port.h \
|
|
||||||
prefix_flag.c \
|
|
||||||
prototypes.h \
|
|
||||||
pwauth.c \
|
|
||||||
pwauth.h \
|
|
||||||
pwio.c \
|
|
||||||
pwio.h \
|
|
||||||
pwd_init.c \
|
|
||||||
pwd2spwd.c \
|
|
||||||
pwdcheck.c \
|
|
||||||
pwmem.c \
|
|
||||||
remove_tree.c \
|
|
||||||
root_flag.c \
|
|
||||||
run_part.h \
|
|
||||||
run_part.c \
|
|
||||||
salt.c \
|
|
||||||
search/cmp/cmp.c \
|
|
||||||
search/cmp/cmp.h \
|
|
||||||
search/l/lfind.c \
|
|
||||||
search/l/lfind.h \
|
|
||||||
search/l/lsearch.c \
|
|
||||||
search/l/lsearch.h \
|
|
||||||
search/sort/qsort.c \
|
|
||||||
search/sort/qsort.h \
|
|
||||||
selinux.c \
|
|
||||||
semanage.c \
|
|
||||||
setugid.c \
|
|
||||||
setupenv.c \
|
|
||||||
sgroupio.c \
|
|
||||||
sgroupio.h \
|
|
||||||
shadow/group/sgetgrent.c \
|
|
||||||
shadow/group/sgetgrent.h \
|
|
||||||
shadow/grp/agetgroups.c \
|
|
||||||
shadow/grp/agetgroups.h \
|
|
||||||
shadow/gshadow/endsgent.c \
|
|
||||||
shadow/gshadow/endsgent.h \
|
|
||||||
shadow/gshadow/fgetsgent.c \
|
|
||||||
shadow/gshadow/fgetsgent.h \
|
|
||||||
shadow/gshadow/getsgent.c \
|
|
||||||
shadow/gshadow/getsgent.h \
|
|
||||||
shadow/gshadow/getsgnam.c \
|
|
||||||
shadow/gshadow/getsgnam.h \
|
|
||||||
shadow/gshadow/gshadow.c \
|
|
||||||
shadow/gshadow/gshadow.h \
|
|
||||||
shadow/gshadow/putsgent.c \
|
|
||||||
shadow/gshadow/putsgent.h \
|
|
||||||
shadow/gshadow/setsgent.c \
|
|
||||||
shadow/gshadow/setsgent.h \
|
|
||||||
shadow/gshadow/sgetsgent.c \
|
|
||||||
shadow/gshadow/sgetsgent.h \
|
|
||||||
shadow/gshadow/sgrp.c \
|
|
||||||
shadow/gshadow/sgrp.h \
|
|
||||||
shadow/passwd/sgetpwent.c \
|
|
||||||
shadow/passwd/sgetpwent.h \
|
|
||||||
shadow/shadow/sgetspent.c \
|
|
||||||
shadow/shadow/sgetspent.h \
|
|
||||||
shadowio.c \
|
|
||||||
shadowio.h \
|
|
||||||
shadowlog.c \
|
|
||||||
shadowlog.h \
|
|
||||||
shadowlog_internal.h \
|
|
||||||
shadowmem.c \
|
|
||||||
shell.c \
|
|
||||||
sizeof.h \
|
|
||||||
spawn.c \
|
|
||||||
sssd.c \
|
|
||||||
sssd.h \
|
|
||||||
string/ctype/strchrisascii/strchriscntrl.c \
|
|
||||||
string/ctype/strchrisascii/strchriscntrl.h \
|
|
||||||
string/ctype/strisascii/strisdigit.c \
|
|
||||||
string/ctype/strisascii/strisdigit.h \
|
|
||||||
string/ctype/strisascii/strisprint.c \
|
|
||||||
string/ctype/strisascii/strisprint.h \
|
|
||||||
string/ctype/strtoascii/strtolower.c \
|
|
||||||
string/ctype/strtoascii/strtolower.h \
|
|
||||||
string/memset/memzero.c \
|
|
||||||
string/memset/memzero.h \
|
|
||||||
string/sprintf/aprintf.c \
|
|
||||||
string/sprintf/aprintf.h \
|
|
||||||
string/sprintf/snprintf.c \
|
|
||||||
string/sprintf/snprintf.h \
|
|
||||||
string/sprintf/stpeprintf.c \
|
|
||||||
string/sprintf/stpeprintf.h \
|
|
||||||
string/strchr/strchrcnt.c \
|
|
||||||
string/strchr/strchrcnt.h \
|
|
||||||
string/strchr/strchrscnt.c \
|
|
||||||
string/strchr/strchrscnt.h \
|
|
||||||
string/strchr/strnul.c \
|
|
||||||
string/strchr/strnul.h \
|
|
||||||
string/strcmp/strcaseeq.c \
|
|
||||||
string/strcmp/strcaseeq.h \
|
|
||||||
string/strcmp/strcaseprefix.c \
|
|
||||||
string/strcmp/strcaseprefix.h \
|
|
||||||
string/strcmp/streq.c \
|
|
||||||
string/strcmp/streq.h \
|
|
||||||
string/strcmp/strneq.c \
|
|
||||||
string/strcmp/strneq.h \
|
|
||||||
string/strcmp/strprefix.c \
|
|
||||||
string/strcmp/strprefix.h \
|
|
||||||
string/strcpy/stpecpy.c \
|
|
||||||
string/strcpy/stpecpy.h \
|
|
||||||
string/strcpy/strncat.c \
|
|
||||||
string/strcpy/strncat.h \
|
|
||||||
string/strcpy/strncpy.c \
|
|
||||||
string/strcpy/strncpy.h \
|
|
||||||
string/strcpy/strtcpy.c \
|
|
||||||
string/strcpy/strtcpy.h \
|
|
||||||
string/strdup/strdup.c \
|
|
||||||
string/strdup/strdup.h \
|
|
||||||
string/strdup/strndupa.c \
|
|
||||||
string/strdup/strndupa.h \
|
|
||||||
string/strdup/strndup.c \
|
|
||||||
string/strdup/strndup.h \
|
|
||||||
string/strerrno.c \
|
|
||||||
string/strerrno.h \
|
|
||||||
string/strftime.c \
|
|
||||||
string/strftime.h \
|
|
||||||
string/strspn/stpspn.c \
|
|
||||||
string/strspn/stpspn.h \
|
|
||||||
string/strspn/stprcspn.c \
|
|
||||||
string/strspn/stprcspn.h \
|
|
||||||
string/strspn/stprspn.c \
|
|
||||||
string/strspn/stprspn.h \
|
|
||||||
string/strspn/strrcspn.c \
|
|
||||||
string/strspn/strrcspn.h \
|
|
||||||
string/strspn/strrspn.c \
|
|
||||||
string/strspn/strrspn.h \
|
|
||||||
string/strtok/stpsep.c \
|
|
||||||
string/strtok/stpsep.h \
|
|
||||||
string/strtok/astrsep2ls.c \
|
|
||||||
string/strtok/astrsep2ls.h \
|
|
||||||
string/strtok/strsep2arr.c \
|
|
||||||
string/strtok/strsep2arr.h \
|
|
||||||
string/strtok/strsep2ls.c \
|
|
||||||
string/strtok/strsep2ls.h \
|
|
||||||
strtoday.c \
|
|
||||||
sub.c \
|
|
||||||
subordinateio.h \
|
|
||||||
subordinateio.c \
|
|
||||||
sulog.c \
|
|
||||||
time/day_to_str.c \
|
|
||||||
time/day_to_str.h \
|
|
||||||
ttytype.c \
|
|
||||||
typetraits.h \
|
|
||||||
tz.c \
|
|
||||||
ulimit.c \
|
|
||||||
user_busy.c \
|
|
||||||
valid.c \
|
|
||||||
write_full.c \
|
|
||||||
xgetpwnam.c \
|
|
||||||
xprefix_getpwnam.c \
|
|
||||||
xgetpwuid.c \
|
|
||||||
xgetgrnam.c \
|
|
||||||
xgetgrgid.c \
|
|
||||||
xgetspnam.c \
|
|
||||||
yesno.c
|
|
||||||
|
|
||||||
if WITH_TCB
|
|
||||||
libshadow_la_SOURCES += tcbfuncs.c tcbfuncs.h
|
|
||||||
endif
|
|
||||||
|
|
||||||
if WITH_BTRFS
|
|
||||||
libshadow_la_SOURCES += btrfs.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
if ENABLE_LASTLOG
|
|
||||||
libshadow_la_SOURCES += log.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
if ENABLE_LOGIND
|
|
||||||
libshadow_la_SOURCES += logind.c
|
|
||||||
else
|
|
||||||
libshadow_la_SOURCES += utmp.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
if !WITH_LIBBSD
|
|
||||||
libshadow_la_SOURCES += \
|
|
||||||
freezero.h \
|
|
||||||
freezero.c \
|
|
||||||
readpassphrase.h \
|
|
||||||
readpassphrase.c
|
|
||||||
endif
|
|
||||||
|
|
||||||
# These files are unneeded for some reason, listed in
|
|
||||||
# order of appearance:
|
|
||||||
#
|
|
||||||
# sources for dbm support (not yet used)
|
|
||||||
|
|
||||||
EXTRA_DIST = \
|
|
||||||
.indent.pro \
|
|
||||||
xgetXXbyYY.c
|
|
||||||
-3201
File diff suppressed because it is too large
Load Diff
@@ -1,88 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: 1989-1994, Julianne Frances Haugh
|
|
||||||
// SPDX-FileCopyrightText: 1996-1998, Marek Michałkiewicz
|
|
||||||
// SPDX-FileCopyrightText: 2001-2006, Tomasz Kłoczko
|
|
||||||
// SPDX-FileCopyrightText: 2007-2009, Nicolas François
|
|
||||||
// SPDX-FileCopyrightText: 2024, Alejandro Colomar <alx@kernel.org>
|
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#if !defined(USE_PAM)
|
|
||||||
|
|
||||||
#include "prototypes.h"
|
|
||||||
#include "defines.h"
|
|
||||||
|
|
||||||
#include <errno.h>
|
|
||||||
#include <grp.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
|
|
||||||
#include "alloc/reallocf.h"
|
|
||||||
#include "search/l/lsearch.h"
|
|
||||||
#include "shadow/grp/agetgroups.h"
|
|
||||||
#include "shadowlog.h"
|
|
||||||
#include "string/strchr/strchrscnt.h"
|
|
||||||
#include "string/strcmp/streq.h"
|
|
||||||
#include "string/strerrno.h"
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Add groups with names from LIST (separated by commas or colons)
|
|
||||||
* to the supplementary group set. Silently ignore groups which are
|
|
||||||
* already there.
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
add_groups(const char *list)
|
|
||||||
{
|
|
||||||
char *dup;
|
|
||||||
FILE *shadow_logfd = log_get_logfd();
|
|
||||||
gid_t *gids;
|
|
||||||
size_t n;
|
|
||||||
|
|
||||||
gids = agetgroups(&n);
|
|
||||||
if (gids == NULL)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
gids = reallocf_T(gids, n + strchrscnt(list, ",:") + 1, gid_t);
|
|
||||||
if (gids == NULL)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
dup = strdup(list);
|
|
||||||
if (dup == NULL)
|
|
||||||
goto free_gids;
|
|
||||||
|
|
||||||
if (!streq(dup, "")) {
|
|
||||||
char *g, *p;
|
|
||||||
|
|
||||||
p = dup;
|
|
||||||
while (NULL != (g = strsep(&p, ",:"))) {
|
|
||||||
struct group *grp;
|
|
||||||
|
|
||||||
grp = getgrnam(g); /* local, no need for xgetgrnam */
|
|
||||||
if (NULL == grp) {
|
|
||||||
fprintf(shadow_logfd, _("Warning: unknown group %s\n"), g);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
LSEARCH(gid_t, &grp->gr_gid, gids, &n);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
free(dup);
|
|
||||||
|
|
||||||
if (setgroups(n, gids) == -1) {
|
|
||||||
fprintf(shadow_logfd, "setgroups: %s\n", strerrno());
|
|
||||||
goto free_gids;
|
|
||||||
}
|
|
||||||
|
|
||||||
free(gids);
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
free_gids:
|
|
||||||
free(gids);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
#else /* !USE_PAM */
|
|
||||||
extern int ISO_C_forbids_an_empty_translation_unit;
|
|
||||||
#endif /* !USE_PAM */
|
|
||||||
-13
@@ -1,13 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: 2023, Alejandro Colomar <alx@kernel.org>
|
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include "adds.h"
|
|
||||||
|
|
||||||
#include <stddef.h>
|
|
||||||
|
|
||||||
|
|
||||||
extern inline long addsl2(long a, long b);
|
|
||||||
extern inline long addslN(size_t n, long addend[n]);
|
|
||||||
-70
@@ -1,70 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
|
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef SHADOW_INCLUDE_LIB_ADDS_H_
|
|
||||||
#define SHADOW_INCLUDE_LIB_ADDS_H_
|
|
||||||
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include <errno.h>
|
|
||||||
#include <limits.h>
|
|
||||||
#include <stddef.h>
|
|
||||||
|
|
||||||
#include "search/sort/qsort.h"
|
|
||||||
#include "sizeof.h"
|
|
||||||
|
|
||||||
|
|
||||||
#define addsl(a, b, ...) \
|
|
||||||
({ \
|
|
||||||
long addend_[] = {a, b, __VA_ARGS__}; \
|
|
||||||
\
|
|
||||||
addslN(countof(addend_), addend_); \
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
inline long addsl2(long a, long b);
|
|
||||||
inline long addslN(size_t n, long addend[n]);
|
|
||||||
|
|
||||||
|
|
||||||
inline long
|
|
||||||
addsl2(long a, long b)
|
|
||||||
{
|
|
||||||
if (a > 0 && b > LONG_MAX - a) {
|
|
||||||
errno = EOVERFLOW;
|
|
||||||
return LONG_MAX;
|
|
||||||
}
|
|
||||||
if (a < 0 && b < LONG_MIN - a) {
|
|
||||||
errno = EOVERFLOW;
|
|
||||||
return LONG_MIN;
|
|
||||||
}
|
|
||||||
return a + b;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
inline long
|
|
||||||
addslN(size_t n, long addend[n])
|
|
||||||
{
|
|
||||||
int e;
|
|
||||||
|
|
||||||
if (n == 0) {
|
|
||||||
errno = EDOM;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
e = errno;
|
|
||||||
while (n > 1) {
|
|
||||||
QSORT(long, addend, n);
|
|
||||||
|
|
||||||
errno = 0;
|
|
||||||
addend[0] = addsl2(addend[0], addend[--n]);
|
|
||||||
if (errno == EOVERFLOW)
|
|
||||||
return addend[0];
|
|
||||||
}
|
|
||||||
errno = e;
|
|
||||||
return addend[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#endif // include guard
|
|
||||||
@@ -1,182 +0,0 @@
|
|||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: 1989 - 1994, Julianne Frances Haugh
|
|
||||||
* SPDX-FileCopyrightText: 1996 - 1998, Marek Michałkiewicz
|
|
||||||
* SPDX-FileCopyrightText: 2001 - 2006, Tomasz Kłoczko
|
|
||||||
* SPDX-FileCopyrightText: 2008 - 2009, Nicolas François
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <time.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <pwd.h>
|
|
||||||
#include <grp.h>
|
|
||||||
|
|
||||||
#include "adds.h"
|
|
||||||
#include "defines.h"
|
|
||||||
#include "exitcodes.h"
|
|
||||||
#include "prototypes.h"
|
|
||||||
#include "shadow/gshadow/endsgent.h"
|
|
||||||
|
|
||||||
|
|
||||||
#ident "$Id$"
|
|
||||||
|
|
||||||
#ifndef PASSWD_PROGRAM
|
|
||||||
#define PASSWD_PROGRAM "/bin/passwd"
|
|
||||||
#endif
|
|
||||||
/*
|
|
||||||
* expire - force password change if password expired
|
|
||||||
*
|
|
||||||
* expire() calls /bin/passwd to change the user's password
|
|
||||||
* if it has expired.
|
|
||||||
*/
|
|
||||||
int expire (const struct passwd *pw, /*@null@*/const struct spwd *sp)
|
|
||||||
{
|
|
||||||
int status;
|
|
||||||
pid_t child;
|
|
||||||
pid_t pid;
|
|
||||||
|
|
||||||
if (NULL == sp) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* See if the user's password has expired, and if so
|
|
||||||
* force them to change their password.
|
|
||||||
*/
|
|
||||||
|
|
||||||
status = isexpired (pw, sp);
|
|
||||||
switch (status) {
|
|
||||||
case 0:
|
|
||||||
return 0;
|
|
||||||
case 1:
|
|
||||||
(void) fputs (_("Your password has expired."), stdout);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
(void) fputs (_("Your password is inactive."), stdout);
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
(void) fputs (_("Your login has expired."), stdout);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Setting the maximum valid period to less than the minimum
|
|
||||||
* valid period means that the minimum period will never
|
|
||||||
* occur while the password is valid, so the user can never
|
|
||||||
* change that password.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if ((status > 1) || (sp->sp_max < sp->sp_min)) {
|
|
||||||
(void) puts (_(" Contact the system administrator."));
|
|
||||||
exit (EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
(void) puts (_(" Choose a new password."));
|
|
||||||
(void) fflush (stdout);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Close all the files so that unauthorized access won't
|
|
||||||
* occur. This needs to be done anyway because those files
|
|
||||||
* might become stale after "passwd" is executed.
|
|
||||||
*/
|
|
||||||
|
|
||||||
endspent ();
|
|
||||||
endpwent ();
|
|
||||||
#ifdef SHADOWGRP
|
|
||||||
endsgent ();
|
|
||||||
#endif
|
|
||||||
endgrent ();
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Execute the /bin/passwd command. The exit status will be
|
|
||||||
* examined to see what the result is. If there are any
|
|
||||||
* errors the routine will exit. This forces the user to
|
|
||||||
* change their password before being able to use the account.
|
|
||||||
*/
|
|
||||||
|
|
||||||
pid = fork ();
|
|
||||||
if (0 == pid) {
|
|
||||||
int err;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Set the UID to be that of the user. This causes
|
|
||||||
* passwd to work just like it would had they executed
|
|
||||||
* it from the command line while logged in.
|
|
||||||
*/
|
|
||||||
#if !defined(USE_PAM)
|
|
||||||
if (setup_uid_gid (pw, false) != 0)
|
|
||||||
#else
|
|
||||||
if (setup_uid_gid (pw) != 0)
|
|
||||||
#endif
|
|
||||||
{
|
|
||||||
_exit (126);
|
|
||||||
}
|
|
||||||
|
|
||||||
(void) execl (PASSWD_PROGRAM, PASSWD_PROGRAM, pw->pw_name, (char *) NULL);
|
|
||||||
err = errno;
|
|
||||||
perror ("Can't execute " PASSWD_PROGRAM);
|
|
||||||
_exit ((ENOENT == err) ? E_CMD_NOTFOUND : E_CMD_NOEXEC);
|
|
||||||
} else if ((pid_t) -1 == pid) {
|
|
||||||
perror ("fork");
|
|
||||||
exit (EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
|
|
||||||
while (((child = wait (&status)) != pid) && (child != (pid_t)-1));
|
|
||||||
|
|
||||||
if ((child == pid) && (0 == status)) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
exit (EXIT_FAILURE);
|
|
||||||
/*@notreached@*/}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* agecheck - see if warning is needed for password expiration
|
|
||||||
*
|
|
||||||
* agecheck sees how many days until the user's password is going
|
|
||||||
* to expire and warns the user of the pending password expiration.
|
|
||||||
*/
|
|
||||||
|
|
||||||
void agecheck (/*@null@*/const struct spwd *sp)
|
|
||||||
{
|
|
||||||
long now = time(NULL) / DAY;
|
|
||||||
long remain;
|
|
||||||
|
|
||||||
if (NULL == sp) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The last, max, and warn fields must be supported or the
|
|
||||||
* warning period cannot be calculated.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if ( (-1 == sp->sp_lstchg)
|
|
||||||
|| (-1 == sp->sp_max)
|
|
||||||
|| (-1 == sp->sp_warn)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (0 == sp->sp_lstchg) {
|
|
||||||
(void) puts (_("You must change your password."));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
remain = addsl(sp->sp_lstchg, sp->sp_max, -now);
|
|
||||||
|
|
||||||
if (remain <= sp->sp_warn) {
|
|
||||||
if (remain > 1) {
|
|
||||||
(void) printf (_("Your password will expire in %ld days.\n"),
|
|
||||||
remain);
|
|
||||||
} else if (1 == remain) {
|
|
||||||
(void) puts (_("Your password will expire tomorrow."));
|
|
||||||
} else if (remain == 0) {
|
|
||||||
(void) puts (_("Your password will expire today."));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
-145
@@ -1,145 +0,0 @@
|
|||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: 2022, Alejandro Colomar <alx@kernel.org>
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include "agetpass.h"
|
|
||||||
|
|
||||||
#include <limits.h>
|
|
||||||
#include <readpassphrase.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#ident "$Id$"
|
|
||||||
|
|
||||||
#include "alloc/malloc.h"
|
|
||||||
|
|
||||||
#if WITH_LIBBSD == 0
|
|
||||||
#include "freezero.h"
|
|
||||||
#endif /* WITH_LIBBSD */
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* SYNOPSIS
|
|
||||||
* [[gnu::malloc(erase_pass)]]
|
|
||||||
* char *agetpass(const char *prompt);
|
|
||||||
* char *agetpass_stdin();
|
|
||||||
*
|
|
||||||
* void erase_pass(char *pass);
|
|
||||||
*
|
|
||||||
* ARGUMENTS
|
|
||||||
* agetpass()
|
|
||||||
* prompt String to be printed before reading a password.
|
|
||||||
*
|
|
||||||
* erase_pass()
|
|
||||||
* pass password previously returned by agetpass().
|
|
||||||
*
|
|
||||||
* DESCRIPTION
|
|
||||||
* agetpass()
|
|
||||||
* This function is very similar to getpass(3). It has several
|
|
||||||
* advantages compared to getpass(3):
|
|
||||||
*
|
|
||||||
* - Instead of using a static buffer, agetpass() allocates memory
|
|
||||||
* through malloc(3). This makes the function thread-safe, and
|
|
||||||
* also reduces the visibility of the buffer.
|
|
||||||
*
|
|
||||||
* - agetpass() doesn't reallocate internally. Some
|
|
||||||
* implementations of getpass(3), such as glibc, do that, as a
|
|
||||||
* consequence of calling getline(3). That's a bug in glibc,
|
|
||||||
* which allows leaking prefixes of passwords in freed memory.
|
|
||||||
*
|
|
||||||
* - agetpass() doesn't overrun the output buffer. If the input
|
|
||||||
* password is too long, it simply fails. Some implementations
|
|
||||||
* of getpass(3), share the same bug that gets(3) has.
|
|
||||||
*
|
|
||||||
* As soon as possible, the password obtained from agetpass() be
|
|
||||||
* erased by calling erase_pass(), to avoid possibly leaking the
|
|
||||||
* password.
|
|
||||||
*
|
|
||||||
* agetpass_stdin()
|
|
||||||
* This function is the same as previous one (agetpass). Just the
|
|
||||||
* password is read from stdin and terminal is not required.
|
|
||||||
*
|
|
||||||
* erase_pass()
|
|
||||||
* This function first clears the password, by calling
|
|
||||||
* explicit_bzero(3) (or an equivalent call), and then frees the
|
|
||||||
* allocated memory by calling free(3).
|
|
||||||
*
|
|
||||||
* NULL is a valid input pointer, and in such a case, this call is
|
|
||||||
* a no-op.
|
|
||||||
*
|
|
||||||
* RETURN VALUE
|
|
||||||
* agetpass() returns a newly allocated buffer containing the
|
|
||||||
* password on success. On error, errno is set to indicate the
|
|
||||||
* error, and NULL is returned.
|
|
||||||
*
|
|
||||||
* ERRORS
|
|
||||||
* agetpass()
|
|
||||||
* This function may fail for any errors that malloc(3) or
|
|
||||||
* readpassphrase(3) may fail, and in addition it may fail for the
|
|
||||||
* following errors:
|
|
||||||
*
|
|
||||||
* ENOBUFS
|
|
||||||
* The input password was longer than PASS_MAX.
|
|
||||||
*
|
|
||||||
* CAVEATS
|
|
||||||
* If a password is passed twice to erase_pass(), the behavior is
|
|
||||||
* undefined.
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
static char *
|
|
||||||
agetpass_internal(const char *prompt, int flags)
|
|
||||||
{
|
|
||||||
char *pass;
|
|
||||||
size_t len;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Since we want to support passwords upto PASS_MAX, we need
|
|
||||||
* PASS_MAX bytes for the password itself, and one more byte for
|
|
||||||
* the terminating '\0'. We also want to detect truncation, and
|
|
||||||
* readpassphrase(3) doesn't detect it, so we need some trick.
|
|
||||||
* Let's add one more byte, and if the password uses it, it
|
|
||||||
* means the introduced password was longer than PASS_MAX.
|
|
||||||
*/
|
|
||||||
pass = malloc_T(PASS_MAX + 2, char);
|
|
||||||
if (pass == NULL)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
if (readpassphrase(prompt, pass, PASS_MAX + 2, flags) == NULL)
|
|
||||||
goto fail;
|
|
||||||
|
|
||||||
len = strlen(pass);
|
|
||||||
if (len == PASS_MAX + 1) {
|
|
||||||
errno = ENOBUFS;
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
return pass;
|
|
||||||
|
|
||||||
fail:
|
|
||||||
freezero(pass, PASS_MAX + 2);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *
|
|
||||||
agetpass(const char *prompt)
|
|
||||||
{
|
|
||||||
return agetpass_internal(prompt, RPP_REQUIRE_TTY);
|
|
||||||
}
|
|
||||||
|
|
||||||
char *
|
|
||||||
agetpass_stdin()
|
|
||||||
{
|
|
||||||
return agetpass_internal("", RPP_STDIN);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
erase_pass(char *pass)
|
|
||||||
{
|
|
||||||
freezero(pass, PASS_MAX + 2);
|
|
||||||
}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: 2022-2023, Alejandro Colomar <alx@kernel.org>
|
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef SHADOW_INCLUDE_LIB_AGETPASS_H_
|
|
||||||
#define SHADOW_INCLUDE_LIB_AGETPASS_H_
|
|
||||||
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include "attr.h"
|
|
||||||
#include "defines.h"
|
|
||||||
|
|
||||||
|
|
||||||
void erase_pass(char *pass);
|
|
||||||
ATTR_MALLOC(erase_pass)
|
|
||||||
char *agetpass(const char *prompt);
|
|
||||||
char *agetpass_stdin();
|
|
||||||
|
|
||||||
|
|
||||||
#endif // include guard
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: 1990-1994, Julianne Frances Haugh
|
|
||||||
// SPDX-FileCopyrightText: 1996-1998, Marek Michałkiewicz
|
|
||||||
// SPDX-FileCopyrightText: 2003-2006, Tomasz Kłoczko
|
|
||||||
// SPDX-FileCopyrightText: 2008 , Nicolas François
|
|
||||||
// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
|
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include "alloc/calloc.h"
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: 2023-2025, Alejandro Colomar <alx@kernel.org>
|
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef SHADOW_INCLUDE_LIB_ALLOC_CALLOC_H_
|
|
||||||
#define SHADOW_INCLUDE_LIB_ALLOC_CALLOC_H_
|
|
||||||
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
#include "exit_if_null.h"
|
|
||||||
#include "sizeof.h"
|
|
||||||
|
|
||||||
|
|
||||||
// calloc_T - calloc type-safe
|
|
||||||
#define calloc_T(n, T) calloc_T_(n, typeas(T))
|
|
||||||
#define calloc_T_(n, T) \
|
|
||||||
({ \
|
|
||||||
(T *){calloc(n, sizeof(T))}; \
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
// xcalloc_T - exit-on-error calloc type-safe
|
|
||||||
#define xcalloc_T(n, T) exit_if_null(calloc_T(n, T))
|
|
||||||
|
|
||||||
|
|
||||||
#endif // include guard
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: 1990-1994, Julianne Frances Haugh
|
|
||||||
// SPDX-FileCopyrightText: 1996-1998, Marek Michałkiewicz
|
|
||||||
// SPDX-FileCopyrightText: 2003-2006, Tomasz Kłoczko
|
|
||||||
// SPDX-FileCopyrightText: 2008 , Nicolas François
|
|
||||||
// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
|
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include "alloc/malloc.h"
|
|
||||||
|
|
||||||
#include <stddef.h>
|
|
||||||
|
|
||||||
|
|
||||||
extern inline void *mallocarray(size_t nmemb, size_t size);
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: 2023-2025, Alejandro Colomar <alx@kernel.org>
|
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef SHADOW_INCLUDE_LIB_ALLOC_MALLOC_H_
|
|
||||||
#define SHADOW_INCLUDE_LIB_ALLOC_MALLOC_H_
|
|
||||||
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
#include "attr.h"
|
|
||||||
#include "exit_if_null.h"
|
|
||||||
#include "sizeof.h"
|
|
||||||
|
|
||||||
|
|
||||||
// malloc_T - malloc type-safe
|
|
||||||
#define malloc_T(n, T) malloc_T_(n, typeas(T))
|
|
||||||
#define malloc_T_(n, T) \
|
|
||||||
({ \
|
|
||||||
(T *){mallocarray(n, sizeof(T))}; \
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
// xmalloc_T - exit-on-error malloc type-safe
|
|
||||||
#define xmalloc_T(n, T) exit_if_null(malloc_T(n, T))
|
|
||||||
|
|
||||||
|
|
||||||
// mallocarray - malloc array
|
|
||||||
ATTR_ALLOC_SIZE(1, 2)
|
|
||||||
ATTR_MALLOC(free)
|
|
||||||
inline void *mallocarray(size_t nmemb, size_t size);
|
|
||||||
|
|
||||||
|
|
||||||
inline void *
|
|
||||||
mallocarray(size_t nmemb, size_t size)
|
|
||||||
{
|
|
||||||
return reallocarray(NULL, nmemb, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#endif // include guard
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: 1990-1994, Julianne Frances Haugh
|
|
||||||
// SPDX-FileCopyrightText: 1996-1998, Marek Michałkiewicz
|
|
||||||
// SPDX-FileCopyrightText: 2003-2006, Tomasz Kłoczko
|
|
||||||
// SPDX-FileCopyrightText: 2008 , Nicolas François
|
|
||||||
// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
|
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include "alloc/realloc.h"
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: 2023-2025, Alejandro Colomar <alx@kernel.org>
|
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef SHADOW_INCLUDE_LIB_ALLOC_REALLOC_H_
|
|
||||||
#define SHADOW_INCLUDE_LIB_ALLOC_REALLOC_H_
|
|
||||||
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
#include "exit_if_null.h"
|
|
||||||
#include "sizeof.h"
|
|
||||||
|
|
||||||
|
|
||||||
// realloc_T - realloc type-safe
|
|
||||||
#define realloc_T(p, n, T) realloc_T_(p, n, typeas(T))
|
|
||||||
#define realloc_T_(p, n, T) \
|
|
||||||
({ \
|
|
||||||
_Generic(p, T *: (void)0); \
|
|
||||||
(T *){reallocarray_(p, n, sizeof(T))}; \
|
|
||||||
})
|
|
||||||
|
|
||||||
#define reallocarray_(p, n, size) reallocarray(p, (n) ?: 1, (size) ?: 1)
|
|
||||||
|
|
||||||
|
|
||||||
// xrealloc_T - exit-on-error realloc type-safe
|
|
||||||
#define xrealloc_T(p, n, T) exit_if_null(realloc_T(p, n, T))
|
|
||||||
|
|
||||||
|
|
||||||
#endif // include guard
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: 1990-1994, Julianne Frances Haugh
|
|
||||||
// SPDX-FileCopyrightText: 1996-1998, Marek Michałkiewicz
|
|
||||||
// SPDX-FileCopyrightText: 2003-2006, Tomasz Kłoczko
|
|
||||||
// SPDX-FileCopyrightText: 2008 , Nicolas François
|
|
||||||
// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
|
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include "alloc/reallocf.h"
|
|
||||||
|
|
||||||
#include <stddef.h>
|
|
||||||
|
|
||||||
|
|
||||||
extern inline void *reallocarrayf(void *p, size_t nmemb, size_t size);
|
|
||||||
@@ -1,48 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: 2023-2025, Alejandro Colomar <alx@kernel.org>
|
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef SHADOW_INCLUDE_LIB_ALLOC_REALLOCF_H_
|
|
||||||
#define SHADOW_INCLUDE_LIB_ALLOC_REALLOCF_H_
|
|
||||||
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
#include "attr.h"
|
|
||||||
#include "sizeof.h"
|
|
||||||
|
|
||||||
|
|
||||||
// reallocf_T - realloc free-on-error type-safe
|
|
||||||
#define reallocf_T(p, n, T) reallocf_T_(p, n, typeas(T))
|
|
||||||
#define reallocf_T_(p, n, T) \
|
|
||||||
({ \
|
|
||||||
_Generic(p, T *: (void)0); \
|
|
||||||
(T *){reallocarrayf_(p, n, sizeof(T))}; \
|
|
||||||
})
|
|
||||||
|
|
||||||
#define reallocarrayf_(p, n, size) reallocarrayf(p, (n) ?: 1, (size) ?: 1)
|
|
||||||
|
|
||||||
|
|
||||||
// reallocarrayf - realloc array free-on-error
|
|
||||||
ATTR_ALLOC_SIZE(2, 3)
|
|
||||||
ATTR_MALLOC(free)
|
|
||||||
inline void *reallocarrayf(void *p, size_t nmemb, size_t size);
|
|
||||||
|
|
||||||
|
|
||||||
inline void *
|
|
||||||
reallocarrayf(void *p, size_t nmemb, size_t size)
|
|
||||||
{
|
|
||||||
void *q;
|
|
||||||
|
|
||||||
q = reallocarray(p, nmemb ?: 1, size ?: 1);
|
|
||||||
|
|
||||||
if (q == NULL)
|
|
||||||
free(p);
|
|
||||||
return q;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#endif // include guard
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: 2023-2025, Alejandro Colomar <alx@kernel.org>
|
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include "atoi/a2i.h"
|
|
||||||
@@ -1,69 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: 2023-2025, Alejandro Colomar <alx@kernel.org>
|
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef SHADOW_INCLUDE_LIB_ATOI_A2I_H_
|
|
||||||
#define SHADOW_INCLUDE_LIB_ATOI_A2I_H_
|
|
||||||
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include <errno.h>
|
|
||||||
#include <stddef.h>
|
|
||||||
|
|
||||||
#include "atoi/strtoi/strtoi.h"
|
|
||||||
#include "atoi/strtoi/strtou_noneg.h"
|
|
||||||
#include "typetraits.h"
|
|
||||||
|
|
||||||
|
|
||||||
// a2i - alpha to integer
|
|
||||||
#define a2i(T, n, s, endp, base, min, max) \
|
|
||||||
({ \
|
|
||||||
T *n_ = n; \
|
|
||||||
QChar_of(s) **endp_ = endp; \
|
|
||||||
T min_ = min; \
|
|
||||||
T max_ = max; \
|
|
||||||
\
|
|
||||||
int status; \
|
|
||||||
\
|
|
||||||
*n_ = _Generic((T){0}, \
|
|
||||||
short: strtoi_, \
|
|
||||||
int: strtoi_, \
|
|
||||||
long: strtoi_, \
|
|
||||||
long long: strtoi_, \
|
|
||||||
unsigned short: strtou_noneg, \
|
|
||||||
unsigned int: strtou_noneg, \
|
|
||||||
unsigned long: strtou_noneg, \
|
|
||||||
unsigned long long: strtou_noneg \
|
|
||||||
)(s, (char **) endp_, base, min_, max_, &status); \
|
|
||||||
\
|
|
||||||
if (status != 0) \
|
|
||||||
errno = status; \
|
|
||||||
-!!status; \
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
#define a2sh(...) a2i(short, __VA_ARGS__)
|
|
||||||
#define a2si(...) a2i(int, __VA_ARGS__)
|
|
||||||
#define a2sl(...) a2i(long, __VA_ARGS__)
|
|
||||||
#define a2sll(...) a2i(long long, __VA_ARGS__)
|
|
||||||
|
|
||||||
#define a2uh(...) a2i(unsigned short, __VA_ARGS__)
|
|
||||||
#define a2ui(...) a2i(unsigned int, __VA_ARGS__)
|
|
||||||
#define a2ul(...) a2i(unsigned long, __VA_ARGS__)
|
|
||||||
#define a2ull(...) a2i(unsigned long long, __VA_ARGS__)
|
|
||||||
|
|
||||||
#define str2i(T, ...) a2i(T, __VA_ARGS__, NULL, 0, type_min(T), type_max(T))
|
|
||||||
|
|
||||||
#define str2sh(...) str2i(short, __VA_ARGS__)
|
|
||||||
#define str2si(...) str2i(int, __VA_ARGS__)
|
|
||||||
#define str2sl(...) str2i(long, __VA_ARGS__)
|
|
||||||
#define str2sll(...) str2i(long long, __VA_ARGS__)
|
|
||||||
|
|
||||||
#define str2uh(...) str2i(unsigned short, __VA_ARGS__)
|
|
||||||
#define str2ui(...) str2i(unsigned int, __VA_ARGS__)
|
|
||||||
#define str2ul(...) str2i(unsigned long, __VA_ARGS__)
|
|
||||||
#define str2ull(...) str2i(unsigned long long, __VA_ARGS__)
|
|
||||||
|
|
||||||
|
|
||||||
#endif // include guard
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: 2009, Nicolas François
|
|
||||||
// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
|
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
|
||||||
|
|
||||||
#include "atoi/getnum.h"
|
|
||||||
|
|
||||||
|
|
||||||
extern inline int get_fd(const char *restrict fdstr, int *restrict fd);
|
|
||||||
extern inline int get_gid(const char *restrict gidstr, gid_t *restrict gid);
|
|
||||||
extern inline int get_pid(const char *restrict pidstr, pid_t *restrict pid);
|
|
||||||
extern inline int get_uid(const char *restrict uidstr, uid_t *restrict uid);
|
|
||||||
@@ -1,59 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: 2009, Nicolas François
|
|
||||||
// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
|
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef SHADOW_INCLUDE_LIB_ATOI_GETNUM_H_
|
|
||||||
#define SHADOW_INCLUDE_LIB_ATOI_GETNUM_H_
|
|
||||||
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include <limits.h>
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
|
|
||||||
#include "atoi/a2i.h"
|
|
||||||
#include "attr.h"
|
|
||||||
#include "typetraits.h"
|
|
||||||
|
|
||||||
|
|
||||||
ATTR_STRING(1) ATTR_ACCESS(write_only, 2)
|
|
||||||
inline int get_fd(const char *restrict fdstr, int *restrict fd);
|
|
||||||
ATTR_STRING(1) ATTR_ACCESS(write_only, 2)
|
|
||||||
inline int get_gid(const char *restrict gidstr, gid_t *restrict gid);
|
|
||||||
ATTR_STRING(1) ATTR_ACCESS(write_only, 2)
|
|
||||||
inline int get_pid(const char *restrict pidstr, pid_t *restrict pid);
|
|
||||||
ATTR_STRING(1) ATTR_ACCESS(write_only, 2)
|
|
||||||
inline int get_uid(const char *restrict uidstr, uid_t *restrict uid);
|
|
||||||
|
|
||||||
|
|
||||||
inline int
|
|
||||||
get_fd(const char *restrict fdstr, int *restrict fd)
|
|
||||||
{
|
|
||||||
return a2si(fd, fdstr, NULL, 10, 0, INT_MAX);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
inline int
|
|
||||||
get_gid(const char *restrict gidstr, gid_t *restrict gid)
|
|
||||||
{
|
|
||||||
return a2i(gid_t, gid, gidstr, NULL, 10, type_min(gid_t), type_max(gid_t));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
inline int
|
|
||||||
get_pid(const char *restrict pidstr, pid_t *restrict pid)
|
|
||||||
{
|
|
||||||
return a2i(pid_t, pid, pidstr, NULL, 10, 1, type_max(pid_t));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
inline int
|
|
||||||
get_uid(const char *restrict uidstr, uid_t *restrict uid)
|
|
||||||
{
|
|
||||||
return a2i(uid_t, uid, uidstr, NULL, 10, type_min(uid_t), type_max(uid_t));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#endif // include guard
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
|
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include "atoi/strtoi/strtoi.h"
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
|
|
||||||
extern inline intmax_t strtoi_(const char *s, char **restrict endp, int base,
|
|
||||||
intmax_t min, intmax_t max, int *restrict status);
|
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
|
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef SHADOW_INCLUDE_LIB_ATOI_STRTOI_STRTOI_H_
|
|
||||||
#define SHADOW_INCLUDE_LIB_ATOI_STRTOI_STRTOI_H_
|
|
||||||
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include <errno.h>
|
|
||||||
#include <inttypes.h>
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <sys/param.h>
|
|
||||||
|
|
||||||
#include "attr.h"
|
|
||||||
|
|
||||||
|
|
||||||
ATTR_STRING(1) ATTR_ACCESS(write_only, 2) ATTR_ACCESS(write_only, 6)
|
|
||||||
inline intmax_t strtoi_(const char *s, char **restrict endp, int base,
|
|
||||||
intmax_t min, intmax_t max, int *restrict status);
|
|
||||||
|
|
||||||
|
|
||||||
inline intmax_t
|
|
||||||
strtoi_(const char *s, char **restrict endp, int base,
|
|
||||||
intmax_t min, intmax_t max, int *restrict status)
|
|
||||||
{
|
|
||||||
int e, st;
|
|
||||||
char *end;
|
|
||||||
intmax_t n;
|
|
||||||
|
|
||||||
if (endp == NULL)
|
|
||||||
endp = &end;
|
|
||||||
if (status == NULL)
|
|
||||||
status = &st;
|
|
||||||
|
|
||||||
if (base != 0 && (base < 2 || base > 36)) {
|
|
||||||
*status = EINVAL;
|
|
||||||
return MAX(min, MIN(max, 0));
|
|
||||||
}
|
|
||||||
|
|
||||||
e = errno;
|
|
||||||
errno = 0;
|
|
||||||
|
|
||||||
n = strtoimax(s, endp, base);
|
|
||||||
|
|
||||||
if (*endp == s)
|
|
||||||
*status = ECANCELED;
|
|
||||||
else if (errno == ERANGE || n < min || n > max)
|
|
||||||
*status = ERANGE;
|
|
||||||
else if (**endp != '\0')
|
|
||||||
*status = ENOTSUP;
|
|
||||||
else
|
|
||||||
*status = 0;
|
|
||||||
|
|
||||||
errno = e;
|
|
||||||
|
|
||||||
return MAX(min, MIN(max, n));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#endif // include guard
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
|
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include "atoi/strtoi/strtou.h"
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
|
|
||||||
extern inline uintmax_t strtou_(const char *s, char **restrict endp, int base,
|
|
||||||
uintmax_t min, uintmax_t max, int *restrict status);
|
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
|
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef SHADOW_INCLUDE_LIB_ATOI_STRTOI_STRTOU_H_
|
|
||||||
#define SHADOW_INCLUDE_LIB_ATOI_STRTOI_STRTOU_H_
|
|
||||||
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include <errno.h>
|
|
||||||
#include <inttypes.h>
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <sys/param.h>
|
|
||||||
|
|
||||||
#include "attr.h"
|
|
||||||
|
|
||||||
|
|
||||||
ATTR_STRING(1) ATTR_ACCESS(write_only, 2) ATTR_ACCESS(write_only, 6)
|
|
||||||
inline uintmax_t strtou_(const char *s, char **restrict endp, int base,
|
|
||||||
uintmax_t min, uintmax_t max, int *restrict status);
|
|
||||||
|
|
||||||
|
|
||||||
inline uintmax_t
|
|
||||||
strtou_(const char *s, char **restrict endp, int base,
|
|
||||||
uintmax_t min, uintmax_t max, int *restrict status)
|
|
||||||
{
|
|
||||||
int e, st;
|
|
||||||
char *end;
|
|
||||||
uintmax_t n;
|
|
||||||
|
|
||||||
if (endp == NULL)
|
|
||||||
endp = &end;
|
|
||||||
if (status == NULL)
|
|
||||||
status = &st;
|
|
||||||
|
|
||||||
if (base != 0 && (base < 2 || base > 36)) {
|
|
||||||
*status = EINVAL;
|
|
||||||
return MAX(min, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
e = errno;
|
|
||||||
errno = 0;
|
|
||||||
|
|
||||||
n = strtoumax(s, endp, base);
|
|
||||||
|
|
||||||
if (*endp == s)
|
|
||||||
*status = ECANCELED;
|
|
||||||
else if (errno == ERANGE || n < min || n > max)
|
|
||||||
*status = ERANGE;
|
|
||||||
else if (**endp != '\0')
|
|
||||||
*status = ENOTSUP;
|
|
||||||
else
|
|
||||||
*status = 0;
|
|
||||||
|
|
||||||
errno = e;
|
|
||||||
|
|
||||||
return MAX(min, MIN(max, n));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#endif // include guard
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
|
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include "atoi/strtoi/strtou_noneg.h"
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
|
|
||||||
extern inline uintmax_t strtou_noneg(const char *s, char **restrict endp,
|
|
||||||
int base, uintmax_t min, uintmax_t max, int *restrict status);
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: 2023-2024, Alejandro Colomar <alx@kernel.org>
|
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef SHADOW_INCLUDE_LIB_ATOI_STRTOI_STRTOU_NONEG_H_
|
|
||||||
#define SHADOW_INCLUDE_LIB_ATOI_STRTOI_STRTOU_NONEG_H_
|
|
||||||
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include <errno.h>
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
#include "atoi/strtoi/strtoi.h"
|
|
||||||
#include "atoi/strtoi/strtou.h"
|
|
||||||
#include "attr.h"
|
|
||||||
|
|
||||||
|
|
||||||
ATTR_STRING(1) ATTR_ACCESS(write_only, 2) ATTR_ACCESS(write_only, 6)
|
|
||||||
inline uintmax_t strtou_noneg(const char *s, char **restrict endp,
|
|
||||||
int base, uintmax_t min, uintmax_t max, int *restrict status);
|
|
||||||
|
|
||||||
|
|
||||||
inline uintmax_t
|
|
||||||
strtou_noneg(const char *s, char **restrict endp, int base,
|
|
||||||
uintmax_t min, uintmax_t max, int *restrict status)
|
|
||||||
{
|
|
||||||
int st;
|
|
||||||
|
|
||||||
if (status == NULL)
|
|
||||||
status = &st;
|
|
||||||
if (strtoi_(s, endp, base, 0, 1, status) == 0 && *status == ERANGE)
|
|
||||||
return min;
|
|
||||||
|
|
||||||
return strtou_(s, endp, base, min, max, status);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#endif // include guard
|
|
||||||
-62
@@ -1,62 +0,0 @@
|
|||||||
#ifndef SHADOW_INCLUDE_LIB_ATTR_H_
|
|
||||||
#define SHADOW_INCLUDE_LIB_ATTR_H_
|
|
||||||
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
|
|
||||||
#if !defined(__has_c_attribute)
|
|
||||||
# define __has_c_attribute(x) 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#if __has_c_attribute(maybe_unused)
|
|
||||||
# define MAYBE_UNUSED [[maybe_unused]]
|
|
||||||
#else
|
|
||||||
# define MAYBE_UNUSED
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if __has_c_attribute(noreturn)
|
|
||||||
# define NORETURN [[noreturn]]
|
|
||||||
#else
|
|
||||||
# define NORETURN
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if __has_c_attribute(gnu::format)
|
|
||||||
# define format_attr(type, fmt, va) [[gnu::format(type, fmt, va)]]
|
|
||||||
#else
|
|
||||||
# define format_attr(type, fmt, va)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if __has_c_attribute(gnu::access)
|
|
||||||
# define ATTR_ACCESS(...) [[gnu::access(__VA_ARGS__)]]
|
|
||||||
#else
|
|
||||||
# define ATTR_ACCESS(...)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if __has_c_attribute(gnu::alloc_size)
|
|
||||||
# define ATTR_ALLOC_SIZE(...) [[gnu::alloc_size(__VA_ARGS__)]]
|
|
||||||
#else
|
|
||||||
# define ATTR_ALLOC_SIZE(...)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if (__GNUC__ >= 11) && !defined(__clang__)
|
|
||||||
# define ATTR_MALLOC(deallocator) [[gnu::malloc(deallocator)]]
|
|
||||||
#else
|
|
||||||
# define ATTR_MALLOC(deallocator)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if __has_c_attribute(gnu::null_terminated_string_arg)
|
|
||||||
# define ATTR_STRING(i) [[gnu::null_terminated_string_arg(i)]]
|
|
||||||
#else
|
|
||||||
# define ATTR_STRING(i)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if __has_c_attribute(gnu::nonstring)
|
|
||||||
# define ATTR_NONSTRING [[gnu::nonstring]]
|
|
||||||
#else
|
|
||||||
# define ATTR_NONSTRING
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#endif // include guard
|
|
||||||
@@ -1,135 +0,0 @@
|
|||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: 2005 , Red Hat, Inc.
|
|
||||||
* SPDX-FileCopyrightText: 2005 , Tomasz Kłoczko
|
|
||||||
* SPDX-FileCopyrightText: 2008 , Nicolas François
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Audit helper functions used throughout shadow
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#ifdef WITH_AUDIT
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <syslog.h>
|
|
||||||
#include <stdarg.h>
|
|
||||||
#include <libaudit.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include "attr.h"
|
|
||||||
#include "prototypes.h"
|
|
||||||
#include "shadowlog.h"
|
|
||||||
#include "string/sprintf/snprintf.h"
|
|
||||||
|
|
||||||
int audit_fd;
|
|
||||||
|
|
||||||
void audit_help_open (void)
|
|
||||||
{
|
|
||||||
audit_fd = audit_open ();
|
|
||||||
if (audit_fd < 0) {
|
|
||||||
/* You get these only when the kernel doesn't have
|
|
||||||
* audit compiled in. */
|
|
||||||
if ( (errno == EINVAL)
|
|
||||||
|| (errno == EPROTONOSUPPORT)
|
|
||||||
|| (errno == EAFNOSUPPORT)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
(void) fputs (_("Cannot open audit interface - aborting.\n"),
|
|
||||||
log_get_logfd());
|
|
||||||
exit (EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This function will log a message to the audit system using a predefined
|
|
||||||
* message format. For additional information on the user account lifecycle
|
|
||||||
* events check
|
|
||||||
* <https://github.com/linux-audit/audit-documentation/wiki/SPEC-User-Account-Lifecycle-Events>
|
|
||||||
*
|
|
||||||
* Parameter usage is as follows:
|
|
||||||
*
|
|
||||||
* type - type of message. A list of possible values is available in
|
|
||||||
* "audit-records.h" file.
|
|
||||||
* op - operation. "adding user", "changing finger info", "deleting group"
|
|
||||||
* name - user's account or group name. If not available use NULL.
|
|
||||||
* id - uid or gid that the operation is being performed on. This is used
|
|
||||||
* only when user is NULL.
|
|
||||||
*/
|
|
||||||
void audit_logger (int type, const char *op,
|
|
||||||
const char *name, unsigned int id,
|
|
||||||
shadow_audit_result result)
|
|
||||||
{
|
|
||||||
if (audit_fd < 0) {
|
|
||||||
return;
|
|
||||||
} else {
|
|
||||||
audit_log_acct_message (audit_fd, type, NULL, op, name, id,
|
|
||||||
NULL, NULL, NULL, result);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This function will log a message to the audit system using a predefined
|
|
||||||
* message format. For additional information on the group account lifecycle
|
|
||||||
* events check
|
|
||||||
* <https://github.com/linux-audit/audit-documentation/wiki/SPEC-User-Account-Lifecycle-Events>
|
|
||||||
*
|
|
||||||
* Parameter usage is as follows:
|
|
||||||
*
|
|
||||||
* type - type of message. A list of possible values is available in
|
|
||||||
* "audit-records.h" file.
|
|
||||||
* op - operation. "adding-user", "modify-group", "deleting-user-from-group"
|
|
||||||
* name - user's account or group name. If not available use NULL.
|
|
||||||
* id - uid or gid that the operation is being performed on. This is used
|
|
||||||
* only when user is NULL.
|
|
||||||
* grp_type - type of group: "grp" or "new_group"
|
|
||||||
* grp - group name associated with event
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
audit_logger_with_group(int type, const char *op, const char *name,
|
|
||||||
id_t id, const char *grp_type, const char *grp,
|
|
||||||
shadow_audit_result result)
|
|
||||||
{
|
|
||||||
int len;
|
|
||||||
char enc_group[GROUP_NAME_MAX_LENGTH * 2 + 1];
|
|
||||||
char buf[countof(enc_group) + 100];
|
|
||||||
|
|
||||||
if (audit_fd < 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
len = strnlen(grp, sizeof(enc_group)/2);
|
|
||||||
if (audit_value_needs_encoding(grp, len)) {
|
|
||||||
stprintf_a(buf, "%s %s=%s", op, grp_type,
|
|
||||||
audit_encode_value(enc_group, grp, len));
|
|
||||||
} else {
|
|
||||||
stprintf_a(buf, "%s %s=\"%s\"", op, grp_type, grp);
|
|
||||||
}
|
|
||||||
|
|
||||||
audit_log_acct_message(audit_fd, type, NULL, buf, name, id,
|
|
||||||
NULL, NULL, NULL, result);
|
|
||||||
}
|
|
||||||
|
|
||||||
void audit_logger_message (const char *message, shadow_audit_result result)
|
|
||||||
{
|
|
||||||
if (audit_fd < 0) {
|
|
||||||
return;
|
|
||||||
} else {
|
|
||||||
audit_log_user_message (audit_fd,
|
|
||||||
AUDIT_USYS_CONFIG,
|
|
||||||
message,
|
|
||||||
NULL, /* hostname */
|
|
||||||
NULL, /* addr */
|
|
||||||
NULL, /* tty */
|
|
||||||
result);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#else /* WITH_AUDIT */
|
|
||||||
extern int ISO_C_forbids_an_empty_translation_unit;
|
|
||||||
#endif /* WITH_AUDIT */
|
|
||||||
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: 1990-1994, Julianne Frances Haugh
|
|
||||||
// SPDX-FileCopyrightText: 1996-1997, Marek Michałkiewicz
|
|
||||||
// SPDX-FileCopyrightText: 2003-2005, Tomasz Kłoczko
|
|
||||||
// SPDX-FileCopyrightText: 2024, Alejandro Colomar <alx@kernel.org>
|
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
|
|
||||||
/*
|
|
||||||
* basename.c - not worth copyrighting :-). Some versions of Linux libc
|
|
||||||
* already have basename(), other versions don't. To avoid confusion,
|
|
||||||
* we will not use the function from libc and use a different name here.
|
|
||||||
* --marekm
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
#include "prototypes.h"
|
|
||||||
#include "string/strspn/stprcspn.h"
|
|
||||||
|
|
||||||
|
|
||||||
/*@observer@*/const char *
|
|
||||||
Basename(const char *str)
|
|
||||||
{
|
|
||||||
if (str == NULL) {
|
|
||||||
abort ();
|
|
||||||
}
|
|
||||||
|
|
||||||
return stprcspn(str, "/");
|
|
||||||
}
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: 2022 - 2023, Alejandro Colomar <alx@kernel.org>
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#ident "$Id$"
|
|
||||||
|
|
||||||
#include "bit.h"
|
|
||||||
|
|
||||||
#include <limits.h>
|
|
||||||
|
|
||||||
|
|
||||||
extern inline unsigned long bit_ceilul(unsigned long x);
|
|
||||||
extern inline unsigned long bit_ceil_wrapul(unsigned long x);
|
|
||||||
extern inline int leading_zerosul(unsigned long x);
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: 2022 - 2023, Alejandro Colomar <alx@kernel.org>
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef SHADOW_INCLUDE_LIB_BIT_H_
|
|
||||||
#define SHADOW_INCLUDE_LIB_BIT_H_
|
|
||||||
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include <limits.h>
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef ULONG_WIDTH
|
|
||||||
#define ULONG_WIDTH (sizeof(unsigned long) * CHAR_BIT)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
inline unsigned long bit_ceilul(unsigned long x);
|
|
||||||
inline unsigned long bit_ceil_wrapul(unsigned long x);
|
|
||||||
inline int leading_zerosul(unsigned long x);
|
|
||||||
|
|
||||||
|
|
||||||
/* stdc_bit_ceilul(3) */
|
|
||||||
inline unsigned long
|
|
||||||
bit_ceilul(unsigned long x)
|
|
||||||
{
|
|
||||||
return 1 + (ULONG_MAX >> leading_zerosul(x));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* stdc_bit_ceilul(3), but wrap instead of having Undefined Behavior */
|
|
||||||
inline unsigned long
|
|
||||||
bit_ceil_wrapul(unsigned long x)
|
|
||||||
{
|
|
||||||
if (x == 0)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return bit_ceilul(x);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* stdc_leading_zerosul(3) */
|
|
||||||
inline int
|
|
||||||
leading_zerosul(unsigned long x)
|
|
||||||
{
|
|
||||||
return (x == 0) ? ULONG_WIDTH : __builtin_clzl(x);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#endif // include guard
|
|
||||||
-110
@@ -1,110 +0,0 @@
|
|||||||
#include <linux/btrfs_tree.h>
|
|
||||||
#include <linux/magic.h>
|
|
||||||
#include <sys/statfs.h>
|
|
||||||
#include <stdbool.h>
|
|
||||||
|
|
||||||
#include "prototypes.h"
|
|
||||||
|
|
||||||
static bool path_exists(const char *p)
|
|
||||||
{
|
|
||||||
struct stat sb;
|
|
||||||
|
|
||||||
return stat(p, &sb) == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const char *btrfs_cmd(void)
|
|
||||||
{
|
|
||||||
const char *const btrfs_paths[] = {"/sbin/btrfs",
|
|
||||||
"/bin/btrfs", "/usr/sbin/btrfs", "/usr/bin/btrfs", NULL};
|
|
||||||
const char *p;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0, p = btrfs_paths[i]; p; i++, p = btrfs_paths[i])
|
|
||||||
if (path_exists(p))
|
|
||||||
return p;
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int run_btrfs_subvolume_cmd(const char *subcmd, const char *arg1, const char *arg2)
|
|
||||||
{
|
|
||||||
int status = 0;
|
|
||||||
const char *cmd = btrfs_cmd();
|
|
||||||
const char *argv[] = {
|
|
||||||
"btrfs",
|
|
||||||
"subvolume",
|
|
||||||
subcmd,
|
|
||||||
arg1,
|
|
||||||
arg2,
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
if (!cmd || access(cmd, X_OK)) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (run_command(cmd, argv, NULL, &status))
|
|
||||||
return -1;
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int btrfs_create_subvolume(const char *path)
|
|
||||||
{
|
|
||||||
return run_btrfs_subvolume_cmd("create", path, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int btrfs_remove_subvolume(const char *path)
|
|
||||||
{
|
|
||||||
return run_btrfs_subvolume_cmd("delete", "-C", path);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Adapted from btrfsprogs */
|
|
||||||
/*
|
|
||||||
* This intentionally duplicates btrfs_util_is_subvolume_fd() instead of opening
|
|
||||||
* a file descriptor and calling it, because fstat() and fstatfs() don't accept
|
|
||||||
* file descriptors opened with O_PATH on old kernels (before v3.6 and before
|
|
||||||
* v3.12, respectively), but stat() and statfs() can be called on a path that
|
|
||||||
* the user doesn't have read or write permissions to.
|
|
||||||
*
|
|
||||||
* returns:
|
|
||||||
* 1 - btrfs subvolume
|
|
||||||
* 0 - not btrfs subvolume
|
|
||||||
* -1 - error
|
|
||||||
*/
|
|
||||||
int btrfs_is_subvolume(const char *path)
|
|
||||||
{
|
|
||||||
struct stat st;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
ret = is_btrfs(path);
|
|
||||||
if (ret <= 0)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
ret = stat(path, &st);
|
|
||||||
if (ret == -1)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
if (st.st_ino != BTRFS_FIRST_FREE_OBJECTID || !S_ISDIR(st.st_mode)) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Adapted from btrfsprogs */
|
|
||||||
int is_btrfs(const char *path)
|
|
||||||
{
|
|
||||||
struct statfs sfs;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
ret = statfs(path, &sfs);
|
|
||||||
if (ret == -1)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
return sfs.f_type == BTRFS_SUPER_MAGIC;
|
|
||||||
}
|
|
||||||
|
|
||||||
-15
@@ -1,15 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: 2022-2024, Alejandro Colomar <alx@kernel.org>
|
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef SHADOW_INCLUDE_LIB_CAST_H_
|
|
||||||
#define SHADOW_INCLUDE_LIB_CAST_H_
|
|
||||||
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
|
|
||||||
#define const_cast(T, p) _Generic(p, const T: (T) (p))
|
|
||||||
|
|
||||||
|
|
||||||
#endif // include guard
|
|
||||||
@@ -1,82 +0,0 @@
|
|||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include "chkhash.h"
|
|
||||||
|
|
||||||
#include <regex.h>
|
|
||||||
#include <stdbool.h>
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include "string/strcmp/streq.h"
|
|
||||||
#include "string/strcmp/strprefix.h"
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* match_regex - return true if match, false if not
|
|
||||||
*/
|
|
||||||
bool
|
|
||||||
match_regex(const char *pattern, const char *string)
|
|
||||||
{
|
|
||||||
regex_t regex;
|
|
||||||
int result;
|
|
||||||
|
|
||||||
if (regcomp(®ex, pattern, REG_EXTENDED) != 0)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
result = regexec(®ex, string, 0, NULL, 0);
|
|
||||||
regfree(®ex);
|
|
||||||
|
|
||||||
return result == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* is_valid_hash - check if the given string is a valid password hash
|
|
||||||
*
|
|
||||||
* Returns true if the string appears to be a valid hash, false otherwise.
|
|
||||||
*
|
|
||||||
* regex from: https://man.archlinux.org/man/crypt.5.en
|
|
||||||
*/
|
|
||||||
bool
|
|
||||||
is_valid_hash(const char *hash)
|
|
||||||
{
|
|
||||||
hash = strprefix(hash, "!") ?: hash;
|
|
||||||
|
|
||||||
// Passwordless account; discouraged
|
|
||||||
if (streq(hash, ""))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
if (streq(hash, "*"))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
// Minimum hash length
|
|
||||||
if (strlen(hash) < 13)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
// Yescrypt: $y$ + algorithm parameters + $ + salt + $ + 43-char (minimum) hash
|
|
||||||
if (match_regex("^\\$y\\$[./A-Za-z0-9]+\\$[./A-Za-z0-9]{1,86}\\$[./A-Za-z0-9]{43}$", hash))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
// Bcrypt: $2[abxy]$ + 2-digit cost + $ + 53-char hash
|
|
||||||
if (match_regex("^\\$2[abxy]\\$[0-9]{2}\\$[./A-Za-z0-9]{53}$", hash))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
// SHA-512: $6$ + salt + $ + 86-char hash
|
|
||||||
if (match_regex("^\\$6\\$(rounds=[1-9][0-9]{3,8}\\$)?[^$:\\n]{1,16}\\$[./A-Za-z0-9]{86}$", hash))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
// SHA-256: $5$ + salt + $ + 43-char hash
|
|
||||||
if (match_regex("^\\$5\\$(rounds=[1-9][0-9]{3,8}\\$)?[^$:\\n]{1,16}\\$[./A-Za-z0-9]{43}$", hash))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
// MD5: $1$ + salt + $ + 22-char hash
|
|
||||||
if (match_regex("^\\$1\\$[^$:\\n]{1,8}\\$[./A-Za-z0-9]{22}$", hash))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
// DES: exactly 13 characters from [A-Za-z0-9./]
|
|
||||||
if (match_regex("^[./A-Za-z0-9]{13}$", hash))
|
|
||||||
return true;
|
|
||||||
|
|
||||||
// Not a valid hash
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
#ifndef SHADOW_INCLUDE_CHKHASH_H
|
|
||||||
#define SHADOW_INCLUDE_CHKHASH_H
|
|
||||||
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include <stdbool.h>
|
|
||||||
|
|
||||||
|
|
||||||
bool is_valid_hash(const char *hash);
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
-146
@@ -1,146 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: 1990-1994, Julianne Frances Haugh
|
|
||||||
// SPDX-FileCopyrightText: 1996-2000, Marek Michałkiewicz
|
|
||||||
// SPDX-FileCopyrightText: 2001-2005, Tomasz Kłoczko
|
|
||||||
// SPDX-FileCopyrightText: 2005-2008, Nicolas François
|
|
||||||
// SPDX-FileCopyrightText: 2023-2025, Alejandro Colomar <alx@kernel.org>
|
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* is_valid_user_name(), is_valid_group_name() - check the new user/group
|
|
||||||
* name for validity;
|
|
||||||
* return values:
|
|
||||||
* true - OK
|
|
||||||
* false - bad name
|
|
||||||
* errors:
|
|
||||||
* EINVAL Invalid name
|
|
||||||
* EILSEQ Invalid name character sequence (acceptable with --badname)
|
|
||||||
* EOVERFLOW Name longer than maximum size
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#ident "$Id$"
|
|
||||||
|
|
||||||
#include <ctype.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <limits.h>
|
|
||||||
#include <stdbool.h>
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#include "defines.h"
|
|
||||||
#include "chkname.h"
|
|
||||||
#include "string/ctype/strchrisascii/strchriscntrl.h"
|
|
||||||
#include "string/ctype/strisascii/strisdigit.h"
|
|
||||||
#include "string/strcmp/streq.h"
|
|
||||||
#include "string/strcmp/strcaseeq.h"
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef LOGIN_NAME_MAX
|
|
||||||
# define LOGIN_NAME_MAX 256
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
int allow_bad_names = false;
|
|
||||||
|
|
||||||
|
|
||||||
size_t
|
|
||||||
login_name_max_size(void)
|
|
||||||
{
|
|
||||||
long conf;
|
|
||||||
|
|
||||||
conf = sysconf(_SC_LOGIN_NAME_MAX);
|
|
||||||
if (conf == -1)
|
|
||||||
return LOGIN_NAME_MAX;
|
|
||||||
|
|
||||||
return conf;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static bool
|
|
||||||
is_valid_name(const char *name)
|
|
||||||
{
|
|
||||||
if (streq(name, "")
|
|
||||||
|| streq(name, ".")
|
|
||||||
|| streq(name, "..")
|
|
||||||
|| strspn(name, "-")
|
|
||||||
|| strpbrk(name, " \"#',/:;")
|
|
||||||
|| strchriscntrl(name)
|
|
||||||
|| strisdigit(name))
|
|
||||||
{
|
|
||||||
errno = EINVAL;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (allow_bad_names) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* User/group names must match BRE regex:
|
|
||||||
* [a-zA-Z0-9_.][a-zA-Z0-9_.-]*$\?
|
|
||||||
*
|
|
||||||
* as a non-POSIX, extension, allow "$" as the last char for
|
|
||||||
* sake of Samba 3.x "add machine script"
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (!((*name >= 'a' && *name <= 'z') ||
|
|
||||||
(*name >= 'A' && *name <= 'Z') ||
|
|
||||||
(*name >= '0' && *name <= '9') ||
|
|
||||||
*name == '_' ||
|
|
||||||
*name == '.'))
|
|
||||||
{
|
|
||||||
errno = EILSEQ;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (!streq(++name, "")) {
|
|
||||||
if (!((*name >= 'a' && *name <= 'z') ||
|
|
||||||
(*name >= 'A' && *name <= 'Z') ||
|
|
||||||
(*name >= '0' && *name <= '9') ||
|
|
||||||
*name == '_' ||
|
|
||||||
*name == '.' ||
|
|
||||||
*name == '-' ||
|
|
||||||
streq(name, "$")
|
|
||||||
))
|
|
||||||
{
|
|
||||||
errno = EILSEQ;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool
|
|
||||||
is_valid_user_name(const char *name)
|
|
||||||
{
|
|
||||||
if (strlen(name) >= login_name_max_size()) {
|
|
||||||
errno = EOVERFLOW;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return is_valid_name(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool
|
|
||||||
is_valid_group_name(const char *name)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Arbitrary limit for group names.
|
|
||||||
* HP-UX 10 limits to 16 characters
|
|
||||||
*/
|
|
||||||
if ( (GROUP_NAME_MAX_LENGTH > 0)
|
|
||||||
&& (strlen (name) > GROUP_NAME_MAX_LENGTH))
|
|
||||||
{
|
|
||||||
errno = EOVERFLOW;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return is_valid_name (name);
|
|
||||||
}
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: 1990 - 1994, Julianne Frances Haugh
|
|
||||||
* SPDX-FileCopyrightText: 1997 - 2000, Marek Michałkiewicz
|
|
||||||
* SPDX-FileCopyrightText: 2005 , Tomasz Kłoczko
|
|
||||||
* SPDX-FileCopyrightText: 2008 , Nicolas François
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* $Id$ */
|
|
||||||
#ifndef _CHKNAME_H_
|
|
||||||
#define _CHKNAME_H_
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* is_valid_user_name(), is_valid_group_name() - check the new user/group
|
|
||||||
* name for validity;
|
|
||||||
* return values:
|
|
||||||
* true - OK
|
|
||||||
* false - bad name
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include <stdbool.h>
|
|
||||||
#include <stddef.h>
|
|
||||||
|
|
||||||
|
|
||||||
extern size_t login_name_max_size(void);
|
|
||||||
extern bool is_valid_user_name (const char *name);
|
|
||||||
extern bool is_valid_group_name (const char *name);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
-149
@@ -1,149 +0,0 @@
|
|||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: 1992 - 1993, Julianne Frances Haugh
|
|
||||||
* SPDX-FileCopyrightText: 1996 - 2000, Marek Michałkiewicz
|
|
||||||
* SPDX-FileCopyrightText: 2003 - 2005, Tomasz Kłoczko
|
|
||||||
* SPDX-FileCopyrightText: 2010 - , Nicolas François
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#ident "$Id$"
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
|
|
||||||
#include "defines.h"
|
|
||||||
#include "prototypes.h"
|
|
||||||
#include "string/strcmp/streq.h"
|
|
||||||
|
|
||||||
|
|
||||||
static int chown_tree_at (int at_fd,
|
|
||||||
const char *path,
|
|
||||||
uid_t old_uid,
|
|
||||||
uid_t new_uid,
|
|
||||||
gid_t old_gid,
|
|
||||||
gid_t new_gid)
|
|
||||||
{
|
|
||||||
DIR *dir;
|
|
||||||
const struct dirent *ent;
|
|
||||||
struct stat dir_sb;
|
|
||||||
int dir_fd, rc = 0;
|
|
||||||
|
|
||||||
dir_fd = openat (at_fd, path, O_RDONLY | O_DIRECTORY | O_NOFOLLOW | O_CLOEXEC);
|
|
||||||
if (dir_fd < 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
dir = fdopendir (dir_fd);
|
|
||||||
if (!dir) {
|
|
||||||
(void) close (dir_fd);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Open the directory and read each entry. Every entry is tested
|
|
||||||
* to see if it is a directory, and if so this routine is called
|
|
||||||
* recursively. If not, it is checked to see if an ownership
|
|
||||||
* shall be changed.
|
|
||||||
*/
|
|
||||||
while ((ent = readdir (dir))) {
|
|
||||||
uid_t tmpuid = (uid_t) -1;
|
|
||||||
gid_t tmpgid = (gid_t) -1;
|
|
||||||
struct stat ent_sb;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Skip the "." and ".." entries
|
|
||||||
*/
|
|
||||||
if ( streq(ent->d_name, ".")
|
|
||||||
|| streq(ent->d_name, "..")) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
rc = fstatat (dirfd(dir), ent->d_name, &ent_sb, AT_SYMLINK_NOFOLLOW);
|
|
||||||
if (rc < 0) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (S_ISDIR (ent_sb.st_mode)) {
|
|
||||||
/*
|
|
||||||
* Do the entire subdirectory.
|
|
||||||
*/
|
|
||||||
rc = chown_tree_at (dirfd(dir), ent->d_name, old_uid, new_uid, old_gid, new_gid);
|
|
||||||
if (0 != rc) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* By default, the IDs are not changed (-1).
|
|
||||||
*
|
|
||||||
* If the file is not owned by the user, the owner is not
|
|
||||||
* changed.
|
|
||||||
*
|
|
||||||
* If the file is not group-owned by the group, the
|
|
||||||
* group-owner is not changed.
|
|
||||||
*/
|
|
||||||
if (((uid_t) -1 == old_uid) || (ent_sb.st_uid == old_uid)) {
|
|
||||||
tmpuid = new_uid;
|
|
||||||
}
|
|
||||||
if (((gid_t) -1 == old_gid) || (ent_sb.st_gid == old_gid)) {
|
|
||||||
tmpgid = new_gid;
|
|
||||||
}
|
|
||||||
if (((uid_t) -1 != tmpuid) || ((gid_t) -1 != tmpgid)) {
|
|
||||||
rc = fchownat (dirfd(dir), ent->d_name, tmpuid, tmpgid, AT_SYMLINK_NOFOLLOW);
|
|
||||||
if (0 != rc) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Now do the root of the tree
|
|
||||||
*/
|
|
||||||
if ((0 == rc) && (fstat (dirfd(dir), &dir_sb) == 0)) {
|
|
||||||
uid_t tmpuid = (uid_t) -1;
|
|
||||||
gid_t tmpgid = (gid_t) -1;
|
|
||||||
if (((uid_t) -1 == old_uid) || (dir_sb.st_uid == old_uid)) {
|
|
||||||
tmpuid = new_uid;
|
|
||||||
}
|
|
||||||
if (((gid_t) -1 == old_gid) || (dir_sb.st_gid == old_gid)) {
|
|
||||||
tmpgid = new_gid;
|
|
||||||
}
|
|
||||||
if (((uid_t) -1 != tmpuid) || ((gid_t) -1 != tmpgid)) {
|
|
||||||
rc = fchown (dirfd(dir), tmpuid, tmpgid);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
rc = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
(void) closedir (dir);
|
|
||||||
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* chown_tree - change ownership of files in a directory tree
|
|
||||||
*
|
|
||||||
* chown_dir() walks a directory tree and changes the ownership
|
|
||||||
* of all files owned by the provided user ID.
|
|
||||||
*
|
|
||||||
* Only files owned (resp. group-owned) by old_uid (resp. by old_gid)
|
|
||||||
* will have their ownership (resp. group-ownership) modified, unless
|
|
||||||
* old_uid (resp. old_gid) is set to -1.
|
|
||||||
*
|
|
||||||
* new_uid and new_gid can be set to -1 to indicate that no owner or
|
|
||||||
* group-owner shall be changed.
|
|
||||||
*/
|
|
||||||
int chown_tree (const char *root,
|
|
||||||
uid_t old_uid,
|
|
||||||
uid_t new_uid,
|
|
||||||
gid_t old_gid,
|
|
||||||
gid_t new_gid)
|
|
||||||
{
|
|
||||||
return chown_tree_at (AT_FDCWD, root, old_uid, new_uid, old_gid, new_gid);
|
|
||||||
}
|
|
||||||
@@ -1,79 +0,0 @@
|
|||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: 1989 - 1994, Julianne Frances Haugh
|
|
||||||
* SPDX-FileCopyrightText: 1996 - 2001, Marek Michałkiewicz
|
|
||||||
* SPDX-FileCopyrightText: 2003 - 2005, Tomasz Kłoczko
|
|
||||||
* SPDX-FileCopyrightText: 2007 - 2009, Nicolas François
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#ident "$Id$"
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <grp.h>
|
|
||||||
#include "prototypes.h"
|
|
||||||
#include "defines.h"
|
|
||||||
#include <pwd.h>
|
|
||||||
#include "getdef.h"
|
|
||||||
#include "shadowlog.h"
|
|
||||||
|
|
||||||
/*
|
|
||||||
* chown_tty() sets the login tty to be owned by the new user ID
|
|
||||||
* with TTYPERM modes
|
|
||||||
*/
|
|
||||||
|
|
||||||
void chown_tty (const struct passwd *info)
|
|
||||||
{
|
|
||||||
struct group *grent;
|
|
||||||
gid_t gid;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* See if login.defs has some value configured for the port group
|
|
||||||
* ID. Otherwise, use the user's primary group ID.
|
|
||||||
*/
|
|
||||||
|
|
||||||
grent = getgr_nam_gid (getdef_str ("TTYGROUP"));
|
|
||||||
if (NULL != grent) {
|
|
||||||
gid = grent->gr_gid;
|
|
||||||
gr_free (grent);
|
|
||||||
} else {
|
|
||||||
gid = info->pw_gid;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Change the permissions on the TTY to be owned by the user with
|
|
||||||
* the group as determined above.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if ( (fchown (STDIN_FILENO, info->pw_uid, gid) != 0)
|
|
||||||
|| (fchmod (STDIN_FILENO, getdef_num ("TTYPERM", 0600)) != 0)) {
|
|
||||||
int err = errno;
|
|
||||||
FILE *shadow_logfd = log_get_logfd();
|
|
||||||
|
|
||||||
fprintf (shadow_logfd,
|
|
||||||
_("Unable to change owner or mode of tty stdin: %s"),
|
|
||||||
strerror (err));
|
|
||||||
SYSLOG ((LOG_WARN,
|
|
||||||
"unable to change owner or mode of tty stdin for user `%s': %s\n",
|
|
||||||
info->pw_name, strerror (err)));
|
|
||||||
if (EROFS != err) {
|
|
||||||
closelog ();
|
|
||||||
exit (EXIT_FAILURE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#ifdef __linux__
|
|
||||||
/*
|
|
||||||
* Please don't add code to chown /dev/vcs* to the user logging in -
|
|
||||||
* it's a potential security hole. I wouldn't like the previous user
|
|
||||||
* to hold the file descriptor open and watch my screen. We don't
|
|
||||||
* have the *BSD revoke() system call yet, and vhangup() only works
|
|
||||||
* for tty devices (which vcs* is not). --marekm
|
|
||||||
*/
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
-121
@@ -1,121 +0,0 @@
|
|||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: 2008 - 2011, Nicolas François
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include <assert.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include "prototypes.h"
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The cleanup_functions stack.
|
|
||||||
*/
|
|
||||||
#define CLEANUP_FUNCTIONS 10
|
|
||||||
|
|
||||||
typedef /*@null@*/void * parg_t;
|
|
||||||
|
|
||||||
static cleanup_function cleanup_functions[CLEANUP_FUNCTIONS];
|
|
||||||
static parg_t cleanup_function_args[CLEANUP_FUNCTIONS];
|
|
||||||
static pid_t cleanup_pid = 0;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* - Cleanup functions shall not fail.
|
|
||||||
* - You should register do_cleanups with atexit.
|
|
||||||
* - You should add cleanup functions to the stack with add_cleanup when
|
|
||||||
* an operation is expected to be executed later, and remove it from the
|
|
||||||
* stack with del_cleanup when it has been executed.
|
|
||||||
*
|
|
||||||
**/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* do_cleanups - perform the actions stored in the cleanup_functions stack.
|
|
||||||
*
|
|
||||||
* Cleanup action are not executed on exit of the processes started by the
|
|
||||||
* parent (first caller of add_cleanup).
|
|
||||||
*
|
|
||||||
* It is intended to be used as:
|
|
||||||
* atexit (do_cleanups);
|
|
||||||
*/
|
|
||||||
void do_cleanups (void)
|
|
||||||
{
|
|
||||||
unsigned int i;
|
|
||||||
|
|
||||||
/* Make sure there were no overflows */
|
|
||||||
assert (NULL == cleanup_functions[CLEANUP_FUNCTIONS-1]);
|
|
||||||
|
|
||||||
if (getpid () != cleanup_pid) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = CLEANUP_FUNCTIONS;
|
|
||||||
do {
|
|
||||||
i--;
|
|
||||||
if (cleanup_functions[i] != NULL) {
|
|
||||||
cleanup_functions[i] (cleanup_function_args[i]);
|
|
||||||
}
|
|
||||||
} while (i>0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* add_cleanup - Add a cleanup_function to the cleanup_functions stack.
|
|
||||||
*/
|
|
||||||
void add_cleanup (/*@notnull@*/cleanup_function pcf, /*@null@*/void *arg)
|
|
||||||
{
|
|
||||||
unsigned int i;
|
|
||||||
assert (NULL != pcf);
|
|
||||||
|
|
||||||
assert (NULL == cleanup_functions[CLEANUP_FUNCTIONS-2]);
|
|
||||||
|
|
||||||
if (0 == cleanup_pid) {
|
|
||||||
cleanup_pid = getpid ();
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Add the cleanup_function at the end of the stack */
|
|
||||||
for (i=0; NULL != cleanup_functions[i]; i++);
|
|
||||||
cleanup_functions[i] = pcf;
|
|
||||||
cleanup_function_args[i] = arg;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* del_cleanup - Remove a cleanup_function from the cleanup_functions stack.
|
|
||||||
*/
|
|
||||||
void del_cleanup (/*@notnull@*/cleanup_function pcf)
|
|
||||||
{
|
|
||||||
unsigned int i;
|
|
||||||
assert (NULL != pcf);
|
|
||||||
|
|
||||||
/* Find the pcf cleanup function */
|
|
||||||
for (i=0; i<CLEANUP_FUNCTIONS; i++) {
|
|
||||||
if (cleanup_functions[i] == pcf) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Make sure the cleanup function was found */
|
|
||||||
assert (i<CLEANUP_FUNCTIONS);
|
|
||||||
|
|
||||||
/* Move the rest of the cleanup functions */
|
|
||||||
for (; i<CLEANUP_FUNCTIONS; i++) {
|
|
||||||
/* Make sure the cleanup function was specified only once */
|
|
||||||
assert ( (i == (CLEANUP_FUNCTIONS -1))
|
|
||||||
|| (cleanup_functions[i+1] != pcf));
|
|
||||||
|
|
||||||
if (i == (CLEANUP_FUNCTIONS -1)) {
|
|
||||||
cleanup_functions[i] = NULL;
|
|
||||||
cleanup_function_args[i] = NULL;
|
|
||||||
} else {
|
|
||||||
cleanup_functions[i] = cleanup_functions[i+1];
|
|
||||||
cleanup_function_args[i] = cleanup_function_args[i+1];
|
|
||||||
}
|
|
||||||
|
|
||||||
/* A NULL indicates the end of the stack */
|
|
||||||
if (NULL == cleanup_functions[i]) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,220 +0,0 @@
|
|||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: 2008 , Nicolas François
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include <assert.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include "attr.h"
|
|
||||||
#include "defines.h"
|
|
||||||
#include "groupio.h"
|
|
||||||
#include "sgroupio.h"
|
|
||||||
#include "prototypes.h"
|
|
||||||
#include "shadowlog.h"
|
|
||||||
|
|
||||||
/*
|
|
||||||
* cleanup_report_add_group - Report failure to add a group to the system
|
|
||||||
*
|
|
||||||
* It should be registered when it is decided to add a group to the system.
|
|
||||||
*/
|
|
||||||
void cleanup_report_add_group (void *group_name)
|
|
||||||
{
|
|
||||||
const char *name = group_name;
|
|
||||||
|
|
||||||
SYSLOG ((LOG_ERR, "failed to add group %s", name));
|
|
||||||
#ifdef WITH_AUDIT
|
|
||||||
audit_logger (AUDIT_ADD_GROUP,
|
|
||||||
"",
|
|
||||||
name, AUDIT_NO_ID,
|
|
||||||
SHADOW_AUDIT_FAILURE);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* cleanup_report_del_group - Report failure to remove a group from the system
|
|
||||||
*
|
|
||||||
* It should be registered when it is decided to remove a group from the system.
|
|
||||||
*/
|
|
||||||
void cleanup_report_del_group (void *group_name)
|
|
||||||
{
|
|
||||||
const char *name = group_name;
|
|
||||||
|
|
||||||
SYSLOG ((LOG_ERR, "failed to remove group %s", name));
|
|
||||||
#ifdef WITH_AUDIT
|
|
||||||
audit_logger (AUDIT_DEL_GROUP,
|
|
||||||
"",
|
|
||||||
name, AUDIT_NO_ID,
|
|
||||||
SHADOW_AUDIT_FAILURE);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void cleanup_report_mod_group (void *cleanup_info)
|
|
||||||
{
|
|
||||||
const struct cleanup_info_mod *info;
|
|
||||||
info = (const struct cleanup_info_mod *)cleanup_info;
|
|
||||||
|
|
||||||
SYSLOG ((LOG_ERR,
|
|
||||||
"failed to change %s (%s)",
|
|
||||||
gr_dbname (),
|
|
||||||
info->action));
|
|
||||||
#ifdef WITH_AUDIT
|
|
||||||
audit_logger (AUDIT_GRP_MGMT,
|
|
||||||
info->audit_msg,
|
|
||||||
info->name, AUDIT_NO_ID,
|
|
||||||
SHADOW_AUDIT_FAILURE);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef SHADOWGRP
|
|
||||||
void cleanup_report_mod_gshadow (void *cleanup_info)
|
|
||||||
{
|
|
||||||
const struct cleanup_info_mod *info;
|
|
||||||
info = (const struct cleanup_info_mod *)cleanup_info;
|
|
||||||
|
|
||||||
SYSLOG ((LOG_ERR,
|
|
||||||
"failed to change %s (%s)",
|
|
||||||
sgr_dbname (),
|
|
||||||
info->action));
|
|
||||||
#ifdef WITH_AUDIT
|
|
||||||
audit_logger (AUDIT_GRP_MGMT,
|
|
||||||
info->audit_msg,
|
|
||||||
info->name, AUDIT_NO_ID,
|
|
||||||
SHADOW_AUDIT_FAILURE);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* cleanup_report_add_group_group - Report failure to add a group to group
|
|
||||||
*
|
|
||||||
* It should be registered when it is decided to add a group to the
|
|
||||||
* group database.
|
|
||||||
*/
|
|
||||||
void cleanup_report_add_group_group (void *group_name)
|
|
||||||
{
|
|
||||||
const char *name = group_name;
|
|
||||||
|
|
||||||
SYSLOG ((LOG_ERR, "failed to add group %s to %s", name, gr_dbname ()));
|
|
||||||
#ifdef WITH_AUDIT
|
|
||||||
audit_logger (AUDIT_ADD_GROUP,
|
|
||||||
"adding-group",
|
|
||||||
name, AUDIT_NO_ID,
|
|
||||||
SHADOW_AUDIT_FAILURE);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef SHADOWGRP
|
|
||||||
/*
|
|
||||||
* cleanup_report_add_group_gshadow - Report failure to add a group to gshadow
|
|
||||||
*
|
|
||||||
* It should be registered when it is decided to add a group to the
|
|
||||||
* gshadow database.
|
|
||||||
*/
|
|
||||||
void cleanup_report_add_group_gshadow (void *group_name)
|
|
||||||
{
|
|
||||||
const char *name = group_name;
|
|
||||||
|
|
||||||
SYSLOG ((LOG_ERR, "failed to add group %s to %s", name, sgr_dbname ()));
|
|
||||||
#ifdef WITH_AUDIT
|
|
||||||
audit_logger (AUDIT_GRP_MGMT,
|
|
||||||
"adding-shadow-group",
|
|
||||||
name, AUDIT_NO_ID,
|
|
||||||
SHADOW_AUDIT_FAILURE);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* cleanup_report_del_group_group - Report failure to remove a group from the
|
|
||||||
* regular group database
|
|
||||||
*
|
|
||||||
* It should be registered when it is decided to remove a group from the
|
|
||||||
* regular group database.
|
|
||||||
*/
|
|
||||||
void cleanup_report_del_group_group (void *group_name)
|
|
||||||
{
|
|
||||||
const char *name = group_name;
|
|
||||||
|
|
||||||
SYSLOG ((LOG_ERR,
|
|
||||||
"failed to remove group %s from %s",
|
|
||||||
name, gr_dbname ()));
|
|
||||||
#ifdef WITH_AUDIT
|
|
||||||
audit_logger (AUDIT_DEL_GROUP,
|
|
||||||
"removing-group",
|
|
||||||
name, AUDIT_NO_ID,
|
|
||||||
SHADOW_AUDIT_FAILURE);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef SHADOWGRP
|
|
||||||
/*
|
|
||||||
* cleanup_report_del_group_gshadow - Report failure to remove a group from
|
|
||||||
* gshadow
|
|
||||||
*
|
|
||||||
* It should be registered when it is decided to remove a group from the
|
|
||||||
* gshadow database.
|
|
||||||
*/
|
|
||||||
void cleanup_report_del_group_gshadow (void *group_name)
|
|
||||||
{
|
|
||||||
const char *name = group_name;
|
|
||||||
|
|
||||||
SYSLOG ((LOG_ERR,
|
|
||||||
"failed to remove group %s from %s",
|
|
||||||
name, sgr_dbname ()));
|
|
||||||
#ifdef WITH_AUDIT
|
|
||||||
audit_logger (AUDIT_GRP_MGMT,
|
|
||||||
"removing-shadow-group",
|
|
||||||
name, AUDIT_NO_ID,
|
|
||||||
SHADOW_AUDIT_FAILURE);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* cleanup_unlock_group - Unlock the group file
|
|
||||||
*
|
|
||||||
* It should be registered after the group file is successfully locked.
|
|
||||||
*/
|
|
||||||
void cleanup_unlock_group (void *process_selinux)
|
|
||||||
{
|
|
||||||
bool process = *((bool *) process_selinux);
|
|
||||||
|
|
||||||
if (gr_unlock (process) == 0) {
|
|
||||||
fprintf (log_get_logfd(),
|
|
||||||
_("%s: failed to unlock %s\n"),
|
|
||||||
log_get_progname(), gr_dbname ());
|
|
||||||
SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
|
|
||||||
#ifdef WITH_AUDIT
|
|
||||||
audit_logger_message ("unlocking-group",
|
|
||||||
SHADOW_AUDIT_FAILURE);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef SHADOWGRP
|
|
||||||
/*
|
|
||||||
* cleanup_unlock_gshadow - Unlock the gshadow file
|
|
||||||
*
|
|
||||||
* It should be registered after the gshadow file is successfully locked.
|
|
||||||
*/
|
|
||||||
void cleanup_unlock_gshadow (void *process_selinux)
|
|
||||||
{
|
|
||||||
bool process = *((bool *) process_selinux);
|
|
||||||
|
|
||||||
if (sgr_unlock (process) == 0) {
|
|
||||||
fprintf (log_get_logfd(),
|
|
||||||
_("%s: failed to unlock %s\n"),
|
|
||||||
log_get_progname(), sgr_dbname ());
|
|
||||||
SYSLOG ((LOG_ERR, "failed to unlock %s", sgr_dbname ()));
|
|
||||||
#ifdef WITH_AUDIT
|
|
||||||
audit_logger_message ("unlocking-gshadow",
|
|
||||||
SHADOW_AUDIT_FAILURE);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
@@ -1,134 +0,0 @@
|
|||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: 2008 , Nicolas François
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include <assert.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include "defines.h"
|
|
||||||
#include "pwio.h"
|
|
||||||
#include "shadowio.h"
|
|
||||||
#include "prototypes.h"
|
|
||||||
#include "shadowlog.h"
|
|
||||||
|
|
||||||
/*
|
|
||||||
* cleanup_report_add_user - Report failure to add a user to the system
|
|
||||||
*
|
|
||||||
* It should be registered when it is decided to add a user to the system.
|
|
||||||
*/
|
|
||||||
void cleanup_report_add_user (void *user_name)
|
|
||||||
{
|
|
||||||
const char *name = user_name;
|
|
||||||
|
|
||||||
SYSLOG ((LOG_ERR, "failed to add user %s", name));
|
|
||||||
#ifdef WITH_AUDIT
|
|
||||||
audit_logger (AUDIT_ADD_USER,
|
|
||||||
"",
|
|
||||||
name, AUDIT_NO_ID,
|
|
||||||
SHADOW_AUDIT_FAILURE);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
void cleanup_report_mod_passwd (void *cleanup_info)
|
|
||||||
{
|
|
||||||
const struct cleanup_info_mod *info;
|
|
||||||
info = (const struct cleanup_info_mod *)cleanup_info;
|
|
||||||
|
|
||||||
SYSLOG ((LOG_ERR,
|
|
||||||
"failed to change %s (%s)",
|
|
||||||
pw_dbname (),
|
|
||||||
info->action));
|
|
||||||
#ifdef WITH_AUDIT
|
|
||||||
audit_logger (AUDIT_USER_MGMT,
|
|
||||||
info->audit_msg,
|
|
||||||
info->name, AUDIT_NO_ID,
|
|
||||||
SHADOW_AUDIT_FAILURE);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* cleanup_report_add_user_passwd - Report failure to add a user to
|
|
||||||
* /etc/passwd
|
|
||||||
*
|
|
||||||
* It should be registered when it is decided to add a user to the
|
|
||||||
* /etc/passwd database.
|
|
||||||
*/
|
|
||||||
void cleanup_report_add_user_passwd (void *user_name)
|
|
||||||
{
|
|
||||||
const char *name = user_name;
|
|
||||||
|
|
||||||
SYSLOG ((LOG_ERR, "failed to add user %s to %s", name, pw_dbname ()));
|
|
||||||
#ifdef WITH_AUDIT
|
|
||||||
audit_logger (AUDIT_ADD_USER,
|
|
||||||
"adding-user",
|
|
||||||
name, AUDIT_NO_ID,
|
|
||||||
SHADOW_AUDIT_FAILURE);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* cleanup_report_add_user_shadow - Report failure to add a user to
|
|
||||||
* /etc/shadow
|
|
||||||
*
|
|
||||||
* It should be registered when it is decided to add a user to the
|
|
||||||
* /etc/shadow database.
|
|
||||||
*/
|
|
||||||
void cleanup_report_add_user_shadow (void *user_name)
|
|
||||||
{
|
|
||||||
const char *name = user_name;
|
|
||||||
|
|
||||||
SYSLOG ((LOG_ERR, "failed to add user %s to %s", name, spw_dbname ()));
|
|
||||||
#ifdef WITH_AUDIT
|
|
||||||
audit_logger (AUDIT_USER_MGMT,
|
|
||||||
"adding-shadow-user",
|
|
||||||
name, AUDIT_NO_ID,
|
|
||||||
SHADOW_AUDIT_FAILURE);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* cleanup_unlock_passwd - Unlock the /etc/passwd database
|
|
||||||
*
|
|
||||||
* It should be registered after the passwd database is successfully locked.
|
|
||||||
*/
|
|
||||||
void cleanup_unlock_passwd (void *process_selinux)
|
|
||||||
{
|
|
||||||
bool process = *((bool *) process_selinux);
|
|
||||||
|
|
||||||
if (pw_unlock (process) == 0) {
|
|
||||||
fprintf (log_get_logfd(),
|
|
||||||
_("%s: failed to unlock %s\n"),
|
|
||||||
log_get_progname(), pw_dbname ());
|
|
||||||
SYSLOG ((LOG_ERR, "failed to unlock %s", pw_dbname ()));
|
|
||||||
#ifdef WITH_AUDIT
|
|
||||||
audit_logger_message ("unlocking-passwd",
|
|
||||||
SHADOW_AUDIT_FAILURE);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* cleanup_unlock_shadow - Unlock the /etc/shadow database
|
|
||||||
*
|
|
||||||
* It should be registered after the shadow database is successfully locked.
|
|
||||||
*/
|
|
||||||
void cleanup_unlock_shadow (void *process_selinux)
|
|
||||||
{
|
|
||||||
bool process = *((bool *) process_selinux);
|
|
||||||
|
|
||||||
if (spw_unlock (process) == 0) {
|
|
||||||
fprintf (log_get_logfd(),
|
|
||||||
_("%s: failed to unlock %s\n"),
|
|
||||||
log_get_progname(), spw_dbname ());
|
|
||||||
SYSLOG ((LOG_ERR, "failed to unlock %s", spw_dbname ()));
|
|
||||||
#ifdef WITH_AUDIT
|
|
||||||
audit_logger_message ("unlocking-shadow",
|
|
||||||
SHADOW_AUDIT_FAILURE);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
-1239
File diff suppressed because it is too large
Load Diff
-141
@@ -1,141 +0,0 @@
|
|||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: 1990 - 1994, Julianne Frances Haugh
|
|
||||||
* SPDX-FileCopyrightText: 1996 - 2000, Marek Michałkiewicz
|
|
||||||
* SPDX-FileCopyrightText: 2001 - 2005, Tomasz Kłoczko
|
|
||||||
* SPDX-FileCopyrightText: 2007 - 2010, Nicolas François
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* $Id$ */
|
|
||||||
#ifndef COMMONIO_H
|
|
||||||
#define COMMONIO_H
|
|
||||||
|
|
||||||
|
|
||||||
#include "attr.h"
|
|
||||||
#include "defines.h" /* bool */
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Linked list entry.
|
|
||||||
*/
|
|
||||||
struct commonio_entry {
|
|
||||||
/*@null@*/char *line;
|
|
||||||
/*@null@*/void *eptr; /* struct passwd, struct spwd, ... */
|
|
||||||
/*@dependent@*/ /*@null@*/struct commonio_entry *prev;
|
|
||||||
/*@owned@*/ /*@null@*/struct commonio_entry *next;
|
|
||||||
bool changed:1;
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Operations depending on database type: passwd, group, shadow etc.
|
|
||||||
*/
|
|
||||||
struct commonio_ops {
|
|
||||||
/*
|
|
||||||
* Make a copy of the object (for example, struct passwd)
|
|
||||||
* and all strings pointed by it, in malloced memory.
|
|
||||||
*/
|
|
||||||
/*@null@*/ /*@only@*/void *(*cio_dup)(const void *);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* free() the object including any strings pointed by it.
|
|
||||||
*/
|
|
||||||
void (*cio_free)(/*@only@*/void *);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Return the name of the object (for example, pw_name
|
|
||||||
* for struct passwd).
|
|
||||||
*/
|
|
||||||
const char *(*cio_getname)(const void *);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Parse a string, return object (in static area -
|
|
||||||
* should be copied using the dup operation above).
|
|
||||||
*/
|
|
||||||
void *(*cio_parse)(const char *);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Write the object to the file (this calls putpwent()
|
|
||||||
* for struct passwd, for example).
|
|
||||||
*/
|
|
||||||
int (*cio_put)(const void *, FILE *);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* open_hook and close_hook.
|
|
||||||
* If non NULL, these functions will be called after the database
|
|
||||||
* is open or before it is closed.
|
|
||||||
* They return 0 on failure and 1 on success.
|
|
||||||
*/
|
|
||||||
/*@null@*/int (*cio_open_hook)(void);
|
|
||||||
/*@null@*/int (*cio_close_hook)(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Database structure.
|
|
||||||
*/
|
|
||||||
struct commonio_db {
|
|
||||||
/*
|
|
||||||
* Name of the data file.
|
|
||||||
*/
|
|
||||||
char filename[1024];
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Operations from above.
|
|
||||||
*/
|
|
||||||
/*@observer@*/const struct commonio_ops *ops;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Currently open file stream.
|
|
||||||
*/
|
|
||||||
/*@dependent@*/ /*@null@*/FILE *fp;
|
|
||||||
|
|
||||||
#ifdef WITH_SELINUX
|
|
||||||
/*@null@*/char *scontext;
|
|
||||||
#endif
|
|
||||||
/*
|
|
||||||
* Default permissions and owner for newly created data file.
|
|
||||||
*/
|
|
||||||
mode_t st_mode;
|
|
||||||
uid_t st_uid;
|
|
||||||
gid_t st_gid;
|
|
||||||
/*
|
|
||||||
* Head, tail, current position in linked list.
|
|
||||||
*/
|
|
||||||
/*@owned@*/ /*@null@*/struct commonio_entry *head;
|
|
||||||
/*@dependent@*/ /*@null@*/struct commonio_entry *tail;
|
|
||||||
/*@dependent@*/ /*@null@*/struct commonio_entry *cursor;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Various flags.
|
|
||||||
*/
|
|
||||||
bool changed:1;
|
|
||||||
bool isopen:1;
|
|
||||||
bool locked:1;
|
|
||||||
bool readonly:1;
|
|
||||||
bool setname:1;
|
|
||||||
};
|
|
||||||
|
|
||||||
extern int commonio_setname (struct commonio_db *, const char *);
|
|
||||||
extern bool commonio_present (const struct commonio_db *db);
|
|
||||||
extern int commonio_lock (struct commonio_db *);
|
|
||||||
extern int commonio_lock_nowait (struct commonio_db *, bool log);
|
|
||||||
extern int do_fcntl_lock (const char *file, bool log, short type);
|
|
||||||
extern int commonio_open (struct commonio_db *, int);
|
|
||||||
extern /*@observer@*/ /*@null@*/const void *commonio_locate (struct commonio_db *, const char *);
|
|
||||||
extern int commonio_update (struct commonio_db *, const void *);
|
|
||||||
#ifdef ENABLE_SUBIDS
|
|
||||||
extern int commonio_append (struct commonio_db *, const void *);
|
|
||||||
#endif /* ENABLE_SUBIDS */
|
|
||||||
extern int commonio_remove (struct commonio_db *, const char *);
|
|
||||||
extern int commonio_rewind (struct commonio_db *);
|
|
||||||
extern /*@observer@*/ /*@null@*/const void *commonio_next (struct commonio_db *);
|
|
||||||
extern int commonio_close (struct commonio_db *, bool);
|
|
||||||
extern int commonio_unlock (struct commonio_db *, bool);
|
|
||||||
extern void commonio_del_entry (struct commonio_db *,
|
|
||||||
const struct commonio_entry *);
|
|
||||||
extern int commonio_sort_wrt (struct commonio_db *shadow,
|
|
||||||
const struct commonio_db *passwd);
|
|
||||||
extern int commonio_sort (struct commonio_db *db,
|
|
||||||
int (*cmp) (const void *, const void *));
|
|
||||||
|
|
||||||
#endif
|
|
||||||
-111
@@ -1,111 +0,0 @@
|
|||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: 1991 , Julianne Frances Haugh
|
|
||||||
* SPDX-FileCopyrightText: 1991 , Chip Rosenthal
|
|
||||||
* SPDX-FileCopyrightText: 1996 - 1998, Marek Michałkiewicz
|
|
||||||
* SPDX-FileCopyrightText: 2003 - 2005, Tomasz Kłoczko
|
|
||||||
* SPDX-FileCopyrightText: 2007 - 2010, Nicolas François
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include "defines.h"
|
|
||||||
#include "getdef.h"
|
|
||||||
#include "prototypes.h"
|
|
||||||
#include "string/strcmp/streq.h"
|
|
||||||
#include "string/strcmp/strprefix.h"
|
|
||||||
#include "string/strcpy/strtcpy.h"
|
|
||||||
#include "string/strtok/stpsep.h"
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This is now rather generic function which decides if "tty" is listed
|
|
||||||
* under "cfgin" in config (directly or indirectly). Fallback to default if
|
|
||||||
* something is bad.
|
|
||||||
*/
|
|
||||||
static bool
|
|
||||||
is_listed(const char *cfgin, const char *tty, bool def)
|
|
||||||
{
|
|
||||||
FILE *fp;
|
|
||||||
char buf[1024], *s;
|
|
||||||
const char *cons;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If the CONSOLE configuration definition isn't given,
|
|
||||||
* fallback to default.
|
|
||||||
*/
|
|
||||||
|
|
||||||
cons = getdef_str (cfgin);
|
|
||||||
if (NULL == cons) {
|
|
||||||
return def;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If this isn't a filename, then it is a ":" delimited list of
|
|
||||||
* console devices upon which root logins are allowed.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (*cons != '/') {
|
|
||||||
char *pbuf;
|
|
||||||
|
|
||||||
strtcpy_a(buf, cons);
|
|
||||||
pbuf = buf;
|
|
||||||
while (NULL != (s = strsep(&pbuf, ":"))) {
|
|
||||||
if (streq(s, tty)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If we can't open the console list, then call everything a
|
|
||||||
* console - otherwise root will never be allowed to login.
|
|
||||||
*/
|
|
||||||
|
|
||||||
fp = fopen (cons, "r");
|
|
||||||
if (NULL == fp) {
|
|
||||||
return def;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* See if this tty is listed in the console file.
|
|
||||||
*/
|
|
||||||
|
|
||||||
while (fgets(buf, sizeof(buf), fp) != NULL) {
|
|
||||||
stpsep(buf, "\n");
|
|
||||||
if (streq(buf, tty)) {
|
|
||||||
(void) fclose (fp);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This tty isn't a console.
|
|
||||||
*/
|
|
||||||
|
|
||||||
(void) fclose (fp);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* console - return 1 if the "tty" is a console device, else 0.
|
|
||||||
*
|
|
||||||
* Note - we need to take extreme care here to avoid locking out root logins
|
|
||||||
* if something goes awry. That's why we do things like call everything a
|
|
||||||
* console if the consoles file can't be opened. Because of this, we must
|
|
||||||
* warn the user to protect against the remove of the consoles file since
|
|
||||||
* that would allow an unauthorized root login.
|
|
||||||
*/
|
|
||||||
|
|
||||||
bool console (const char *tty)
|
|
||||||
{
|
|
||||||
tty = strprefix(tty, "/dev/") ?: tty;
|
|
||||||
|
|
||||||
return is_listed ("CONSOLE", tty, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
-889
@@ -1,889 +0,0 @@
|
|||||||
/*
|
|
||||||
* SPDX-FileCopyrightText: 1991 - 1994, Julianne Frances Haugh
|
|
||||||
* SPDX-FileCopyrightText: 1996 - 2001, Marek Michałkiewicz
|
|
||||||
* SPDX-FileCopyrightText: 2003 - 2006, Tomasz Kłoczko
|
|
||||||
* SPDX-FileCopyrightText: 2007 - 2010, Nicolas François
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#ident "$Id$"
|
|
||||||
|
|
||||||
#include <assert.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/time.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include "alloc/malloc.h"
|
|
||||||
#include "attr.h"
|
|
||||||
#include "fs/readlink/areadlink.h"
|
|
||||||
#include "prototypes.h"
|
|
||||||
#include "defines.h"
|
|
||||||
#ifdef WITH_SELINUX
|
|
||||||
#include <selinux/selinux.h>
|
|
||||||
#endif /* WITH_SELINUX */
|
|
||||||
#if defined(WITH_ACL) || defined(WITH_ATTR)
|
|
||||||
#include <stdarg.h>
|
|
||||||
#include <attr/error_context.h>
|
|
||||||
#endif /* WITH_ACL || WITH_ATTR */
|
|
||||||
#ifdef WITH_ACL
|
|
||||||
#include <acl/libacl.h>
|
|
||||||
#endif /* WITH_ACL */
|
|
||||||
#ifdef WITH_ATTR
|
|
||||||
#include <attr/libattr.h>
|
|
||||||
#endif /* WITH_ATTR */
|
|
||||||
#include "shadowlog.h"
|
|
||||||
#include "string/sprintf/aprintf.h"
|
|
||||||
#include "string/strcmp/streq.h"
|
|
||||||
#include "string/strcmp/strprefix.h"
|
|
||||||
#include "string/strerrno.h"
|
|
||||||
|
|
||||||
|
|
||||||
static /*@null@*/const char *src_orig;
|
|
||||||
static /*@null@*/const char *dst_orig;
|
|
||||||
|
|
||||||
struct link_name {
|
|
||||||
dev_t ln_dev;
|
|
||||||
ino_t ln_ino;
|
|
||||||
nlink_t ln_count;
|
|
||||||
char *ln_name;
|
|
||||||
/*@dependent@*/struct link_name *ln_next;
|
|
||||||
};
|
|
||||||
static /*@exposed@*/struct link_name *links;
|
|
||||||
|
|
||||||
struct path_info {
|
|
||||||
const char *full_path;
|
|
||||||
int dirfd;
|
|
||||||
const char *name;
|
|
||||||
};
|
|
||||||
|
|
||||||
static int copy_entry (const struct path_info *src, const struct path_info *dst,
|
|
||||||
bool reset_selinux,
|
|
||||||
uid_t old_uid, uid_t new_uid,
|
|
||||||
gid_t old_gid, gid_t new_gid);
|
|
||||||
static int copy_dir (const struct path_info *src, const struct path_info *dst,
|
|
||||||
bool reset_selinux,
|
|
||||||
const struct stat *statp, const struct timespec mt[],
|
|
||||||
uid_t old_uid, uid_t new_uid,
|
|
||||||
gid_t old_gid, gid_t new_gid);
|
|
||||||
static int copy_symlink (const struct path_info *src, const struct path_info *dst,
|
|
||||||
const struct stat *statp, const struct timespec mt[],
|
|
||||||
uid_t old_uid, uid_t new_uid,
|
|
||||||
gid_t old_gid, gid_t new_gid);
|
|
||||||
static int copy_hardlink (const struct path_info *dst,
|
|
||||||
struct link_name *lp);
|
|
||||||
static int copy_special (const struct path_info *src, const struct path_info *dst,
|
|
||||||
bool reset_selinux,
|
|
||||||
const struct stat *statp, const struct timespec mt[],
|
|
||||||
uid_t old_uid, uid_t new_uid,
|
|
||||||
gid_t old_gid, gid_t new_gid);
|
|
||||||
static int copy_file (const struct path_info *src, const struct path_info *dst,
|
|
||||||
bool reset_selinux,
|
|
||||||
const struct stat *statp, const struct timespec mt[],
|
|
||||||
uid_t old_uid, uid_t new_uid,
|
|
||||||
gid_t old_gid, gid_t new_gid);
|
|
||||||
static int chownat_if_needed (const struct path_info *dst, const struct stat *statp,
|
|
||||||
uid_t old_uid, uid_t new_uid,
|
|
||||||
gid_t old_gid, gid_t new_gid);
|
|
||||||
static int fchown_if_needed (int fdst, const struct stat *statp,
|
|
||||||
uid_t old_uid, uid_t new_uid,
|
|
||||||
gid_t old_gid, gid_t new_gid);
|
|
||||||
|
|
||||||
#if defined(WITH_ACL) || defined(WITH_ATTR)
|
|
||||||
/*
|
|
||||||
* error_acl - format the error messages for the ACL and EQ libraries.
|
|
||||||
*/
|
|
||||||
format_attr(printf, 2, 3)
|
|
||||||
static void
|
|
||||||
error_acl(struct error_context *, const char *fmt, ...)
|
|
||||||
{
|
|
||||||
va_list ap;
|
|
||||||
FILE *shadow_logfd = log_get_logfd();
|
|
||||||
|
|
||||||
/* ignore the case when destination does not support ACLs
|
|
||||||
* or extended attributes */
|
|
||||||
if (ENOTSUP == errno) {
|
|
||||||
errno = 0;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
va_start (ap, fmt);
|
|
||||||
(void) fprintf (shadow_logfd, _("%s: "), log_get_progname());
|
|
||||||
if (vfprintf (shadow_logfd, fmt, ap) != 0) {
|
|
||||||
(void) fputs (_(": "), shadow_logfd);
|
|
||||||
}
|
|
||||||
(void) fprintf(shadow_logfd, "%s\n", strerrno());
|
|
||||||
va_end (ap);
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct error_context ctx = {
|
|
||||||
error_acl, NULL, NULL
|
|
||||||
};
|
|
||||||
#endif /* WITH_ACL || WITH_ATTR */
|
|
||||||
|
|
||||||
#ifdef WITH_ACL
|
|
||||||
static int perm_copy_path(const struct path_info *src,
|
|
||||||
const struct path_info *dst,
|
|
||||||
struct error_context *errctx)
|
|
||||||
{
|
|
||||||
int src_fd, dst_fd, ret;
|
|
||||||
|
|
||||||
src_fd = openat(src->dirfd, src->name, O_RDONLY | O_NOFOLLOW | O_NONBLOCK | O_CLOEXEC);
|
|
||||||
if (src_fd < 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
dst_fd = openat(dst->dirfd, dst->name, O_RDONLY | O_NOFOLLOW | O_NONBLOCK | O_CLOEXEC);
|
|
||||||
if (dst_fd < 0) {
|
|
||||||
(void) close (src_fd);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = perm_copy_fd(src->full_path, src_fd, dst->full_path, dst_fd, errctx);
|
|
||||||
(void) close (src_fd);
|
|
||||||
(void) close (dst_fd);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
#endif /* WITH_ACL */
|
|
||||||
|
|
||||||
#ifdef WITH_ATTR
|
|
||||||
static int attr_copy_path(const struct path_info *src,
|
|
||||||
const struct path_info *dst,
|
|
||||||
int (*callback) (const char *, struct error_context *),
|
|
||||||
struct error_context *errctx)
|
|
||||||
{
|
|
||||||
int src_fd, dst_fd, ret;
|
|
||||||
|
|
||||||
src_fd = openat(src->dirfd, src->name, O_RDONLY | O_NOFOLLOW | O_NONBLOCK | O_CLOEXEC);
|
|
||||||
if (src_fd < 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
dst_fd = openat(dst->dirfd, dst->name, O_RDONLY | O_NOFOLLOW | O_NONBLOCK | O_CLOEXEC);
|
|
||||||
if (dst_fd < 0) {
|
|
||||||
(void) close (src_fd);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = attr_copy_fd(src->full_path, src_fd, dst->full_path, dst_fd, callback, errctx);
|
|
||||||
(void) close (src_fd);
|
|
||||||
(void) close (dst_fd);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
#endif /* WITH_ATTR */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* remove_link - delete a link from the linked list
|
|
||||||
*/
|
|
||||||
static void remove_link (/*@only@*/struct link_name *ln)
|
|
||||||
{
|
|
||||||
struct link_name *lp;
|
|
||||||
|
|
||||||
if (links == ln) {
|
|
||||||
links = ln->ln_next;
|
|
||||||
free (ln->ln_name);
|
|
||||||
free (ln);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
for (lp = links; NULL !=lp; lp = lp->ln_next) {
|
|
||||||
if (lp->ln_next == ln) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (NULL == lp) {
|
|
||||||
free (ln->ln_name);
|
|
||||||
free (ln);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
lp->ln_next = lp->ln_next->ln_next;
|
|
||||||
free (ln->ln_name);
|
|
||||||
free (ln);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* check_link - see if a file is really a link
|
|
||||||
*/
|
|
||||||
|
|
||||||
static /*@exposed@*/ /*@null@*/struct link_name *check_link (const char *name, const struct stat *sb)
|
|
||||||
{
|
|
||||||
struct link_name *lp;
|
|
||||||
|
|
||||||
/* copy_tree () must be the entry point */
|
|
||||||
assert (NULL != src_orig);
|
|
||||||
assert (NULL != dst_orig);
|
|
||||||
|
|
||||||
for (lp = links; NULL != lp; lp = lp->ln_next) {
|
|
||||||
if ((lp->ln_dev == sb->st_dev) && (lp->ln_ino == sb->st_ino)) {
|
|
||||||
return lp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sb->st_nlink == 1) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
lp = xmalloc_T(1, struct link_name);
|
|
||||||
lp->ln_dev = sb->st_dev;
|
|
||||||
lp->ln_ino = sb->st_ino;
|
|
||||||
lp->ln_count = sb->st_nlink;
|
|
||||||
lp->ln_name = xaprintf("%s%s", dst_orig, name + strlen(src_orig));
|
|
||||||
lp->ln_next = links;
|
|
||||||
links = lp;
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int copy_tree_impl (const struct path_info *src, const struct path_info *dst,
|
|
||||||
bool copy_root, bool reset_selinux,
|
|
||||||
uid_t old_uid, uid_t new_uid,
|
|
||||||
gid_t old_gid, gid_t new_gid)
|
|
||||||
{
|
|
||||||
int dst_fd, src_fd, err = 0;
|
|
||||||
bool set_orig = false;
|
|
||||||
const struct dirent *ent;
|
|
||||||
DIR *dir;
|
|
||||||
|
|
||||||
if (copy_root) {
|
|
||||||
struct stat sb;
|
|
||||||
|
|
||||||
if ( fstatat (dst->dirfd, dst->name, &sb, 0) == 0
|
|
||||||
|| errno != ENOENT) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fstatat (src->dirfd, src->name, &sb, AT_SYMLINK_NOFOLLOW) == -1) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!S_ISDIR (sb.st_mode)) {
|
|
||||||
fprintf (log_get_logfd(),
|
|
||||||
"%s: %s is not a directory",
|
|
||||||
log_get_progname(), src->full_path);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return copy_entry (src, dst, reset_selinux,
|
|
||||||
old_uid, new_uid, old_gid, new_gid);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Make certain both directories exist. This routine is called
|
|
||||||
* after the home directory is created, or recursively after the
|
|
||||||
* target is created. It assumes the target directory exists.
|
|
||||||
*/
|
|
||||||
|
|
||||||
src_fd = openat (src->dirfd, src->name, O_DIRECTORY | O_RDONLY | O_NOFOLLOW | O_CLOEXEC);
|
|
||||||
if (src_fd < 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
dst_fd = openat (dst->dirfd, dst->name, O_DIRECTORY | O_RDONLY | O_NOFOLLOW | O_CLOEXEC);
|
|
||||||
if (dst_fd < 0) {
|
|
||||||
(void) close (src_fd);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Open the source directory and read each entry. Every file
|
|
||||||
* entry in the directory is copied with the UID and GID set
|
|
||||||
* to the provided values. As an added security feature only
|
|
||||||
* regular files (and directories ...) are copied, and no file
|
|
||||||
* is made set-ID.
|
|
||||||
*/
|
|
||||||
dir = fdopendir (src_fd);
|
|
||||||
if (NULL == dir) {
|
|
||||||
(void) close (src_fd);
|
|
||||||
(void) close (dst_fd);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (src_orig == NULL) {
|
|
||||||
src_orig = src->full_path;
|
|
||||||
dst_orig = dst->full_path;
|
|
||||||
set_orig = true;
|
|
||||||
}
|
|
||||||
while (0 == err && NULL != (ent = readdir(dir))) {
|
|
||||||
char *src_name = NULL;
|
|
||||||
char *dst_name;
|
|
||||||
struct path_info src_entry, dst_entry;
|
|
||||||
/*
|
|
||||||
* Skip the "." and ".." entries
|
|
||||||
*/
|
|
||||||
if (streq(ent->d_name, ".") ||
|
|
||||||
streq(ent->d_name, ".."))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
src_name = aprintf("%s/%s", src->full_path, ent->d_name);
|
|
||||||
if (src_name == NULL) {
|
|
||||||
err = -1;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
dst_name = aprintf("%s/%s", dst->full_path, ent->d_name);
|
|
||||||
if (dst_name == NULL) {
|
|
||||||
err = -1;
|
|
||||||
goto skip;
|
|
||||||
}
|
|
||||||
|
|
||||||
src_entry.full_path = src_name;
|
|
||||||
src_entry.dirfd = dirfd(dir);
|
|
||||||
src_entry.name = ent->d_name;
|
|
||||||
|
|
||||||
dst_entry.full_path = dst_name;
|
|
||||||
dst_entry.dirfd = dst_fd;
|
|
||||||
dst_entry.name = ent->d_name;
|
|
||||||
|
|
||||||
err = copy_entry(&src_entry, &dst_entry, reset_selinux,
|
|
||||||
old_uid, new_uid, old_gid, new_gid);
|
|
||||||
|
|
||||||
free(dst_name);
|
|
||||||
skip:
|
|
||||||
free(src_name);
|
|
||||||
}
|
|
||||||
(void) closedir (dir);
|
|
||||||
(void) close (dst_fd);
|
|
||||||
|
|
||||||
if (set_orig) {
|
|
||||||
src_orig = NULL;
|
|
||||||
dst_orig = NULL;
|
|
||||||
/* FIXME: clean links
|
|
||||||
* Since there can be hardlinks elsewhere on the device,
|
|
||||||
* we cannot check that all the hardlinks were found:
|
|
||||||
assert (NULL == links);
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef WITH_SELINUX
|
|
||||||
/* Reset SELinux to create files with default contexts.
|
|
||||||
* Note that the context is only reset on exit of copy_tree (it is
|
|
||||||
* assumed that the program would quit without needing a restored
|
|
||||||
* context if copy_tree failed previously), and that copy_tree can
|
|
||||||
* be called recursively (hence the context is set on the
|
|
||||||
* sub-functions of copy_entry).
|
|
||||||
*/
|
|
||||||
if (reset_selinux_file_context () != 0) {
|
|
||||||
err = -1;
|
|
||||||
}
|
|
||||||
#endif /* WITH_SELINUX */
|
|
||||||
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* copy_entry - copy the entry of a directory
|
|
||||||
*
|
|
||||||
* Copy the entry src to dst.
|
|
||||||
* Depending on the type of entry, this function will forward the
|
|
||||||
* request to copy_dir(), copy_symlink(), copy_hardlink(),
|
|
||||||
* copy_special(), or copy_file().
|
|
||||||
*
|
|
||||||
* The access and modification time will not be modified.
|
|
||||||
*
|
|
||||||
* The permissions will be set to new_uid/new_gid.
|
|
||||||
*
|
|
||||||
* If new_uid (resp. new_gid) is equal to -1, the user (resp. group) will
|
|
||||||
* not be modified.
|
|
||||||
*
|
|
||||||
* Only the files owned (resp. group-owned) by old_uid (resp.
|
|
||||||
* old_gid) will be modified, unless old_uid (resp. old_gid) is set
|
|
||||||
* to -1.
|
|
||||||
*/
|
|
||||||
static int copy_entry (const struct path_info *src, const struct path_info *dst,
|
|
||||||
bool reset_selinux,
|
|
||||||
uid_t old_uid, uid_t new_uid,
|
|
||||||
gid_t old_gid, gid_t new_gid)
|
|
||||||
{
|
|
||||||
int err = 0;
|
|
||||||
struct stat sb;
|
|
||||||
struct stat tmp_sb;
|
|
||||||
struct link_name *lp;
|
|
||||||
struct timespec mt[2];
|
|
||||||
|
|
||||||
if (fstatat(src->dirfd, src->name, &sb, AT_SYMLINK_NOFOLLOW) == -1) {
|
|
||||||
/* If we cannot stat the file, do not care. */
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
mt[0].tv_sec = sb.st_atim.tv_sec;
|
|
||||||
mt[0].tv_nsec = sb.st_atim.tv_nsec;
|
|
||||||
|
|
||||||
mt[1].tv_sec = sb.st_mtim.tv_sec;
|
|
||||||
mt[1].tv_nsec = sb.st_mtim.tv_nsec;
|
|
||||||
|
|
||||||
if (S_ISDIR (sb.st_mode)) {
|
|
||||||
err = copy_dir (src, dst, reset_selinux, &sb, mt,
|
|
||||||
old_uid, new_uid, old_gid, new_gid);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If the destination already exists do nothing.
|
|
||||||
* This is after the copy_dir above to still iterate into subdirectories.
|
|
||||||
*/
|
|
||||||
if (fstatat(dst->dirfd, dst->name, &tmp_sb, AT_SYMLINK_NOFOLLOW) != -1) {
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Copy any symbolic links
|
|
||||||
*/
|
|
||||||
|
|
||||||
else if (S_ISLNK (sb.st_mode)) {
|
|
||||||
err = copy_symlink (src, dst, &sb, mt,
|
|
||||||
old_uid, new_uid, old_gid, new_gid);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* See if this is a previously copied link
|
|
||||||
*/
|
|
||||||
|
|
||||||
else if ((lp = check_link (src->full_path, &sb)) != NULL) {
|
|
||||||
err = copy_hardlink (dst, lp);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Deal with FIFOs and special files. The user really
|
|
||||||
* shouldn't have any of these, but it seems like it
|
|
||||||
* would be nice to copy everything ...
|
|
||||||
*/
|
|
||||||
|
|
||||||
else if (!S_ISREG (sb.st_mode)) {
|
|
||||||
err = copy_special (src, dst, reset_selinux, &sb, mt,
|
|
||||||
old_uid, new_uid, old_gid, new_gid);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Create the new file and copy the contents. The new
|
|
||||||
* file will be owned by the provided UID and GID values.
|
|
||||||
*/
|
|
||||||
|
|
||||||
else {
|
|
||||||
err = copy_file (src, dst, reset_selinux, &sb, mt,
|
|
||||||
old_uid, new_uid, old_gid, new_gid);
|
|
||||||
}
|
|
||||||
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* copy_dir - copy a directory
|
|
||||||
*
|
|
||||||
* Copy a directory (recursively) from src to dst.
|
|
||||||
*
|
|
||||||
* statp, mt, old_uid, new_uid, old_gid, and new_gid are used to set
|
|
||||||
* the access and modification and the access rights.
|
|
||||||
*
|
|
||||||
* Return 0 on success, -1 on error.
|
|
||||||
*/
|
|
||||||
static int copy_dir (const struct path_info *src, const struct path_info *dst,
|
|
||||||
bool reset_selinux,
|
|
||||||
const struct stat *statp, const struct timespec mt[],
|
|
||||||
uid_t old_uid, uid_t new_uid,
|
|
||||||
gid_t old_gid, gid_t new_gid)
|
|
||||||
{
|
|
||||||
int err = 0;
|
|
||||||
struct stat dst_sb;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Create a new target directory, make it owned by
|
|
||||||
* the user and then recursively copy that directory.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef WITH_SELINUX
|
|
||||||
if (set_selinux_file_context (dst->full_path, S_IFDIR) != 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
#endif /* WITH_SELINUX */
|
|
||||||
/*
|
|
||||||
* If the destination is already a directory, don't change it
|
|
||||||
* but copy into it (recursively).
|
|
||||||
*/
|
|
||||||
if (fstatat(dst->dirfd, dst->name, &dst_sb, AT_SYMLINK_NOFOLLOW) == 0 && S_ISDIR(dst_sb.st_mode)) {
|
|
||||||
return (copy_tree_impl (src, dst, false, reset_selinux,
|
|
||||||
old_uid, new_uid, old_gid, new_gid) != 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( (mkdirat (dst->dirfd, dst->name, 0700) != 0)
|
|
||||||
|| (chownat_if_needed (dst, statp,
|
|
||||||
old_uid, new_uid, old_gid, new_gid) != 0)
|
|
||||||
|| (fchmodat (dst->dirfd, dst->name, statp->st_mode & 07777, AT_SYMLINK_NOFOLLOW) != 0)
|
|
||||||
#ifdef WITH_ACL
|
|
||||||
|| ( (perm_copy_path (src, dst, &ctx) != 0)
|
|
||||||
&& (errno != 0))
|
|
||||||
#endif /* WITH_ACL */
|
|
||||||
#ifdef WITH_ATTR
|
|
||||||
/*
|
|
||||||
* If the third parameter is NULL, all extended attributes
|
|
||||||
* except those that define Access Control Lists are copied.
|
|
||||||
* ACLs are excluded by default because copying them between
|
|
||||||
* file systems with and without ACL support needs some
|
|
||||||
* additional logic so that no unexpected permissions result.
|
|
||||||
*/
|
|
||||||
|| ( !reset_selinux
|
|
||||||
&& (attr_copy_path (src, dst, NULL, &ctx) != 0)
|
|
||||||
&& (errno != 0))
|
|
||||||
#endif /* WITH_ATTR */
|
|
||||||
|| (copy_tree_impl (src, dst, false, reset_selinux,
|
|
||||||
old_uid, new_uid, old_gid, new_gid) != 0)
|
|
||||||
|| (utimensat (dst->dirfd, dst->name, mt, AT_SYMLINK_NOFOLLOW) != 0)) {
|
|
||||||
err = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* copy_symlink - copy a symlink
|
|
||||||
*
|
|
||||||
* Copy a symlink from src to dst.
|
|
||||||
*
|
|
||||||
* statp, mt, old_uid, new_uid, old_gid, and new_gid are used to set
|
|
||||||
* the access and modification and the access rights.
|
|
||||||
*
|
|
||||||
* Return 0 on success, -1 on error.
|
|
||||||
*/
|
|
||||||
static int copy_symlink (const struct path_info *src, const struct path_info *dst,
|
|
||||||
const struct stat *statp, const struct timespec mt[],
|
|
||||||
uid_t old_uid, uid_t new_uid,
|
|
||||||
gid_t old_gid, gid_t new_gid)
|
|
||||||
{
|
|
||||||
char *oldlink;
|
|
||||||
|
|
||||||
/* copy_tree () must be the entry point */
|
|
||||||
assert (NULL != src_orig);
|
|
||||||
assert (NULL != dst_orig);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Get the name of the file which the link points
|
|
||||||
* to. If that name begins with the original
|
|
||||||
* source directory name, that part of the link
|
|
||||||
* name will be replaced with the original
|
|
||||||
* destination directory name.
|
|
||||||
*/
|
|
||||||
|
|
||||||
oldlink = areadlink(src->full_path);
|
|
||||||
if (NULL == oldlink)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
/* If src was a link to an entry of the src_orig directory itself,
|
|
||||||
* create a link to the corresponding entry in the dst_orig
|
|
||||||
* directory.
|
|
||||||
*/
|
|
||||||
if (strprefix(oldlink, src_orig)) {
|
|
||||||
char *dummy;
|
|
||||||
|
|
||||||
dummy = xaprintf("%s%s", dst_orig, oldlink + strlen(src_orig));
|
|
||||||
free(oldlink);
|
|
||||||
oldlink = dummy;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef WITH_SELINUX
|
|
||||||
if (set_selinux_file_context (dst->full_path, S_IFLNK) != 0) {
|
|
||||||
free (oldlink);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
#endif /* WITH_SELINUX */
|
|
||||||
if ( (symlinkat (oldlink, dst->dirfd, dst->name) != 0)
|
|
||||||
|| (chownat_if_needed (dst, statp,
|
|
||||||
old_uid, new_uid, old_gid, new_gid) != 0)) {
|
|
||||||
/* FIXME: there are no modes on symlinks, right?
|
|
||||||
* ACL could be copied, but this would be much more
|
|
||||||
* complex than calling perm_copy_file.
|
|
||||||
* Ditto for Extended Attributes.
|
|
||||||
* We currently only document that ACL and Extended
|
|
||||||
* Attributes are not copied.
|
|
||||||
*/
|
|
||||||
free (oldlink);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
free (oldlink);
|
|
||||||
|
|
||||||
if (utimensat (dst->dirfd, dst->name, mt, AT_SYMLINK_NOFOLLOW) != 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* copy_hardlink - copy a hardlink
|
|
||||||
*
|
|
||||||
* Copy a hardlink from src to dst.
|
|
||||||
*
|
|
||||||
* Return 0 on success, -1 on error.
|
|
||||||
*/
|
|
||||||
static int copy_hardlink (const struct path_info *dst,
|
|
||||||
struct link_name *lp)
|
|
||||||
{
|
|
||||||
/* FIXME: selinux, ACL, Extended Attributes needed? */
|
|
||||||
|
|
||||||
if (linkat (AT_FDCWD, lp->ln_name, dst->dirfd, dst->name, 0) != 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* If the file could be unlinked, decrement the links counter,
|
|
||||||
* and forget about this link if it was the last reference */
|
|
||||||
lp->ln_count--;
|
|
||||||
if (lp->ln_count <= 0) {
|
|
||||||
remove_link (lp);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* copy_special - copy a special file
|
|
||||||
*
|
|
||||||
* Copy a special file from src to dst.
|
|
||||||
*
|
|
||||||
* statp, mt, old_uid, new_uid, old_gid, and new_gid are used to set
|
|
||||||
* the access and modification and the access rights.
|
|
||||||
*
|
|
||||||
* Return 0 on success, -1 on error.
|
|
||||||
*/
|
|
||||||
static int
|
|
||||||
copy_special(MAYBE_UNUSED const struct path_info *src, const struct path_info *dst,
|
|
||||||
MAYBE_UNUSED bool reset_selinux,
|
|
||||||
const struct stat *statp, const struct timespec mt[],
|
|
||||||
uid_t old_uid, uid_t new_uid,
|
|
||||||
gid_t old_gid, gid_t new_gid)
|
|
||||||
{
|
|
||||||
#if defined(WITH_SELINUX)
|
|
||||||
if (set_selinux_file_context(dst->full_path, statp->st_mode & S_IFMT) != 0)
|
|
||||||
return -1;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (mknodat(dst->dirfd, dst->name, statp->st_mode & ~07777U, statp->st_rdev) == -1)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
if (chownat_if_needed(dst, statp, old_uid, new_uid, old_gid, new_gid) == -1)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
if (fchmodat(dst->dirfd, dst->name, statp->st_mode & 07777, AT_SYMLINK_NOFOLLOW) == -1)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
#if defined(WITH_ACL)
|
|
||||||
if (perm_copy_path(src, dst, &ctx) == -1 && errno != 0)
|
|
||||||
return -1;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(WITH_ATTR)
|
|
||||||
/*
|
|
||||||
* If the third parameter is NULL, all extended attributes
|
|
||||||
* except those that define Access Control Lists are copied.
|
|
||||||
* ACLs are excluded by default because copying them between
|
|
||||||
* file systems with and without ACL support needs some
|
|
||||||
* additional logic so that no unexpected permissions result.
|
|
||||||
*/
|
|
||||||
if (!reset_selinux) {
|
|
||||||
if (attr_copy_path(src, dst, NULL, &ctx) == -1 && errno != 0)
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (utimensat(dst->dirfd, dst->name, mt, AT_SYMLINK_NOFOLLOW) == -1)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* copy_file - copy a file
|
|
||||||
*
|
|
||||||
* Copy a file from src to dst.
|
|
||||||
*
|
|
||||||
* statp, mt, old_uid, new_uid, old_gid, and new_gid are used to set
|
|
||||||
* the access and modification and the access rights.
|
|
||||||
*
|
|
||||||
* Return 0 on success, -1 on error.
|
|
||||||
*/
|
|
||||||
static int copy_file (const struct path_info *src, const struct path_info *dst,
|
|
||||||
MAYBE_UNUSED bool reset_selinux,
|
|
||||||
const struct stat *statp, const struct timespec mt[],
|
|
||||||
uid_t old_uid, uid_t new_uid,
|
|
||||||
gid_t old_gid, gid_t new_gid)
|
|
||||||
{
|
|
||||||
int err = 0;
|
|
||||||
int ifd;
|
|
||||||
int ofd;
|
|
||||||
|
|
||||||
ifd = openat (src->dirfd, src->name, O_RDONLY|O_NOFOLLOW|O_CLOEXEC);
|
|
||||||
if (ifd < 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
#ifdef WITH_SELINUX
|
|
||||||
if (set_selinux_file_context (dst->full_path, S_IFREG) != 0) {
|
|
||||||
(void) close (ifd);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
#endif /* WITH_SELINUX */
|
|
||||||
ofd = openat (dst->dirfd, dst->name, O_WRONLY | O_CREAT | O_EXCL | O_TRUNC | O_NOFOLLOW | O_CLOEXEC, 0600);
|
|
||||||
if ( (ofd < 0)
|
|
||||||
|| (fchown_if_needed (ofd, statp,
|
|
||||||
old_uid, new_uid, old_gid, new_gid) != 0)
|
|
||||||
|| (fchmod (ofd, statp->st_mode & 07777) != 0)
|
|
||||||
#ifdef WITH_ACL
|
|
||||||
|| ( (perm_copy_fd (src->full_path, ifd, dst->full_path, ofd, &ctx) != 0)
|
|
||||||
&& (errno != 0))
|
|
||||||
#endif /* WITH_ACL */
|
|
||||||
#ifdef WITH_ATTR
|
|
||||||
/*
|
|
||||||
* If the third parameter is NULL, all extended attributes
|
|
||||||
* except those that define Access Control Lists are copied.
|
|
||||||
* ACLs are excluded by default because copying them between
|
|
||||||
* file systems with and without ACL support needs some
|
|
||||||
* additional logic so that no unexpected permissions result.
|
|
||||||
*/
|
|
||||||
|| ( !reset_selinux
|
|
||||||
&& (attr_copy_fd (src->full_path, ifd, dst->full_path, ofd, NULL, &ctx) != 0)
|
|
||||||
&& (errno != 0))
|
|
||||||
#endif /* WITH_ATTR */
|
|
||||||
) {
|
|
||||||
if (ofd >= 0) {
|
|
||||||
(void) close (ofd);
|
|
||||||
}
|
|
||||||
(void) close (ifd);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (true) {
|
|
||||||
char buf[8192];
|
|
||||||
ssize_t cnt;
|
|
||||||
|
|
||||||
cnt = read(ifd, buf, sizeof(buf));
|
|
||||||
if (cnt < 0) {
|
|
||||||
if (errno == EINTR) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
(void) close (ofd);
|
|
||||||
(void) close (ifd);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (cnt == 0) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (write_full(ofd, buf, cnt) == -1) {
|
|
||||||
(void) close (ofd);
|
|
||||||
(void) close (ifd);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
(void) close (ifd);
|
|
||||||
if (close (ofd) != 0 && errno != EINTR) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (utimensat (dst->dirfd, dst->name, mt, AT_SYMLINK_NOFOLLOW) != 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define def_chown_if_needed(chown_function, type_dst) \
|
|
||||||
static int chown_function ## _if_needed (type_dst dst, \
|
|
||||||
const struct stat *statp, \
|
|
||||||
uid_t old_uid, uid_t new_uid, \
|
|
||||||
gid_t old_gid, gid_t new_gid) \
|
|
||||||
{ \
|
|
||||||
uid_t tmpuid = (uid_t) -1; \
|
|
||||||
gid_t tmpgid = (gid_t) -1; \
|
|
||||||
\
|
|
||||||
/* Use new_uid if old_uid is set to -1 or if the file was \
|
|
||||||
* owned by the user. */ \
|
|
||||||
if (((uid_t) -1 == old_uid) || (statp->st_uid == old_uid)) { \
|
|
||||||
tmpuid = new_uid; \
|
|
||||||
} \
|
|
||||||
/* Otherwise, or if new_uid was set to -1, we keep the same \
|
|
||||||
* owner. */ \
|
|
||||||
if ((uid_t) -1 == tmpuid) { \
|
|
||||||
tmpuid = statp->st_uid; \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
if (((gid_t) -1 == old_gid) || (statp->st_gid == old_gid)) { \
|
|
||||||
tmpgid = new_gid; \
|
|
||||||
} \
|
|
||||||
if ((gid_t) -1 == tmpgid) { \
|
|
||||||
tmpgid = statp->st_gid; \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
return chown_function (dst, tmpuid, tmpgid); \
|
|
||||||
}
|
|
||||||
|
|
||||||
def_chown_if_needed (fchown, int)
|
|
||||||
|
|
||||||
static int chownat_if_needed (const struct path_info *dst,
|
|
||||||
const struct stat *statp,
|
|
||||||
uid_t old_uid, uid_t new_uid,
|
|
||||||
gid_t old_gid, gid_t new_gid)
|
|
||||||
{
|
|
||||||
uid_t tmpuid = (uid_t) -1;
|
|
||||||
gid_t tmpgid = (gid_t) -1;
|
|
||||||
|
|
||||||
/* Use new_uid if old_uid is set to -1 or if the file was
|
|
||||||
* owned by the user. */
|
|
||||||
if (((uid_t) -1 == old_uid) || (statp->st_uid == old_uid)) {
|
|
||||||
tmpuid = new_uid;
|
|
||||||
}
|
|
||||||
/* Otherwise, or if new_uid was set to -1, we keep the same
|
|
||||||
* owner. */
|
|
||||||
if ((uid_t) -1 == tmpuid) {
|
|
||||||
tmpuid = statp->st_uid;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (((gid_t) -1 == old_gid) || (statp->st_gid == old_gid)) {
|
|
||||||
tmpgid = new_gid;
|
|
||||||
}
|
|
||||||
if ((gid_t) -1 == tmpgid) {
|
|
||||||
tmpgid = statp->st_gid;
|
|
||||||
}
|
|
||||||
|
|
||||||
return fchownat (dst->dirfd, dst->name, tmpuid, tmpgid, AT_SYMLINK_NOFOLLOW);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* copy_tree - copy files in a directory tree
|
|
||||||
*
|
|
||||||
* copy_tree() walks a directory tree and copies ordinary files
|
|
||||||
* as it goes.
|
|
||||||
*
|
|
||||||
* When reset_selinux is enabled, extended attributes (and thus
|
|
||||||
* SELinux attributes) are not copied.
|
|
||||||
*
|
|
||||||
* old_uid and new_uid are used to set the ownership of the copied
|
|
||||||
* files. Unless old_uid is set to -1, only the files owned by
|
|
||||||
* old_uid have their ownership changed to new_uid. In addition, if
|
|
||||||
* new_uid is set to -1, no ownership will be changed.
|
|
||||||
*
|
|
||||||
* The same logic applies for the group-ownership and
|
|
||||||
* old_gid/new_gid.
|
|
||||||
*/
|
|
||||||
int copy_tree (const char *src_root, const char *dst_root,
|
|
||||||
bool copy_root, bool reset_selinux,
|
|
||||||
uid_t old_uid, uid_t new_uid,
|
|
||||||
gid_t old_gid, gid_t new_gid)
|
|
||||||
{
|
|
||||||
const struct path_info src = {
|
|
||||||
.full_path = src_root,
|
|
||||||
.dirfd = AT_FDCWD,
|
|
||||||
.name = src_root
|
|
||||||
};
|
|
||||||
const struct path_info dst = {
|
|
||||||
.full_path = dst_root,
|
|
||||||
.dirfd = AT_FDCWD,
|
|
||||||
.name = dst_root
|
|
||||||
};
|
|
||||||
|
|
||||||
return copy_tree_impl(&src, &dst, copy_root, reset_selinux,
|
|
||||||
old_uid, new_uid, old_gid, new_gid);
|
|
||||||
}
|
|
||||||
-147
@@ -1,147 +0,0 @@
|
|||||||
// SPDX-FileCopyrightText: 2022-2024, Alejandro Colomar <alx@kernel.org>
|
|
||||||
// SPDX-License-Identifier: BSD-3-Clause
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#ident "$Id$"
|
|
||||||
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <limits.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#if __has_include(<sys/random.h>)
|
|
||||||
# include <sys/random.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "bit.h"
|
|
||||||
#include "defines.h"
|
|
||||||
#include "prototypes.h"
|
|
||||||
#include "shadowlog.h"
|
|
||||||
#include "sizeof.h"
|
|
||||||
|
|
||||||
|
|
||||||
static uint32_t csrand32(void);
|
|
||||||
static uint32_t csrand_uniform32(uint32_t n);
|
|
||||||
static unsigned long csrand_uniform_slow(unsigned long n);
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Return a uniformly-distributed CS random u_long value.
|
|
||||||
*/
|
|
||||||
unsigned long
|
|
||||||
csrand(void)
|
|
||||||
{
|
|
||||||
int fd;
|
|
||||||
unsigned long r;
|
|
||||||
|
|
||||||
#ifdef HAVE_GETENTROPY
|
|
||||||
/* getentropy may exist but lack kernel support. */
|
|
||||||
if (getentropy(&r, sizeof(r)) == 0)
|
|
||||||
return r;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_GETRANDOM
|
|
||||||
/* Likewise getrandom. */
|
|
||||||
if (getrandom(&r, sizeof(r), 0) == sizeof(r))
|
|
||||||
return r;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_ARC4RANDOM_BUF
|
|
||||||
/* arc4random_buf can never fail. */
|
|
||||||
arc4random_buf(&r, sizeof(r));
|
|
||||||
return r;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Use /dev/urandom as a last resort. */
|
|
||||||
fd = open("/dev/urandom", O_RDONLY);
|
|
||||||
if (fd == -1)
|
|
||||||
goto fail;
|
|
||||||
|
|
||||||
if (read(fd, &r, sizeof(r)) != sizeof(r)) {
|
|
||||||
close(fd);
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
close(fd);
|
|
||||||
return r;
|
|
||||||
|
|
||||||
fail:
|
|
||||||
fprintf(log_get_logfd(), _("Unable to obtain random bytes.\n"));
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Return a uniformly-distributed CS random value in the interval [0, n-1].
|
|
||||||
*/
|
|
||||||
unsigned long
|
|
||||||
csrand_uniform(unsigned long n)
|
|
||||||
{
|
|
||||||
if (n == 0 || n > UINT32_MAX)
|
|
||||||
return csrand_uniform_slow(n);
|
|
||||||
|
|
||||||
return csrand_uniform32(n);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Return a uniformly-distributed CS random value in the interval [min, max].
|
|
||||||
*/
|
|
||||||
unsigned long
|
|
||||||
csrand_interval(unsigned long min, unsigned long max)
|
|
||||||
{
|
|
||||||
return csrand_uniform(max - min + 1) + min;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static uint32_t
|
|
||||||
csrand32(void)
|
|
||||||
{
|
|
||||||
return csrand();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Fast Random Integer Generation in an Interval
|
|
||||||
* ACM Transactions on Modeling and Computer Simulation 29 (1), 2019
|
|
||||||
* <https://arxiv.org/abs/1805.10941>
|
|
||||||
*/
|
|
||||||
static uint32_t
|
|
||||||
csrand_uniform32(uint32_t n)
|
|
||||||
{
|
|
||||||
uint32_t bound, rem;
|
|
||||||
uint64_t r, mult;
|
|
||||||
|
|
||||||
if (n == 0)
|
|
||||||
return csrand32();
|
|
||||||
|
|
||||||
bound = -n % n; // analogous to `2^32 % n`, since `x % y == (x-y) % y`
|
|
||||||
|
|
||||||
do {
|
|
||||||
r = csrand32();
|
|
||||||
mult = r * n;
|
|
||||||
rem = mult; // analogous to `mult % 2^32`
|
|
||||||
} while (rem < bound); // p = (2^32 % n) / 2^32; W.C.: n=2^31+1, p=0.5
|
|
||||||
|
|
||||||
r = mult >> WIDTHOF(n); // analogous to `mult / 2^32`
|
|
||||||
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static unsigned long
|
|
||||||
csrand_uniform_slow(unsigned long n)
|
|
||||||
{
|
|
||||||
unsigned long r, max, mask;
|
|
||||||
|
|
||||||
max = n - 1;
|
|
||||||
mask = bit_ceil_wrapul(n) - 1;
|
|
||||||
|
|
||||||
do {
|
|
||||||
r = csrand();
|
|
||||||
r &= mask; // optimization
|
|
||||||
} while (r > max); // p = ((mask+1) % n) / (mask+1); W.C.: p=0.5
|
|
||||||
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user