Compare commits
43 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 1f240237fc | |||
| c5f795a54a | |||
| 428fe43d86 | |||
| 9d5ab87d61 | |||
| a9c3448878 | |||
| a475f464e0 | |||
| 65261e28f4 | |||
| bd724b34e0 | |||
| c2a3ebed18 | |||
| f78a468368 | |||
| 9f68246a01 | |||
| e8b8d7a84b | |||
| 0fda4df4f1 | |||
| f7f4fd7c05 | |||
| 3987cc7880 | |||
| 8ead740677 | |||
| 675b462b64 | |||
| 0c04b92a9a | |||
| 749c178062 | |||
| d906ecd3b6 | |||
| 69d932140c | |||
| b28d45d2bd | |||
| b0729855e8 | |||
| 589f97ade4 | |||
| 365658d0f3 | |||
| bfaa59229d | |||
| a497c3663f | |||
| 07dea48511 | |||
| 0f4406b757 | |||
| 2141c2f804 | |||
| c3503a0b5c | |||
| 63448ba21d | |||
| a933847574 | |||
| 6e19e48f9b | |||
| de99d9b9d6 | |||
| 03c52251fb | |||
| aadd2f332c | |||
| c634bfd35c | |||
| ec09609355 | |||
| ad21753e53 | |||
| 65b471a2f2 | |||
| db1dc7288b | |||
| 6d11fd0a58 |
+98
@@ -0,0 +1,98 @@
|
|||||||
|
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,118 +1,41 @@
|
|||||||
NOTE:
|
SPDX-License-Identifier: BSD-3-Clause
|
||||||
This license has been obsoleted by the change to the BSD-style copyright.
|
|
||||||
You may continue to use this license if you wish, but you are under no
|
|
||||||
obligation to do so.
|
|
||||||
|
|
||||||
(*
|
All files under this project either
|
||||||
This document is freely plagiarised from the 'Artistic Licence',
|
|
||||||
distributed as part of the Perl v4.0 kit by Larry Wall, which is
|
|
||||||
available from most major archive sites. I stole it from CrackLib.
|
|
||||||
|
|
||||||
$Id$
|
1. fall under the BSD 3 clause license (by default).
|
||||||
*)
|
|
||||||
|
|
||||||
This documents purpose is to state the conditions under which this
|
2. carry an SPDX header declaring what license applies.
|
||||||
Package (See definition below) viz: "Shadow", the Shadow Password Suite
|
|
||||||
which is held by Julianne Frances Haugh, may be copied, such that the
|
|
||||||
copyright holder maintains some semblance of artistic control over the
|
|
||||||
development of the package, while giving the users of the package the
|
|
||||||
right to use and distribute the Package in a more-or-less customary
|
|
||||||
fashion, plus the right to make reasonable modifications.
|
|
||||||
|
|
||||||
So there.
|
or
|
||||||
|
|
||||||
***************************************************************************
|
3. list a full custom license
|
||||||
|
|
||||||
Definitions:
|
This software is originally
|
||||||
|
|
||||||
|
* Copyright (c) 1989 - 1994, Julianne Frances Haugh
|
||||||
|
|
||||||
A "Package" refers to the collection of files distributed by the
|
* All rights reserved.
|
||||||
Copyright Holder, and derivatives of that collection of files created
|
*
|
||||||
through textual modification, or segments thereof.
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
"Standard Version" refers to such a Package if it has not been modified,
|
* are met:
|
||||||
or has been modified in accordance with the wishes of the Copyright
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
Holder.
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
"Copyright Holder" is whoever is named in the copyright or copyrights
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
for the package.
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* 3. The name of the copyright holders or contributors may not be used to
|
||||||
"You" is you, if you're thinking about copying or distributing this
|
* endorse or promote products derived from this software without
|
||||||
Package.
|
* specific prior written permission.
|
||||||
|
*
|
||||||
"Reasonable copying fee" is whatever you can justify on the basis of
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
media cost, duplication charges, time of people involved, and so on.
|
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
(You will not be required to justify it to the Copyright Holder, but
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||||
only to the computing community at large as a market that must bear the
|
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
fee.)
|
* HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
"Freely Available" means that no fee is charged for the item itself,
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
though there may be fees involved in handling the item. It also means
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
that recipients of the item may redistribute it under the same
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
conditions they received it.
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
1. You may make and give away verbatim copies of the source form of the
|
|
||||||
Standard Version of this Package without restriction, provided that you
|
|
||||||
duplicate all of the original copyright notices and associated
|
|
||||||
disclaimers.
|
|
||||||
|
|
||||||
2. You may apply bug fixes, portability fixes and other modifications
|
|
||||||
derived from the Public Domain or from the Copyright Holder. A Package
|
|
||||||
modified in such a way shall still be considered the Standard Version.
|
|
||||||
|
|
||||||
3. You may otherwise modify your copy of this Package in any way,
|
|
||||||
provided that you insert a prominent notice in each changed file stating
|
|
||||||
how and when AND WHY you changed that file, and provided that you do at
|
|
||||||
least ONE of the following:
|
|
||||||
|
|
||||||
a) place your modifications in the Public Domain or otherwise make them
|
|
||||||
Freely Available, such as by posting said modifications to Usenet or an
|
|
||||||
equivalent medium, or placing the modifications on a major archive site
|
|
||||||
such as uunet.uu.net, or by allowing the Copyright Holder to include
|
|
||||||
your modifications in the Standard Version of the Package.
|
|
||||||
|
|
||||||
b) use the modified Package only within your corporation or organization.
|
|
||||||
|
|
||||||
c) rename any non-standard executables so the names do not conflict with
|
|
||||||
standard executables, which must also be provided, and provide separate
|
|
||||||
documentation for each non-standard executable that clearly documents
|
|
||||||
how it differs from the Standard Version.
|
|
||||||
|
|
||||||
d) make other distribution arrangements with the Copyright Holder.
|
|
||||||
|
|
||||||
4. You may distribute the programs of this Package in object code or
|
|
||||||
executable form, provided that you do at least ONE of the following:
|
|
||||||
|
|
||||||
a) distribute a Standard Version of the executables and library files,
|
|
||||||
together with instructions (in the manual page or equivalent) on where
|
|
||||||
to get the Standard Version.
|
|
||||||
|
|
||||||
b) accompany the distribution with the machine-readable source of the
|
|
||||||
Package with your modifications.
|
|
||||||
|
|
||||||
c) accompany any non-standard executables with their corresponding
|
|
||||||
Standard Version executables, giving the non-standard executables
|
|
||||||
non-standard names, and clearly documenting the differences in manual
|
|
||||||
pages (or equivalent), together with instructions on where to get the
|
|
||||||
Standard Version.
|
|
||||||
|
|
||||||
d) make other distribution arrangements with the Copyright Holder.
|
|
||||||
|
|
||||||
5. You may charge a reasonable copying fee for any distribution of this
|
|
||||||
Package. You may charge any fee you choose for support of this Package.
|
|
||||||
YOU MAY NOT CHARGE A FEE FOR THIS PACKAGE ITSELF. However, you may
|
|
||||||
distribute this Package in aggregate with other (possibly commercial)
|
|
||||||
programs as part of a larger (possibly commercial) software distribution
|
|
||||||
provided that YOU DO NOT ADVERTISE this package as a product of your
|
|
||||||
own.
|
|
||||||
|
|
||||||
6. The name of the Copyright Holder may not be used to endorse or
|
|
||||||
promote products derived from this software without specific prior
|
|
||||||
written permission.
|
|
||||||
|
|
||||||
7. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
|
|
||||||
WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
|
|
||||||
MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
|
|
||||||
|
|
||||||
The End
|
|
||||||
|
|||||||
+24
-4
@@ -1,8 +1,28 @@
|
|||||||
## Process this file with automake to produce Makefile.in
|
## Process this file with automake to produce Makefile.in
|
||||||
|
ACLOCAL_AMFLAGS = -I m4
|
||||||
|
|
||||||
EXTRA_DIST = NEWS README TODO shadow.spec.in
|
SUBDIRS = lib
|
||||||
|
|
||||||
AUTOMAKE_OPTIONS = 1.5 dist-bzip2 foreign
|
if ENABLE_SUBIDS
|
||||||
|
SUBDIRS += libsubid
|
||||||
|
endif
|
||||||
|
|
||||||
SUBDIRS = po man libmisc lib src \
|
SUBDIRS += src po doc etc tests/unit
|
||||||
contrib doc etc
|
|
||||||
|
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
|
||||||
|
|||||||
+932
@@ -0,0 +1,932 @@
|
|||||||
|
# Makefile.in generated by automake 1.18.1 from Makefile.am.
|
||||||
|
# @configure_input@
|
||||||
|
|
||||||
|
# Copyright (C) 1994-2025 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))
|
||||||
|
am__rm_f = rm -f $(am__rm_f_notfound)
|
||||||
|
am__rm_rf = rm -rf $(am__rm_f_notfound)
|
||||||
|
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 -700 -exec chmod u+rwx {} ';' \
|
||||||
|
; 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 = -9
|
||||||
|
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 -a \! \
|
||||||
|
\( -name .nfs* -o -name .smb* -o -name .__afs* \) \) -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@
|
||||||
|
FILECMD = @FILECMD@
|
||||||
|
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__rm_f_notfound = @am__rm_f_notfound@
|
||||||
|
am__tar = @am__tar@
|
||||||
|
am__untar = @am__untar@
|
||||||
|
am__xargs_n = @am__xargs_n@
|
||||||
|
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
|
||||||
|
$(AM_V_at)rm -f stamp-h1
|
||||||
|
$(AM_V_GEN)cd $(top_builddir) && $(SHELL) ./config.status config.h
|
||||||
|
$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
|
||||||
|
$(AM_V_GEN)($(am__cd) $(top_srcdir) && $(AUTOHEADER))
|
||||||
|
$(AM_V_at)rm -f stamp-h1
|
||||||
|
$(AM_V_at)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)
|
||||||
|
$(AM_V_at)$(MKDIR_P) "$(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-bzip3: distdir
|
||||||
|
tardir=$(distdir) && $(am__tar) | bzip3 -c >$(distdir).tar.bz3
|
||||||
|
$(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 -dc $(distdir).tar.gz | $(am__untar) ;;\
|
||||||
|
*.tar.bz2*) \
|
||||||
|
bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
|
||||||
|
*.tar.bz3*) \
|
||||||
|
bzip3 -dc $(distdir).tar.bz3 | $(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 -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:
|
||||||
|
-$(am__rm_f) $(CLEANFILES)
|
||||||
|
|
||||||
|
distclean-generic:
|
||||||
|
-$(am__rm_f) $(CONFIG_CLEAN_FILES)
|
||||||
|
-test . = "$(srcdir)" || $(am__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-bzip3 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:
|
||||||
|
|
||||||
|
# Tell GNU make to disable its built-in pattern rules.
|
||||||
|
%:: %,v
|
||||||
|
%:: RCS/%,v
|
||||||
|
%:: RCS/%
|
||||||
|
%:: s.%
|
||||||
|
%:: SCCS/s.%
|
||||||
@@ -1,5 +1,442 @@
|
|||||||
$Id$
|
$Id$
|
||||||
|
|
||||||
|
shadow-4.1.5.1 -> shadow-4.2 UNRELEASED
|
||||||
|
|
||||||
|
*** general
|
||||||
|
* Handle libc whose crypt() returns NULL when passed a salt that
|
||||||
|
violates specs or system requirements (e.g. FIPS140). This is needed
|
||||||
|
with glibc/eglibc 2.17 for tools checking passwords (passwd (non PAM
|
||||||
|
enabled) or newgrp), and for tools generating encrypted passwords
|
||||||
|
(chgpasswd, chpasswd, or gpasswd when non PAM enabled or when a fixed
|
||||||
|
crypt method is requested on the command line, and newusers, or passwd
|
||||||
|
in their non PAM enabled versions)
|
||||||
|
* Fix segfault when reading groups split on multiple lines. This impacts
|
||||||
|
most user/group management tools when MAX_MEMBERS_PER_GROUP is set.
|
||||||
|
|
||||||
|
- su
|
||||||
|
* When su receives a signal (SIGTERM, or SIGINT/SIGQUIT in non
|
||||||
|
interactive mode), kill the child process group, rather than just the
|
||||||
|
immediate child.
|
||||||
|
* Fix segmentation faults for users without a proper home or shell in
|
||||||
|
their passwd entries.
|
||||||
|
|
||||||
|
- login
|
||||||
|
* Fix segmentation faults for users without a proper home or shell in
|
||||||
|
their passwd entries.
|
||||||
|
|
||||||
|
*** documentation
|
||||||
|
* Fixed useradd man page (--home-dir option, instead of --home).
|
||||||
|
|
||||||
|
*** translation
|
||||||
|
* Updated Russian translation.
|
||||||
|
* Updated German man pages translation.
|
||||||
|
* Fixed gshadow Japanese man page translation.
|
||||||
|
|
||||||
|
shadow-4.1.5 -> shadow-4.1.5.1 2012-05-25
|
||||||
|
|
||||||
|
- login
|
||||||
|
* Log into utmp(x) when PAM is enabled, but do not log into wtmp.
|
||||||
|
This complete pam_lastlog which logs into wtmp and in into utmp(x).
|
||||||
|
- su
|
||||||
|
* non PAM enabled versions: do not fail if su is called without a
|
||||||
|
controlling terminal.
|
||||||
|
- userdel
|
||||||
|
* Fix segfault when userdel removes the user's group.
|
||||||
|
|
||||||
|
*** documentation
|
||||||
|
* .so links now point to paths relative to the top-level manual hierarchy
|
||||||
|
|
||||||
|
*** translation
|
||||||
|
* Updated French man pages translation.
|
||||||
|
* Updated German man pages translation.
|
||||||
|
* Updated Polish man pages translation. (logoutd.8)
|
||||||
|
|
||||||
|
shadow-4.1.4.3 -> shadow-4.1.5 2012-02-12
|
||||||
|
|
||||||
|
*** security
|
||||||
|
* su -c could be abused by the executed command to invoke commands with
|
||||||
|
the caller privileges. See below. (CVE-2005-4890)
|
||||||
|
|
||||||
|
*** general
|
||||||
|
* report usage error to stderr, but report usage help to stdout (and return
|
||||||
|
zero) when explicitly requested (e.g. with --help).
|
||||||
|
* initial support for tcb (http://openwall.com/tcb/) for useradd,
|
||||||
|
userdel, usermod, chage, pwck, vipw.
|
||||||
|
* Added support for ACLs and Extended Attributes in useradd and usermod.
|
||||||
|
Support shall be enabled with the new --with-acl or --with-attr
|
||||||
|
configure options.
|
||||||
|
* Added diagnosis for lock failures.
|
||||||
|
* use libsemanage instead of the semanage tool.
|
||||||
|
|
||||||
|
- chage
|
||||||
|
* Add --root option.
|
||||||
|
- chfn
|
||||||
|
* Add --root option.
|
||||||
|
- chgpasswd
|
||||||
|
* When the gshadow file exists but there are no gshadow entries, an entry
|
||||||
|
is created if the password is changed and group requires a
|
||||||
|
shadow entry.
|
||||||
|
* Add --root option.
|
||||||
|
- chpasswd
|
||||||
|
* PAM enabled versions: restore the -e option to allow restoring
|
||||||
|
passwords without knowing those passwords. Restore together the -m
|
||||||
|
and -c options. (These options were removed in shadow-4.1.4 on PAM
|
||||||
|
enabled versions)
|
||||||
|
* When the shadow file exists but there are no shadow entries, an entry
|
||||||
|
is created if the password is changed and passwd requires a
|
||||||
|
shadow entry.
|
||||||
|
* Add --root option.
|
||||||
|
- chsh
|
||||||
|
* Add --root option.
|
||||||
|
- faillog
|
||||||
|
* The -l, -m, -r, -t options only act on the existing users, unless -a is
|
||||||
|
specified.
|
||||||
|
* Add --root option.
|
||||||
|
- gpasswd
|
||||||
|
* Add --root option.
|
||||||
|
- groupadd
|
||||||
|
* Add --root option.
|
||||||
|
- groupdel
|
||||||
|
* Add --root option.
|
||||||
|
- groupmems
|
||||||
|
* Fix parsing of gshadow entries.
|
||||||
|
* Add --root option.
|
||||||
|
- groupmod
|
||||||
|
* Fixed groupmod when configured with --enable-account-tools-setuid.
|
||||||
|
* When the gshadow file exists but there are no gshadow entries, an entry
|
||||||
|
is created if the password is changed and group requires a
|
||||||
|
shadow entry.
|
||||||
|
* Add --root option.
|
||||||
|
- grpck
|
||||||
|
* Add --root option.
|
||||||
|
* NIS entries were dropped by -s (sort).
|
||||||
|
- grpconv
|
||||||
|
* Add --root option.
|
||||||
|
- grpunconv
|
||||||
|
* Add --root option.
|
||||||
|
- lastlog
|
||||||
|
* Add --root option.
|
||||||
|
- login
|
||||||
|
* Fixed limits support (non PAM enabled versions only)
|
||||||
|
* Added support for infinite limits and group based limits (non PAM
|
||||||
|
enabled versions only)
|
||||||
|
* Fixed infinite loop when CONSOLE is configured with a colon-separated
|
||||||
|
list of TTYs.
|
||||||
|
* Fixed warning and support for CONSOLE_GROUPS for users member of more
|
||||||
|
than 16 groups.
|
||||||
|
* Do not log into utmp(x) or wtmp when PAM is enabled. This is done by
|
||||||
|
pam_lastlog.
|
||||||
|
- newgrp, sg
|
||||||
|
* Fix parsing of gshadow entries.
|
||||||
|
- newusers
|
||||||
|
* Add --root option.
|
||||||
|
- passwd
|
||||||
|
* Add --root option.
|
||||||
|
- pwpck
|
||||||
|
* NIS entries were dropped by -s (sort).
|
||||||
|
* Add --root option.
|
||||||
|
- pwconv
|
||||||
|
* Add --root option.
|
||||||
|
- pwunconv
|
||||||
|
* Add --root option.
|
||||||
|
- useradd
|
||||||
|
* If the skeleton directory contained hardlinked files, copies of the
|
||||||
|
hardlink were removed from the skeleton directory.
|
||||||
|
* Add --root option.
|
||||||
|
- userdel
|
||||||
|
* Check the existence of the user's mail spool before trying to remove
|
||||||
|
it. If it does not exist, a warning is issued, but no failure.
|
||||||
|
* Do not remove a group with the same name as the user (usergroup) if
|
||||||
|
this group isn't the user's primary group.
|
||||||
|
* Add --root option.
|
||||||
|
* Add --selinux-user option.
|
||||||
|
- usermod
|
||||||
|
* Accept options in any order (username not necessarily at the end)
|
||||||
|
* When the shadow file exists but there are no shadow entries, an entry
|
||||||
|
is created if the password is changed and passwd requires a
|
||||||
|
shadow entry, or if aging features are used (-e or -f).
|
||||||
|
* Add --root option.
|
||||||
|
- su
|
||||||
|
* Document the su exit values.
|
||||||
|
* When su receives a signal, wait for the child to terminate (after
|
||||||
|
sending a SIGTERM), and kill it only if it did not terminate by itself.
|
||||||
|
No delay will be enforced if the child cooperates.
|
||||||
|
* Default ENV_SUPATH is /sbin:/bin:/usr/sbin:/usr/bin
|
||||||
|
* Fixed infinite loop when CONSOLE is configured with a colon-separated
|
||||||
|
list of TTYs.
|
||||||
|
* Fixed warning and support for CONSOLE_GROUPS for users member of more
|
||||||
|
than 16 groups.
|
||||||
|
* Do not forward the controlling terminal to commands executed with -c.
|
||||||
|
This prevents tty hijacking which could lead to execution with the
|
||||||
|
caller's privileges.
|
||||||
|
* Close PAM sessions as root. This will be more friendly to PAM modules
|
||||||
|
like pam_mount or pam_systemd.
|
||||||
|
* Added support for PAM modules which change PAM_USER.
|
||||||
|
|
||||||
|
*** translation
|
||||||
|
* Updated Brazilian Portuguese translation.
|
||||||
|
* Updated Catalan translation.
|
||||||
|
* Updated Czech translation.
|
||||||
|
* Updated Danish translation.
|
||||||
|
* New Danish man pages translation.
|
||||||
|
* Updated French translation.
|
||||||
|
* Updated French man pages translation.
|
||||||
|
* Updated German translation.
|
||||||
|
* Updated German man pages translation.
|
||||||
|
* Updated Greek translation.
|
||||||
|
* Updated Italian man pages translation.
|
||||||
|
* Updated Japanese translation.
|
||||||
|
* Updated Kazakh translation.
|
||||||
|
* Updated Norwegian Bokmål translation.
|
||||||
|
* Updated Portuguese translation.
|
||||||
|
* Updated Russian translation.
|
||||||
|
* Updated Simplified Chinese translation.
|
||||||
|
* Updated Simplified Chinese man pages translation.
|
||||||
|
* Updated Swedish translation.
|
||||||
|
* Updated Vietnamese translation.
|
||||||
|
|
||||||
|
shadow-4.1.4.2 -> shadow-4.1.4.3 2011-02-15
|
||||||
|
|
||||||
|
*** security
|
||||||
|
- CVE-2011-0721: An insufficient input sanitation in chfn can be exploited
|
||||||
|
to create users or groups in a NIS environment.
|
||||||
|
|
||||||
|
shadow-4.1.4.1 -> shadow-4.1.4.2 2009-07-24
|
||||||
|
|
||||||
|
- general
|
||||||
|
* Improved support for large groups (impacts most user/group management
|
||||||
|
tools).
|
||||||
|
|
||||||
|
- addition of system users or groups
|
||||||
|
* Speed improvement. This should be noticeable in case of LDAP configured
|
||||||
|
systems. This should impact useradd, groupadd, and newusers
|
||||||
|
* Since system accounts are allocated from SYS_?ID_MIN to SYS_?ID_MAX in
|
||||||
|
reverse order, accounts are packed close to SYS_?ID_MAX if SYS_?ID_MIN
|
||||||
|
is already used but there are still dome gaps.
|
||||||
|
|
||||||
|
- login
|
||||||
|
* Add support for shells being a shell script without a shebang.
|
||||||
|
- su
|
||||||
|
* Preserve the DISPLAY and XAUTHORITY environment variables. This was
|
||||||
|
only the case in the non PAM enabled versions.
|
||||||
|
* Add support for shells being a shell script without a shebang.
|
||||||
|
|
||||||
|
*** translation
|
||||||
|
* The Finnish translation of passwd(1) was outdated and is no more
|
||||||
|
distributed.
|
||||||
|
|
||||||
|
shadow-4.1.4 -> shadow-4.1.4.1 2009-05-22
|
||||||
|
|
||||||
|
- login
|
||||||
|
* Fix failures with empty usernames on non PAM versions.
|
||||||
|
* Fix CONSOLE (securetty) support on non PAM versions.
|
||||||
|
- newgrp
|
||||||
|
* Return the exit status of the child.
|
||||||
|
- userdel
|
||||||
|
* On Linux, do not check if an user is logged in with utmp, but check if
|
||||||
|
the user is running some processes.
|
||||||
|
* If not on Linux, continue to search for an utmp record, but make sure
|
||||||
|
the process recorded in the utmp entry is still running.
|
||||||
|
* Report failures to remove the user's mailbox
|
||||||
|
* When USERGROUPS_ENAB is enabled, remove the user's group when the
|
||||||
|
user was the only member.
|
||||||
|
* Do not fail when -r is used and the home directory does not exist.
|
||||||
|
- usermod
|
||||||
|
* Check if the user is busy when the user's UID, name or home directory
|
||||||
|
is changed.
|
||||||
|
|
||||||
|
shadow-4.1.3.1 -> shadow-4.1.4 2009-05-10
|
||||||
|
|
||||||
|
- packaging
|
||||||
|
* Enable --enable-account-tools-setuid by default for PAM builds.
|
||||||
|
* Add configure option --enable-utmpx, disabled by default to mimic
|
||||||
|
the previous behavior on Linux (where utmp and utmpx are identical).
|
||||||
|
* Fix build failure on non-PAM systems when --without-pam is not
|
||||||
|
specified.
|
||||||
|
|
||||||
|
- chpasswd
|
||||||
|
* Change the passwords using PAM. This permits to define the password
|
||||||
|
policy in a central place. The -c/--crypt-method, -e/--encrypted,
|
||||||
|
-m/--md5 and -s/--sha-rounds options are no more supported on PAM
|
||||||
|
enabled systems.
|
||||||
|
- grpck
|
||||||
|
* Warn if a group has an entry in group and gshadow, and the password
|
||||||
|
field in group is not 'x'.
|
||||||
|
- login
|
||||||
|
* Do not trust the current utmp entry's ut_line to set PAM_TTY. This could
|
||||||
|
lead to DOS attacks.
|
||||||
|
* (PAM) Even if the user was already authenticated (-f flag), ask the
|
||||||
|
user to update his authentication token if needed.
|
||||||
|
- lastlog
|
||||||
|
* Fix regression causing empty reports.
|
||||||
|
- newusers
|
||||||
|
* Change the passwords using PAM. This permits to define the password
|
||||||
|
policy in a central place. The -c/--crypt-method and -s/--sha-rounds
|
||||||
|
options are no more supported on PAM enabled systems.
|
||||||
|
- pwck
|
||||||
|
* Warn if an user has an entry in passwd and shadow, and the password
|
||||||
|
field in passwd is not 'x'.
|
||||||
|
|
||||||
|
*** translation
|
||||||
|
- Updated Czech translation
|
||||||
|
- Updated French translation
|
||||||
|
- Updated German translation
|
||||||
|
- Updated Japanese translation
|
||||||
|
- Updated Korean translation
|
||||||
|
- Updated Portuguese translation
|
||||||
|
- Updated Russian translation
|
||||||
|
|
||||||
|
shadow-4.1.3 -> shadow-4.1.3.1 2009-04-15
|
||||||
|
|
||||||
|
*** security:
|
||||||
|
- Due to bad parsing of octal permissions, the permissions on tty (login)
|
||||||
|
but also UMASK were set wrongly (and weirdly). Only shadow-4.1.3 was
|
||||||
|
affected.
|
||||||
|
|
||||||
|
*** general
|
||||||
|
- login
|
||||||
|
* Fix regression when no user is specified on the command line.
|
||||||
|
- userdel
|
||||||
|
* Fixed SE Linux support
|
||||||
|
- vipw
|
||||||
|
* SE Linux: Set the default context to the context of the file being
|
||||||
|
edited. This ensures that the backup file inherit from the file's
|
||||||
|
context.
|
||||||
|
|
||||||
|
*** translation
|
||||||
|
- Updated Norwegian Bokmål translation
|
||||||
|
|
||||||
|
shadow-4.1.2.2 -> shadow-4.1.3 2009-04-12
|
||||||
|
|
||||||
|
*** general:
|
||||||
|
- packaging
|
||||||
|
* Fixed support for OpenPAM.
|
||||||
|
* Fixed support for uclibc.
|
||||||
|
* Added configure --enable-account-tools-setuid (default) /
|
||||||
|
--disable-account-tools-setuid options. This permits to disable the
|
||||||
|
PAM authentication of the caller for chage, chgpasswd, chpasswd,
|
||||||
|
groupadd, groupdel, groupmod, newusers, useradd, userdel, and usermod.
|
||||||
|
This authentication is not necessary when these tools are not
|
||||||
|
installed setuid root.
|
||||||
|
* Added configure --with-group-name-max-length (default) /
|
||||||
|
--without-group-name-max-length options. This permits to configure the maximum length allowed for group names:
|
||||||
|
<no option> -> default of 16 (like today)
|
||||||
|
--with-group-name-max-length -> default of 16
|
||||||
|
--without-group-name-max-length -> no max length
|
||||||
|
--with-group-name-max-length=n > max is set to n
|
||||||
|
No sanity checking is performed on n so people could do
|
||||||
|
something neat like --with-group-name-max-length=MAX_INT
|
||||||
|
- addition of users or groups
|
||||||
|
* Speed improvement in case UID_MAX/SYS_UID_MAX/GID_MAX/SYS_GID_MAX is
|
||||||
|
used for an user/group. This should be noticeable in case of LDAP
|
||||||
|
configured systems. This should impact useradd, groupadd, and newusers
|
||||||
|
- error handling improvement
|
||||||
|
* Make sure errors and incomplete changes are reported to syslog and
|
||||||
|
audit in case of unexpected failures.
|
||||||
|
* Report system inconsistencies to syslog and audit.
|
||||||
|
* Only report success to syslog and audit if the changes are really
|
||||||
|
performed in the system databases.
|
||||||
|
This is still not complete.
|
||||||
|
- /etc/login.defs
|
||||||
|
* New CREATE_HOME variable to tell useradd to create a home directory by
|
||||||
|
default.
|
||||||
|
- Translations
|
||||||
|
* New Kazakh translation.
|
||||||
|
* Spanish manpages are no more distributed. They are outdated. Please
|
||||||
|
contact pkg-shadow-devel@lists.alioth.debian.org if you wish to
|
||||||
|
provide updates.
|
||||||
|
|
||||||
|
- faillog
|
||||||
|
* Accept users specified as a numerical UID, or ranges of users (-user,
|
||||||
|
user-, user1-user2).
|
||||||
|
* -l, -m, and -r now apply not only to existing users, but to all the
|
||||||
|
specified UIDs.
|
||||||
|
* Options can be specified in any order.
|
||||||
|
- gpasswd
|
||||||
|
* Added support for long options --add (-a), --delete (-d),
|
||||||
|
--remove-password (-r), --restrict (-R), --administrators (-A), and
|
||||||
|
--members (-M).
|
||||||
|
* Added support for usernames with arbitrary length.
|
||||||
|
* audit logging improvements.
|
||||||
|
* error handling improvement (see above).
|
||||||
|
* Log permission denied to syslog and audit.
|
||||||
|
- groupadd
|
||||||
|
* audit logging improvements.
|
||||||
|
* error handling improvement (see above).
|
||||||
|
* Speedup (see "addition of users or groups" above).
|
||||||
|
* do not create groups with GID set to (gid_t)-1.
|
||||||
|
* Allocate system group GIDs in reverse order. This could be useful
|
||||||
|
later to increase the static IDs range.
|
||||||
|
- groupdel
|
||||||
|
* audit logging improvements.
|
||||||
|
* error handling improvement (see above).
|
||||||
|
- groupmems
|
||||||
|
* Check if user exist before they are added to groups.
|
||||||
|
* Avoid segfault in case the specified group does not exist in /etc/group.
|
||||||
|
* Everybody is allowed to list the users of a group.
|
||||||
|
* /etc/group is open readonly when one just wants to list the users of a
|
||||||
|
group.
|
||||||
|
* Added syslog support.
|
||||||
|
* Use the groupmems PAM service name instead of groupmod.
|
||||||
|
* Fix segmentation faults when adding or removing users from a group.
|
||||||
|
* Added support for shadow groups.
|
||||||
|
* Added support long options --add (-a), --delete (-d), --purge (-p),
|
||||||
|
--list (-l), --group (-g).
|
||||||
|
- groupmod
|
||||||
|
* audit logging improvements.
|
||||||
|
* error handling improvement (see above).
|
||||||
|
* do not create groups with GID set to (gid_t)-1.
|
||||||
|
- grpck
|
||||||
|
* warn for groups with GID set to (gid_t)-1.
|
||||||
|
- login
|
||||||
|
* Restore the echoctl, echoke, onclr flags to the terminal termio flags.
|
||||||
|
Reset echoprt, noflsh, tostop. This behavior seems to have change by
|
||||||
|
mistake in earlier releases (4.0.8, for no obvious reason).
|
||||||
|
- newusers
|
||||||
|
* Implement the -r, --system option.
|
||||||
|
* Speedup (see "addition of users or groups" above).
|
||||||
|
* do not create users with UID set to (gid_t)-1.
|
||||||
|
* do not create groups with GID set to (gid_t)-1.
|
||||||
|
* Allocate system account UIDs/GIDs in reverse order. This could be useful
|
||||||
|
later to increase the static IDs range.
|
||||||
|
- passwd
|
||||||
|
* For compatibility with other passwd version, the --lock an --unlock
|
||||||
|
options do not lock or unlock the user account anymore. They only
|
||||||
|
lock or unlock the user's password.
|
||||||
|
- pwck
|
||||||
|
* warn for users with UID set to (uid_t)-1.
|
||||||
|
- su
|
||||||
|
* Preserve COLORTERM in addition to TERM when su is called with the -l
|
||||||
|
option.
|
||||||
|
- useradd
|
||||||
|
* audit logging improvements.
|
||||||
|
* Speedup (see "addition of users or groups" above).
|
||||||
|
* See CREATE_HOME above.
|
||||||
|
* New -M/--no-create-home option to disable CREATE_HOME.
|
||||||
|
* do not create users with UID set to (gid_t)-1.
|
||||||
|
* Added -Z option to map SELinux user for user's login.
|
||||||
|
* Allocate system user UIDs in reverse order. This could be useful
|
||||||
|
later to increase the static IDs range.
|
||||||
|
- userdel
|
||||||
|
* audit logging improvements.
|
||||||
|
* Do not fail if the removed user is not in the shadow database.
|
||||||
|
* When the user's group shall be removed, do not fail if this group is
|
||||||
|
not in the gshadow file.
|
||||||
|
* Delete the SELinux user mapping for user's login.
|
||||||
|
- usermod
|
||||||
|
* Allow adding LDAP users (or any user not present in the local passwd
|
||||||
|
file) to local groups
|
||||||
|
* do not create users with UID set to (gid_t)-1.
|
||||||
|
* Added -Z option to map SELinux user for user's login.
|
||||||
|
|
||||||
|
shadow-4.1.2.1 -> shadow-4.1.2.2 23-11-2008
|
||||||
|
|
||||||
|
*** security
|
||||||
|
- Fix a race condition in login that could lead to gaining ownership or
|
||||||
|
changing mode of arbitrary files.
|
||||||
|
- Fix a possible login DOS, which could be caused by injecting forged
|
||||||
|
entries in utmp.
|
||||||
|
|
||||||
shadow-4.1.2 -> shadow-4.1.2.1 26-06-2008
|
shadow-4.1.2 -> shadow-4.1.2.1 26-06-2008
|
||||||
|
|
||||||
*** security
|
*** security
|
||||||
@@ -74,7 +511,7 @@ shadow-4.1.0 -> shadow-4.1.1 02-04-2008
|
|||||||
faillog faster.
|
faillog faster.
|
||||||
- gpasswd
|
- gpasswd
|
||||||
* Fix failures when the gshadow file is not present.
|
* Fix failures when the gshadow file is not present.
|
||||||
* When a password is moved to the gshadow file, use "x" instead of "x"
|
* When a password is moved to the gshadow file, use "x" instead of "!"
|
||||||
to indicate that the password is shadowed (consistency with grpconv).
|
to indicate that the password is shadowed (consistency with grpconv).
|
||||||
* Make sure the group and gshadow files are unlocked on exit.
|
* Make sure the group and gshadow files are unlocked on exit.
|
||||||
- groupadd
|
- groupadd
|
||||||
@@ -217,9 +654,9 @@ shadow-4.0.18.2 -> shadow-4.1.0 09-12-2007
|
|||||||
- Use MD5_CRYPT_ENAB, ENCRYPT_METHOD, SHA_CRYPT_MIN_ROUNDS, and
|
- Use MD5_CRYPT_ENAB, ENCRYPT_METHOD, SHA_CRYPT_MIN_ROUNDS, and
|
||||||
SHA_CRYPT_MAX_ROUNDS to define the default encryption algorithm for the
|
SHA_CRYPT_MAX_ROUNDS to define the default encryption algorithm for the
|
||||||
passwords.
|
passwords.
|
||||||
- chpaswd, chgpasswd, newusers: New options -c/--crypt-method and
|
- chpasswd, chgpasswd, newusers: New options -c/--crypt-method and
|
||||||
-s/--sha-rounds to supersede the system default encryption algorithm.
|
-s/--sha-rounds to supersede the system default encryption algorithm.
|
||||||
- chpaswd, chgpasswd, newusers: DES is no more the default algorithm. They
|
- chpasswd, chgpasswd, newusers: DES is no more the default algorithm. They
|
||||||
will respect the system default configured in /etc/login.defs
|
will respect the system default configured in /etc/login.defs
|
||||||
|
|
||||||
*** documentation:
|
*** documentation:
|
||||||
@@ -259,19 +696,19 @@ shadow-4.0.18 -> shadow-4.0.18.1 03-08-2006
|
|||||||
shadow-4.0.17 -> shadow-4.0.18 01-08-2006
|
shadow-4.0.17 -> shadow-4.0.18 01-08-2006
|
||||||
|
|
||||||
*** general:
|
*** general:
|
||||||
- su: fixed set enviroment too early when using PAM, so move it to !USE_PAM
|
- su: fixed set environment too early when using PAM, so move it to !USE_PAM
|
||||||
(patch submitted by Mike Frysinger <vapier@gentoo.org>),
|
(patch submitted by Mike Frysinger <vapier@gentoo.org>),
|
||||||
- groupadd, groupmod, useradd, usermod: fixed UID/GID overflow (fixed
|
- groupadd, groupmod, useradd, usermod: fixed UID/GID overflow (fixed
|
||||||
http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=198920)
|
http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=198920)
|
||||||
- passwd, useradd, usermod: fixed inactive/mindays/warndays/maxdays overflow
|
- passwd, useradd, usermod: fixed inactive/mindays/warndays/maxdays overflow
|
||||||
(simillar to RH#198920),
|
(similar to RH#198920),
|
||||||
- groupmems: rewrited for use PAM and getopt_long() and now it is enabled
|
- groupmems: rewritten for use PAM and getopt_long() and now it is enabled
|
||||||
for build and install (patch by George Kraft <gk4@swbell.net>),
|
for build and install (patch by George Kraft <gk4@swbell.net>),
|
||||||
- S/Key: removed assign getpass() to libshadow_getpass() on autoconf level
|
- S/Key: removed assign getpass() to libshadow_getpass() on autoconf level
|
||||||
(patch by Ulrich Mueller <ulm@kph.uni-mainz.de>; http://bugs.gentoo.org/139966),
|
(patch by Ulrich Mueller <ulm@kph.uni-mainz.de>; http://bugs.gentoo.org/139966),
|
||||||
- usermod: back to previous -a option semantics and clarify -a behavior
|
- usermod: back to previous -a option semantics and clarify -a behavior
|
||||||
on documentation level (by Greg Schafer <gschafer@zip.com.au>),
|
on documentation level (by Greg Schafer <gschafer@zip.com.au>),
|
||||||
- chsh, groupmod: rewrited for use getopt_long().
|
- chsh, groupmod: rewritten for use getopt_long().
|
||||||
- updated translations: ca, cs, da, eu, fr, gl, hu, ko, pl, pt, ru, sv, tr, uk, vi.
|
- updated translations: ca, cs, da, eu, fr, gl, hu, ko, pl, pt, ru, sv, tr, uk, vi.
|
||||||
*** documentation:
|
*** documentation:
|
||||||
- fr and ru man pages are up to date,
|
- fr and ru man pages are up to date,
|
||||||
@@ -306,7 +743,7 @@ shadow-4.0.15 -> shadow-4.0.16 05-06-2006
|
|||||||
|
|
||||||
*** general:
|
*** general:
|
||||||
- userdel: better fix for old CERT VU#312962 (which was fixed in shadow 4.0.8):
|
- userdel: better fix for old CERT VU#312962 (which was fixed in shadow 4.0.8):
|
||||||
fixed forgoten checking of the return value from fchown() before
|
fixed forgotten checking of the return value from fchown() before
|
||||||
proceeding with the fchmod() (based on Owl patch prepared by
|
proceeding with the fchmod() (based on Owl patch prepared by
|
||||||
Rafal Wojtczuk <nergal@owl.openwall.com>),
|
Rafal Wojtczuk <nergal@owl.openwall.com>),
|
||||||
- userdel: use login.defs::MAIL_DIR instead hardcoded /var/mail in created
|
- userdel: use login.defs::MAIL_DIR instead hardcoded /var/mail in created
|
||||||
@@ -318,7 +755,7 @@ shadow-4.0.15 -> shadow-4.0.16 05-06-2006
|
|||||||
passwords and libshadow_getpass() is used only because libc getpass()
|
passwords and libshadow_getpass() is used only because libc getpass()
|
||||||
do not handles password prompting with echo enabled,
|
do not handles password prompting with echo enabled,
|
||||||
- move login.defs::MD5_CRYPT_ENAB to non-PAM part,
|
- move login.defs::MD5_CRYPT_ENAB to non-PAM part,
|
||||||
- userdel: rewrited for use getopt_log(),
|
- userdel: rewritten for use getopt_log(),
|
||||||
- install default/template configuration files:
|
- install default/template configuration files:
|
||||||
-- if shadow is configured with use PAM install /etc/pam.d/* files,
|
-- if shadow is configured with use PAM install /etc/pam.d/* files,
|
||||||
-- if shadow do not uses PAM install /etc/{limits,login.acces} files,
|
-- if shadow do not uses PAM install /etc/{limits,login.acces} files,
|
||||||
@@ -356,7 +793,7 @@ shadow-4.0.15 -> shadow-4.0.16 05-06-2006
|
|||||||
- updated ru login.defs(5), passwd(1), userdel(8), usermod(8) man pages,
|
- updated ru login.defs(5), passwd(1), userdel(8), usermod(8) man pages,
|
||||||
- pw_auth(3) man page removed (outdated),
|
- pw_auth(3) man page removed (outdated),
|
||||||
- install limits(5), login.access(5) and porttime(5) man pages only when
|
- install limits(5), login.access(5) and porttime(5) man pages only when
|
||||||
shadow is builded with PAM support disabled,
|
shadow is built with PAM support disabled,
|
||||||
- passwd(1): better document how password strength is checked
|
- passwd(1): better document how password strength is checked
|
||||||
(fixed http://bugs.debian.org/115380),
|
(fixed http://bugs.debian.org/115380),
|
||||||
- usermod(8): added missing -a option description
|
- usermod(8): added missing -a option description
|
||||||
@@ -379,7 +816,7 @@ shadow-4.0.14 -> shadow-4.0.15 13-03-2006
|
|||||||
- login: default UMASK if not specified in login.defs is 022 (pointed by
|
- login: default UMASK if not specified in login.defs is 022 (pointed by
|
||||||
Peter Vrabec <pvrabec@redhat.com>),
|
Peter Vrabec <pvrabec@redhat.com>),
|
||||||
- chgpasswd: new tool (by Jonas Meurer <mejo@debian.org>),
|
- chgpasswd: new tool (by Jonas Meurer <mejo@debian.org>),
|
||||||
- lastlog: print the usage and exit if an additional argument is profided to
|
- lastlog: print the usage and exit if an additional argument is provided to
|
||||||
lastlog (merge 488_laslog_verify_arguments Debian patch),
|
lastlog (merge 488_laslog_verify_arguments Debian patch),
|
||||||
- login, newgrp, nologin, su: do not link with libselinux (merge
|
- login, newgrp, nologin, su: do not link with libselinux (merge
|
||||||
490_link_selinux_only_when_needed Debian patch),
|
490_link_selinux_only_when_needed Debian patch),
|
||||||
@@ -393,9 +830,9 @@ shadow-4.0.14 -> shadow-4.0.15 13-03-2006
|
|||||||
tries exceeded,
|
tries exceeded,
|
||||||
- always prints the number of tries in the syslog entry.
|
- always prints the number of tries in the syslog entry.
|
||||||
- add special handling for PAM_ABORT
|
- add special handling for PAM_ABORT
|
||||||
- add an entry to failog, as when USE_PAM is not defined. (#53164)
|
- add an entry to faillog, as when USE_PAM is not defined. (#53164)
|
||||||
- changed pam_end to PAM_END. This is certainly was a mistake. PAM_END is
|
- changed pam_end to PAM_END. This is certainly was a mistake. PAM_END is
|
||||||
pam_close_seesion + pam_end. Here, the session is still not open, we
|
pam_close_session + pam_end. Here, the session is still not open, we
|
||||||
don't have to close it.
|
don't have to close it.
|
||||||
- a HAVE_PAM_FAIL_DELAY is missing,
|
- a HAVE_PAM_FAIL_DELAY is missing,
|
||||||
- su: fixed pam session support (patch from Topi Miettinen; fixed #57526,
|
- su: fixed pam session support (patch from Topi Miettinen; fixed #57526,
|
||||||
@@ -403,7 +840,7 @@ shadow-4.0.14 -> shadow-4.0.15 13-03-2006
|
|||||||
- userdel: user's group is already removed by update_groups().
|
- userdel: user's group is already removed by update_groups().
|
||||||
remove_group() is not needed (bug introduced in 4.0.14 on merge FC fixes).
|
remove_group() is not needed (bug introduced in 4.0.14 on merge FC fixes).
|
||||||
Fixed by Nicolas François <nicolas.francois@centraliens.net>,
|
Fixed by Nicolas François <nicolas.francois@centraliens.net>,
|
||||||
- useradd: allways remove group and gshadow databases lock, Fixed by Nicolas
|
- useradd: always remove group and gshadow databases lock, Fixed by Nicolas
|
||||||
François <nicolas.francois@centraliens.net>
|
François <nicolas.francois@centraliens.net>
|
||||||
(http://bugs.debian.org/348250)
|
(http://bugs.debian.org/348250)
|
||||||
- auditing fixes:
|
- auditing fixes:
|
||||||
@@ -411,14 +848,14 @@ shadow-4.0.14 -> shadow-4.0.15 13-03-2006
|
|||||||
added audit_logger() prototype),
|
added audit_logger() prototype),
|
||||||
- useradd: fixed excess audit_logger() argument,
|
- useradd: fixed excess audit_logger() argument,
|
||||||
- chage: added missing \n on display password status if password must be
|
- chage: added missing \n on display password status if password must be
|
||||||
chaged,
|
changed,
|
||||||
- useradd: fixed allow non-unique UID (http://bugs.debian.org/351281),
|
- useradd: fixed allow non-unique UID (http://bugs.debian.org/351281),
|
||||||
- variouse code cleanups for make possible compilation of shadow with -Wall
|
- various code cleanups for make possible compilation of shadow with -Wall
|
||||||
-Werror (by Alexander Gattin <xrgtn@yandex.ru>),
|
-Werror (by Alexander Gattin <xrgtn@yandex.ru>),
|
||||||
- su: move exit() outside libmisc/shell.c::shell() for handle shell() errors
|
- su: move exit() outside libmisc/shell.c::shell() for handle shell() errors
|
||||||
on higher level (now is better visable where some programs exit with 126
|
on higher level (now is better visable where some programs exit with 126
|
||||||
and 127 exit codes); added new shell() parameter (char *const envp[])
|
and 127 exit codes); added new shell() parameter (char *const envp[])
|
||||||
which allow fix preserving enviloment in su on using -p, (patch by
|
which allow fix preserving environment in su on using -p, (patch by
|
||||||
Alexander Gattin <xrgtn@yandex.ru>),
|
Alexander Gattin <xrgtn@yandex.ru>),
|
||||||
- su: added handle -c,--command option for GNU su compliance (merge
|
- su: added handle -c,--command option for GNU su compliance (merge
|
||||||
437_su_-c_option Debian patch),
|
437_su_-c_option Debian patch),
|
||||||
@@ -466,7 +903,7 @@ shadow-4.0.13 -> shadow-4.0.14 03-01-2006
|
|||||||
- userdel: make the -f option force the removal of the user's group (even if it
|
- userdel: make the -f option force the removal of the user's group (even if it
|
||||||
is the primary group of another user)
|
is the primary group of another user)
|
||||||
(merge 453_userdel_-f_removes_group Debian patch),
|
(merge 453_userdel_-f_removes_group Debian patch),
|
||||||
- usermod: rewrited for use getopt_long() (Christian Perrier <bubulle@kheops.frmug.org>),
|
- usermod: rewritten for use getopt_long() (Christian Perrier <bubulle@kheops.frmug.org>),
|
||||||
- grpck: fixed segmentation fault on using -s when /etc/gshadow is empty (fix by
|
- grpck: fixed segmentation fault on using -s when /etc/gshadow is empty (fix by
|
||||||
Tomasz Lemiech <szpajder@staszic.waw.pl>),
|
Tomasz Lemiech <szpajder@staszic.waw.pl>),
|
||||||
- passwd: remove handle -f, -g and -s options.
|
- passwd: remove handle -f, -g and -s options.
|
||||||
@@ -475,7 +912,7 @@ shadow-4.0.13 -> shadow-4.0.14 03-01-2006
|
|||||||
Nicolas François <nicolas.francois@centraliens.net>)
|
Nicolas François <nicolas.francois@centraliens.net>)
|
||||||
- su: export $USER and $SHELL as well as $HOME (http://bugs.debian.org/11003 and
|
- su: export $USER and $SHELL as well as $HOME (http://bugs.debian.org/11003 and
|
||||||
http://bugs.debian.org/11189),
|
http://bugs.debian.org/11189),
|
||||||
- su, vipw: rewrited for use getopt_long(),
|
- su, vipw: rewritten for use getopt_long(),
|
||||||
- su: log successful/failed through syslog (http://bugs.debian.org/190215),
|
- su: log successful/failed through syslog (http://bugs.debian.org/190215),
|
||||||
- updated translations: ca, cs, da, eu, fi, fr, it, pl, pt, ru, sv, tl, vi,
|
- updated translations: ca, cs, da, eu, fi, fr, it, pl, pt, ru, sv, tl, vi,
|
||||||
- new translations: gl.
|
- new translations: gl.
|
||||||
@@ -509,7 +946,7 @@ shadow-4.0.12 -> shadow-4.0.13 10-10-2005
|
|||||||
|
|
||||||
*** general:
|
*** general:
|
||||||
- chage: removed duplicated pam_start(),
|
- chage: removed duplicated pam_start(),
|
||||||
- chfn, chsh: finished PAM support usin pam_start() and co.,
|
- chfn, chsh: finished PAM support using pam_start() and co.,
|
||||||
- userdel: userdel should not remove the group which is primary for someone else
|
- userdel: userdel should not remove the group which is primary for someone else
|
||||||
(fix by Nicolas François <nicolas.francois@centraliens.net>
|
(fix by Nicolas François <nicolas.francois@centraliens.net>
|
||||||
http://bugs.debian.org/295416),
|
http://bugs.debian.org/295416),
|
||||||
@@ -518,7 +955,7 @@ shadow-4.0.12 -> shadow-4.0.13 10-10-2005
|
|||||||
- fixedlib/commonio.c: don't assume selinux is enabled if is_selinux_enabled()
|
- fixedlib/commonio.c: don't assume selinux is enabled if is_selinux_enabled()
|
||||||
returns -1 (merge isSelinuxEnabled FC patch by Jeremy Katz <katzj@redhat.com>),
|
returns -1 (merge isSelinuxEnabled FC patch by Jeremy Katz <katzj@redhat.com>),
|
||||||
- login, su (non-PAM case): fixed setup max address space limits (added missing break
|
- login, su (non-PAM case): fixed setup max address space limits (added missing break
|
||||||
statement in case) spoted by Lasse Collin <lasse.collin@tukaani.org>,
|
statement in case) spotted by Lasse Collin <lasse.collin@tukaani.org>,
|
||||||
- auditing support added. Patch prepared by Peter Vrabec <pvrabec@redhat.com> basing
|
- auditing support added. Patch prepared by Peter Vrabec <pvrabec@redhat.com> basing
|
||||||
on work by Steve Grubb from http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=159215
|
on work by Steve Grubb from http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=159215
|
||||||
Now auditing support have commands: chage, gpasswd, groupadd, groupdel, groupmod,
|
Now auditing support have commands: chage, gpasswd, groupadd, groupdel, groupmod,
|
||||||
@@ -529,18 +966,18 @@ shadow-4.0.12 -> shadow-4.0.13 10-10-2005
|
|||||||
to example described in ident(1) man page (modern compilers like latest GCC
|
to example described in ident(1) man page (modern compilers like latest GCC
|
||||||
removes not used functions by global optimization).
|
removes not used functions by global optimization).
|
||||||
So "ident /usr/bin/passwd" will show again some useable informations
|
So "ident /usr/bin/passwd" will show again some useable informations
|
||||||
- su: fixed twice copy enviroment which causes auth problems
|
- su: fixed twice copy environment which causes auth problems
|
||||||
(bug was introduced in 4.0.12; fix by Nicolas François <nicolas.francois@centraliens.net>),
|
(bug was introduced in 4.0.12; fix by Nicolas François <nicolas.francois@centraliens.net>),
|
||||||
- chage: differentiate the different failure causes by the exit value
|
- chage: differentiate the different failure causes by the exit value
|
||||||
This will permit to adduser Debian script to detect if chage failed because the
|
This will permit to adduser Debian script to detect if chage failed because the
|
||||||
system doesn't have shadowed passwords (fix for http://bugs.debian.org/317012),
|
system doesn't have shadowed passwords (fix for http://bugs.debian.org/317012),
|
||||||
- merge 010_more-i18ned-messages Debian patch which adds i18n support for few
|
- merge 010_more-i18ned-messages Debian patch which adds i18n support for few
|
||||||
more messages (orginaly patch was prepared by Guillem Jover <guillem@debian.org>),
|
more messages (originally patch was prepared by Guillem Jover <guillem@debian.org>),
|
||||||
- lastlog: added handle -b option which allow print only lastlog records older than
|
- lastlog: added handle -b option which allow print only lastlog records older than
|
||||||
specified DAYS (fix by <miles@lubin.us>),
|
specified DAYS (fix by <miles@lubin.us>),
|
||||||
- chpasswd, gpasswd, newusers: fixed libmisc/salt.c for use login.defs::MD5_CRYPT_ENAB
|
- chpasswd, gpasswd, newusers: fixed libmisc/salt.c for use login.defs::MD5_CRYPT_ENAB
|
||||||
only if PAM support is disabled (fix by John Gatewood Ham <zappaman@buraphalinux.org>),
|
only if PAM support is disabled (fix by John Gatewood Ham <zappaman@buraphalinux.org>),
|
||||||
- passwd: rewrited for use getopt_long(),
|
- passwd: rewritten for use getopt_long(),
|
||||||
- newgrp: when newgrp process sits between parent and child shells, it should
|
- newgrp: when newgrp process sits between parent and child shells, it should
|
||||||
propagate STOPs from child to parent and CONTs from parent to child,
|
propagate STOPs from child to parent and CONTs from parent to child,
|
||||||
otherwise e.g. bash's "suspend" command won't work
|
otherwise e.g. bash's "suspend" command won't work
|
||||||
@@ -550,11 +987,11 @@ shadow-4.0.12 -> shadow-4.0.13 10-10-2005
|
|||||||
- chsh(1), groupadd(8), newusers(8), pwconv(8), useradd(8), userdel(8), usermod(8):
|
- chsh(1), groupadd(8), newusers(8), pwconv(8), useradd(8), userdel(8), usermod(8):
|
||||||
added missing references to /etc/login.defs and login.defs(5)
|
added missing references to /etc/login.defs and login.defs(5)
|
||||||
(Christian Perrier <bubulle@kheops.frmug.org>),
|
(Christian Perrier <bubulle@kheops.frmug.org>),
|
||||||
- passwd(5): rewrited based on work by Greg Wooledge <greg@wooledge.org>
|
- passwd(5): rewritten based on work by Greg Wooledge <greg@wooledge.org>
|
||||||
http://bugs.debian.org/328113
|
http://bugs.debian.org/328113
|
||||||
- login(1): added securetty(5) to SEE ALSO section
|
- login(1): added securetty(5) to SEE ALSO section
|
||||||
(fixed Debian bug http://bugs.debian.org/325773),
|
(fixed Debian bug http://bugs.debian.org/325773),
|
||||||
- groupadd(8), useradd(8): fix regular expression describing alloved login/group
|
- groupadd(8), useradd(8): fix regular expression describing allowed login/group
|
||||||
names (pointed by Nicolas François <nicolas.francois@centraliens.net>)
|
names (pointed by Nicolas François <nicolas.francois@centraliens.net>)
|
||||||
(correct is [a-z_][a-z0-9_-]*[$]),
|
(correct is [a-z_][a-z0-9_-]*[$]),
|
||||||
- groupadd(8), useradd(8): documents in CAVEATS section the limitations shadow
|
- groupadd(8), useradd(8): documents in CAVEATS section the limitations shadow
|
||||||
@@ -564,9 +1001,9 @@ shadow-4.0.12 -> shadow-4.0.13 10-10-2005
|
|||||||
shadow-4.0.11.1 -> shadow-4.0.12 22-08-2005
|
shadow-4.0.11.1 -> shadow-4.0.12 22-08-2005
|
||||||
|
|
||||||
*** general:
|
*** general:
|
||||||
- newgrp, login: remove using login.defs::CLOSE_SESSIONS variable and allways
|
- newgrp, login: remove using login.defs::CLOSE_SESSIONS variable and always
|
||||||
close PAM session,
|
close PAM session,
|
||||||
- fixed configure.in: realy enable shadow group support by default (pointed by
|
- fixed configure.in: really enable shadow group support by default (pointed by
|
||||||
Greg Schafer <gschafer@zip.com.au> and Peter Vrabec <pvrabec@redhat.com>),
|
Greg Schafer <gschafer@zip.com.au> and Peter Vrabec <pvrabec@redhat.com>),
|
||||||
- login.defs: removed handle QMAIL_DIR variable,
|
- login.defs: removed handle QMAIL_DIR variable,
|
||||||
- login: allow regular user to login on read-only root file system (not only for root)
|
- login: allow regular user to login on read-only root file system (not only for root)
|
||||||
@@ -591,9 +1028,9 @@ shadow-4.0.11.1 -> shadow-4.0.12 22-08-2005
|
|||||||
period and permit brute-force attacks (fixed http://bugs.debian.org/288827),
|
period and permit brute-force attacks (fixed http://bugs.debian.org/288827),
|
||||||
- uClibc fixes (by Martin Schlemmer <azarah@nosferatu.za.org>):
|
- uClibc fixes (by Martin Schlemmer <azarah@nosferatu.za.org>):
|
||||||
added require ngettext (added [need-ngettext] to AM_GNU_GETTEXT() parameters)
|
added require ngettext (added [need-ngettext] to AM_GNU_GETTEXT() parameters)
|
||||||
and stub prototype for ngettext() in lib/prototypes.h (neccessary if shadow
|
and stub prototype for ngettext() in lib/prototypes.h (necessary if shadow
|
||||||
compiled with disabled NLS support)
|
compiled with disabled NLS support)
|
||||||
- groupadd: rewrited for use getopt_long(),
|
- groupadd: rewritten for use getopt_long(),
|
||||||
- groupadd, groupdel, groupmod, userdel: do OPENLOG() before pam_start(),
|
- groupadd, groupdel, groupmod, userdel: do OPENLOG() before pam_start(),
|
||||||
- groupadd: fixed double OPENLOG(),
|
- groupadd: fixed double OPENLOG(),
|
||||||
- removed lib/{grpack,gspack,pwpack,sppack}.c and prototypes from lib/prototypes.h
|
- removed lib/{grpack,gspack,pwpack,sppack}.c and prototypes from lib/prototypes.h
|
||||||
@@ -629,7 +1066,7 @@ shadow-4.0.10 -> shadow-4.0.11 18-07-2005
|
|||||||
- su: ignore SIGINT while authenticating. A ^C could defeat the waiting period and
|
- su: ignore SIGINT while authenticating. A ^C could defeat the waiting period and
|
||||||
permit brute-force attacks. Also ignore SIGQUIT.
|
permit brute-force attacks. Also ignore SIGQUIT.
|
||||||
Fixed: http://bugs.debian.org/52372 and http://bugs.debian.org/288827
|
Fixed: http://bugs.debian.org/52372 and http://bugs.debian.org/288827
|
||||||
- useradd: rewrited for use getopt_long(),
|
- useradd: rewritten for use getopt_long(),
|
||||||
- newgrp: add fix for handle splitted NIS groups: extends the functionality that,
|
- newgrp: add fix for handle splitted NIS groups: extends the functionality that,
|
||||||
if the requested group is given, all groups of the same GID are tested for
|
if the requested group is given, all groups of the same GID are tested for
|
||||||
membership of the requesting user.
|
membership of the requesting user.
|
||||||
@@ -660,7 +1097,7 @@ shadow-4.0.10 -> shadow-4.0.11 18-07-2005
|
|||||||
- updated translations: cs, da, de, es, fi, pl, pt, ro, ru, sk.
|
- updated translations: cs, da, de, es, fi, pl, pt, ro, ru, sk.
|
||||||
*** documentation:
|
*** documentation:
|
||||||
- pwck(8): document -q option (based on Debian patch for fix http://bugs.debian.org/309408)
|
- pwck(8): document -q option (based on Debian patch for fix http://bugs.debian.org/309408)
|
||||||
- pwck(8): rewrited OPTIONS section and better SYNOPSIS,
|
- pwck(8): rewritten OPTIONS section and better SYNOPSIS,
|
||||||
- lastlog(8): document that lastlog is a sparse file, and don't need to be rotated
|
- lastlog(8): document that lastlog is a sparse file, and don't need to be rotated
|
||||||
http://bugs.debian.org/219321
|
http://bugs.debian.org/219321
|
||||||
- login(8): better explain the respective roles of login, init and getty with regards
|
- login(8): better explain the respective roles of login, init and getty with regards
|
||||||
@@ -674,12 +1111,12 @@ shadow-4.0.9 -> shadow-4.0.10 28-06-2005
|
|||||||
|
|
||||||
*** general:
|
*** general:
|
||||||
- mkpasswd: removed,
|
- mkpasswd: removed,
|
||||||
- userdel: now deletes user groups from /etc/gshdow as well as /etc/group.
|
- userdel: now deletes user groups from /etc/gshadow as well as /etc/group.
|
||||||
Fix by Nicolas François <nicolas.francois@centraliens.net>.
|
Fix by Nicolas François <nicolas.francois@centraliens.net>.
|
||||||
http://bugs.debian.org/99442
|
http://bugs.debian.org/99442
|
||||||
- usermod: when relocating a user's home directory, don't fail and remove the new
|
- usermod: when relocating a user's home directory, don't fail and remove the new
|
||||||
home directory if we can't remove the old home directory for some
|
home directory if we can't remove the old home directory for some
|
||||||
reason; the results can be spectularly poort if, for instance, only
|
reason; the results can be spectacularly poor if, for instance, only
|
||||||
the rmdir() fails. Patch prepared by Timo Lindfors <lindi-spamtrap@newmail.com>.
|
the rmdir() fails. Patch prepared by Timo Lindfors <lindi-spamtrap@newmail.com>.
|
||||||
http://bugs.debian.org/166369
|
http://bugs.debian.org/166369
|
||||||
- su: fix syslogs to be less ambiguous. Use old:new format instead of old-new
|
- su: fix syslogs to be less ambiguous. Use old:new format instead of old-new
|
||||||
@@ -687,7 +1124,7 @@ shadow-4.0.9 -> shadow-4.0.10 28-06-2005
|
|||||||
http://bugs.debian.org/213592
|
http://bugs.debian.org/213592
|
||||||
- removed not used now libmisc/setup.c,
|
- removed not used now libmisc/setup.c,
|
||||||
- login: use also UTMPX API instead UTMP on failure (login was affected for this
|
- login: use also UTMPX API instead UTMP on failure (login was affected for this
|
||||||
when shadow was builded without PAM support)
|
when shadow was built without PAM support)
|
||||||
patch by Nicolas François <nicolas.francois@centraliens.net>
|
patch by Nicolas François <nicolas.francois@centraliens.net>
|
||||||
- login: the PAM session needs to be closed as root, thus before change_uid()
|
- login: the PAM session needs to be closed as root, thus before change_uid()
|
||||||
http://bugs.debian.org/53570 http://bugs.debian.org/195048 http://bugs.debian.org/211884
|
http://bugs.debian.org/53570 http://bugs.debian.org/195048 http://bugs.debian.org/211884
|
||||||
@@ -696,14 +1133,14 @@ shadow-4.0.9 -> shadow-4.0.10 28-06-2005
|
|||||||
http://bugs.debian.org/53702
|
http://bugs.debian.org/53702
|
||||||
- login: check for hushed login and pass PAM_SILENT if true,
|
- login: check for hushed login and pass PAM_SILENT if true,
|
||||||
http://bugs.debian.org/48002
|
http://bugs.debian.org/48002
|
||||||
- login: fixed username on succesful login (was using the normal username,
|
- login: fixed username on successful login (was using the normal username,
|
||||||
when it should have used pam_user) http://bugs.debian.org/47819
|
when it should have used pam_user) http://bugs.debian.org/47819
|
||||||
- remove using SHADOWPWD #define so now shadow is allways builded with shadow
|
- remove using SHADOWPWD #define so now shadow is always built with shadow
|
||||||
passwowd support,
|
password support,
|
||||||
- chage: rewrited for use getopt_long(),
|
- chage: rewritten for use getopt_long(),
|
||||||
- updated translations: ca, cs, da, fi, pl, ru, zh_TW.
|
- updated translations: ca, cs, da, fi, pl, ru, zh_TW.
|
||||||
*** documentation:
|
*** documentation:
|
||||||
- most of the man pages now are generated from XML files so in case submiting any
|
- most of the man pages now are generated from XML files so in case submitting any
|
||||||
chages to this resources please make diff to XML files,
|
chages to this resources please make diff to XML files,
|
||||||
- chfn: give more details about the influence of login.defs on what's allowed to
|
- chfn: give more details about the influence of login.defs on what's allowed to
|
||||||
users.
|
users.
|
||||||
@@ -711,7 +1148,7 @@ shadow-4.0.9 -> shadow-4.0.10 28-06-2005
|
|||||||
shadow-4.0.8 -> shadow-4.0.9 23-05-2005
|
shadow-4.0.8 -> shadow-4.0.9 23-05-2005
|
||||||
|
|
||||||
*** general:
|
*** general:
|
||||||
- passwd: fixed segfault in non-PAM connfiguration
|
- passwd: fixed segfault in non-PAM configuration
|
||||||
(submited by Greg Schafer <gschafer@zip.com.au>),
|
(submited by Greg Schafer <gschafer@zip.com.au>),
|
||||||
- newgrp: fixed NULL pointer dereference - getlogin() and ttyname() can
|
- newgrp: fixed NULL pointer dereference - getlogin() and ttyname() can
|
||||||
return NULL which is not checked (http://bugs.debian.org/162303),
|
return NULL which is not checked (http://bugs.debian.org/162303),
|
||||||
@@ -733,15 +1170,15 @@ shadow-4.0.7 -> shadow-4.0.8 26-04-2005
|
|||||||
- configure.in: add using AC_GNU_SOURCE macro for kill compilation warnings about
|
- configure.in: add using AC_GNU_SOURCE macro for kill compilation warnings about
|
||||||
implicit declaration of function `fseeko',
|
implicit declaration of function `fseeko',
|
||||||
- faillog: changed faillog record display format for allow fit in 80 columns all
|
- faillog: changed faillog record display format for allow fit in 80 columns all
|
||||||
faillog atributies,
|
faillog attributes,
|
||||||
- removed NDBM code (unused),
|
- removed NDBM code (unused),
|
||||||
- fixed use of SU_WHEEL_ONLY in su. Now su realy is avalaible for wheel group
|
- fixed use of SU_WHEEL_ONLY in su. Now su really is available for wheel group
|
||||||
members. Thanks to Mike Frysinger <vapier@gentoo.org> for report:
|
members. Thanks to Mike Frysinger <vapier@gentoo.org> for report:
|
||||||
http://bugs.gentoo.org/show_bug.cgi?id=80345
|
http://bugs.gentoo.org/show_bug.cgi?id=80345
|
||||||
- drop never finished kerberos and des_rpc support (for kerberos support back firs
|
- drop never finished kerberos and des_rpc support (for kerberos support back firs
|
||||||
must be prepared modularization),
|
must be prepared modularization),
|
||||||
- fixed UTMP path detection (by Kelledin <kelledin@users.sf.net>),
|
- fixed UTMP path detection (by Kelledin <kelledin@users.sf.net>),
|
||||||
- useradd: rewrited group count to dynamic (by John Newbigin
|
- useradd: rewritten group count to dynamic (by John Newbigin
|
||||||
<jnewbigin@ict.swin.edu.au>),
|
<jnewbigin@ict.swin.edu.au>),
|
||||||
- login: fixed create lastlog entry fo users never loged in on non-PAM
|
- login: fixed create lastlog entry fo users never loged in on non-PAM
|
||||||
variant of login (fix by <oracular@ziplip.com>),
|
variant of login (fix by <oracular@ziplip.com>),
|
||||||
@@ -756,7 +1193,7 @@ shadow-4.0.7 -> shadow-4.0.8 26-04-2005
|
|||||||
fchmod() is executed. (Actually, we could also pass the final "mode" to
|
fchmod() is executed. (Actually, we could also pass the final "mode" to
|
||||||
the open() call and then save the consequent fchmod().)
|
the open() call and then save the consequent fchmod().)
|
||||||
- SELinux changes: added changes in chage, chfn, chsh, passwd for allow
|
- SELinux changes: added changes in chage, chfn, chsh, passwd for allow
|
||||||
construct more grained user password/accuunt properties on SELinux
|
construct more grained user password/account properties on SELinux
|
||||||
policies level. Patch originally based on RH changes (submited by Chris
|
policies level. Patch originally based on RH changes (submited by Chris
|
||||||
PeBenito <pebenito@gentoo.org>),
|
PeBenito <pebenito@gentoo.org>),
|
||||||
- added SELinux changes: in libmisc/copydir.c (based on Fedora patch),
|
- added SELinux changes: in libmisc/copydir.c (based on Fedora patch),
|
||||||
@@ -774,8 +1211,8 @@ shadow-4.0.7 -> shadow-4.0.8 26-04-2005
|
|||||||
- newgrp(1): fix #251926, #166173, #113191 Debian bugs: explain why editing /etc/group
|
- newgrp(1): fix #251926, #166173, #113191 Debian bugs: explain why editing /etc/group
|
||||||
(without gshadow) doesn't permit to use newgrp,
|
(without gshadow) doesn't permit to use newgrp,
|
||||||
- newgrp(1): newgrp uses /bin/sh (not bash),
|
- newgrp(1): newgrp uses /bin/sh (not bash),
|
||||||
- faillog(8): updated after rewrited faillog command for use getopt_long(),
|
- faillog(8): updated after rewritten faillog command for use getopt_long(),
|
||||||
- login(1): removed fragment about abilities pass enviroment variables in login prompt,
|
- login(1): removed fragment about abilities pass environment variables in login prompt,
|
||||||
- gshadow(5): new file (by Nicolas Nicolas François <nicolas.francois@centraliens.net>),
|
- gshadow(5): new file (by Nicolas Nicolas François <nicolas.francois@centraliens.net>),
|
||||||
- usermod(8): fixed #302388 Debian bug: added separated -o option description,
|
- usermod(8): fixed #302388 Debian bug: added separated -o option description,
|
||||||
|
|
||||||
@@ -792,24 +1229,24 @@ shadow-4.0.6 -> shadow-4.0.7 26-01-2005
|
|||||||
-- use fseeko() instead fseek() and remove casting file offsets to unsigned
|
-- use fseeko() instead fseek() and remove casting file offsets to unsigned
|
||||||
long.
|
long.
|
||||||
- lastlog:
|
- lastlog:
|
||||||
-- rewrited source code using the same style as in chpasswd.c,
|
-- rewritten source code using the same style as in chpasswd.c,
|
||||||
-- open lastlog file after finish parse comman line optiomns
|
-- open lastlog file after finish parse commandline options
|
||||||
(now --help otput can be displayd for users without lastlog
|
(now --help output can be displayed for users without lastlog
|
||||||
file read permission),
|
file read permission),
|
||||||
-- cleanups in lastlog(8) man page using the same style as in
|
-- cleanups in lastlog(8) man page using the same style as in
|
||||||
chpasswd(8).
|
chpasswd(8).
|
||||||
- chpasswd:
|
- chpasswd:
|
||||||
-- switch chpasswd to use getopt_long() and adds a --md5 option
|
-- switch chpasswd to use getopt_long() and adds a --md5 option
|
||||||
(by Ian Gulliver <ian@penguinhosting.net>),
|
(by Ian Gulliver <ian@penguinhosting.net>),
|
||||||
-- rewrited chpasswd(8) man page.
|
-- rewritten chpasswd(8) man page.
|
||||||
|
|
||||||
shadow-4.0.5 -> shadow-4.0.6 08-11-2004
|
shadow-4.0.5 -> shadow-4.0.6 08-11-2004
|
||||||
|
|
||||||
- su: fixed adding of pam_env env variables to enviroment
|
- su: fixed adding of pam_env env variables to environment
|
||||||
(Martin Schlemmer <azarah@nosferatu.za.org>),
|
(Martin Schlemmer <azarah@nosferatu.za.org>),
|
||||||
- autoconf: fixed filling MAIL_SPOOL_DIR and MAIL_SPOOL_FILE variables
|
- autoconf: fixed filling MAIL_SPOOL_DIR and MAIL_SPOOL_FILE variables
|
||||||
which was allways empty (Gregorio Guidi <g.guidi@sns.it>),
|
which was always empty (Gregorio Guidi <g.guidi@sns.it>),
|
||||||
- realuy closse security bug in libmisc/pwdcheck.c,
|
- really close security bug in libmisc/pwdcheck.c,
|
||||||
- added missing template/example PAM service config files for chfn, chsh and
|
- added missing template/example PAM service config files for chfn, chsh and
|
||||||
userdel,
|
userdel,
|
||||||
- do not translate variable names from /etc/default/useradd during
|
- do not translate variable names from /etc/default/useradd during
|
||||||
@@ -820,10 +1257,10 @@ shadow-4.0.4.1 -> shadow-4.0.5 27-10-2004
|
|||||||
- change libmisc to private static library,
|
- change libmisc to private static library,
|
||||||
- added SELinux support (basing on patch from Gentoo),
|
- added SELinux support (basing on patch from Gentoo),
|
||||||
- chage: more verbose/human readable -l output. This output is much more
|
- chage: more verbose/human readable -l output. This output is much more
|
||||||
beter for send directly via email for each users as message with account
|
better for send directly via email for each users as message with account
|
||||||
status (for example as message with warning about account/password expiration),
|
status (for example as message with warning about account/password expiration),
|
||||||
- login: fixed handle -f option: now it works correctly without specify "-h
|
- login: fixed handle -f option: now it works correctly without specify "-h
|
||||||
<host>" if open login session localy is required (thanks for help
|
<host>" if open login session locally is required (thanks for help
|
||||||
investigate bug for Krzysztof Kotlenga),
|
investigate bug for Krzysztof Kotlenga),
|
||||||
- userdel: when removing a user with userdel, userdel was always exits with 1 (fixed).
|
- userdel: when removing a user with userdel, userdel was always exits with 1 (fixed).
|
||||||
Based on http://bugs.gentoo.org/show_bug.cgi?id=66687,
|
Based on http://bugs.gentoo.org/show_bug.cgi?id=66687,
|
||||||
@@ -837,8 +1274,8 @@ shadow-4.0.4.1 -> shadow-4.0.5 27-10-2004
|
|||||||
makes httpd Option SymlinkIfOwnerMatch break for default weg pages
|
makes httpd Option SymlinkIfOwnerMatch break for default weg pages
|
||||||
including symlinks placed into /etc/skel/public_html for example.
|
including symlinks placed into /etc/skel/public_html for example.
|
||||||
http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=66819
|
http://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=66819
|
||||||
- su: add pam_open_session() support. If builded without PAM support
|
- su: add pam_open_session() support. If built without PAM support
|
||||||
propagate $DISPLAY and $XAUTHORITY enviroment variables.
|
propagate $DISPLAY and $XAUTHORITY environment variables.
|
||||||
Based on http://www.gentoo.org/cgi-bin/viewcvs.cgi/sys-apps/shadow/files/shadow-4.0.4.1-su-pam_open_session.patch?rev=1.1
|
Based on http://www.gentoo.org/cgi-bin/viewcvs.cgi/sys-apps/shadow/files/shadow-4.0.4.1-su-pam_open_session.patch?rev=1.1
|
||||||
- applied 036_pam_access_with_preauth.patch Debian patch submited by Bjorn
|
- applied 036_pam_access_with_preauth.patch Debian patch submited by Bjorn
|
||||||
Torkelsson <Bjorn.Torkelsson@hpc2n.umu.se>: add support for PAM account
|
Torkelsson <Bjorn.Torkelsson@hpc2n.umu.se>: add support for PAM account
|
||||||
@@ -850,11 +1287,11 @@ shadow-4.0.4.1 -> shadow-4.0.5 27-10-2004
|
|||||||
Use constant strings rather than argv[0] for syslog ident in the user
|
Use constant strings rather than argv[0] for syslog ident in the user
|
||||||
management commands,
|
management commands,
|
||||||
shadow-4.0.4.1-owl-tmp.diff:
|
shadow-4.0.4.1-owl-tmp.diff:
|
||||||
Remove using mktemp() if mkstemp() prototype not found (use allways mkstemp()),
|
Remove using mktemp() if mkstemp() prototype not found (use always mkstemp()),
|
||||||
shadow-4.0.4.1-owl-check-reads.diff:
|
shadow-4.0.4.1-owl-check-reads.diff:
|
||||||
Add checking for read errors in commonio and vipw/vigr (not doing so could
|
Add checking for read errors in commonio and vipw/vigr (not doing so could
|
||||||
result in data loss when the records are written back),
|
result in data loss when the records are written back),
|
||||||
- fixed securirty bug in libmisc/pwdcheck.c which allow unauthorized
|
- fixed security bug in libmisc/pwdcheck.c which allow unauthorized
|
||||||
account properties modification.
|
account properties modification.
|
||||||
Affected tools: chfn and chsh.
|
Affected tools: chfn and chsh.
|
||||||
Bug was discovered by Martin Schulze <joey@infodrom.org>.
|
Bug was discovered by Martin Schulze <joey@infodrom.org>.
|
||||||
@@ -870,12 +1307,12 @@ shadow-4.0.4.1 -> shadow-4.0.5 27-10-2004
|
|||||||
|
|
||||||
shadow-4.0.4 => shadow-4.0.4.1 14-01-2004
|
shadow-4.0.4 => shadow-4.0.4.1 14-01-2004
|
||||||
- bug fixes in automake files for generate correct tar ball on "make dist":
|
- bug fixes in automake files for generate correct tar ball on "make dist":
|
||||||
added mising "EXTRA_DIST = $(man_MANS)" in man/*/Makefile.am.
|
added missing "EXTRA_DIST = $(man_MANS)" in man/*/Makefile.am.
|
||||||
|
|
||||||
shadow-4.0.3 => shadow-4.0.4 14-01-2004
|
shadow-4.0.3 => shadow-4.0.4 14-01-2004
|
||||||
|
|
||||||
*** general:
|
*** general:
|
||||||
- added missing information about -f options in groupadd usage mesage
|
- added missing information about -f options in groupadd usage message
|
||||||
(document this also in man page),
|
(document this also in man page),
|
||||||
- removed TCFS support (tcfs is dead),
|
- removed TCFS support (tcfs is dead),
|
||||||
- convert all po/*.po files to utf-8,
|
- convert all po/*.po files to utf-8,
|
||||||
@@ -883,7 +1320,7 @@ shadow-4.0.3 => shadow-4.0.4 14-01-2004
|
|||||||
per service flushing method instead HUPing nscd process),
|
per service flushing method instead HUPing nscd process),
|
||||||
- removed old AUTH_METHODS dependent code,
|
- removed old AUTH_METHODS dependent code,
|
||||||
- chage: now all code depend on SHADOWPWD. If shadow will not be configured
|
- chage: now all code depend on SHADOWPWD. If shadow will not be configured
|
||||||
on autoconf level for using shadow possword chage is olny stub which
|
on autoconf level for using shadow password chage is olny stub which
|
||||||
informs "chage not configured for shadow password support."
|
informs "chage not configured for shadow password support."
|
||||||
- dpasswd: removed,
|
- dpasswd: removed,
|
||||||
- login: remove handle login.defs::DIALUPS_CHECK_ENAB code,
|
- login: remove handle login.defs::DIALUPS_CHECK_ENAB code,
|
||||||
@@ -891,7 +1328,7 @@ shadow-4.0.3 => shadow-4.0.4 14-01-2004
|
|||||||
- ALL tools, libraries: remove old SVR4, SVR4_SI86_EUA BSD_QUOTA and ATT_AGE
|
- ALL tools, libraries: remove old SVR4, SVR4_SI86_EUA BSD_QUOTA and ATT_AGE
|
||||||
dependent code,
|
dependent code,
|
||||||
- ALL: ready for gettext 0.11.5, automake 1.7.4, autoconf 2.57,
|
- ALL: ready for gettext 0.11.5, automake 1.7.4, autoconf 2.57,
|
||||||
- logoutd, userd: handle also utmpx if avalaile,
|
- logoutd, userd: handle also utmpx if available,
|
||||||
- newgrp: fix for non-PAM version
|
- newgrp: fix for non-PAM version
|
||||||
Use CLOSE_SESSIONS depending code only when USE_PAM.
|
Use CLOSE_SESSIONS depending code only when USE_PAM.
|
||||||
The problem was reported by Mattias Webjorn Eriksson using Slackware
|
The problem was reported by Mattias Webjorn Eriksson using Slackware
|
||||||
@@ -919,7 +1356,7 @@ shadow-4.0.3 => shadow-4.0.4 14-01-2004
|
|||||||
|
|
||||||
shadow-4.0.2 => shadow-4.0.3 13-03-2002
|
shadow-4.0.2 => shadow-4.0.3 13-03-2002
|
||||||
|
|
||||||
- added variouse cs, de, fr, id, it, ko man pages found mainly in national
|
- added various cs, de, fr, id, it, ko man pages found mainly in national
|
||||||
man pages translations projects (this documents are not synced with
|
man pages translations projects (this documents are not synced with
|
||||||
current en version but you know .. "Documentations is lik sex. When it is
|
current en version but you know .. "Documentations is lik sex. When it is
|
||||||
good it very very good. Whet it is bad it is better than nothing."). Any
|
good it very very good. Whet it is bad it is better than nothing."). Any
|
||||||
@@ -935,9 +1372,9 @@ shadow-4.0.2 => shadow-4.0.3 13-03-2002
|
|||||||
shadow-4.0.1 => shadow-4.0.2 17-02-2002
|
shadow-4.0.1 => shadow-4.0.2 17-02-2002
|
||||||
|
|
||||||
- resolve many fuzzy translations also all this which may cause problems on
|
- resolve many fuzzy translations also all this which may cause problems on
|
||||||
displaing long uid/gid,
|
displaying long uid/gid,
|
||||||
- allow use "$" on ending in cereated by useradd usermname accounts for allow
|
- allow use "$" on ending in created by useradd username accounts for allow
|
||||||
create machine acounts for samba (thanks to Jerome Borsboom
|
create machine accounts for samba (thanks to Jerome Borsboom
|
||||||
<borsboom@tch.fgg.eur.nl> for point this problem in 4.0.1),
|
<borsboom@tch.fgg.eur.nl> for point this problem in 4.0.1),
|
||||||
- fix small but ugly bug in configure.in in libpam_mics library detection.
|
- fix small but ugly bug in configure.in in libpam_mics library detection.
|
||||||
|
|
||||||
@@ -957,7 +1394,7 @@ shadow-4.0.0 => shadow-4.0.1
|
|||||||
as root. If root does read-only, there's no lock needed. Added missing
|
as root. If root does read-only, there's no lock needed. Added missing
|
||||||
"#include <errno.h>" for above (me).
|
"#include <errno.h>" for above (me).
|
||||||
shadow-4.0.0-owl-warnings.diff
|
shadow-4.0.0-owl-warnings.diff
|
||||||
Olny one fix from this patch was aplayd because other was fixed few days
|
Olny one fix from this patch was applied because other was fixed few days
|
||||||
before :)
|
before :)
|
||||||
shadow-4.0.0-owl-check_names.diff
|
shadow-4.0.0-owl-check_names.diff
|
||||||
Merge only prat this patch with checking login name matching; checking
|
Merge only prat this patch with checking login name matching; checking
|
||||||
@@ -965,7 +1402,7 @@ shadow-4.0.0 => shadow-4.0.1
|
|||||||
probably _POSIX_LOGIN_NAME_MAX from <bits/posix1_lim.h>,
|
probably _POSIX_LOGIN_NAME_MAX from <bits/posix1_lim.h>,
|
||||||
shadow-4.0.0-owl-chage-drop-priv.diff
|
shadow-4.0.0-owl-chage-drop-priv.diff
|
||||||
shadow-4.0.0-owl-pam-auth.diff
|
shadow-4.0.0-owl-pam-auth.diff
|
||||||
Merge part with reorder initialize PAM and checkin is chage is runed by
|
Merge part with reorder initialize PAM and checking if chage is runed by
|
||||||
root or not - now chage can be runed from non-root account for checking
|
root or not - now chage can be runed from non-root account for checking
|
||||||
by user own account information (if PAM enabled).
|
by user own account information (if PAM enabled).
|
||||||
- fixes for handle/print correctly 32bit uid/gid (Thorsten Kukuk <kukuk@suse.de>),
|
- fixes for handle/print correctly 32bit uid/gid (Thorsten Kukuk <kukuk@suse.de>),
|
||||||
@@ -1009,30 +1446,30 @@ shadow-20001016 => shadow-4.0.0 06-01-2002
|
|||||||
- much better automake support,
|
- much better automake support,
|
||||||
- added pt_BR man pages for gpasswd(1), groupadd(8), groupdel(8),
|
- added pt_BR man pages for gpasswd(1), groupadd(8), groupdel(8),
|
||||||
groupmod(8), shadow(5) (man pages for other nations also are welcome),
|
groupmod(8), shadow(5) (man pages for other nations also are welcome),
|
||||||
- mamny small fixes and updates nad improvements in man pages,
|
- many small fixes and updates nad improvements in man pages,
|
||||||
- aplayed Debian patch to man pages for shadowconfig,
|
- applied Debian patch to man pages for shadowconfig,
|
||||||
- remove limit to 6 chars logged tty name (012_libmisc_sulog.c.diff Debian
|
- remove limit to 6 chars logged tty name (012_libmisc_sulog.c.diff Debian
|
||||||
patch).
|
patch).
|
||||||
|
|
||||||
shadow-20001012 -> shadow-20001016:
|
shadow-20001012 -> shadow-20001016:
|
||||||
- conditionaly disabled body reload_nscd() because not every
|
- conditionally disabled body reload_nscd() because not every
|
||||||
version of nscd can handle it (this can be enabled by define
|
version of nscd can handle it (this can be enabled by define
|
||||||
ENABLE_NSCD_SIGHUP) (Marek Michałkiewicz <marekm@linux.org.pl>)
|
ENABLE_NSCD_SIGHUP) (Marek Michałkiewicz <marekm@linux.org.pl>)
|
||||||
- fixes on autoconf/automake level for dist target,
|
- fixes on autoconf/automake level for dist target,
|
||||||
- Julianne F. Haugh new contact adress.
|
- Julianne F. Haugh new contact address.
|
||||||
|
|
||||||
shadow-20000902 => shadow-20001012
|
shadow-20000902 => shadow-20001012
|
||||||
|
|
||||||
- removed /redhat directory with obsoleted files (partialy rewrited spec
|
- removed /redhat directory with obsoleted files (partially rewritten spec
|
||||||
file is now in root directory),
|
file is now in root directory),
|
||||||
- aplayed shadow-19990827-group.patch patch from RH wich prevents adduser
|
- applied shadow-19990827-group.patch patch from RH wich prevents adduser
|
||||||
overwrite previously existing groups in adduser,
|
overwrite previously existing groups in adduser,
|
||||||
- added PAM support for chage (bind to "chage" PAM config file) also
|
- added PAM support for chage (bind to "chage" PAM config file) also
|
||||||
added PAM support for all other small tools like chpasswd, groupadd,
|
added PAM support for all other small tools like chpasswd, groupadd,
|
||||||
groupdel, groupmod, newusers, useradd, userdel, usermod (bind to common
|
groupdel, groupmod, newusers, useradd, userdel, usermod (bind to common
|
||||||
"shadow" PAM config file) - this modificaytions mainly based on
|
"shadow" PAM config file) - this modifications mainly based on
|
||||||
modifications prepared by Janek Rękojarski <baggins@pld.org.pl>,
|
modifications prepared by Janek Rękojarski <baggins@pld.org.pl>,
|
||||||
- many small fixes and improvments in automake (mow "make dist"
|
- many small fixes and improvements in automake (mow "make dist"
|
||||||
works correctly),
|
works correctly),
|
||||||
- added cs translation (Jiri Pavlovsky <Jiri.Pavlovsky@ff.cuni.cz>).
|
- added cs translation (Jiri Pavlovsky <Jiri.Pavlovsky@ff.cuni.cz>).
|
||||||
|
|
||||||
|
|||||||
@@ -1,106 +1,47 @@
|
|||||||
Shadow SITES
|
# shadow-utils
|
||||||
============
|
|
||||||
|
|
||||||
FTP site
|
## Introduction
|
||||||
ftp://pkg-shadow.alioth.debian.org/pub/pkg-shadow
|
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.
|
||||||
|
|
||||||
SVN repository
|
## Sites
|
||||||
anonymous read only access: svn://svn.debian.org/pkg-shadow/
|
* [Homepage](https://github.com/shadow-maint/shadow)
|
||||||
|
* [Issue tracker](https://github.com/shadow-maint/shadow/issues)
|
||||||
|
* [Releases](https://github.com/shadow-maint/shadow/releases)
|
||||||
|
|
||||||
SVN web interface
|
## Code
|
||||||
http://svn.debian.org/wsvn/pkg-shadow
|
|
||||||
|
|
||||||
Mailing lists
|
The main development branch is at [https://github.com/shadow-maint/shadow.git](https://github.com/shadow-maint/shadow)
|
||||||
for general discuss: pkg-shadow-devel@lists.alioth.debian.org
|
|
||||||
commit list: pkg-shadow-commits@lists.alioth.debian.org
|
|
||||||
|
|
||||||
Mailing lists subscription
|
See [STABLE.md](https://github.com/shadow-maint/shadow/blob/master/STABLE.md) for a list of supported stable branches.
|
||||||
http://lists.alioth.debian.org/mailman/listinfo/pkg-shadow-devel
|
|
||||||
http://lists.alioth.debian.org/mailman/listinfo/pkg-shadow-commits
|
|
||||||
|
|
||||||
Mailing lists archives:
|
## Contacts
|
||||||
http://lists.alioth.debian.org/pipermail/pkg-shadow-devel/
|
There are several ways to contact us:
|
||||||
http://lists.alioth.debian.org/pipermail/pkg-shadow-commits/
|
* [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
|
||||||
|
|
||||||
S/Key support:
|
### Mailing archives
|
||||||
Shadow can be built with S/Key support using the S/Key package from:
|
* [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
|
||||||
|
|
||||||
http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libskey/
|
## Contributions
|
||||||
or
|
|
||||||
http://gentoo.osuosl.org/distfiles/skey-1.1.5.tar.bz2
|
|
||||||
|
|
||||||
Authors and contributors
|
Contributions are welcome. Follow the
|
||||||
========================
|
[guidelines](doc/contributions/introduction.md) before posting any patches.
|
||||||
|
|
||||||
Thanks to at least the following people for sending me patches, bug
|
|
||||||
reports and various comments. This list may be incomplete, I received
|
|
||||||
a lot of mail...
|
|
||||||
|
|
||||||
|
|
||||||
Adam Rudnicki <adam@v-lo.krakow.pl>
|
|
||||||
Alan Curry <pacman@tardis.mars.net>
|
|
||||||
Alexander O. Yuriev <alex@bach.cis.temple.edu>
|
|
||||||
Algis Rudys <arudys@rice.edu>
|
|
||||||
Andreas Jaeger <aj@arthur.rhein-neckar.de>
|
|
||||||
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>
|
|
||||||
Cristian Gafton <gafton@sorosis.ro>
|
|
||||||
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>
|
|
||||||
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>
|
|
||||||
Janos Farkas <chexum@bankinf.banki.hu>
|
|
||||||
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>
|
|
||||||
Julianne Frances Haugh <jockgrrl@ix.netcom.com>
|
|
||||||
Leonard N. Zubkoff <lnz@dandelion.com>
|
|
||||||
Luca Berra <bluca@www.polimi.it>
|
|
||||||
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>
|
|
||||||
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>
|
|
||||||
Phillip Street
|
|
||||||
Rafał Maszkowski <rzm@icm.edu.pl>
|
|
||||||
Rani Chouha <ranibey@smartec.com>
|
|
||||||
Sami Kerola <kerolasa@rocketmail.com>
|
|
||||||
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>
|
|
||||||
|
|
||||||
Maintainers
|
|
||||||
===========
|
|
||||||
|
|
||||||
Tomasz Kłoczko <kloczek@pld.org.pl> (2000-2006)
|
|
||||||
|
|
||||||
|
## Authors and maintainers
|
||||||
|
Authors and maintainers are listed in [AUTHORS.md](
|
||||||
|
https://github.com/shadow-maint/shadow/blob/master/AUTHORS.md).
|
||||||
|
|||||||
@@ -1,86 +0,0 @@
|
|||||||
passwd -l should lock the password, not the account.
|
|
||||||
|
|
||||||
vipw: Test SHADOWGRP support before using gshadow features.
|
|
||||||
|
|
||||||
PAM: add support for customization of the PAM support (i.e. support the
|
|
||||||
Debian PAM configuration)
|
|
||||||
|
|
||||||
PAM: check if a non-interactive conversation function could be used to
|
|
||||||
|
|
||||||
WITH_SELINUX
|
|
||||||
- review all tools to check that the strategies are consistent
|
|
||||||
|
|
||||||
chage, chfn, chsh: same change needed as in passwd.
|
|
||||||
- probably need moving check_selinux_access to a separate file.
|
|
||||||
|
|
||||||
man useradd
|
|
||||||
document default behavior for GROUP
|
|
||||||
remove "The default group number is 1 or whatever is..."
|
|
||||||
|
|
||||||
useradd manpage
|
|
||||||
- add -k option
|
|
||||||
- mention that -o require -u
|
|
||||||
|
|
||||||
testsuite
|
|
||||||
- newgrp
|
|
||||||
- test with unknown user's GID
|
|
||||||
|
|
||||||
newusers
|
|
||||||
- add logging to SYSLOG & AUDIT
|
|
||||||
|
|
||||||
faillog
|
|
||||||
- accept numerical user and range of users
|
|
||||||
|
|
||||||
Document when/where option appeared, document whether an option is standard
|
|
||||||
or not.
|
|
||||||
|
|
||||||
depends rules for the manpages
|
|
||||||
|
|
||||||
Check all the expiry semantics
|
|
||||||
|
|
||||||
Add options --crypt-method and --sha-rounds to gpasswd
|
|
||||||
|
|
||||||
ALL:
|
|
||||||
- move base passwd/shadow/group/gshadow operation to module for allow write
|
|
||||||
different backend modules for db, NIS, LDAP and others. Default backend it
|
|
||||||
will be goot if will be chosen depending on /etc/nsswitch.conf and allow
|
|
||||||
override this by -r <repository> options (where the <repository> can be
|
|
||||||
file, db, nis nisplus, ldap .. like on /etc/nsswitch.conf in service column).
|
|
||||||
passwd have old piece of code with handling -r option and it will be good
|
|
||||||
finish this and propagate on other shadow tools for allow operate on other
|
|
||||||
user databases by well known tools.
|
|
||||||
|
|
||||||
- useradd:
|
|
||||||
- add handle create user mail spool in maildir format.
|
|
||||||
|
|
||||||
- add handle -n switch in groups and id command for allow query is
|
|
||||||
group/user with specified id/gid exist - this will be very usable
|
|
||||||
on automation in packages for query/check is group/user exist in system
|
|
||||||
or not,
|
|
||||||
|
|
||||||
- groupmems:
|
|
||||||
- need some work on add PAM and i18n support.
|
|
||||||
|
|
||||||
- userdel:
|
|
||||||
- add backup option for the removal of user resources,
|
|
||||||
- add lookop and remove per user group.
|
|
||||||
- user_busy: check that the user is not running any processes.
|
|
||||||
|
|
||||||
- passwd:
|
|
||||||
- check combination of options (e.g. -u/-l)
|
|
||||||
|
|
||||||
- newgrp: check the USE_PAM section.
|
|
||||||
|
|
||||||
- groupmems: check reason for isgroup
|
|
||||||
|
|
||||||
- newusers: doc for pw_gid not clear. Differentiate
|
|
||||||
pw_gid specified and exist
|
|
||||||
pw_gid specified but does not exist
|
|
||||||
* name
|
|
||||||
* number
|
|
||||||
pw_gid not specified.
|
|
||||||
- newusers: document what happens when no uid is specified.
|
|
||||||
- newusers: add option --system?
|
|
||||||
|
|
||||||
-Documentation:
|
|
||||||
* document when options were added.
|
|
||||||
+1
-1
@@ -6,7 +6,7 @@ AC_DEFUN([JH_PATH_XML_CATALOG],
|
|||||||
[
|
[
|
||||||
# check for the presence of the XML catalog
|
# check for the presence of the XML catalog
|
||||||
AC_ARG_WITH([xml-catalog],
|
AC_ARG_WITH([xml-catalog],
|
||||||
AC_HELP_STRING([--with-xml-catalog=CATALOG],
|
AS_HELP_STRING([--with-xml-catalog=CATALOG],
|
||||||
[path to xml catalog to use]),,
|
[path to xml catalog to use]),,
|
||||||
[with_xml_catalog=/etc/xml/catalog])
|
[with_xml_catalog=/etc/xml/catalog])
|
||||||
jh_found_xmlcatalog=true
|
jh_found_xmlcatalog=true
|
||||||
|
|||||||
Vendored
+2624
File diff suppressed because it is too large
Load Diff
-10
@@ -1,10 +0,0 @@
|
|||||||
#! /bin/sh
|
|
||||||
autoreconf -v -f --install || exit 1
|
|
||||||
./configure \
|
|
||||||
CFLAGS="-O2 -Wall" \
|
|
||||||
--enable-man \
|
|
||||||
--enable-maintainer-mode \
|
|
||||||
--disable-shared \
|
|
||||||
--without-libpam \
|
|
||||||
--with-selinux \
|
|
||||||
"$@"
|
|
||||||
Executable
+364
@@ -0,0 +1,364 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
# Wrapper for compilers which do not understand '-c -o'.
|
||||||
|
|
||||||
|
scriptversion=2025-06-18.21; # UTC
|
||||||
|
|
||||||
|
# Copyright (C) 1999-2025 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 unneeded_conversions
|
||||||
|
# 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) UNNEEDED_CONVERSIONS, 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*)
|
||||||
|
if test -n "$MSYSTEM" && (cygpath --version) >/dev/null 2>&1; then
|
||||||
|
# MSYS2 environment.
|
||||||
|
file_conv=cygwin
|
||||||
|
else
|
||||||
|
# Original MinGW environment.
|
||||||
|
file_conv=mingw
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
MSYS*)
|
||||||
|
# Old MSYS environment, or MSYS2 with 32-bit MSYS2 shell.
|
||||||
|
file_conv=cygwin
|
||||||
|
;;
|
||||||
|
CYGWIN*)
|
||||||
|
# Cygwin environment.
|
||||||
|
file_conv=cygwin
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
file_conv=wine
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
case $file_conv/,$2, in
|
||||||
|
*,$file_conv,*)
|
||||||
|
# This is the optimization mentioned above:
|
||||||
|
# If UNNEEDED_CONVERSIONS contains $file_conv, don't convert.
|
||||||
|
;;
|
||||||
|
mingw/*)
|
||||||
|
file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
|
||||||
|
;;
|
||||||
|
cygwin/*)
|
||||||
|
file=`cygpath -w "$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 | *.lo | *.[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>.
|
||||||
|
GNU Automake home page: <https://www.gnu.org/software/automake/>.
|
||||||
|
General help using GNU software: <https://www.gnu.org/gethelp/>.
|
||||||
|
EOF
|
||||||
|
exit $?
|
||||||
|
;;
|
||||||
|
-v | --v*)
|
||||||
|
echo "compile (GNU Automake) $scriptversion"
|
||||||
|
exit $?
|
||||||
|
;;
|
||||||
|
cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \
|
||||||
|
clang-cl | *[/\\]clang-cl | clang-cl.exe | *[/\\]clang-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 nil t)
|
||||||
|
# time-stamp-start: "scriptversion="
|
||||||
|
# time-stamp-format: "%Y-%02m-%02d.%02H"
|
||||||
|
# time-stamp-time-zone: "UTC0"
|
||||||
|
# time-stamp-end: "; # UTC"
|
||||||
|
# End:
|
||||||
+1815
File diff suppressed because it is too large
Load Diff
Executable
+690
@@ -0,0 +1,690 @@
|
|||||||
|
#! /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
|
||||||
+2354
File diff suppressed because it is too large
Load Diff
Executable
+792
@@ -0,0 +1,792 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
# depcomp - compile a program generating dependencies as side-effects
|
||||||
|
|
||||||
|
scriptversion=2025-06-18.21; # UTC
|
||||||
|
|
||||||
|
# Copyright (C) 1999-2025 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>.
|
||||||
|
GNU Automake home page: <https://www.gnu.org/software/automake/>.
|
||||||
|
General help using GNU software: <https://www.gnu.org/gethelp/>.
|
||||||
|
EOF
|
||||||
|
exit $?
|
||||||
|
;;
|
||||||
|
-v | --v*)
|
||||||
|
echo "depcomp (GNU Automake) $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
|
||||||
|
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 interference 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 obsolete pre-3.x GCC compilers.
|
||||||
|
## but also to in-use compilers like IBM 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 nil t)
|
||||||
|
# time-stamp-start: "scriptversion="
|
||||||
|
# time-stamp-format: "%Y-%02m-%02d.%02H"
|
||||||
|
# time-stamp-time-zone: "UTC0"
|
||||||
|
# time-stamp-end: "; # UTC"
|
||||||
|
# End:
|
||||||
Executable
+541
@@ -0,0 +1,541 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# install - install a program, script, or datafile
|
||||||
|
|
||||||
|
scriptversion=2025-06-18.21; # 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.
|
||||||
|
|
||||||
|
Report bugs to <bug-automake@gnu.org>.
|
||||||
|
GNU Automake home page: <https://www.gnu.org/software/automake/>.
|
||||||
|
General help using GNU software: <https://www.gnu.org/gethelp/>."
|
||||||
|
|
||||||
|
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 (GNU Automake) $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-writable /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 incompatibility 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 nil t)
|
||||||
|
# time-stamp-start: "scriptversion="
|
||||||
|
# time-stamp-format: "%Y-%02m-%02d.%02H"
|
||||||
|
# time-stamp-time-zone: "UTC0"
|
||||||
|
# time-stamp-end: "; # UTC"
|
||||||
|
# End:
|
||||||
Executable
+11523
File diff suppressed because it is too large
Load Diff
Executable
+236
@@ -0,0 +1,236 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
# Common wrapper for a few potentially missing GNU and other programs.
|
||||||
|
|
||||||
|
scriptversion=2025-06-18.21; # UTC
|
||||||
|
|
||||||
|
# shellcheck disable=SC2006,SC2268 # we must support pre-POSIX shells
|
||||||
|
|
||||||
|
# Copyright (C) 1996-2025 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 autogen autoheader autom4te automake autoreconf
|
||||||
|
bison flex help2man lex makeinfo perl yacc
|
||||||
|
|
||||||
|
Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
|
||||||
|
'g' are ignored when checking the name.
|
||||||
|
|
||||||
|
Report bugs to <bug-automake@gnu.org>.
|
||||||
|
GNU Automake home page: <https://www.gnu.org/software/automake/>.
|
||||||
|
General help using GNU software: <https://www.gnu.org/gethelp/>."
|
||||||
|
exit $?
|
||||||
|
;;
|
||||||
|
|
||||||
|
-v|--v|--ve|--ver|--vers|--versi|--versio|--version)
|
||||||
|
echo "missing (GNU Automake) $scriptversion"
|
||||||
|
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|autoreconf)
|
||||||
|
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'"
|
||||||
|
autoheader_deps="'acconfig.h'"
|
||||||
|
automake_deps="'Makefile.am'"
|
||||||
|
aclocal_deps="'acinclude.m4'"
|
||||||
|
case $normalized_program in
|
||||||
|
aclocal*)
|
||||||
|
echo "You should only need it if you modified $aclocal_deps or"
|
||||||
|
echo "$configure_deps."
|
||||||
|
;;
|
||||||
|
autoconf*)
|
||||||
|
echo "You should only need it if you modified $configure_deps."
|
||||||
|
;;
|
||||||
|
autogen*)
|
||||||
|
echo "You should only need it if you modified a '.def' or '.tpl' file."
|
||||||
|
echo "You may want to install the GNU AutoGen package:"
|
||||||
|
echo "<$gnu_software_URL/autogen/>"
|
||||||
|
;;
|
||||||
|
autoheader*)
|
||||||
|
echo "You should only need it if you modified $autoheader_deps or"
|
||||||
|
echo "$configure_deps."
|
||||||
|
;;
|
||||||
|
automake*)
|
||||||
|
echo "You should only need it if you modified $automake_deps or"
|
||||||
|
echo "$configure_deps."
|
||||||
|
;;
|
||||||
|
autom4te*)
|
||||||
|
echo "You might have modified some maintainer files that require"
|
||||||
|
echo "the 'autom4te' program to be rebuilt."
|
||||||
|
;;
|
||||||
|
autoreconf*)
|
||||||
|
echo "You should only need it if you modified $aclocal_deps or"
|
||||||
|
echo "$automake_deps or $autoheader_deps or $automake_deps or"
|
||||||
|
echo "$configure_deps."
|
||||||
|
;;
|
||||||
|
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/>"
|
||||||
|
;;
|
||||||
|
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/>"
|
||||||
|
;;
|
||||||
|
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>"
|
||||||
|
;;
|
||||||
|
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/>"
|
||||||
|
;;
|
||||||
|
perl*)
|
||||||
|
echo "You should only need it to run GNU Autoconf, GNU Automake, "
|
||||||
|
echo " assorted other tools, or if you modified a Perl source file."
|
||||||
|
echo "You may want to install the Perl 5 language interpreter:"
|
||||||
|
echo "<$perl_URL>"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
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
|
||||||
|
program_details "$normalized_program"
|
||||||
|
}
|
||||||
|
|
||||||
|
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 nil t)
|
||||||
|
# time-stamp-start: "scriptversion="
|
||||||
|
# time-stamp-format: "%Y-%02m-%02d.%02H"
|
||||||
|
# time-stamp-time-zone: "UTC0"
|
||||||
|
# time-stamp-end: "; # UTC"
|
||||||
|
# End:
|
||||||
Executable
+160
@@ -0,0 +1,160 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
# test-driver - basic testsuite driver script.
|
||||||
|
|
||||||
|
scriptversion=2025-06-18.21; # UTC
|
||||||
|
|
||||||
|
# Copyright (C) 2011-2025 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}]
|
||||||
|
[--collect-skipped-logs {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.
|
||||||
|
|
||||||
|
Report bugs to <bug-automake@gnu.org>.
|
||||||
|
GNU Automake home page: <https://www.gnu.org/software/automake/>.
|
||||||
|
General help using GNU software: <https://www.gnu.org/gethelp/>.
|
||||||
|
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
|
||||||
|
collect_skipped_logs=yes
|
||||||
|
enable_hard_errors=yes
|
||||||
|
while test $# -gt 0; do
|
||||||
|
case $1 in
|
||||||
|
--help) print_usage; exit $?;;
|
||||||
|
--version) echo "test-driver (GNU Automake) $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;;
|
||||||
|
--collect-skipped-logs) collect_skipped_logs=$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=$collect_skipped_logs;;
|
||||||
|
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 nil t)
|
||||||
|
# time-stamp-start: "scriptversion="
|
||||||
|
# time-stamp-format: "%Y-%02m-%02d.%02H"
|
||||||
|
# time-stamp-time-zone: "UTC0"
|
||||||
|
# time-stamp-end: "; # UTC"
|
||||||
|
# End:
|
||||||
+465
@@ -0,0 +1,465 @@
|
|||||||
|
/* 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 C89 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, Interix, z/OS. */
|
||||||
|
#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 C23 Annex F. */
|
||||||
|
#ifndef __STDC_WANT_IEC_60559_EXT__
|
||||||
|
# undef __STDC_WANT_IEC_60559_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 C23 Annex H and 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 to 1 on platforms where this makes off_t a 64-bit type. */
|
||||||
|
#undef _LARGE_FILES
|
||||||
|
|
||||||
|
/* Number of bits in time_t, on hosts where this is settable. */
|
||||||
|
#undef _TIME_BITS
|
||||||
|
|
||||||
|
/* Define to 1 on platforms where this makes time_t a 64-bit type. */
|
||||||
|
#undef __MINGW_USE_VC2005_COMPAT
|
||||||
File diff suppressed because it is too large
Load Diff
+723
@@ -0,0 +1,723 @@
|
|||||||
|
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.3], [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
|
||||||
|
|
||||||
|
])
|
||||||
-430
@@ -1,430 +0,0 @@
|
|||||||
dnl Process this file with autoconf to produce a configure script.
|
|
||||||
AC_INIT
|
|
||||||
AM_INIT_AUTOMAKE(shadow, 4.1.2.1)
|
|
||||||
AC_CONFIG_HEADERS([config.h])
|
|
||||||
|
|
||||||
dnl Some hacks...
|
|
||||||
test "$prefix" = "NONE" && prefix="/usr"
|
|
||||||
test "$prefix" = "/usr" && exec_prefix=""
|
|
||||||
|
|
||||||
AC_GNU_SOURCE
|
|
||||||
|
|
||||||
AM_DISABLE_SHARED
|
|
||||||
AM_ENABLE_STATIC
|
|
||||||
|
|
||||||
AM_MAINTAINER_MODE
|
|
||||||
|
|
||||||
dnl Checks for programs.
|
|
||||||
AC_PROG_CC
|
|
||||||
AC_ISC_POSIX
|
|
||||||
AC_PROG_LN_S
|
|
||||||
AC_PROG_YACC
|
|
||||||
AM_C_PROTOTYPES
|
|
||||||
AM_PROG_LIBTOOL
|
|
||||||
|
|
||||||
dnl Checks for libraries.
|
|
||||||
|
|
||||||
dnl Checks for header files.
|
|
||||||
AC_HEADER_DIRENT
|
|
||||||
AC_HEADER_STDC
|
|
||||||
AC_HEADER_SYS_WAIT
|
|
||||||
|
|
||||||
AC_CHECK_HEADERS(errno.h fcntl.h limits.h unistd.h sys/time.h utmp.h \
|
|
||||||
utmpx.h termios.h termio.h sgtty.h sys/ioctl.h syslog.h paths.h \
|
|
||||||
utime.h ulimit.h sys/resource.h gshadow.h lastlog.h \
|
|
||||||
locale.h rpc/key_prot.h netdb.h)
|
|
||||||
|
|
||||||
dnl shadow now uses the libc's shadow implementation
|
|
||||||
AC_CHECK_HEADER([shadow.h],,[AC_MSG_ERROR([You need a libc with shadow.h])])
|
|
||||||
|
|
||||||
AC_CHECK_FUNCS(l64a fchmod fchown fsync getgroups gethostname getspnam \
|
|
||||||
gettimeofday getusershell getutent initgroups lchown lckpwdf lstat \
|
|
||||||
memcpy memset setgroups sigaction strchr updwtmp updwtmpx innetgr \
|
|
||||||
getpwnam_r getpwuid_r getgrnam_r getgrgid_r getspnam_r)
|
|
||||||
AC_SYS_LARGEFILE
|
|
||||||
|
|
||||||
dnl Checks for typedefs, structures, and compiler characteristics.
|
|
||||||
AC_C_CONST
|
|
||||||
AC_TYPE_UID_T
|
|
||||||
AC_TYPE_OFF_T
|
|
||||||
AC_TYPE_PID_T
|
|
||||||
AC_TYPE_MODE_T
|
|
||||||
AC_HEADER_STAT
|
|
||||||
AC_CHECK_MEMBERS([struct stat.st_rdev])
|
|
||||||
AC_HEADER_TIME
|
|
||||||
AC_STRUCT_TM
|
|
||||||
|
|
||||||
if test "$ac_cv_header_utmp_h" = "yes"; then
|
|
||||||
AC_CACHE_CHECK(for ut_host in struct utmp,
|
|
||||||
ac_cv_struct_utmp_ut_host,
|
|
||||||
AC_COMPILE_IFELSE(
|
|
||||||
[AC_LANG_PROGRAM([#include <utmp.h>],
|
|
||||||
[struct utmp ut; char *cp = ut.ut_host;]
|
|
||||||
)],
|
|
||||||
[ac_cv_struct_utmp_ut_host=yes],
|
|
||||||
[ac_cv_struct_utmp_ut_host=no]
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
if test "$ac_cv_struct_utmp_ut_host" = "yes"; then
|
|
||||||
AC_DEFINE(UT_HOST, 1, [Define if you have ut_host in struct utmp.])
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_CACHE_CHECK(for ut_user in struct utmp,
|
|
||||||
ac_cv_struct_utmp_ut_user,
|
|
||||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([#include <utmp.h>],
|
|
||||||
[struct utmp ut; char *cp = ut.ut_user;]
|
|
||||||
)],
|
|
||||||
[ac_cv_struct_utmp_ut_user=yes],
|
|
||||||
[ac_cv_struct_utmp_ut_user=no]
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
if test "$ac_cv_struct_utmp_ut_user" = "no"; then
|
|
||||||
AC_DEFINE(ut_user, ut_name,
|
|
||||||
[Define to ut_name if struct utmp has ut_name (not ut_user).])
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "$ac_cv_header_lastlog_h" = "yes"; 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 "$ac_cv_struct_lastlog_ll_host" = "yes"; then
|
|
||||||
AC_DEFINE(HAVE_LL_HOST, 1,
|
|
||||||
[Define if struct lastlog has ll_host])
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl Checks for library functions.
|
|
||||||
AC_TYPE_GETGROUPS
|
|
||||||
AC_TYPE_SIGNAL
|
|
||||||
AC_FUNC_UTIME_NULL
|
|
||||||
AC_FUNC_STRFTIME
|
|
||||||
AC_REPLACE_FUNCS(mkdir putgrent putpwent putspent rename rmdir)
|
|
||||||
AC_REPLACE_FUNCS(sgetgrent sgetpwent sgetspent)
|
|
||||||
AC_REPLACE_FUNCS(snprintf strcasecmp strdup strerror strstr)
|
|
||||||
|
|
||||||
AC_CHECK_FUNC(setpgrp)
|
|
||||||
AC_FUNC_SETPGRP
|
|
||||||
|
|
||||||
if test "$ac_cv_header_shadow_h" = "yes"; then
|
|
||||||
AC_CACHE_CHECK(for working shadow group support,
|
|
||||||
ac_cv_libc_shadowgrp,
|
|
||||||
AC_RUN_IFELSE([AC_LANG_SOURCE([
|
|
||||||
#include <shadow.h>
|
|
||||||
main()
|
|
||||||
{
|
|
||||||
struct sgrp *sg = sgetsgent("test:x::");
|
|
||||||
/* NYS libc on Red Hat 3.0.3 has broken shadow group support */
|
|
||||||
return !sg || !sg->sg_adm || !sg->sg_mem;
|
|
||||||
}]
|
|
||||||
)],
|
|
||||||
[ac_cv_libc_shadowgrp=yes],
|
|
||||||
[ac_cv_libc_shadowgrp=no],
|
|
||||||
[ac_cv_libc_shadowgrp=no]
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
if test "$ac_cv_libc_shadowgrp" = "yes"; then
|
|
||||||
AC_DEFINE(HAVE_SHADOWGRP, 1, [Have working shadow group support in libc])
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
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 utmp], shadow_cv_utmpdir,
|
|
||||||
[for shadow_cv_utmpdir in /var/run /var/adm /usr/adm /etc none; do
|
|
||||||
if test -f $shadow_cv_utmpdir/utmp; then
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done])
|
|
||||||
if test "$shadow_cv_utmpdir" = "none"; then
|
|
||||||
AC_MSG_WARN(utmp file not found)
|
|
||||||
fi
|
|
||||||
AC_DEFINE_UNQUOTED(_UTMP_FILE, "$shadow_cv_utmpdir/utmp",
|
|
||||||
[Path for utmp file.])
|
|
||||||
|
|
||||||
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(_WTMP_FILE, "$shadow_cv_logdir/wtmp",
|
|
||||||
[Path for wtmp file.])
|
|
||||||
AC_DEFINE_UNQUOTED(LASTLOG_FILE, "$shadow_cv_logdir/lastlog",
|
|
||||||
[Path for lastlog file.])
|
|
||||||
AC_DEFINE_UNQUOTED(FAILLOG_FILE, "$shadow_cv_logdir/faillog",
|
|
||||||
[Path for faillog file.])
|
|
||||||
|
|
||||||
AC_CACHE_CHECK([location of the passwd program], shadow_cv_passwd_dir,
|
|
||||||
[if test -f /usr/bin/passwd; then
|
|
||||||
shadow_cv_passwd_dir=/usr/bin
|
|
||||||
else
|
|
||||||
shadow_cv_passwd_dir=/bin
|
|
||||||
fi])
|
|
||||||
AC_DEFINE_UNQUOTED(PASSWD_PROGRAM, "$shadow_cv_passwd_dir/passwd",
|
|
||||||
[Path to passwd program.])
|
|
||||||
|
|
||||||
dnl XXX - quick hack, should disappear before anyone notices :).
|
|
||||||
AC_DEFINE(USE_SYSLOG, 1, [Define to use syslog().])
|
|
||||||
AC_DEFINE(RLOGIN, 1, [Define if login should support the -r flag for rlogind.])
|
|
||||||
AC_DEFINE(RUSEROK, 0, [Define to the ruserok() "success" return value (0 or 1).])
|
|
||||||
|
|
||||||
AC_ARG_ENABLE(shadowgrp,
|
|
||||||
[AC_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,
|
|
||||||
[AC_HELP_STRING([--enable-man],
|
|
||||||
[regenerate roff man pages from Docbook @<:@default=no@:>@])],
|
|
||||||
[enable_man=yes],
|
|
||||||
[enable_man=no]
|
|
||||||
)
|
|
||||||
|
|
||||||
AC_ARG_WITH(audit,
|
|
||||||
[AC_HELP_STRING([--with-audit], [use auditing support @<:@default=yes if found@:>@])],
|
|
||||||
[with_audit=$withval], [with_audit=maybe])
|
|
||||||
AC_ARG_WITH(libpam,
|
|
||||||
[AC_HELP_STRING([--with-libpam], [use libpam for PAM support @<:@default=yes if found@:>@])],
|
|
||||||
[with_libpam=$withval], [with_libpam=maybe])
|
|
||||||
AC_ARG_WITH(selinux,
|
|
||||||
[AC_HELP_STRING([--with-selinux], [use SELinux support @<:@default=yes if found@:>@])],
|
|
||||||
[with_selinux=$withval], [with_selinux=maybe])
|
|
||||||
AC_ARG_WITH(skey,
|
|
||||||
[AC_HELP_STRING([--with-skey], [use S/Key support @<:@default=no@:>@])],
|
|
||||||
[with_skey=$withval], [with_skey=no])
|
|
||||||
AC_ARG_WITH(libcrack,
|
|
||||||
[AC_HELP_STRING([--with-libcrack], [use libcrack @<:@default=yes if found and if PAM not enabled@:>@])],
|
|
||||||
[with_libcrack=$withval], [with_libcrack=no])
|
|
||||||
AC_ARG_WITH(sha-crypt,
|
|
||||||
[AC_HELP_STRING([--with-sha-crypt], [allow the SHA256 and SHA512 password encryption algorithms @<:@default=yes@:>@])],
|
|
||||||
[with_sha_crypt=$withval], [with_sha_crypt=yes])
|
|
||||||
|
|
||||||
AM_CONDITIONAL(USE_SHA_CRYPT, test "x$with_sha_crypt" = "xyes")
|
|
||||||
if test "$with_sha_crypt" = "yes"; then
|
|
||||||
AC_DEFINE(USE_SHA_CRYPT, 1, [Define to allow the SHA256 and SHA512 password encryption algorithms])
|
|
||||||
fi
|
|
||||||
|
|
||||||
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(inet_ntoa, inet)
|
|
||||||
AC_SEARCH_LIBS(socket, socket)
|
|
||||||
AC_SEARCH_LIBS(gethostbyname, nsl)
|
|
||||||
|
|
||||||
if test "$enable_shadowgrp" = "yes"; then
|
|
||||||
AC_DEFINE(SHADOWGRP, 1, [Define to support the shadow group file.])
|
|
||||||
fi
|
|
||||||
AM_CONDITIONAL(SHADOWGRP, test "x$enable_shadowgrp" = "xyes")
|
|
||||||
|
|
||||||
if test "$enable_man" = "yes"; then
|
|
||||||
dnl
|
|
||||||
dnl Check for xsltproc
|
|
||||||
dnl
|
|
||||||
AC_PATH_PROG([XSLTPROC], [xsltproc])
|
|
||||||
if test -z "$XSLTPROC"; then
|
|
||||||
enable_man=no
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl check for DocBook DTD and stylesheets in the local catalog.
|
|
||||||
JH_CHECK_XML_CATALOG([-//OASIS//DTD DocBook XML V4.1.2//EN],
|
|
||||||
[DocBook XML DTD V4.1.2], [], enable_man=no)
|
|
||||||
JH_CHECK_XML_CATALOG([http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl],
|
|
||||||
[DocBook XSL Stylesheets >= 1.70.1], [], enable_man=no)
|
|
||||||
fi
|
|
||||||
AM_CONDITIONAL(ENABLE_REGENERATE_MAN, test x$enable_man != xno)
|
|
||||||
|
|
||||||
AC_SUBST(LIBCRYPT)
|
|
||||||
AC_CHECK_LIB(crypt, crypt, [LIBCRYPT=-lcrypt],
|
|
||||||
[AC_MSG_ERROR([crypt() not found])])
|
|
||||||
|
|
||||||
AC_SUBST(LIBAUDIT)
|
|
||||||
if test "$with_audit" != "no"; then
|
|
||||||
AC_CHECK_HEADER(libaudit.h, [audit_header="yes"], [audit_header="no"])
|
|
||||||
if test "$audit_header$with_audit" = "noyes" ; then
|
|
||||||
AC_MSG_ERROR([libaudit.h is missing])
|
|
||||||
elif test "$audit_header" = "yes"; then
|
|
||||||
AC_CHECK_LIB(audit, audit_log_acct_message,
|
|
||||||
[audit_lib="yes"], [audit_lib="no"])
|
|
||||||
if test "$audit_lib$with_audit" = "noyes" ; then
|
|
||||||
AC_MSG_ERROR([libaudit not found])
|
|
||||||
elif test "$audit_lib" = "no" ; then
|
|
||||||
with_audit="no"
|
|
||||||
else
|
|
||||||
AC_DEFINE(WITH_AUDIT, 1,
|
|
||||||
[Define if you want to enable Audit messages])
|
|
||||||
LIBAUDIT="-laudit"
|
|
||||||
with_audit="yes"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
with_audit="no"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_SUBST(LIBCRACK)
|
|
||||||
if test "$with_libcrack" = "yes"; then
|
|
||||||
echo "checking cracklib flavour, don't be surprised by the results"
|
|
||||||
AC_CHECK_LIB(crack, FascistCheck,
|
|
||||||
[LIBCRACK=-lcrack AC_DEFINE(HAVE_LIBCRACK, 1, [Defined if you have libcrack.])])
|
|
||||||
AC_CHECK_LIB(crack, FascistHistory,
|
|
||||||
AC_DEFINE(HAVE_LIBCRACK_HIST, 1, [Defined if you have the ts&szs cracklib.]))
|
|
||||||
AC_CHECK_LIB(crack, FascistHistoryPw,
|
|
||||||
AC_DEFINE(HAVE_LIBCRACK_PW, 1, [Defined if it includes *Pw functions.]))
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_SUBST(LIBSELINUX)
|
|
||||||
if test "$with_selinux" != "no"; then
|
|
||||||
AC_CHECK_HEADERS(selinux/selinux.h, [selinux_header="yes"], [selinux_header="no"])
|
|
||||||
if test "$selinux_header$with_selinux" = "noyes" ; then
|
|
||||||
AC_MSG_ERROR([selinux/selinux.h is missing])
|
|
||||||
elif test "$selinux_header" = "yes" ; then
|
|
||||||
AC_CHECK_LIB(selinux, is_selinux_enabled,
|
|
||||||
[selinux_lib="yes"], [selinux_lib="no"])
|
|
||||||
if test "$selinux_lib$with_selinux" = "noyes" ; then
|
|
||||||
AC_MSG_ERROR([libselinux not found])
|
|
||||||
elif test "$selinux_lib" = "no" ; then
|
|
||||||
with_selinux="no"
|
|
||||||
else
|
|
||||||
AC_DEFINE(WITH_SELINUX, 1,
|
|
||||||
[Build shadow with SELinux support])
|
|
||||||
LIBSELINUX="-lselinux"
|
|
||||||
with_selinux="yes"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
with_selinux="no"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_SUBST(LIBPAM)
|
|
||||||
if test "$with_libpam" != "no"; then
|
|
||||||
AC_CHECK_LIB(pam, pam_start,
|
|
||||||
[pam_lib="yes"], [pam_lib="no"])
|
|
||||||
if test "$pam_lib$with_libpam" = "noyes" ; then
|
|
||||||
AC_MSG_ERROR(libpam not found)
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_CHECK_LIB(pam_misc, main,
|
|
||||||
[pam_misc_lib="yes"], [pam_misc_lib="no"])
|
|
||||||
if test "$pam_misc_lib$with_libpam" = "noyes" ; then
|
|
||||||
AC_MSG_ERROR(libpam_misc not found)
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "$pam_lib$pam_misc_lib" = "yesyes" ; then
|
|
||||||
with_libpam="yes"
|
|
||||||
else
|
|
||||||
with_libpam="no"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
dnl Now with_libpam is either yes or no
|
|
||||||
if test "$with_libpam" = "yes"; then
|
|
||||||
AC_DEFINE(USE_PAM, 1, [Define to support Pluggable Authentication Modules])
|
|
||||||
AM_CONDITIONAL(USE_PAM, [true])
|
|
||||||
LIBPAM="-lpam -lpam_misc"
|
|
||||||
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.])
|
|
||||||
AM_CONDITIONAL(USE_PAM, [false])
|
|
||||||
AC_MSG_CHECKING(use login and su access checking if PAM not used)
|
|
||||||
AC_MSG_RESULT(yes)
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_SUBST(LIBSKEY)
|
|
||||||
AC_SUBST(LIBMD)
|
|
||||||
if test "$with_skey" = "yes"; then
|
|
||||||
AC_CHECK_LIB(md, MD5Init, [LIBMD=-lmd])
|
|
||||||
AC_CHECK_LIB(skey, skeychallenge, [LIBSKEY=-lskey],
|
|
||||||
[AC_MSG_ERROR([liskey missing. You can download S/Key source code from http://rsync1.it.gentoo.org/gentoo/distfiles/skey-1.1.5.tar.bz2])])
|
|
||||||
AC_DEFINE(SKEY, 1, [Define to support S/Key logins.])
|
|
||||||
AC_TRY_COMPILE([
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <skey.h>
|
|
||||||
],[
|
|
||||||
skeychallenge((void*)0, (void*)0, (void*)0, 0);
|
|
||||||
],[AC_DEFINE(SKEY_BSD_STYLE, 1, [Define to support newer BSD S/Key API])])
|
|
||||||
fi
|
|
||||||
|
|
||||||
AM_GNU_GETTEXT_VERSION(0.16)
|
|
||||||
AM_GNU_GETTEXT([external], [need-ngettext])
|
|
||||||
AM_CONDITIONAL(USE_NLS, test "x$USE_NLS" = "xyes")
|
|
||||||
|
|
||||||
AC_CONFIG_FILES([
|
|
||||||
Makefile
|
|
||||||
po/Makefile.in
|
|
||||||
doc/Makefile
|
|
||||||
man/Makefile
|
|
||||||
man/po/Makefile.in
|
|
||||||
man/cs/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/zh_CN/Makefile
|
|
||||||
man/zh_TW/Makefile
|
|
||||||
libmisc/Makefile
|
|
||||||
lib/Makefile
|
|
||||||
src/Makefile
|
|
||||||
contrib/Makefile
|
|
||||||
etc/Makefile
|
|
||||||
etc/pam.d/Makefile
|
|
||||||
shadow.spec
|
|
||||||
])
|
|
||||||
AC_OUTPUT
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo "shadow will be compiled with the following features:"
|
|
||||||
echo
|
|
||||||
echo " auditing support: $with_audit"
|
|
||||||
echo " CrackLib support: $with_libcrack"
|
|
||||||
echo " PAM support: $with_libpam"
|
|
||||||
echo " SELinux support: $with_selinux"
|
|
||||||
echo " shadow group support: $enable_shadowgrp"
|
|
||||||
echo " S/Key support: $with_skey"
|
|
||||||
echo " SHA passwords encryption: $with_sha_crypt"
|
|
||||||
echo
|
|
||||||
@@ -1,6 +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 = README adduser.c adduser-old.c adduser.sh adduser2.sh \
|
|
||||||
atudel groupmems.shar pwdauth.c shadow-anonftp.patch \
|
|
||||||
udbachk.tgz
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
People keep sending various adduser programs and scripts... They are
|
|
||||||
all in this directory. I haven't tested them, use at your own risk.
|
|
||||||
Anyway, the best one I've seen so far is adduser-3.x from Debian.
|
|
||||||
|
|
||||||
atudel is a perl script to remove at jobs owned by the specified user
|
|
||||||
(atrm in at-2.9 for Linux can't do that).
|
|
||||||
|
|
||||||
udbachk.tgz is a passwd/group/shadow file integrity checker.
|
|
||||||
|
|
||||||
--marekm
|
|
||||||
@@ -1,300 +0,0 @@
|
|||||||
/****
|
|
||||||
** 03/17/96
|
|
||||||
** hacked a bit more, removed unused code, cleaned up for gcc -Wall.
|
|
||||||
** --marekm
|
|
||||||
**
|
|
||||||
** 02/26/96
|
|
||||||
** modified to call shadow utils (useradd,chage,passwd) on shadowed
|
|
||||||
** systems - Cristian Gafton, gafton@sorosis.ro
|
|
||||||
**
|
|
||||||
** 6/27/95
|
|
||||||
** shadow-adduser 1.4:
|
|
||||||
**
|
|
||||||
** now it copies the /etc/skel dir into the person's dir,
|
|
||||||
** makes the mail folders, changed some defaults and made a 'make
|
|
||||||
** install' just for the hell of it.
|
|
||||||
**
|
|
||||||
** Greg Gallagher
|
|
||||||
** CIN.Net
|
|
||||||
**
|
|
||||||
** 1/28/95
|
|
||||||
** shadow-adduser 1.3:
|
|
||||||
**
|
|
||||||
** Basically a bug-fix on my additions in 1.2. Thanx to Terry Stewart
|
|
||||||
** (stew@texas.net) for pointing out one of the many idiotic bugs I introduced.
|
|
||||||
** It was such a stupid bug that I would have never seen it myself.
|
|
||||||
**
|
|
||||||
** Brandon
|
|
||||||
*****
|
|
||||||
** 01/27/95
|
|
||||||
**
|
|
||||||
** shadow-adduser 1.2:
|
|
||||||
** I took the C source from adduser-shadow (credits are below) and made
|
|
||||||
** it a little more worthwhile. Many small changes... Here's
|
|
||||||
** the ones I can remember:
|
|
||||||
**
|
|
||||||
** Removed support for non-shadowed systems (if you don't have shadow,
|
|
||||||
** use the original adduser, don't get this shadow version!)
|
|
||||||
** Added support for the correct /etc/shadow fields (Min days before
|
|
||||||
** password change, max days before password change, Warning days,
|
|
||||||
** and how many days from expiry date does the account go invalid)
|
|
||||||
** The previous version just left all of those fields blank.
|
|
||||||
** There is still one field left (expiry date for the account, period)
|
|
||||||
** which I have left blank because I do not use it and didn't want to
|
|
||||||
** spend any more time on this. I'm sure someone will put it in and
|
|
||||||
** tack another plethora of credits on here. :)
|
|
||||||
** Added in the password date field, which should always reflect the last
|
|
||||||
** date the password was changed, for expiry purposes. "passwd" always
|
|
||||||
** updates this field, so the adduser program should set it up right
|
|
||||||
** initially (or a user could keep thier initial password forever ;)
|
|
||||||
** The number is in days since Jan 1st, 1970.
|
|
||||||
**
|
|
||||||
** Have fun with it, and someone please make
|
|
||||||
** a real version(this is still just a hack)
|
|
||||||
** for us all to use (and Email it to me???)
|
|
||||||
**
|
|
||||||
** Brandon
|
|
||||||
** photon@usis.com
|
|
||||||
**
|
|
||||||
*****
|
|
||||||
** adduser 1.0: add a new user account (For systems not using shadow)
|
|
||||||
** With a nice little interface and a will to do all the work for you.
|
|
||||||
**
|
|
||||||
** Craig Hagan
|
|
||||||
** hagan@opine.cs.umass.edu
|
|
||||||
**
|
|
||||||
** Modified to really work, look clean, and find unused uid by Chris Cappuccio
|
|
||||||
** chris@slinky.cs.umass.edu
|
|
||||||
**
|
|
||||||
*****
|
|
||||||
**
|
|
||||||
** 01/19/95
|
|
||||||
**
|
|
||||||
** FURTHER modifications to enable shadow passwd support (kludged, but
|
|
||||||
** no more so than the original) by Dan Crowson - dcrowson@mo.net
|
|
||||||
**
|
|
||||||
** Search on DAN for all changes...
|
|
||||||
**
|
|
||||||
*****
|
|
||||||
**
|
|
||||||
** cc -O -o adduser adduser.c
|
|
||||||
** Use gcc if you have it... (political reasons beyond my control) (chris)
|
|
||||||
**
|
|
||||||
** I've gotten this program to work with success under Linux (without
|
|
||||||
** shadow) and SunOS 4.1.3. I would assume it should work pretty well
|
|
||||||
** on any system that uses no shadow. (chris)
|
|
||||||
**
|
|
||||||
** If you have no crypt() then try
|
|
||||||
** cc -DNO_CRYPT -O -o adduser adduser.c xfdes.c
|
|
||||||
** I'm not sure how login operates with no crypt()... I guess
|
|
||||||
** the same way we're doing it here.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <pwd.h>
|
|
||||||
#include <grp.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <time.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/timeb.h>
|
|
||||||
#include <sys/time.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
|
|
||||||
#define DEFAULT_SHELL "/bin/bash" /* because BASH is your friend */
|
|
||||||
#define DEFAULT_HOME "/home"
|
|
||||||
#define USERADD_PATH "/usr/sbin/useradd"
|
|
||||||
#define CHAGE_PATH "/usr/sbin/chage"
|
|
||||||
#define PASSWD_PATH "/usr/bin/passwd"
|
|
||||||
#define DEFAULT_GROUP 100
|
|
||||||
|
|
||||||
#define DEFAULT_MAX_PASS 60
|
|
||||||
#define DEFAULT_WARN_PASS 10
|
|
||||||
/* if you use this feature, you will get a lot of complaints from users
|
|
||||||
who rarely use their accounts :) (something like 3 months would be
|
|
||||||
more reasonable) --marekm */
|
|
||||||
#define DEFAULT_USER_DIE /* 10 */ 0
|
|
||||||
|
|
||||||
void main()
|
|
||||||
{
|
|
||||||
char foo[32];
|
|
||||||
char uname[9],person[32],dir[32],shell[32];
|
|
||||||
unsigned int group,min_pass,max_pass,warn_pass,user_die;
|
|
||||||
/* the group and uid of the new user */
|
|
||||||
int bad=0,done=0,correct=0,gets_warning=0;
|
|
||||||
char cmd[255];
|
|
||||||
struct group *grp;
|
|
||||||
|
|
||||||
/* flags, in order:
|
|
||||||
* bad to see if the username is in /etc/passwd, or if strange stuff has
|
|
||||||
* been typed if the user might be put in group 0
|
|
||||||
* done allows the program to exit when a user has been added
|
|
||||||
* correct loops until a password is found that isn't in /etc/passwd
|
|
||||||
* gets_warning allows the fflush to be skipped for the first gets
|
|
||||||
* so that output is still legible
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* The real program starts HERE! */
|
|
||||||
|
|
||||||
if(geteuid()!=0)
|
|
||||||
{
|
|
||||||
printf("It seems you don't have access to add a new user. Try\n");
|
|
||||||
printf("logging in as root or su root to gain super-user access.\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Sanity checks
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (!(grp=getgrgid(DEFAULT_GROUP))){
|
|
||||||
printf("Error: the default group %d does not exist on this system!\n",
|
|
||||||
DEFAULT_GROUP);
|
|
||||||
printf("adduser must be recompiled.\n");
|
|
||||||
exit(1);
|
|
||||||
};
|
|
||||||
|
|
||||||
while(!correct) { /* loop until a "good" uname is chosen */
|
|
||||||
while(!done) {
|
|
||||||
printf("\nLogin to add (^C to quit): ");
|
|
||||||
if(gets_warning) /* if the warning was already shown */
|
|
||||||
fflush(stdout); /* fflush stdout, otherwise set the flag */
|
|
||||||
else
|
|
||||||
gets_warning=1;
|
|
||||||
|
|
||||||
gets(uname);
|
|
||||||
if(!strlen(uname)) {
|
|
||||||
printf("Empty input.\n");
|
|
||||||
done=0;
|
|
||||||
continue;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* what I saw here before made me think maybe I was running DOS */
|
|
||||||
/* might this be a solution? (chris) */
|
|
||||||
if (getpwnam(uname) != NULL) {
|
|
||||||
printf("That name is in use, choose another.\n");
|
|
||||||
done=0;
|
|
||||||
} else
|
|
||||||
done=1;
|
|
||||||
}; /* done, we have a valid new user name */
|
|
||||||
|
|
||||||
/* all set, get the rest of the stuff */
|
|
||||||
printf("\nEditing information for new user [%s]\n",uname);
|
|
||||||
|
|
||||||
printf("\nFull Name [%s]: ",uname);
|
|
||||||
gets(person);
|
|
||||||
if (!strlen(person)) {
|
|
||||||
bzero(person,sizeof(person));
|
|
||||||
strcpy(person,uname);
|
|
||||||
};
|
|
||||||
|
|
||||||
do {
|
|
||||||
bad=0;
|
|
||||||
printf("GID [%d]: ",DEFAULT_GROUP);
|
|
||||||
gets(foo);
|
|
||||||
if (!strlen(foo))
|
|
||||||
group=DEFAULT_GROUP;
|
|
||||||
else
|
|
||||||
if (isdigit (*foo)) {
|
|
||||||
group = atoi(foo);
|
|
||||||
if (! (grp = getgrgid (group))) {
|
|
||||||
printf("unknown gid %s\n",foo);
|
|
||||||
group=DEFAULT_GROUP;
|
|
||||||
bad=1;
|
|
||||||
};
|
|
||||||
} else
|
|
||||||
if ((grp = getgrnam (foo)))
|
|
||||||
group = grp->gr_gid;
|
|
||||||
else {
|
|
||||||
printf("unknown group %s\n",foo);
|
|
||||||
group=DEFAULT_GROUP;
|
|
||||||
bad=1;
|
|
||||||
}
|
|
||||||
if (group==0){ /* You're not allowed to make root group users! */
|
|
||||||
printf("Creation of root group users not allowed (must be done by hand)\n");
|
|
||||||
group=DEFAULT_GROUP;
|
|
||||||
bad=1;
|
|
||||||
};
|
|
||||||
} while(bad);
|
|
||||||
|
|
||||||
|
|
||||||
fflush(stdin);
|
|
||||||
|
|
||||||
printf("\nIf home dir ends with a / then [%s] will be appended to it\n",uname);
|
|
||||||
printf("Home Directory [%s/%s]: ",DEFAULT_HOME,uname);
|
|
||||||
fflush(stdout);
|
|
||||||
gets(dir);
|
|
||||||
if (!strlen(dir)) { /* hit return */
|
|
||||||
sprintf(dir,"%s/%s",DEFAULT_HOME,uname);
|
|
||||||
fflush(stdin);
|
|
||||||
} else
|
|
||||||
if (dir[strlen(dir)-1]=='/')
|
|
||||||
sprintf(dir,"%s%s",dir,uname);
|
|
||||||
|
|
||||||
printf("\nShell [%s]: ",DEFAULT_SHELL);
|
|
||||||
fflush(stdout);
|
|
||||||
gets(shell);
|
|
||||||
if (!strlen(shell))
|
|
||||||
sprintf(shell,"%s",DEFAULT_SHELL);
|
|
||||||
|
|
||||||
printf("\nMin. Password Change Days [0]: ");
|
|
||||||
gets(foo);
|
|
||||||
min_pass=atoi(foo);
|
|
||||||
|
|
||||||
printf("Max. Password Change Days [%d]: ",DEFAULT_MAX_PASS);
|
|
||||||
gets(foo);
|
|
||||||
if (strlen(foo) > 1)
|
|
||||||
max_pass = atoi(foo);
|
|
||||||
else
|
|
||||||
max_pass = DEFAULT_MAX_PASS;
|
|
||||||
|
|
||||||
printf("Password Warning Days [%d]: ",DEFAULT_WARN_PASS);
|
|
||||||
gets(foo);
|
|
||||||
warn_pass = atoi(foo);
|
|
||||||
if (warn_pass==0)
|
|
||||||
warn_pass = DEFAULT_WARN_PASS;
|
|
||||||
|
|
||||||
printf("Days after Password Expiry for Account Locking [%d]: ",DEFAULT_USER_DIE);
|
|
||||||
gets(foo);
|
|
||||||
user_die = atoi(foo);
|
|
||||||
if (user_die == 0)
|
|
||||||
user_die = DEFAULT_USER_DIE;
|
|
||||||
|
|
||||||
printf("\nInformation for new user [%s] [%s]:\n",uname,person);
|
|
||||||
printf("Home directory: [%s] Shell: [%s]\n",dir,shell);
|
|
||||||
printf("GID: [%d]\n",group);
|
|
||||||
printf("MinPass: [%d] MaxPass: [%d] WarnPass: [%d] UserExpire: [%d]\n",
|
|
||||||
min_pass,max_pass,warn_pass,user_die);
|
|
||||||
printf("\nIs this correct? [y/N]: ");
|
|
||||||
fflush(stdout);
|
|
||||||
gets(foo);
|
|
||||||
|
|
||||||
done=bad=correct=(foo[0]=='y'||foo[0]=='Y');
|
|
||||||
|
|
||||||
if(bad!=1)
|
|
||||||
printf("\nUser [%s] not added\n",uname);
|
|
||||||
}
|
|
||||||
|
|
||||||
bzero(cmd,sizeof(cmd));
|
|
||||||
sprintf(cmd,"%s -g %d -d %s -s %s -c \"%s\" -m -k /etc/skel %s",
|
|
||||||
USERADD_PATH,group,dir,shell,person,uname);
|
|
||||||
printf("Calling useradd to add new user:\n%s\n",cmd);
|
|
||||||
if(system(cmd)){
|
|
||||||
printf("User add failed!\n");
|
|
||||||
exit(errno);
|
|
||||||
};
|
|
||||||
bzero(cmd,sizeof(cmd));
|
|
||||||
sprintf(cmd,"%s -m %d -M %d -W %d -I %d %s", CHAGE_PATH,
|
|
||||||
min_pass,max_pass,warn_pass,user_die,uname);
|
|
||||||
printf("%s\n",cmd);
|
|
||||||
if(system(cmd)){
|
|
||||||
printf("There was an error setting password expire values\n");
|
|
||||||
exit(errno);
|
|
||||||
};
|
|
||||||
bzero(cmd,sizeof(cmd));
|
|
||||||
sprintf(cmd,"%s %s",PASSWD_PATH,uname);
|
|
||||||
system(cmd);
|
|
||||||
printf("\nDone.\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,502 +0,0 @@
|
|||||||
/****
|
|
||||||
** 04/21/96
|
|
||||||
** hacked even more, replaced gets() with something slightly harder to buffer
|
|
||||||
** overflow. Added support for setting a default quota on new account, with
|
|
||||||
** edquota -p. Other cleanups for security, I let some users run adduser suid
|
|
||||||
** root to add new accounts. (overflow checks, clobber environment, valid
|
|
||||||
** shell checks, restrictions on gid + home dir settings).
|
|
||||||
|
|
||||||
** Added max. username length. Used syslog() a bit for important events.
|
|
||||||
** Support to immediately expire account with passwd -e.
|
|
||||||
|
|
||||||
** Called it version 2.0! Because I felt like it!
|
|
||||||
|
|
||||||
** -- Chris, chris@ferret.lmh.ox.ac.uk
|
|
||||||
|
|
||||||
** 03/17/96
|
|
||||||
** hacked a bit more, removed unused code, cleaned up for gcc -Wall.
|
|
||||||
** --marekm
|
|
||||||
**
|
|
||||||
** 02/26/96
|
|
||||||
** modified to call shadow utils (useradd,chage,passwd) on shadowed
|
|
||||||
** systems - Cristian Gafton, gafton@sorosis.ro
|
|
||||||
**
|
|
||||||
** 6/27/95
|
|
||||||
** shadow-adduser 1.4:
|
|
||||||
**
|
|
||||||
** now it copies the /etc/skel dir into the person's dir,
|
|
||||||
** makes the mail folders, changed some defaults and made a 'make
|
|
||||||
** install' just for the hell of it.
|
|
||||||
**
|
|
||||||
** Greg Gallagher
|
|
||||||
** CIN.Net
|
|
||||||
**
|
|
||||||
** 1/28/95
|
|
||||||
** shadow-adduser 1.3:
|
|
||||||
**
|
|
||||||
** Basically a bug-fix on my additions in 1.2. Thanx to Terry Stewart
|
|
||||||
** (stew@texas.net) for pointing out one of the many idiotic bugs I introduced.
|
|
||||||
** It was such a stupid bug that I would have never seen it myself.
|
|
||||||
**
|
|
||||||
** Brandon
|
|
||||||
*****
|
|
||||||
** 01/27/95
|
|
||||||
**
|
|
||||||
** shadow-adduser 1.2:
|
|
||||||
** I took the C source from adduser-shadow (credits are below) and made
|
|
||||||
** it a little more worthwhile. Many small changes... Here's
|
|
||||||
** the ones I can remember:
|
|
||||||
**
|
|
||||||
** Removed support for non-shadowed systems (if you don't have shadow,
|
|
||||||
** use the original adduser, don't get this shadow version!)
|
|
||||||
** Added support for the correct /etc/shadow fields (Min days before
|
|
||||||
** password change, max days before password change, Warning days,
|
|
||||||
** and how many days from expiry date does the account go invalid)
|
|
||||||
** The previous version just left all of those fields blank.
|
|
||||||
** There is still one field left (expiry date for the account, period)
|
|
||||||
** which I have left blank because I do not use it and didn't want to
|
|
||||||
** spend any more time on this. I'm sure someone will put it in and
|
|
||||||
** tack another plethora of credits on here. :)
|
|
||||||
** Added in the password date field, which should always reflect the last
|
|
||||||
** date the password was changed, for expiry purposes. "passwd" always
|
|
||||||
** updates this field, so the adduser program should set it up right
|
|
||||||
** initially (or a user could keep thier initial password forever ;)
|
|
||||||
** The number is in days since Jan 1st, 1970.
|
|
||||||
**
|
|
||||||
** Have fun with it, and someone please make
|
|
||||||
** a real version(this is still just a hack)
|
|
||||||
** for us all to use (and Email it to me???)
|
|
||||||
**
|
|
||||||
** Brandon
|
|
||||||
** photon@usis.com
|
|
||||||
**
|
|
||||||
*****
|
|
||||||
** adduser 1.0: add a new user account (For systems not using shadow)
|
|
||||||
** With a nice little interface and a will to do all the work for you.
|
|
||||||
**
|
|
||||||
** Craig Hagan
|
|
||||||
** hagan@opine.cs.umass.edu
|
|
||||||
**
|
|
||||||
** Modified to really work, look clean, and find unused uid by Chris Cappuccio
|
|
||||||
** chris@slinky.cs.umass.edu
|
|
||||||
**
|
|
||||||
*****
|
|
||||||
**
|
|
||||||
** 01/19/95
|
|
||||||
**
|
|
||||||
** FURTHER modifications to enable shadow passwd support (kludged, but
|
|
||||||
** no more so than the original) by Dan Crowson - dcrowson@mo.net
|
|
||||||
**
|
|
||||||
** Search on DAN for all changes...
|
|
||||||
**
|
|
||||||
*****
|
|
||||||
**
|
|
||||||
** cc -O -o adduser adduser.c
|
|
||||||
** Use gcc if you have it... (political reasons beyond my control) (chris)
|
|
||||||
**
|
|
||||||
** I've gotten this program to work with success under Linux (without
|
|
||||||
** shadow) and SunOS 4.1.3. I would assume it should work pretty well
|
|
||||||
** on any system that uses no shadow. (chris)
|
|
||||||
**
|
|
||||||
** If you have no crypt() then try
|
|
||||||
** cc -DNO_CRYPT -O -o adduser adduser.c xfdes.c
|
|
||||||
** I'm not sure how login operates with no crypt()... I guess
|
|
||||||
** the same way we're doing it here.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <pwd.h>
|
|
||||||
#include <grp.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <time.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/timeb.h>
|
|
||||||
#include <sys/time.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <syslog.h>
|
|
||||||
|
|
||||||
#define IMMEDIATE_CHANGE /* Expire newly created password, must be changed
|
|
||||||
* immediately upon next login */
|
|
||||||
#define HAVE_QUOTAS /* Obvious */
|
|
||||||
#define EXPIRE_VALS_SET /* If defined, 'normal' users can't change
|
|
||||||
* password expiry values (if running suid root) */
|
|
||||||
|
|
||||||
#define HAVE_GETUSERSHELL /* FIXME: Isn't this defined in config.h too? */
|
|
||||||
#define LOGGING /* If we want to log various things to syslog */
|
|
||||||
#define MAX_USRNAME 8 /* Longer usernames seem to work on my system....
|
|
||||||
* But they're probably a poor idea */
|
|
||||||
|
|
||||||
|
|
||||||
#define DEFAULT_SHELL "/bin/bash" /* because BASH is your friend */
|
|
||||||
#define DEFAULT_HOME "/home"
|
|
||||||
#define USERADD_PATH "/usr/sbin/useradd"
|
|
||||||
#define CHAGE_PATH "/usr/bin/chage"
|
|
||||||
#define PASSWD_PATH "/usr/bin/passwd"
|
|
||||||
#define EDQUOTA_PATH "/usr/sbin/edquota"
|
|
||||||
#define QUOTA_DEFAULT "defuser"
|
|
||||||
#define DEFAULT_GROUP 100
|
|
||||||
|
|
||||||
#define DEFAULT_MIN_PASS 0
|
|
||||||
#define DEFAULT_MAX_PASS 100
|
|
||||||
#define DEFAULT_WARN_PASS 14
|
|
||||||
#define DEFAULT_USER_DIE 366
|
|
||||||
|
|
||||||
void safeget (char *, int);
|
|
||||||
|
|
||||||
void
|
|
||||||
main (void)
|
|
||||||
{
|
|
||||||
char foo[32];
|
|
||||||
char usrname[32], person[32], dir[32], shell[32];
|
|
||||||
unsigned int group, min_pass, max_pass, warn_pass, user_die;
|
|
||||||
/* the group and uid of the new user */
|
|
||||||
int bad = 0, done = 0, correct = 0, olduid;
|
|
||||||
char cmd[255];
|
|
||||||
struct group *grp;
|
|
||||||
|
|
||||||
/* flags, in order:
|
|
||||||
* bad to see if the username is in /etc/passwd, or if strange stuff has
|
|
||||||
* been typed if the user might be put in group 0
|
|
||||||
* done allows the program to exit when a user has been added
|
|
||||||
* correct loops until a username is found that isn't in /etc/passwd
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* The real program starts HERE! */
|
|
||||||
|
|
||||||
if (geteuid () != 0)
|
|
||||||
{
|
|
||||||
printf ("It seems you don't have access to add a new user. Try\n");
|
|
||||||
printf ("logging in as root or su root to gain superuser access.\n");
|
|
||||||
exit (1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Sanity checks
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef LOGGING
|
|
||||||
openlog ("adduser", LOG_PID | LOG_CONS | LOG_NOWAIT, LOG_AUTH);
|
|
||||||
syslog (LOG_INFO, "invoked by user %s\n", getpwuid (getuid ())->pw_name);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (!(grp = getgrgid (DEFAULT_GROUP)))
|
|
||||||
{
|
|
||||||
printf ("Error: the default group %d does not exist on this system!\n",
|
|
||||||
DEFAULT_GROUP);
|
|
||||||
printf ("adduser must be recompiled.\n");
|
|
||||||
#ifdef LOGGING
|
|
||||||
syslog (LOG_ERR, "warning: failed. no such default group\n");
|
|
||||||
closelog ();
|
|
||||||
#endif
|
|
||||||
exit (1);
|
|
||||||
};
|
|
||||||
|
|
||||||
while (!correct)
|
|
||||||
{ /* loop until a "good" usrname is chosen */
|
|
||||||
while (!done)
|
|
||||||
{
|
|
||||||
printf ("\nLogin to add (^C to quit): ");
|
|
||||||
fflush (stdout);
|
|
||||||
|
|
||||||
safeget (usrname, sizeof (usrname));
|
|
||||||
|
|
||||||
if (!strlen (usrname))
|
|
||||||
{
|
|
||||||
printf ("Empty input.\n");
|
|
||||||
done = 0;
|
|
||||||
continue;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* what I saw here before made me think maybe I was running DOS */
|
|
||||||
/* might this be a solution? (chris) */
|
|
||||||
if (strlen (usrname) > MAX_USRNAME)
|
|
||||||
{
|
|
||||||
printf ("That name is longer than the maximum of %d characters. Choose another.\n", MAX_USRNAME);
|
|
||||||
done = 0;
|
|
||||||
}
|
|
||||||
else if (getpwnam (usrname) != NULL)
|
|
||||||
{
|
|
||||||
printf ("That name is in use, choose another.\n");
|
|
||||||
done = 0;
|
|
||||||
}
|
|
||||||
else if (strchr (usrname, ' ') != NULL)
|
|
||||||
{
|
|
||||||
printf ("No spaces in username!!\n");
|
|
||||||
done = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
done = 1;
|
|
||||||
}; /* done, we have a valid new user name */
|
|
||||||
|
|
||||||
/* all set, get the rest of the stuff */
|
|
||||||
printf ("\nEditing information for new user [%s]\n", usrname);
|
|
||||||
|
|
||||||
printf ("\nFull Name [%s]: ", usrname);
|
|
||||||
fflush (stdout);
|
|
||||||
safeget (person, sizeof (person));
|
|
||||||
if (!strlen (person))
|
|
||||||
{
|
|
||||||
bzero (person, sizeof (person));
|
|
||||||
strcpy (person, usrname);
|
|
||||||
};
|
|
||||||
|
|
||||||
if (getuid () == 0)
|
|
||||||
{
|
|
||||||
do
|
|
||||||
{
|
|
||||||
bad = 0;
|
|
||||||
printf ("GID [%d]: ", DEFAULT_GROUP);
|
|
||||||
fflush (stdout);
|
|
||||||
safeget (foo, sizeof (foo));
|
|
||||||
if (!strlen (foo))
|
|
||||||
group = DEFAULT_GROUP;
|
|
||||||
else if (isdigit (*foo))
|
|
||||||
{
|
|
||||||
group = atoi (foo);
|
|
||||||
if (!(grp = getgrgid (group)))
|
|
||||||
{
|
|
||||||
printf ("unknown gid %s\n", foo);
|
|
||||||
group = DEFAULT_GROUP;
|
|
||||||
bad = 1;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
else if ((grp = getgrnam (foo)))
|
|
||||||
group = grp->gr_gid;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
printf ("unknown group %s\n", foo);
|
|
||||||
group = DEFAULT_GROUP;
|
|
||||||
bad = 1;
|
|
||||||
}
|
|
||||||
if (group == 0)
|
|
||||||
{ /* You're not allowed to make root group users! */
|
|
||||||
printf ("Creation of root group users not allowed (must be done by hand)\n");
|
|
||||||
group = DEFAULT_GROUP;
|
|
||||||
bad = 1;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
while (bad);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
printf ("Group will be default of: %d\n", DEFAULT_GROUP);
|
|
||||||
group = DEFAULT_GROUP;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (getuid () == 0)
|
|
||||||
{
|
|
||||||
printf ("\nIf home dir ends with a / then '%s' will be appended to it\n", usrname);
|
|
||||||
printf ("Home Directory [%s/%s]: ", DEFAULT_HOME, usrname);
|
|
||||||
fflush (stdout);
|
|
||||||
safeget (dir, sizeof (dir));
|
|
||||||
if (!strlen (dir))
|
|
||||||
{ /* hit return */
|
|
||||||
sprintf (dir, "%s/%s", DEFAULT_HOME, usrname);
|
|
||||||
}
|
|
||||||
else if (dir[strlen (dir) - 1] == '/')
|
|
||||||
sprintf (dir, "%s%s", dir, usrname);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
printf ("\nHome directory will be %s/%s\n", DEFAULT_HOME, usrname);
|
|
||||||
sprintf (dir, "%s/%s", DEFAULT_HOME, usrname);
|
|
||||||
}
|
|
||||||
|
|
||||||
printf ("\nShell [%s]: ", DEFAULT_SHELL);
|
|
||||||
fflush (stdout);
|
|
||||||
safeget (shell, sizeof (shell));
|
|
||||||
if (!strlen (shell))
|
|
||||||
sprintf (shell, "%s", DEFAULT_SHELL);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
char *sh;
|
|
||||||
int ok = 0;
|
|
||||||
#ifdef HAVE_GETUSERSHELL
|
|
||||||
setusershell ();
|
|
||||||
while ((sh = getusershell ()) != NULL)
|
|
||||||
if (!strcmp (shell, sh))
|
|
||||||
ok = 1;
|
|
||||||
endusershell ();
|
|
||||||
#endif
|
|
||||||
if (!ok)
|
|
||||||
{
|
|
||||||
if (getuid () == 0)
|
|
||||||
printf ("Warning: root allowed non standard shell\n");
|
|
||||||
else
|
|
||||||
{
|
|
||||||
printf ("Shell NOT in /etc/shells, DEFAULT used\n");
|
|
||||||
sprintf (shell, "%s", DEFAULT_SHELL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef EXPIRE_VALS_SET
|
|
||||||
if (getuid () == 0)
|
|
||||||
{
|
|
||||||
#endif
|
|
||||||
printf ("\nMin. Password Change Days [%d]: ", DEFAULT_MIN_PASS);
|
|
||||||
fflush (stdout);
|
|
||||||
safeget (foo, sizeof (foo));
|
|
||||||
if (strlen (foo) > 1)
|
|
||||||
min_pass = DEFAULT_MIN_PASS;
|
|
||||||
else
|
|
||||||
min_pass = atoi (foo);
|
|
||||||
|
|
||||||
printf ("Max. Password Change Days [%d]: ", DEFAULT_MAX_PASS);
|
|
||||||
fflush (stdout);
|
|
||||||
safeget (foo, sizeof (foo));
|
|
||||||
if (strlen (foo) > 1)
|
|
||||||
max_pass = atoi (foo);
|
|
||||||
else
|
|
||||||
max_pass = DEFAULT_MAX_PASS;
|
|
||||||
|
|
||||||
printf ("Password Warning Days [%d]: ", DEFAULT_WARN_PASS);
|
|
||||||
fflush (stdout);
|
|
||||||
safeget (foo, sizeof (foo));
|
|
||||||
warn_pass = atoi (foo);
|
|
||||||
if (warn_pass == 0)
|
|
||||||
|
|
||||||
warn_pass = DEFAULT_WARN_PASS;
|
|
||||||
|
|
||||||
printf ("Days after Password Expiry for Account Locking [%d]: ", DEFAULT_USER_DIE);
|
|
||||||
fflush (stdout);
|
|
||||||
safeget (foo, sizeof (foo));
|
|
||||||
user_die = atoi (foo);
|
|
||||||
if (user_die == 0)
|
|
||||||
user_die = DEFAULT_USER_DIE;
|
|
||||||
|
|
||||||
#ifdef EXPIRE_VALS_SET
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
printf ("\nSorry, account expiry values are set.\n");
|
|
||||||
user_die = DEFAULT_USER_DIE;
|
|
||||||
warn_pass = DEFAULT_WARN_PASS;
|
|
||||||
max_pass = DEFAULT_MAX_PASS;
|
|
||||||
min_pass = DEFAULT_MIN_PASS;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
printf ("\nInformation for new user [%s] [%s]:\n", usrname, person);
|
|
||||||
printf ("Home directory: [%s] Shell: [%s]\n", dir, shell);
|
|
||||||
printf ("GID: [%d]\n", group);
|
|
||||||
printf ("MinPass: [%d] MaxPass: [%d] WarnPass: [%d] UserExpire: [%d]\n",
|
|
||||||
min_pass, max_pass, warn_pass, user_die);
|
|
||||||
printf ("\nIs this correct? [y/N]: ");
|
|
||||||
fflush (stdout);
|
|
||||||
safeget (foo, sizeof (foo));
|
|
||||||
|
|
||||||
done = bad = correct = (foo[0] == 'y' || foo[0] == 'Y');
|
|
||||||
|
|
||||||
if (bad != 1)
|
|
||||||
printf ("\nUser [%s] not added\n", usrname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Clobber the environment, I run this suid root sometimes to let
|
|
||||||
* non root privileged accounts add users --chris */
|
|
||||||
|
|
||||||
*environ = NULL;
|
|
||||||
|
|
||||||
bzero (cmd, sizeof (cmd));
|
|
||||||
sprintf (cmd, "%s -g %d -d %s -s %s -c \"%s\" -m -k /etc/skel %s",
|
|
||||||
USERADD_PATH, group, dir, shell, person, usrname);
|
|
||||||
printf ("Calling useradd to add new user:\n%s\n", cmd);
|
|
||||||
if (system (cmd))
|
|
||||||
{
|
|
||||||
printf ("User add failed!\n");
|
|
||||||
#ifdef LOGGING
|
|
||||||
syslog (LOG_ERR, "could not add new user\n");
|
|
||||||
closelog ();
|
|
||||||
#endif
|
|
||||||
exit (errno);
|
|
||||||
};
|
|
||||||
|
|
||||||
olduid = getuid (); /* chage, passwd, edquota etc. require ruid = root
|
|
||||||
*/
|
|
||||||
setuid (0);
|
|
||||||
|
|
||||||
bzero (cmd, sizeof (cmd));
|
|
||||||
|
|
||||||
/* Chage runs suid root. => we need ruid root to run it with
|
|
||||||
* anything other than chage -l
|
|
||||||
*/
|
|
||||||
|
|
||||||
sprintf (cmd, "%s -m %d -M %d -W %d -I %d %s", CHAGE_PATH,
|
|
||||||
min_pass, max_pass, warn_pass, user_die, usrname);
|
|
||||||
printf ("%s\n", cmd);
|
|
||||||
if (system (cmd))
|
|
||||||
{
|
|
||||||
printf ("There was an error setting password expire values\n");
|
|
||||||
#ifdef LOGGING
|
|
||||||
syslog (LOG_ERR, "password expire values could not be set\n");
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
|
|
||||||
/* I want to add a user completely with one easy command --chris */
|
|
||||||
|
|
||||||
#ifdef HAVE_QUOTAS
|
|
||||||
bzero (cmd, sizeof (cmd));
|
|
||||||
sprintf (cmd, "%s -p %s -u %s", EDQUOTA_PATH, QUOTA_DEFAULT, usrname);
|
|
||||||
printf ("%s\n", cmd);
|
|
||||||
if (system (cmd))
|
|
||||||
{
|
|
||||||
printf ("\nWarning: error setting quota\n");
|
|
||||||
#ifdef LOGGING
|
|
||||||
syslog (LOG_ERR, "warning: account created but NO quotas set!\n");
|
|
||||||
#endif /* LOGGING */
|
|
||||||
}
|
|
||||||
else
|
|
||||||
printf ("\nDefault quota set.\n");
|
|
||||||
#endif /* HAVE_QUOTAS */
|
|
||||||
|
|
||||||
bzero (cmd, sizeof (cmd));
|
|
||||||
sprintf (cmd, "%s %s", PASSWD_PATH, usrname);
|
|
||||||
if (system (cmd))
|
|
||||||
{
|
|
||||||
printf ("\nWarning: error setting password\n");
|
|
||||||
#ifdef LOGGING
|
|
||||||
syslog (LOG_ERR, "warning: password set failed!\n");
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#ifdef IMMEDIATE_CHANGE
|
|
||||||
bzero (cmd, sizeof (cmd));
|
|
||||||
sprintf (cmd, "%s -e %s", PASSWD_PATH, usrname);
|
|
||||||
if (system (cmd))
|
|
||||||
{
|
|
||||||
printf ("\nWarning: error expiring password\n");
|
|
||||||
#ifdef LOGGING
|
|
||||||
syslog (LOG_ERR, "warning: password expire failed!\n");
|
|
||||||
#endif /* LOGGING */
|
|
||||||
}
|
|
||||||
#endif /* IMMEDIATE_CHANGE */
|
|
||||||
|
|
||||||
setuid (olduid);
|
|
||||||
|
|
||||||
#ifdef LOGGING
|
|
||||||
closelog ();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
printf ("\nDone.\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
safeget (char *buf, int maxlen)
|
|
||||||
{
|
|
||||||
int c, i = 0, bad = 0;
|
|
||||||
char *bstart = buf;
|
|
||||||
while ((c = getc (stdin)) != EOF && (c != '\n') && (++i < maxlen))
|
|
||||||
{
|
|
||||||
bad = (!isalnum (c) && (c != '_') && (c != ' '));
|
|
||||||
*(buf++) = (char) c;
|
|
||||||
}
|
|
||||||
*buf = '\0';
|
|
||||||
|
|
||||||
if (bad)
|
|
||||||
{
|
|
||||||
printf ("\nString contained banned character. Please stick to alphanumerics.\n");
|
|
||||||
*bstart = '\0';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -1,90 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
# adduser script for use with shadow passwords and useradd command.
|
|
||||||
# by Hrvoje Dogan <hdogan@student.math.hr>, Dec 1995.
|
|
||||||
|
|
||||||
echo -n "Login name for new user []:"
|
|
||||||
read LOGIN
|
|
||||||
if [ -z $LOGIN ]
|
|
||||||
then echo "Come on, man, you can't leave the login field empty...";exit
|
|
||||||
fi
|
|
||||||
echo
|
|
||||||
echo -n "User id for $LOGIN [ defaults to next available]:"
|
|
||||||
read ID
|
|
||||||
GUID="-u $ID"
|
|
||||||
if [ -z $ID ]
|
|
||||||
then GUID=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo -n "Initial group for $LOGIN [users]:"
|
|
||||||
read GID
|
|
||||||
GGID="-g $GID"
|
|
||||||
if [ -z $GID ]
|
|
||||||
then GGID=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo -n "Additional groups for $LOGIN []:"
|
|
||||||
read AGID
|
|
||||||
GAGID="-G $AGID"
|
|
||||||
if [ -z $AGID ]
|
|
||||||
then GAGID=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo -n "$LOGIN's home directory [/home/$LOGIN]:"
|
|
||||||
read HME
|
|
||||||
GHME="-d $HME"
|
|
||||||
if [ -z $HME ]
|
|
||||||
then GHME=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo -n "$LOGIN's shell [/bin/bash]:"
|
|
||||||
read SHL
|
|
||||||
GSHL="-s $SHL"
|
|
||||||
if [ -z $SHL ]
|
|
||||||
then GSHL=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo
|
|
||||||
echo -n "$LOGIN's account expiry date (MM/DD/YY) []:"
|
|
||||||
read EXP
|
|
||||||
GEXP="-e $EXP"
|
|
||||||
if [ -z $EXP ]
|
|
||||||
then GEXP=""
|
|
||||||
fi
|
|
||||||
echo
|
|
||||||
echo OK, I'm about to make a new account. Here's what you entered so far:
|
|
||||||
echo New login name: $LOGIN
|
|
||||||
if [ -z $GUID ]
|
|
||||||
then echo New UID: [Next available]
|
|
||||||
else echo New UID: $UID
|
|
||||||
fi
|
|
||||||
if [ -z $GGID ]
|
|
||||||
then echo Initial group: users
|
|
||||||
else echo Initial group: $GID
|
|
||||||
fi
|
|
||||||
if [ -z $GAGID ]
|
|
||||||
then echo Additional groups: [none]
|
|
||||||
else echo Additional groups: $AGID
|
|
||||||
fi
|
|
||||||
if [ -z $GHME ]
|
|
||||||
then echo Home directory: /home/$LOGIN
|
|
||||||
else echo Home directory: $HME
|
|
||||||
fi
|
|
||||||
if [ -z $GSHL ]
|
|
||||||
then echo Shell: /bin/bash
|
|
||||||
else echo Shell: $SHL
|
|
||||||
fi
|
|
||||||
if [ -z $GEXP ]
|
|
||||||
then echo Expiry date: [no expiration]
|
|
||||||
else echo Expiry date: $EXP
|
|
||||||
fi
|
|
||||||
echo "This is it... if you want to bail out, you'd better do it now."
|
|
||||||
read FOO
|
|
||||||
echo Making new account...
|
|
||||||
/usr/sbin/useradd $GHME -m $GEXP $GGID $GAGID $GSHL $GUID $LOGIN
|
|
||||||
/usr/bin/chfn $LOGIN
|
|
||||||
/usr/bin/passwd $LOGIN
|
|
||||||
echo "Done..."
|
|
||||||
@@ -1,743 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
#
|
|
||||||
# adduser Interactive user adding program.
|
|
||||||
#
|
|
||||||
# Copyright (C) 1996 Petri Mattila, Prihateam Networks
|
|
||||||
# petri@prihateam.fi
|
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
#
|
|
||||||
# Changes:
|
|
||||||
# 220496 v0.01 Initial version
|
|
||||||
# 230496 v0.02 More checks, embolden summary
|
|
||||||
# 240496 Even more checks
|
|
||||||
# 250496 Help with ?
|
|
||||||
# 040596 v0.03 Cleanups
|
|
||||||
# 050596 v0.04 Bug fixes, expire date checks
|
|
||||||
# 070596 v0.05 Iso-latin-1 names
|
|
||||||
#
|
|
||||||
|
|
||||||
## Defaults
|
|
||||||
|
|
||||||
# default groups
|
|
||||||
def_group="users"
|
|
||||||
def_other_groups=""
|
|
||||||
|
|
||||||
# default home directory
|
|
||||||
def_home_dir=/home/users
|
|
||||||
|
|
||||||
# default shell
|
|
||||||
def_shell=/bin/tcsh
|
|
||||||
|
|
||||||
# Defaul expiration date (mm/dd/yy)
|
|
||||||
def_expire=""
|
|
||||||
|
|
||||||
# default dates
|
|
||||||
def_pwd_min=0
|
|
||||||
def_pwd_max=90
|
|
||||||
def_pwd_warn=14
|
|
||||||
def_pwd_iact=14
|
|
||||||
|
|
||||||
|
|
||||||
# possible UIDs
|
|
||||||
uid_low=1000
|
|
||||||
uid_high=64000
|
|
||||||
|
|
||||||
# skel directory
|
|
||||||
skel=/etc/skel
|
|
||||||
|
|
||||||
# default mode for home directory
|
|
||||||
def_mode=711
|
|
||||||
|
|
||||||
# Regex, that the login name must meet, only ANSI characters
|
|
||||||
login_regex='^[0-9a-zA-Z_-]*$'
|
|
||||||
|
|
||||||
# Regex, that the user name must meet
|
|
||||||
# ANSI version
|
|
||||||
##name_regex='^[0-9a-zA-Z_-\ ]*$'
|
|
||||||
# ISO-LATIN-1 version
|
|
||||||
name_regex='^[0-9a-zA-ZÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöùúûüýþÿ_-\ ]*$'
|
|
||||||
|
|
||||||
# set PATH
|
|
||||||
export PATH="/bin:/sbin:/usr/bin:/usr/sbin"
|
|
||||||
|
|
||||||
# Some special characters
|
|
||||||
case "$TERM" in
|
|
||||||
vt*|ansi*|con*|xterm*|linux*)
|
|
||||||
S='[1m' # start embolden
|
|
||||||
E='[m' # end embolden
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
S=''
|
|
||||||
E=''
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
|
|
||||||
## Functions
|
|
||||||
|
|
||||||
check_root() {
|
|
||||||
if test "$EUID" -ne 0
|
|
||||||
then
|
|
||||||
echo "You must be root to run this program."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
check_user() {
|
|
||||||
local usr pwd uid gid name home sh
|
|
||||||
|
|
||||||
cat /etc/passwd | (
|
|
||||||
while IFS=":" read usr pwd uid gid name home sh
|
|
||||||
do
|
|
||||||
if test "$1" = "${usr}"
|
|
||||||
then
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
return 0
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
check_group() {
|
|
||||||
local read grp pwd gid members
|
|
||||||
|
|
||||||
cat /etc/group | (
|
|
||||||
while IFS=":" read grp pwd gid members
|
|
||||||
do
|
|
||||||
if test "$1" = "${grp}"
|
|
||||||
then
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
return 0
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
check_other_groups() {
|
|
||||||
local grp check IFS
|
|
||||||
|
|
||||||
check="$1"
|
|
||||||
IFS=","
|
|
||||||
|
|
||||||
set ${check}
|
|
||||||
for grp
|
|
||||||
do
|
|
||||||
if check_group "${grp}"
|
|
||||||
then
|
|
||||||
echo "Group ${grp} does not exist."
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
check_uid() {
|
|
||||||
local usr pwd uid gid name home sh
|
|
||||||
|
|
||||||
cat /etc/passwd | (
|
|
||||||
while IFS=":" read usr pwd uid gid name home sh
|
|
||||||
do
|
|
||||||
if test "$1" = "${uid}"
|
|
||||||
then
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
return 0
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
read_yn() {
|
|
||||||
local ans ynd
|
|
||||||
|
|
||||||
ynd="$1"
|
|
||||||
|
|
||||||
while :
|
|
||||||
do
|
|
||||||
read ans
|
|
||||||
case "${ans}" in
|
|
||||||
"") return ${ynd} ;;
|
|
||||||
[nN]) return 1 ;;
|
|
||||||
[yY]) return 0 ;;
|
|
||||||
*) echo -n "Y or N, please ? " ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
read_login() {
|
|
||||||
echo
|
|
||||||
while :
|
|
||||||
do
|
|
||||||
echo -n "Login: ${def_login:+[${def_login}] }"
|
|
||||||
read login
|
|
||||||
|
|
||||||
if test "${login}" = '?'
|
|
||||||
then
|
|
||||||
less /etc/passwd
|
|
||||||
echo
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test -z "${login}" -a -n "${def_login}"
|
|
||||||
then
|
|
||||||
login="${def_login}"
|
|
||||||
echo "Using ${login}"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "${#login}" -gt 8
|
|
||||||
then
|
|
||||||
echo "Login must be at most 8 characters long"
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "${#login}" -lt 2
|
|
||||||
then
|
|
||||||
echo "Login must be at least 2 characters long"
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! expr "${login}" : "${login_regex}" &> /dev/null
|
|
||||||
then
|
|
||||||
echo "Please use letters, numbers and special characters _-,."
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! check_user "${login}"
|
|
||||||
then
|
|
||||||
echo "Username ${login} is already in use"
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
def_login="${login}"
|
|
||||||
return
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
read_name () {
|
|
||||||
echo
|
|
||||||
while :
|
|
||||||
do
|
|
||||||
echo -n "Real name: ${def_name:+[${def_name}] }"
|
|
||||||
read name
|
|
||||||
|
|
||||||
if test "${name}" = '?'
|
|
||||||
then
|
|
||||||
less /etc/passwd
|
|
||||||
echo
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test -z "${name}" -a -n "${def_name}"
|
|
||||||
then
|
|
||||||
name="${def_name}"
|
|
||||||
echo "Using ${name}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "${#name}" -gt 32
|
|
||||||
then
|
|
||||||
echo "Name should be at most 32 characters long"
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! expr "${name}" : "${name_regex}" &> /dev/null
|
|
||||||
then
|
|
||||||
echo "Please use letters, numbers, spaces and special characters ,._-"
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
def_name="${name}"
|
|
||||||
return
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
read_home() {
|
|
||||||
local x
|
|
||||||
|
|
||||||
echo
|
|
||||||
while :
|
|
||||||
do
|
|
||||||
echo -n "Home Directory: [${def_home_dir}/${login}] "
|
|
||||||
read home
|
|
||||||
|
|
||||||
if test -z "${home}"
|
|
||||||
then
|
|
||||||
home="${def_home_dir}/${login}"
|
|
||||||
echo "Using ${home}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! expr "${home}" : '^[0-9a-zA-Z,._-\/]*$' &> /dev/null
|
|
||||||
then
|
|
||||||
echo "Please use letters, numbers, spaces and special characters ,._-/"
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
x="$(basename ${home})"
|
|
||||||
if test "${x}" != "${login}"
|
|
||||||
then
|
|
||||||
echo "Warning: you are about to use different login name and home directory."
|
|
||||||
fi
|
|
||||||
|
|
||||||
x="$(dirname ${home})"
|
|
||||||
if ! test -d "${x}"
|
|
||||||
then
|
|
||||||
echo "Directory ${x} does not exist."
|
|
||||||
echo "If you still want to use it, please make it manually."
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
def_home_dir="${x}"
|
|
||||||
return
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
read_shell () {
|
|
||||||
local x
|
|
||||||
|
|
||||||
echo
|
|
||||||
while :
|
|
||||||
do
|
|
||||||
echo -n "Shell: [${def_shell}] "
|
|
||||||
read shell
|
|
||||||
|
|
||||||
if test -z "${shell}"
|
|
||||||
then
|
|
||||||
shell="${def_shell}"
|
|
||||||
echo "Using ${shell}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
for x in $(cat /etc/shells)
|
|
||||||
do
|
|
||||||
if test "${x}" = "${shell}"
|
|
||||||
then
|
|
||||||
def_shell="${shell}"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "Possible shells are:"
|
|
||||||
cat /etc/shells
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
read_group () {
|
|
||||||
echo
|
|
||||||
while :
|
|
||||||
do
|
|
||||||
echo -n "Group: [${def_group}] "
|
|
||||||
read group
|
|
||||||
|
|
||||||
if test -z "${group}"
|
|
||||||
then
|
|
||||||
group="${def_group}"
|
|
||||||
echo "Using ${group}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "${group}" = '?'
|
|
||||||
then
|
|
||||||
less /etc/group
|
|
||||||
echo
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
if check_group "${group}"
|
|
||||||
then
|
|
||||||
echo "Group ${group} does not exist."
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
def_group="${group}"
|
|
||||||
return
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
read_other_groups () {
|
|
||||||
echo
|
|
||||||
while :
|
|
||||||
do
|
|
||||||
echo -n "Other groups: [${def_og:-none}] "
|
|
||||||
read other_groups
|
|
||||||
|
|
||||||
if test "${other_groups}" = '?'
|
|
||||||
then
|
|
||||||
less /etc/group
|
|
||||||
echo
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test -z "${other_groups}"
|
|
||||||
then
|
|
||||||
if test -n "${def_og}"
|
|
||||||
then
|
|
||||||
other_groups="${def_og}"
|
|
||||||
echo "Using ${other_groups}"
|
|
||||||
else
|
|
||||||
echo "No other groups"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
if ! check_other_groups "${other_groups}"
|
|
||||||
then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
def_og="${other_groups}"
|
|
||||||
return
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
read_uid () {
|
|
||||||
echo
|
|
||||||
while :
|
|
||||||
do
|
|
||||||
echo -n "uid: [first free] "
|
|
||||||
read uid
|
|
||||||
|
|
||||||
if test -z "${uid}"
|
|
||||||
then
|
|
||||||
echo "Using first free UID."
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "${uid}" = '?'
|
|
||||||
then
|
|
||||||
less /etc/passwd
|
|
||||||
echo
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! expr "${uid}" : '^[0-9]+$' &> /dev/null
|
|
||||||
then
|
|
||||||
echo "Please use numbers only."
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
if test "${uid}" -lt "${uid_low}"
|
|
||||||
then
|
|
||||||
echo "UID must be greater than ${uid_low}"
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
if test "${uid}" -gt "${uid_high}"
|
|
||||||
then
|
|
||||||
echo "UID must be smaller than ${uid_high}"
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
if ! check_uid "${uid}"
|
|
||||||
then
|
|
||||||
echo "UID ${uid} is already in use"
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
return
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
read_max_valid_days() {
|
|
||||||
echo
|
|
||||||
while :
|
|
||||||
do
|
|
||||||
echo -en "Maximum days between password changes: [${def_pwd_max}] "
|
|
||||||
read max_days
|
|
||||||
|
|
||||||
if test -z "${max_days}"
|
|
||||||
then
|
|
||||||
max_days="${def_pwd_max}"
|
|
||||||
echo "Using ${max_days}"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! expr "${max_days}" : '^[0-9]+$' &> /dev/null
|
|
||||||
then
|
|
||||||
echo "Please use numbers only."
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
if test "${max_days}" -lt 7
|
|
||||||
then
|
|
||||||
echo "Warning: you are using a value shorter than a week."
|
|
||||||
fi
|
|
||||||
|
|
||||||
def_pwd_max="${max_days}"
|
|
||||||
return
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
read_min_valid_days() {
|
|
||||||
echo
|
|
||||||
while :
|
|
||||||
do
|
|
||||||
echo -en "Minimum days between password changes: [${def_pwd_min}] "
|
|
||||||
read min_days
|
|
||||||
|
|
||||||
if test -z "${min_days}"
|
|
||||||
then
|
|
||||||
min_days="${def_pwd_min}"
|
|
||||||
echo "Using ${min_days}"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! expr "${min_days}" : '^[0-9]+$' &> /dev/null
|
|
||||||
then
|
|
||||||
echo "Please use numbers only."
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
if test "${min_days}" -gt 7
|
|
||||||
then
|
|
||||||
echo "Warning: you are using a value longer than a week."
|
|
||||||
fi
|
|
||||||
|
|
||||||
def_pwd_min="${min_days}"
|
|
||||||
return
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
read_warning_days() {
|
|
||||||
echo
|
|
||||||
while :
|
|
||||||
do
|
|
||||||
echo -en "Number of warning days before password expires: [${def_pwd_warn}] "
|
|
||||||
read warn_days
|
|
||||||
|
|
||||||
if test -z "${warn_days}"
|
|
||||||
then
|
|
||||||
warn_days="${def_pwd_warn}"
|
|
||||||
echo "Using ${warn_days}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! expr "${warn_days}" : '^[0-9]+$' &> /dev/null
|
|
||||||
then
|
|
||||||
echo "Please use numbers only."
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
if test "${warn_days}" -gt 14
|
|
||||||
then
|
|
||||||
echo "Warning: you are using a value longer than two week."
|
|
||||||
fi
|
|
||||||
|
|
||||||
def_pwd_warn="${warn_days}"
|
|
||||||
return
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
read_inactive_days() {
|
|
||||||
echo
|
|
||||||
while :
|
|
||||||
do
|
|
||||||
echo -en "Number of usable days after expiration: [${def_pwd_iact}] "
|
|
||||||
read iact_days
|
|
||||||
|
|
||||||
if test -z "${iact_days}"
|
|
||||||
then
|
|
||||||
iact_days="${def_pwd_iact}"
|
|
||||||
echo "Using ${iact_days}"
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
if ! expr "${iact_days}" : '^[0-9]+$' &> /dev/null
|
|
||||||
then
|
|
||||||
echo "Please use numbers only."
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
if test "${iact_days}" -gt 14
|
|
||||||
then
|
|
||||||
echo "Warning: you are using a value that is more than two weeks."
|
|
||||||
fi
|
|
||||||
|
|
||||||
def_pwd_iact="${iact_days}"
|
|
||||||
return
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
read_expire_date() {
|
|
||||||
local ans
|
|
||||||
|
|
||||||
echo
|
|
||||||
while :
|
|
||||||
do
|
|
||||||
echo -en "Expire date of this account (mm/dd/yy): [${def_expire:-never}] "
|
|
||||||
read ans
|
|
||||||
|
|
||||||
if test -z "${ans}"
|
|
||||||
then
|
|
||||||
if test -z "${def_expire}"
|
|
||||||
then
|
|
||||||
ans="never"
|
|
||||||
else
|
|
||||||
ans="${def_expire}"
|
|
||||||
echo "Using ${def_expire}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "${ans}" = "never"
|
|
||||||
then
|
|
||||||
echo "Account will never expire."
|
|
||||||
def_expire=""
|
|
||||||
expire=""
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! expr "${ans}" : '^[0-9][0-9]/[0-9][0-9]/[0-9][0-9]$' &> /dev/null
|
|
||||||
then
|
|
||||||
echo "Please use format mm/dd/yy"
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! expire_date="$(date -d ${ans} '+%A, %B %d %Y')"
|
|
||||||
then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
def_expire="${expire}"
|
|
||||||
return
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
read_passwd_yn() {
|
|
||||||
echo -en "\nDo you want to set password [Y/n] ? "
|
|
||||||
if read_yn 0
|
|
||||||
then
|
|
||||||
set_pwd="YES"
|
|
||||||
else
|
|
||||||
set_pwd=""
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
print_values() {
|
|
||||||
|
|
||||||
clear
|
|
||||||
cat << EOM
|
|
||||||
|
|
||||||
Login: ${S}${login}${E}
|
|
||||||
Group: ${S}${group}${E}
|
|
||||||
Other groups: ${S}${other_groups:-[none]}${E}
|
|
||||||
|
|
||||||
Real Name: ${S}${name}${E}
|
|
||||||
|
|
||||||
uid: ${S}${uid:-[first free]}${E}
|
|
||||||
home: ${S}${home}${E}
|
|
||||||
shell: ${S}${shell}${E}
|
|
||||||
|
|
||||||
Account expiration date: ${S}${expire_date:-never}${E}
|
|
||||||
Minimum days between password changes: ${S}${min_days}${E}
|
|
||||||
Maximum days between password changes: ${S}${max_days}${E}
|
|
||||||
Number of usable days after expiration: ${S}${iact_days}${E}
|
|
||||||
Number of warning days before expiration: ${S}${warn_days}${E}
|
|
||||||
|
|
||||||
${S}${set_pwd:+Set password for this account.}${E}
|
|
||||||
|
|
||||||
EOM
|
|
||||||
}
|
|
||||||
|
|
||||||
set_user() {
|
|
||||||
if ! useradd \
|
|
||||||
-c "${name}" \
|
|
||||||
-d "${home}" \
|
|
||||||
-g "${group}" \
|
|
||||||
-s "${shell}" \
|
|
||||||
${expire:+-e ${expire}} \
|
|
||||||
${uid:+-u ${uid}} \
|
|
||||||
${other_groups:+-G ${other_groups}} \
|
|
||||||
${login}
|
|
||||||
then
|
|
||||||
echo "Error ($?) in useradd...exiting..."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
set_aging() {
|
|
||||||
if ! passwd \
|
|
||||||
-x ${max_days} \
|
|
||||||
-n ${min_days} \
|
|
||||||
-w ${warn_days} \
|
|
||||||
-i ${iact_days} \
|
|
||||||
${login}
|
|
||||||
then
|
|
||||||
echo "Error ($?) in setting password aging...exiting..."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
set_password() {
|
|
||||||
if test -n "${set_pwd}"
|
|
||||||
then
|
|
||||||
echo
|
|
||||||
passwd ${login}
|
|
||||||
echo
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
set_system() {
|
|
||||||
if test -d "${home}"
|
|
||||||
then
|
|
||||||
echo "Directory ${home} already exists."
|
|
||||||
echo "Skeleton files not copied."
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo -n "Copying skeleton files..."
|
|
||||||
(
|
|
||||||
mkdir ${home}
|
|
||||||
cd ${skel} && cp -af . ${home}
|
|
||||||
chmod ${def_mode} ${home}
|
|
||||||
chown -R ${login}:${group} ${home}
|
|
||||||
)
|
|
||||||
echo "done."
|
|
||||||
|
|
||||||
## Add your own stuff here:
|
|
||||||
echo -n "Setting up other files..."
|
|
||||||
(
|
|
||||||
mailbox="/var/spool/mail/${login}"
|
|
||||||
touch ${mailbox}
|
|
||||||
chown "${login}:mail" ${mailbox}
|
|
||||||
chmod 600 ${mailbox}
|
|
||||||
)
|
|
||||||
echo "done."
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
read_values() {
|
|
||||||
clear
|
|
||||||
echo -e "\nPlease answer the following questions about the new user to be added."
|
|
||||||
|
|
||||||
while :
|
|
||||||
do
|
|
||||||
read_login
|
|
||||||
read_name
|
|
||||||
read_group
|
|
||||||
read_other_groups
|
|
||||||
read_home
|
|
||||||
read_shell
|
|
||||||
read_uid
|
|
||||||
read_expire_date
|
|
||||||
read_max_valid_days
|
|
||||||
read_min_valid_days
|
|
||||||
read_warning_days
|
|
||||||
read_inactive_days
|
|
||||||
read_passwd_yn
|
|
||||||
|
|
||||||
print_values
|
|
||||||
|
|
||||||
echo -n "Is this correct [N/y] ? "
|
|
||||||
read_yn 1 && return
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
main() {
|
|
||||||
check_root
|
|
||||||
read_values
|
|
||||||
set_user
|
|
||||||
set_aging
|
|
||||||
set_system
|
|
||||||
set_password
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
## Run it 8-)
|
|
||||||
main
|
|
||||||
|
|
||||||
# End.
|
|
||||||
@@ -1,85 +0,0 @@
|
|||||||
#!/usr/bin/perl
|
|
||||||
#
|
|
||||||
# Copyright (c) 1996 Brian R. Gaeke
|
|
||||||
# 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. All advertising materials mentioning features or use of this software
|
|
||||||
# must display the following acknowledgement:
|
|
||||||
# This product includes software developed by Brian R. Gaeke.
|
|
||||||
# 4. The name of the author, Brian R. Gaeke, may not be used to endorse
|
|
||||||
# or promote products derived from this software without specific
|
|
||||||
# prior written permission.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY BRIAN R. GAEKE ``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 BRIAN R. GAEKE 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.
|
|
||||||
#
|
|
||||||
# Additionally:
|
|
||||||
#
|
|
||||||
# This software is provided without support and without any obligation
|
|
||||||
# on the part of Brian R. Gaeke to assist in its use, correction,
|
|
||||||
# modification or enhancement.
|
|
||||||
#
|
|
||||||
#######################################################################
|
|
||||||
#
|
|
||||||
# this is atudel, version 2, by Brian R. Gaeke <brg@dgate.org>
|
|
||||||
#
|
|
||||||
|
|
||||||
require "getopts.pl";
|
|
||||||
&Getopts('v');
|
|
||||||
$username = shift(@ARGV);
|
|
||||||
&usage unless $username;
|
|
||||||
|
|
||||||
sub usage
|
|
||||||
{
|
|
||||||
print STDERR "atudel - remove all at jobs owned by a user\n";
|
|
||||||
print STDERR "usage: $0 [-v] username\n";
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
# odd. unless getpwnam($uname) doesn't seem to work for $uname eq "root" on
|
|
||||||
# my linux system. but this does.
|
|
||||||
die "user $username does not exist; stopping"
|
|
||||||
unless defined(getpwnam($username));
|
|
||||||
|
|
||||||
print "searching for at jobs owned by user $username ..." if $opt_v;
|
|
||||||
|
|
||||||
chdir "/var/spool/atjobs" ||
|
|
||||||
die "can't chdir to /var/spool/atjobs: $!\nstopping";
|
|
||||||
opendir(DIR,".") || die "can't opendir(/var/spool/atjobs): $!\nstopping";
|
|
||||||
@files = grep(!/^\./,grep(-f,readdir(DIR)));
|
|
||||||
closedir DIR;
|
|
||||||
|
|
||||||
foreach $x (@files)
|
|
||||||
{
|
|
||||||
$owner = (getpwuid((stat($x))[4]))[0];
|
|
||||||
push(@nuke_bait,$x) if $owner eq $username;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (@nuke_bait)
|
|
||||||
{
|
|
||||||
print "removed jobIDs: @{nuke_bait}.\n" if $opt_v;
|
|
||||||
unlink @nuke_bait;
|
|
||||||
}
|
|
||||||
elsif ($opt_v)
|
|
||||||
{
|
|
||||||
print "\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
exit 0;
|
|
||||||
@@ -1,546 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
# This is a shell archive (produced by GNU sharutils 4.2.1).
|
|
||||||
# To extract the files from this archive, save it to some FILE, remove
|
|
||||||
# everything before the `!/bin/sh' line above, then type `sh FILE'.
|
|
||||||
#
|
|
||||||
# Made on 2000-05-25 14:41 CDT by <gk4@gnu.austin.ibm.com>.
|
|
||||||
# Source directory was `/home/gk4/src/groupmem'.
|
|
||||||
#
|
|
||||||
# Existing files will *not* be overwritten unless `-c' is specified.
|
|
||||||
#
|
|
||||||
# This shar contains:
|
|
||||||
# length mode name
|
|
||||||
# ------ ---------- ------------------------------------------
|
|
||||||
# 1960 -rw-r--r-- Makefile
|
|
||||||
# 6348 -rw-r--r-- groupmems.c
|
|
||||||
# 3372 -rw------- groupmems.8
|
|
||||||
#
|
|
||||||
save_IFS="${IFS}"
|
|
||||||
IFS="${IFS}:"
|
|
||||||
gettext_dir=FAILED
|
|
||||||
locale_dir=FAILED
|
|
||||||
first_param="$1"
|
|
||||||
for dir in $PATH
|
|
||||||
do
|
|
||||||
if test "$gettext_dir" = FAILED && test -f $dir/gettext \
|
|
||||||
&& ($dir/gettext --version >/dev/null 2>&1)
|
|
||||||
then
|
|
||||||
set `$dir/gettext --version 2>&1`
|
|
||||||
if test "$3" = GNU
|
|
||||||
then
|
|
||||||
gettext_dir=$dir
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if test "$locale_dir" = FAILED && test -f $dir/shar \
|
|
||||||
&& ($dir/shar --print-text-domain-dir >/dev/null 2>&1)
|
|
||||||
then
|
|
||||||
locale_dir=`$dir/shar --print-text-domain-dir`
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
IFS="$save_IFS"
|
|
||||||
if test "$locale_dir" = FAILED || test "$gettext_dir" = FAILED
|
|
||||||
then
|
|
||||||
echo=echo
|
|
||||||
else
|
|
||||||
TEXTDOMAINDIR=$locale_dir
|
|
||||||
export TEXTDOMAINDIR
|
|
||||||
TEXTDOMAIN=sharutils
|
|
||||||
export TEXTDOMAIN
|
|
||||||
echo="$gettext_dir/gettext -s"
|
|
||||||
fi
|
|
||||||
if touch -am -t 200112312359.59 $$.touch >/dev/null 2>&1 && test ! -f 200112312359.59 -a -f $$.touch; then
|
|
||||||
shar_touch='touch -am -t $1$2$3$4$5$6.$7 "$8"'
|
|
||||||
elif touch -am 123123592001.59 $$.touch >/dev/null 2>&1 && test ! -f 123123592001.59 -a ! -f 123123592001.5 -a -f $$.touch; then
|
|
||||||
shar_touch='touch -am $3$4$5$6$1$2.$7 "$8"'
|
|
||||||
elif touch -am 1231235901 $$.touch >/dev/null 2>&1 && test ! -f 1231235901 -a -f $$.touch; then
|
|
||||||
shar_touch='touch -am $3$4$5$6$2 "$8"'
|
|
||||||
else
|
|
||||||
shar_touch=:
|
|
||||||
echo
|
|
||||||
$echo 'WARNING: not restoring timestamps. Consider getting and'
|
|
||||||
$echo "installing GNU \`touch', distributed in GNU File Utilities..."
|
|
||||||
echo
|
|
||||||
fi
|
|
||||||
rm -f 200112312359.59 123123592001.59 123123592001.5 1231235901 $$.touch
|
|
||||||
#
|
|
||||||
if mkdir _sh10937; then
|
|
||||||
$echo 'x -' 'creating lock directory'
|
|
||||||
else
|
|
||||||
$echo 'failed to create lock directory'
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
# ============= Makefile ==============
|
|
||||||
if test -f 'Makefile' && test "$first_param" != -c; then
|
|
||||||
$echo 'x -' SKIPPING 'Makefile' '(file already exists)'
|
|
||||||
else
|
|
||||||
$echo 'x -' extracting 'Makefile' '(text)'
|
|
||||||
sed 's/^X//' << 'SHAR_EOF' > 'Makefile' &&
|
|
||||||
/*
|
|
||||||
# Copyright 2000, International Business Machines, Inc.
|
|
||||||
# All rights reserved.
|
|
||||||
#
|
|
||||||
# original author: George Kraft IV, gk4@us.ibm.com
|
|
||||||
#
|
|
||||||
# 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. Neither the name of International Business Machines, Inc., nor the
|
|
||||||
# names of its contributors may be used to endorse or promote products
|
|
||||||
# derived from this software without specific prior written permission.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY INTERNATIONAL BUSINESS MACHINES, INC. 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
|
|
||||||
# INTERNATIONAL BUSINESS MACHINES, INC. 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.
|
|
||||||
#
|
|
||||||
X
|
|
||||||
all: groupmems
|
|
||||||
X
|
|
||||||
groupmems: groupmems.c
|
|
||||||
X cc -g -o groupmems groupmems.c -L. -lshadow
|
|
||||||
X
|
|
||||||
install: groupmems
|
|
||||||
X -/usr/sbin/groupadd groups
|
|
||||||
X install -o root -g groups -m 4770 groupmems /usr/bin
|
|
||||||
X
|
|
||||||
install.man: groupmems.8
|
|
||||||
X install -o root -g root -m 644 groupmems.8 /usr/man/man8
|
|
||||||
X
|
|
||||||
SHAR_EOF
|
|
||||||
(set 20 00 05 25 14 40 28 'Makefile'; eval "$shar_touch") &&
|
|
||||||
chmod 0644 'Makefile' ||
|
|
||||||
$echo 'restore of' 'Makefile' 'failed'
|
|
||||||
if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \
|
|
||||||
&& ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then
|
|
||||||
md5sum -c << SHAR_EOF >/dev/null 2>&1 \
|
|
||||||
|| $echo 'Makefile:' 'MD5 check failed'
|
|
||||||
b46cf7ef8d59149093c011ced3f3103c Makefile
|
|
||||||
SHAR_EOF
|
|
||||||
else
|
|
||||||
shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'Makefile'`"
|
|
||||||
test 1960 -eq "$shar_count" ||
|
|
||||||
$echo 'Makefile:' 'original size' '1960,' 'current size' "$shar_count!"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
# ============= groupmems.c ==============
|
|
||||||
if test -f 'groupmems.c' && test "$first_param" != -c; then
|
|
||||||
$echo 'x -' SKIPPING 'groupmems.c' '(file already exists)'
|
|
||||||
else
|
|
||||||
$echo 'x -' extracting 'groupmems.c' '(text)'
|
|
||||||
sed 's/^X//' << 'SHAR_EOF' > 'groupmems.c' &&
|
|
||||||
/*
|
|
||||||
X * Copyright 2000, International Business Machines, Inc.
|
|
||||||
X * All rights reserved.
|
|
||||||
X *
|
|
||||||
X * original author: George Kraft IV, gk4@us.ibm.com
|
|
||||||
X *
|
|
||||||
X * Redistribution and use in source and binary forms, with or without
|
|
||||||
X * modification, are permitted provided that the following conditions
|
|
||||||
X * are met:
|
|
||||||
X *
|
|
||||||
X * 1. Redistributions of source code must retain the above copyright
|
|
||||||
X * notice, this list of conditions and the following disclaimer.
|
|
||||||
X * 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
X * notice, this list of conditions and the following disclaimer in the
|
|
||||||
X * documentation and/or other materials provided with the distribution.
|
|
||||||
X * 3. Neither the name of International Business Machines, Inc., nor the
|
|
||||||
X * names of its contributors may be used to endorse or promote products
|
|
||||||
X * derived from this software without specific prior written permission.
|
|
||||||
X *
|
|
||||||
X * THIS SOFTWARE IS PROVIDED BY INTERNATIONAL BUSINESS MACHINES, INC. AND
|
|
||||||
X * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
|
|
||||||
X * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
|
||||||
X * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
|
||||||
X * INTERNATIONAL BUSINESS MACHINES, INC. OR CONTRIBUTORS BE LIABLE
|
|
||||||
X * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
X * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
||||||
X * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
X * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
||||||
X * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
||||||
X * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
||||||
X * SUCH DAMAGE.
|
|
||||||
X */
|
|
||||||
/*
|
|
||||||
**
|
|
||||||
** Utility "groupmem" adds and deletes members from a user's group.
|
|
||||||
**
|
|
||||||
** Setup (as "root"):
|
|
||||||
**
|
|
||||||
** groupadd -r groups
|
|
||||||
** chmod 2770 groupmems
|
|
||||||
** chown root.groups groupmems
|
|
||||||
** groupmems -g groups -a gk4
|
|
||||||
**
|
|
||||||
** Usage (as "gk4"):
|
|
||||||
**
|
|
||||||
** groupmems -a olive
|
|
||||||
** groupmems -a jordan
|
|
||||||
** groupmems -a meghan
|
|
||||||
** groupmems -a morgan
|
|
||||||
** groupmems -a jake
|
|
||||||
** groupmems -l
|
|
||||||
** groupmems -d jake
|
|
||||||
** groupmems -l
|
|
||||||
*/
|
|
||||||
X
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <pwd.h>
|
|
||||||
#include <grp.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include "defines.h"
|
|
||||||
#include "groupio.h"
|
|
||||||
X
|
|
||||||
/* Exit Status Values */
|
|
||||||
X
|
|
||||||
#define EXIT_SUCCESS 0 /* success */
|
|
||||||
#define EXIT_USAGE 1 /* invalid command syntax */
|
|
||||||
#define EXIT_GROUP_FILE 2 /* group file access problems */
|
|
||||||
#define EXIT_NOT_ROOT 3 /* not superuser */
|
|
||||||
#define EXIT_NOT_EROOT 4 /* not effective superuser */
|
|
||||||
#define EXIT_NOT_PRIMARY 5 /* not primary owner of group */
|
|
||||||
#define EXIT_NOT_MEMBER 6 /* member of group does not exist */
|
|
||||||
#define EXIT_MEMBER_EXISTS 7 /* member of group already exists */
|
|
||||||
X
|
|
||||||
#define TRUE 1
|
|
||||||
#define FALSE 0
|
|
||||||
X
|
|
||||||
/* Globals */
|
|
||||||
X
|
|
||||||
extern int optind;
|
|
||||||
extern char *optarg;
|
|
||||||
static char *adduser = NULL;
|
|
||||||
static char *deluser = NULL;
|
|
||||||
static char *thisgroup = NULL;
|
|
||||||
static int purge = FALSE;
|
|
||||||
static int list = FALSE;
|
|
||||||
static int exclusive = 0;
|
|
||||||
X
|
|
||||||
static int isroot(void) {
|
|
||||||
X return getuid() ? FALSE : TRUE;
|
|
||||||
}
|
|
||||||
X
|
|
||||||
static int isgroup(void) {
|
|
||||||
X gid_t g = getgid();
|
|
||||||
X struct group *grp = getgrgid(g);
|
|
||||||
X
|
|
||||||
X return TRUE;
|
|
||||||
}
|
|
||||||
X
|
|
||||||
static char *whoami(void) {
|
|
||||||
X struct group *grp = getgrgid(getgid());
|
|
||||||
X struct passwd *usr = getpwuid(getuid());
|
|
||||||
X
|
|
||||||
X if (0 == strcmp(usr->pw_name, grp->gr_name)) {
|
|
||||||
X return (char *)strdup(usr->pw_name);
|
|
||||||
X } else {
|
|
||||||
X return NULL;
|
|
||||||
X }
|
|
||||||
}
|
|
||||||
X
|
|
||||||
static void
|
|
||||||
addtogroup(char *user, char **members) {
|
|
||||||
X int i;
|
|
||||||
X char **pmembers;
|
|
||||||
X
|
|
||||||
X for (i = 0; NULL != members[i]; i++ ) {
|
|
||||||
X if (0 == strcmp(user, members[i])) {
|
|
||||||
X fprintf(stderr, "Member already exists\n");
|
|
||||||
X exit(EXIT_MEMBER_EXISTS);
|
|
||||||
X }
|
|
||||||
X }
|
|
||||||
X
|
|
||||||
X if (0 == i) {
|
|
||||||
X pmembers = (char **)calloc(2, sizeof(char *));
|
|
||||||
X } else {
|
|
||||||
X pmembers = (char **)realloc(members, sizeof(char *)*(i+1));
|
|
||||||
X }
|
|
||||||
X
|
|
||||||
X *members = *pmembers;
|
|
||||||
X members[i] = user;
|
|
||||||
X members[i+1] = NULL;
|
|
||||||
}
|
|
||||||
X
|
|
||||||
static void
|
|
||||||
rmfromgroup(char *user, char **members) {
|
|
||||||
X int i;
|
|
||||||
X int found = FALSE;
|
|
||||||
X
|
|
||||||
X i = 0;
|
|
||||||
X while (!found && NULL != members[i]) {
|
|
||||||
X if (0 == strcmp(user, members[i])) {
|
|
||||||
X found = TRUE;
|
|
||||||
X } else {
|
|
||||||
X i++;
|
|
||||||
X }
|
|
||||||
X }
|
|
||||||
X
|
|
||||||
X while (found && NULL != members[i]) {
|
|
||||||
X members[i] = members[++i];
|
|
||||||
X }
|
|
||||||
X
|
|
||||||
X if (!found) {
|
|
||||||
X fprintf(stderr, "Member to remove could not be found\n");
|
|
||||||
X exit(EXIT_NOT_MEMBER);
|
|
||||||
X }
|
|
||||||
}
|
|
||||||
X
|
|
||||||
static void
|
|
||||||
nomembers(char **members) {
|
|
||||||
X int i;
|
|
||||||
X
|
|
||||||
X for (i = 0; NULL != members[i]; i++ ) {
|
|
||||||
X members[i] = NULL;
|
|
||||||
X }
|
|
||||||
}
|
|
||||||
X
|
|
||||||
static void
|
|
||||||
members(char **members) {
|
|
||||||
X int i;
|
|
||||||
X
|
|
||||||
X for (i = 0; NULL != members[i]; i++ ) {
|
|
||||||
X printf("%s ", members[i]);
|
|
||||||
X
|
|
||||||
X if (NULL == members[i+1]) {
|
|
||||||
X printf("\n");
|
|
||||||
X } else {
|
|
||||||
X printf(" ");
|
|
||||||
X }
|
|
||||||
X }
|
|
||||||
}
|
|
||||||
X
|
|
||||||
static void usage(void) {
|
|
||||||
X fprintf(stderr, "usage: groupmems -a username | -d username | -D | -l [-g groupname]\n");
|
|
||||||
X exit(EXIT_USAGE);
|
|
||||||
}
|
|
||||||
X
|
|
||||||
main(int argc, char **argv) {
|
|
||||||
X int arg, i;
|
|
||||||
X char *name;
|
|
||||||
X struct group *grp;
|
|
||||||
X
|
|
||||||
X while ((arg = getopt(argc, argv, "a:d:g:Dl")) != EOF) {
|
|
||||||
X switch (arg) {
|
|
||||||
X case 'a':
|
|
||||||
X adduser = strdup(optarg);
|
|
||||||
X ++exclusive;
|
|
||||||
X break;
|
|
||||||
X case 'd':
|
|
||||||
X deluser = strdup(optarg);
|
|
||||||
X ++exclusive;
|
|
||||||
X break;
|
|
||||||
X case 'g':
|
|
||||||
X thisgroup = strdup(optarg);
|
|
||||||
X break;
|
|
||||||
X case 'D':
|
|
||||||
X purge = TRUE;
|
|
||||||
X ++exclusive;
|
|
||||||
X break;
|
|
||||||
X case 'l':
|
|
||||||
X list = TRUE;
|
|
||||||
X ++exclusive;
|
|
||||||
X break;
|
|
||||||
X default:
|
|
||||||
X usage();
|
|
||||||
X }
|
|
||||||
X }
|
|
||||||
X
|
|
||||||
X if (exclusive > 1 || optind < argc) {
|
|
||||||
X usage();
|
|
||||||
X }
|
|
||||||
X
|
|
||||||
X if (!isroot() && NULL != thisgroup) {
|
|
||||||
X fprintf(stderr, "Only root can add members to different groups\n");
|
|
||||||
X exit(EXIT_NOT_ROOT);
|
|
||||||
X } else if (isroot() && NULL != thisgroup) {
|
|
||||||
X name = thisgroup;
|
|
||||||
X } else if (!isgroup()) {
|
|
||||||
X fprintf(stderr, "Group access is required\n");
|
|
||||||
X exit(EXIT_NOT_EROOT);
|
|
||||||
X } else if (NULL == (name = whoami())) {
|
|
||||||
X fprintf(stderr, "Not primary owner of current group\n");
|
|
||||||
X exit(EXIT_NOT_PRIMARY);
|
|
||||||
X }
|
|
||||||
X
|
|
||||||
X if (!gr_lock()) {
|
|
||||||
X fprintf(stderr, "Unable to lock group file\n");
|
|
||||||
X exit(EXIT_GROUP_FILE);
|
|
||||||
X }
|
|
||||||
X
|
|
||||||
X if (!gr_open(O_RDWR)) {
|
|
||||||
X fprintf(stderr, "Unable to open group file\n");
|
|
||||||
X exit(EXIT_GROUP_FILE);
|
|
||||||
X }
|
|
||||||
X
|
|
||||||
X grp = (struct group *)gr_locate(name);
|
|
||||||
X
|
|
||||||
X if (NULL != adduser) {
|
|
||||||
X addtogroup(adduser, grp->gr_mem);
|
|
||||||
X gr_update(grp);
|
|
||||||
X } else if (NULL != deluser) {
|
|
||||||
X rmfromgroup(deluser, grp->gr_mem);
|
|
||||||
X gr_update(grp);
|
|
||||||
X } else if (purge) {
|
|
||||||
X nomembers(grp->gr_mem);
|
|
||||||
X gr_update(grp);
|
|
||||||
X } else if (list) {
|
|
||||||
X members(grp->gr_mem);
|
|
||||||
X }
|
|
||||||
X
|
|
||||||
X if (!gr_close()) {
|
|
||||||
X fprintf(stderr, "Cannot close group file\n");
|
|
||||||
X exit(EXIT_GROUP_FILE);
|
|
||||||
X }
|
|
||||||
X
|
|
||||||
X gr_unlock();
|
|
||||||
X
|
|
||||||
X exit(EXIT_SUCCESS);
|
|
||||||
}
|
|
||||||
X
|
|
||||||
/* EOF */
|
|
||||||
SHAR_EOF
|
|
||||||
(set 20 00 05 25 14 36 38 'groupmems.c'; eval "$shar_touch") &&
|
|
||||||
chmod 0644 'groupmems.c' ||
|
|
||||||
$echo 'restore of' 'groupmems.c' 'failed'
|
|
||||||
if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \
|
|
||||||
&& ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then
|
|
||||||
md5sum -c << SHAR_EOF >/dev/null 2>&1 \
|
|
||||||
|| $echo 'groupmems.c:' 'MD5 check failed'
|
|
||||||
f0dd68f8d762d89d24d3ce1f4141f981 groupmems.c
|
|
||||||
SHAR_EOF
|
|
||||||
else
|
|
||||||
shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'groupmems.c'`"
|
|
||||||
test 6348 -eq "$shar_count" ||
|
|
||||||
$echo 'groupmems.c:' 'original size' '6348,' 'current size' "$shar_count!"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
# ============= groupmems.8 ==============
|
|
||||||
if test -f 'groupmems.8' && test "$first_param" != -c; then
|
|
||||||
$echo 'x -' SKIPPING 'groupmems.8' '(file already exists)'
|
|
||||||
else
|
|
||||||
$echo 'x -' extracting 'groupmems.8' '(text)'
|
|
||||||
sed 's/^X//' << 'SHAR_EOF' > 'groupmems.8' &&
|
|
||||||
X.\"
|
|
||||||
X.\" Copyright 2000, International Business Machines, Inc.
|
|
||||||
X.\" All rights reserved.
|
|
||||||
X.\"
|
|
||||||
X.\" original author: George Kraft IV, gk4@us.ibm.com
|
|
||||||
X.\"
|
|
||||||
X.\" Redistribution and use in source and binary forms, with or without
|
|
||||||
X.\" modification, are permitted provided that the following conditions
|
|
||||||
X.\" are met:
|
|
||||||
X.\"
|
|
||||||
X.\" 1. Redistributions of source code must retain the above copyright
|
|
||||||
X.\" notice, this list of conditions and the following disclaimer.
|
|
||||||
X.\" 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
X.\" notice, this list of conditions and the following disclaimer in the
|
|
||||||
X.\" documentation and/or other materials provided with the distribution.
|
|
||||||
X.\" 3. Neither the name of International Business Machines, Inc., nor the
|
|
||||||
X.\" names of its contributors may be used to endorse or promote products
|
|
||||||
X.\" derived from this software without specific prior written permission.
|
|
||||||
X.\"
|
|
||||||
X.\" THIS SOFTWARE IS PROVIDED BY INTERNATIONAL BUSINESS MACHINES, INC. AND
|
|
||||||
X.\" CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
|
|
||||||
X.\" BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
|
||||||
X.\" FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
|
|
||||||
X.\" INTERNATIONAL BUSINESS MACHINES, INC. OR CONTRIBUTORS BE LIABLE
|
|
||||||
X.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
X.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
||||||
X.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
||||||
X.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
||||||
X.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
||||||
X.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
||||||
X.\" SUCH DAMAGE.
|
|
||||||
X.\"
|
|
||||||
X.\" $Id$
|
|
||||||
X.\"
|
|
||||||
X.TH GROUPMEMS 8
|
|
||||||
X.SH NAME
|
|
||||||
groupmems \- Administer members of a user's primary group
|
|
||||||
X.SH SYNOPSIS
|
|
||||||
X.B groupmems
|
|
||||||
\fB-a\fI user_name \fR |
|
|
||||||
\fB-d\fI user_name \fR |
|
|
||||||
\fB-l\fR |
|
|
||||||
\fB-D\fR |
|
|
||||||
[\fB-g\fI group_name \fR]
|
|
||||||
X.SH DESCRIPTION
|
|
||||||
The \fBgroupmems\fR utility allows a user to administer his/her own
|
|
||||||
group membership list without the requirement of superuser privileges.
|
|
||||||
The \fBgroupmems\fR utility is for systems that configure its users to
|
|
||||||
be in their own name sake primary group (i.e., guest / guest).
|
|
||||||
X.P
|
|
||||||
Only the superuser, as administrator, can use \fBgroupmems\fR to alter
|
|
||||||
the memberships of other groups.
|
|
||||||
X.IP "\fB-a \fIuser_name\fR"
|
|
||||||
Add a new user to the group membership list.
|
|
||||||
X.IP "\fB-d \fIuser_name\fR"
|
|
||||||
Delete a user from the group membership list.
|
|
||||||
X.IP "\fB-l\fR"
|
|
||||||
List the group membership list.
|
|
||||||
X.IP "\fB-D\fR"
|
|
||||||
Delete all users from the group membership list.
|
|
||||||
X.IP "\fB-g \fIgroup_name\fR"
|
|
||||||
The superuser can specify which group membership list to modify.
|
|
||||||
X.SH SETUP
|
|
||||||
The \fBgroupmems\fR executable should be in mode \fB2770\fR as user \fBroot\fR
|
|
||||||
and in group \fBgroups\fR. The system administrator can add users to
|
|
||||||
group groups to allow or disallow them using the \fBgroupmems\fR utility
|
|
||||||
to manager their own group membership list.
|
|
||||||
X.P
|
|
||||||
X $ groupadd -r groups
|
|
||||||
X.br
|
|
||||||
X $ chmod 2770 groupmems
|
|
||||||
X.br
|
|
||||||
X $ chown root.groups groupmems
|
|
||||||
X.br
|
|
||||||
X $ groupmems -g groups -a gk4
|
|
||||||
X.SH FILES
|
|
||||||
/etc/group
|
|
||||||
X.br
|
|
||||||
/etc/gshadow
|
|
||||||
X.SH SEE ALSO
|
|
||||||
X.BR chfn (1),
|
|
||||||
X.BR chsh (1),
|
|
||||||
X.BR useradd (8),
|
|
||||||
X.BR userdel (8),
|
|
||||||
X.BR usermod (8),
|
|
||||||
X.BR passwd (1),
|
|
||||||
X.BR groupadd (8),
|
|
||||||
X.BR groupdel (8)
|
|
||||||
X.SH AUTHOR
|
|
||||||
George Kraft IV (gk4@us.ibm.com)
|
|
||||||
X.\" EOF
|
|
||||||
SHAR_EOF
|
|
||||||
(set 20 00 05 25 14 38 23 'groupmems.8'; eval "$shar_touch") &&
|
|
||||||
chmod 0600 'groupmems.8' ||
|
|
||||||
$echo 'restore of' 'groupmems.8' 'failed'
|
|
||||||
if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \
|
|
||||||
&& ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then
|
|
||||||
md5sum -c << SHAR_EOF >/dev/null 2>&1 \
|
|
||||||
|| $echo 'groupmems.8:' 'MD5 check failed'
|
|
||||||
181e6cd3a3c9d3df320197fa2cde2b4a groupmems.8
|
|
||||||
SHAR_EOF
|
|
||||||
else
|
|
||||||
shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'groupmems.8'`"
|
|
||||||
test 3372 -eq "$shar_count" ||
|
|
||||||
$echo 'groupmems.8:' 'original size' '3372,' 'current size' "$shar_count!"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
rm -fr _sh10937
|
|
||||||
exit 0
|
|
||||||
@@ -1,308 +0,0 @@
|
|||||||
/*
|
|
||||||
* pwdauth.c - program to verify a given username/password pair.
|
|
||||||
*
|
|
||||||
* Run it with username in argv[1] (may be omitted - default is the
|
|
||||||
* current user), and send it the password over a pipe on stdin.
|
|
||||||
* Exit status: 0 - correct password, 1 - wrong password, >1 - other
|
|
||||||
* errors. For use with shadow passwords, this program should be
|
|
||||||
* installed setuid root.
|
|
||||||
*
|
|
||||||
* This can be used, for example, by xlock - you don't have to install
|
|
||||||
* this large and complex (== possibly insecure) program setuid root,
|
|
||||||
* just modify it to run this simple program to do the authentication.
|
|
||||||
*
|
|
||||||
* Recent versions (xlockmore-3.9) are cleaner, and drop privileges as
|
|
||||||
* soon as possible after getting the user's encrypted password.
|
|
||||||
* Using this program probably doesn't make it more secure, and has one
|
|
||||||
* disadvantage: since we don't get the encrypted user's password at
|
|
||||||
* startup (but at the time the user is authenticated), it is not clear
|
|
||||||
* how we should handle errors (like getpwnam() returning NULL).
|
|
||||||
* - fail the authentication? Problem: no way to unlock (other than kill
|
|
||||||
* the process from somewhere else) if the NIS server stops responding.
|
|
||||||
* - succeed and unlock? Problem: it's too easy to unlock by unplugging
|
|
||||||
* the box from the network and waiting until NIS times out...
|
|
||||||
*
|
|
||||||
* This program is Copyright (C) 1996 Marek Michalkiewicz
|
|
||||||
* <marekm@i17linuxb.ists.pwr.wroc.pl>.
|
|
||||||
*
|
|
||||||
* It may be used and distributed freely for any purposes. There is no
|
|
||||||
* warranty - use at your own risk. I am not liable for any damages etc.
|
|
||||||
* If you improve it, please send me your changes.
|
|
||||||
*/
|
|
||||||
|
|
||||||
static char rcsid[] = "$Id$";
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Define USE_SYSLOG to use syslog() to log successful and failed
|
|
||||||
* authentication. This should be safe even if your system has
|
|
||||||
* the infamous syslog buffer overrun security problem...
|
|
||||||
*/
|
|
||||||
#define USE_SYSLOG
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Define HAVE_GETSPNAM to get shadow passwords using getspnam().
|
|
||||||
* Some systems don't have getspnam(), but getpwnam() returns
|
|
||||||
* encrypted passwords only if running as root.
|
|
||||||
*
|
|
||||||
* According to the xlock source (not tested, except Linux) -
|
|
||||||
* define: Linux, Solaris 2.x, SVR4, ...
|
|
||||||
* undef: HP-UX with Secured Passwords, FreeBSD, NetBSD, QNX.
|
|
||||||
* Known not supported (yet): Ultrix, OSF/1, SCO.
|
|
||||||
*/
|
|
||||||
#define HAVE_GETSPNAM
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Define HAVE_PW_ENCRYPT to use pw_encrypt() instead of crypt().
|
|
||||||
* pw_encrypt() is like the standard crypt(), except that it may
|
|
||||||
* support better password hashing algorithms.
|
|
||||||
*
|
|
||||||
* Define if linking with libshadow.a from the shadow password
|
|
||||||
* suite (Linux, SunOS 4.x?).
|
|
||||||
*/
|
|
||||||
#undef HAVE_PW_ENCRYPT
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Define HAVE_AUTH_METHODS to support the shadow suite specific
|
|
||||||
* extension: the encrypted password field contains a list of
|
|
||||||
* administrator defined authentication methods, separated by
|
|
||||||
* semicolons. This program only supports the standard password
|
|
||||||
* authentication method (a string that doesn't start with '@').
|
|
||||||
*/
|
|
||||||
#undef HAVE_AUTH_METHODS
|
|
||||||
|
|
||||||
/*
|
|
||||||
* FAIL_DELAY - number of seconds to sleep before exiting if the
|
|
||||||
* password was wrong, to slow down password guessing attempts.
|
|
||||||
*/
|
|
||||||
#define FAIL_DELAY 2
|
|
||||||
|
|
||||||
/* No user-serviceable parts below :-). */
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/wait.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <pwd.h>
|
|
||||||
|
|
||||||
#ifdef USE_SYSLOG
|
|
||||||
#include <syslog.h>
|
|
||||||
#ifndef LOG_AUTHPRIV
|
|
||||||
#define LOG_AUTHPRIV LOG_AUTH
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_GETSPNAM
|
|
||||||
#include <shadow.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_PW_ENCRYPT
|
|
||||||
extern char *pw_encrypt();
|
|
||||||
#define crypt pw_encrypt
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Read the password (one line) from fp. We don't turn off echo
|
|
||||||
* because we expect input from a pipe.
|
|
||||||
*/
|
|
||||||
static char *
|
|
||||||
get_line(fp)
|
|
||||||
FILE *fp;
|
|
||||||
{
|
|
||||||
static char buf[128];
|
|
||||||
char *cp;
|
|
||||||
int ch;
|
|
||||||
|
|
||||||
cp = buf;
|
|
||||||
while ((ch = getc(fp)) != EOF && ch != '\0' && ch != '\n') {
|
|
||||||
if (cp >= buf + sizeof buf - 1)
|
|
||||||
break;
|
|
||||||
*cp++ = ch;
|
|
||||||
}
|
|
||||||
*cp = '\0';
|
|
||||||
return buf;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Get the password file entry for the current user. If the name
|
|
||||||
* returned by getlogin() is correct (matches the current real uid),
|
|
||||||
* return the entry for that user. Otherwise, return the entry (if
|
|
||||||
* any) matching the current real uid. Return NULL on failure.
|
|
||||||
*/
|
|
||||||
static struct passwd *
|
|
||||||
get_my_pwent()
|
|
||||||
{
|
|
||||||
uid_t uid = getuid();
|
|
||||||
char *name = getlogin();
|
|
||||||
|
|
||||||
if (name && *name) {
|
|
||||||
struct passwd *pw = getpwnam(name);
|
|
||||||
|
|
||||||
if (pw && pw->pw_uid == uid)
|
|
||||||
return pw;
|
|
||||||
}
|
|
||||||
return getpwuid(uid);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Verify the password. The system-dependent shadow support is here.
|
|
||||||
*/
|
|
||||||
static int
|
|
||||||
password_auth_ok(pw, pass)
|
|
||||||
const struct passwd *pw;
|
|
||||||
const char *pass;
|
|
||||||
{
|
|
||||||
int result;
|
|
||||||
char *cp;
|
|
||||||
#ifdef HAVE_AUTH_METHODS
|
|
||||||
char *buf;
|
|
||||||
#endif
|
|
||||||
#ifdef HAVE_GETSPNAM
|
|
||||||
struct spwd *sp;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (pw) {
|
|
||||||
#ifdef HAVE_GETSPNAM
|
|
||||||
sp = getspnam(pw->pw_name);
|
|
||||||
if (sp)
|
|
||||||
cp = sp->sp_pwdp;
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
cp = pw->pw_passwd;
|
|
||||||
} else
|
|
||||||
cp = "xx";
|
|
||||||
|
|
||||||
#ifdef HAVE_AUTH_METHODS
|
|
||||||
buf = strdup(cp); /* will be modified by strtok() */
|
|
||||||
if (!buf) {
|
|
||||||
fprintf(stderr, "Out of memory.\n");
|
|
||||||
exit(13);
|
|
||||||
}
|
|
||||||
cp = strtok(buf, ";");
|
|
||||||
while (cp && *cp == '@')
|
|
||||||
cp = strtok(NULL, ";");
|
|
||||||
|
|
||||||
/* fail if no password authentication for this user */
|
|
||||||
if (!cp)
|
|
||||||
cp = "xx";
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (*pass || *cp)
|
|
||||||
result = (strcmp(crypt(pass, cp), cp) == 0);
|
|
||||||
else
|
|
||||||
result = 1; /* user with no password */
|
|
||||||
|
|
||||||
#ifdef HAVE_AUTH_METHODS
|
|
||||||
free(buf);
|
|
||||||
#endif
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Main program.
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
main(argc, argv)
|
|
||||||
int argc;
|
|
||||||
char **argv;
|
|
||||||
{
|
|
||||||
struct passwd *pw;
|
|
||||||
char *pass, *name;
|
|
||||||
char myname[32];
|
|
||||||
|
|
||||||
#ifdef USE_SYSLOG
|
|
||||||
openlog("pwdauth", LOG_PID | LOG_CONS, LOG_AUTHPRIV);
|
|
||||||
#endif
|
|
||||||
pw = get_my_pwent();
|
|
||||||
if (!pw) {
|
|
||||||
#ifdef USE_SYSLOG
|
|
||||||
syslog(LOG_ERR, "can't get login name for uid %d.\n",
|
|
||||||
(int) getuid());
|
|
||||||
#endif
|
|
||||||
fprintf(stderr, "Who are you?\n");
|
|
||||||
exit(2);
|
|
||||||
}
|
|
||||||
strncpy(myname, pw->pw_name, sizeof myname - 1);
|
|
||||||
myname[sizeof myname - 1] = '\0';
|
|
||||||
name = myname;
|
|
||||||
|
|
||||||
if (argc > 1) {
|
|
||||||
name = argv[1];
|
|
||||||
pw = getpwnam(name);
|
|
||||||
}
|
|
||||||
|
|
||||||
pass = get_line(stdin);
|
|
||||||
if (password_auth_ok(pw, pass)) {
|
|
||||||
#ifdef USE_SYSLOG
|
|
||||||
syslog(pw->pw_uid ? LOG_INFO : LOG_NOTICE,
|
|
||||||
"user `%s' entered correct password for `%.32s'.\n",
|
|
||||||
myname, name);
|
|
||||||
#endif
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
#ifdef USE_SYSLOG
|
|
||||||
/* be careful not to overrun the syslog buffer */
|
|
||||||
syslog((!pw || pw->pw_uid) ? LOG_NOTICE : LOG_WARNING,
|
|
||||||
"user `%s' entered incorrect password for `%.32s'.\n",
|
|
||||||
myname, name);
|
|
||||||
#endif
|
|
||||||
#ifdef FAIL_DELAY
|
|
||||||
sleep(FAIL_DELAY);
|
|
||||||
#endif
|
|
||||||
fprintf(stderr, "Wrong password.\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
/*
|
|
||||||
* You can use code similar to the following to run this program.
|
|
||||||
* Return values: >=0 - program exit status (use the <sys/wait.h>
|
|
||||||
* macros to get the exit code, it is shifted left by 8 bits),
|
|
||||||
* -1 - check errno.
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
verify_password(const char *username, const char *password)
|
|
||||||
{
|
|
||||||
int pipe_fd[2];
|
|
||||||
int pid, wpid, status;
|
|
||||||
|
|
||||||
if (pipe(pipe_fd))
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
if ((pid = fork()) == 0) {
|
|
||||||
char *arg[3];
|
|
||||||
char *env[1];
|
|
||||||
|
|
||||||
/* child */
|
|
||||||
close(pipe_fd[1]);
|
|
||||||
if (pipe_fd[0] != 0) {
|
|
||||||
if (dup2(pipe_fd[0], 0) != 0)
|
|
||||||
_exit(127);
|
|
||||||
close(pipe_fd[0]);
|
|
||||||
}
|
|
||||||
arg[0] = "/usr/bin/pwdauth";
|
|
||||||
arg[1] = username;
|
|
||||||
arg[2] = NULL;
|
|
||||||
env[0] = NULL;
|
|
||||||
execve(arg[0], arg, env);
|
|
||||||
_exit(127);
|
|
||||||
} else if (pid == -1) {
|
|
||||||
/* error */
|
|
||||||
close(pipe_fd[0]);
|
|
||||||
close(pipe_fd[1]);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
/* parent */
|
|
||||||
close(pipe_fd[0]);
|
|
||||||
write(pipe_fd[1], password, strlen(password));
|
|
||||||
write(pipe_fd[1], "\n", 1);
|
|
||||||
close(pipe_fd[1]);
|
|
||||||
|
|
||||||
while ((wpid = wait(&status)) != pid) {
|
|
||||||
if (wpid == -1)
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
@@ -1,147 +0,0 @@
|
|||||||
Hello Marek,
|
|
||||||
|
|
||||||
I have created a diffile against the 980403 release that adds
|
|
||||||
functionality to newusers for automatic handling of users with only
|
|
||||||
anonomous ftp login (using the guestgroup feature in ftpaccess, which
|
|
||||||
means that the users home directory looks like '/home/user/./'). It also
|
|
||||||
adds a commandline argument to specify an initial directory structure
|
|
||||||
for such users, with a tarball normally containing the bin,lib,etc
|
|
||||||
directories used in the chrooted environment.
|
|
||||||
|
|
||||||
I am using it to automatically create chunks of users with only ftp
|
|
||||||
access for a webserver.
|
|
||||||
|
|
||||||
I have tried to follow your coding standards and I believe it is bug
|
|
||||||
free but.. well, who knows. :) It's not much code however.
|
|
||||||
|
|
||||||
I hope you find it useful. Do what you like with it, feel free to ask if
|
|
||||||
anything is unclear.
|
|
||||||
|
|
||||||
Best rgds,
|
|
||||||
Calle Karlsson
|
|
||||||
ckn@kash.se
|
|
||||||
|
|
||||||
diff -uNr shadow-980403.orig/src/newusers.c shadow-980403/src/newusers.c
|
|
||||||
--- shadow-980403.orig/src/newusers.c Fri Jan 30 00:22:43 1998
|
|
||||||
+++ shadow-980403/src/newusers.c Fri Apr 17 16:55:33 1998
|
|
||||||
@@ -76,11 +76,35 @@
|
|
||||||
static void
|
|
||||||
usage(void)
|
|
||||||
{
|
|
||||||
- fprintf(stderr, "Usage: %s [ input ]\n", Prog);
|
|
||||||
+ fprintf (stderr, "Usage: %s [-p prototype tarfile] [ input ]\n", Prog);
|
|
||||||
+ fprintf (stderr, "The prototype tarfile is only used for users\n");
|
|
||||||
+ fprintf (stderr, "marked as anonymous ftp users. It must be a full pathname.\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
+ * createuserdir - create a directory and chmod it
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+static int
|
|
||||||
+createuserdir (char * dir, int uid, int gid, int line)
|
|
||||||
+{
|
|
||||||
+ if (mkdir (dir, 0777 & ~getdef_num("UMASK", 077))) {
|
|
||||||
+ fprintf (stderr, "%s: line %d: mkdir %s failed\n",
|
|
||||||
+ Prog, line, dir);
|
|
||||||
+ return -1;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (chown (dir, uid, gid)) {
|
|
||||||
+ fprintf (stderr, "%s: line %d: chown %s failed\n",
|
|
||||||
+ Prog, line, dir);
|
|
||||||
+ return -1;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return 0;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+/*
|
|
||||||
* add_group - create a new group or add a user to an existing group
|
|
||||||
*/
|
|
||||||
|
|
||||||
@@ -328,6 +352,8 @@
|
|
||||||
main(int argc, char **argv)
|
|
||||||
{
|
|
||||||
char buf[BUFSIZ];
|
|
||||||
+ char anonproto[BUFSIZ];
|
|
||||||
+ int flag;
|
|
||||||
char *fields[8];
|
|
||||||
int nfields;
|
|
||||||
char *cp;
|
|
||||||
@@ -340,12 +366,23 @@
|
|
||||||
|
|
||||||
Prog = Basename(argv[0]);
|
|
||||||
|
|
||||||
- if (argc > 1 && argv[1][0] == '-')
|
|
||||||
- usage ();
|
|
||||||
+ * anonproto = '\0';
|
|
||||||
+
|
|
||||||
+ while ((flag = getopt (argc, argv, "p:h")) != EOF) {
|
|
||||||
+ switch (flag) {
|
|
||||||
+ case 'p':
|
|
||||||
+ STRFCPY(anonproto, optarg);
|
|
||||||
+ break;
|
|
||||||
+ case 'h':
|
|
||||||
+ default:
|
|
||||||
+ usage ();
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- if (argc == 2) {
|
|
||||||
- if (! freopen (argv[1], "r", stdin)) {
|
|
||||||
- snprintf(buf, sizeof buf, "%s: %s", Prog, argv[1]);
|
|
||||||
+ if (optind < argc) {
|
|
||||||
+ if (! freopen (argv[optind], "r", stdin)) {
|
|
||||||
+ snprintf(buf, sizeof buf, "%s: %s", Prog, argv[optind]);
|
|
||||||
perror (buf);
|
|
||||||
exit (1);
|
|
||||||
}
|
|
||||||
@@ -499,15 +536,36 @@
|
|
||||||
if (fields[6][0])
|
|
||||||
newpw.pw_shell = fields[6];
|
|
||||||
|
|
||||||
- if (newpw.pw_dir[0] && access(newpw.pw_dir, F_OK)) {
|
|
||||||
- if (mkdir (newpw.pw_dir,
|
|
||||||
- 0777 & ~getdef_num("UMASK", 077)))
|
|
||||||
- fprintf (stderr, "%s: line %d: mkdir failed\n",
|
|
||||||
- Prog, line);
|
|
||||||
- else if (chown (newpw.pw_dir,
|
|
||||||
- newpw.pw_uid, newpw.pw_gid))
|
|
||||||
- fprintf (stderr, "%s: line %d: chown failed\n",
|
|
||||||
- Prog, line);
|
|
||||||
+ if (newpw.pw_dir[0]) {
|
|
||||||
+ char * userdir = strdup (newpw.pw_dir);
|
|
||||||
+ char * anonpart;
|
|
||||||
+ int rc;
|
|
||||||
+
|
|
||||||
+ if ((anonpart = strstr (userdir, "/./"))) {
|
|
||||||
+ * anonpart = '\0';
|
|
||||||
+ anonpart += 2;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (access(userdir, F_OK))
|
|
||||||
+ rc = createuserdir (userdir, newpw.pw_uid, newpw.pw_gid, line);
|
|
||||||
+ else
|
|
||||||
+ rc = 0;
|
|
||||||
+
|
|
||||||
+ if (rc == 0 && anonpart) {
|
|
||||||
+ if (* anonproto) {
|
|
||||||
+ char cmdbuf [BUFSIZ];
|
|
||||||
+ snprintf(cmdbuf, sizeof cmdbuf,
|
|
||||||
+ "cd %s; tar xf %s",
|
|
||||||
+ userdir, anonproto);
|
|
||||||
+ system (cmdbuf);
|
|
||||||
+ }
|
|
||||||
+ if (strlen (anonpart) > 1) {
|
|
||||||
+ strcat (userdir, anonpart);
|
|
||||||
+ if (access (userdir, F_OK))
|
|
||||||
+ createuserdir (userdir, newpw.pw_uid, newpw.pw_gid, line);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ free (userdir);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
Binary file not shown.
@@ -346,7 +346,7 @@
|
|||||||
return value points to static data whose content is overwritten by
|
return value points to static data whose content is overwritten by
|
||||||
each call.
|
each call.
|
||||||
|
|
||||||
Warning: The key space consists of 2**56 equal 7.2e16 possible values.
|
Warning: the key space consists of 2**56 equal 7.2e16 possible values.
|
||||||
Exhaustive searches of this key space are possible using massively
|
Exhaustive searches of this key space are possible using massively
|
||||||
parallel computers. Software, such as crack(1), is available which
|
parallel computers. Software, such as crack(1), is available which
|
||||||
will search the portion of this key space that is generally used by
|
will search the portion of this key space that is generally used by
|
||||||
@@ -471,12 +471,12 @@
|
|||||||
|
|
||||||
The Shadow Suite contains replacement programs for:
|
The Shadow Suite contains replacement programs for:
|
||||||
|
|
||||||
su, login, passwd, newgrp, chfn, chsh, and id
|
su, login, passwd, newgrp, chfn, chsh
|
||||||
|
|
||||||
The package also contains the new programs:
|
The package also contains the new programs:
|
||||||
|
|
||||||
chage, newusers, dpasswd, gpasswd, useradd, userdel, usermod,
|
chage, newusers, dpasswd, gpasswd, useradd, userdel, usermod,
|
||||||
groupadd, groupdel, groupmod, groups, pwck, grpck, lastlog, pwconv,
|
groupadd, groupdel, groupmod, pwck, grpck, lastlog, pwconv,
|
||||||
and pwunconv
|
and pwunconv
|
||||||
|
|
||||||
Additionally, the library: libshadow.a is included for writing and/or
|
Additionally, the library: libshadow.a is included for writing and/or
|
||||||
@@ -586,8 +586,6 @@
|
|||||||
|
|
||||||
· /usr/bin/chsh
|
· /usr/bin/chsh
|
||||||
|
|
||||||
· /usr/bin/id
|
|
||||||
|
|
||||||
The BETA package has a save target in the Makefile, but it's commented
|
The BETA package has a save target in the Makefile, but it's commented
|
||||||
out because different distributions place the programs in different
|
out because different distributions place the programs in different
|
||||||
places.
|
places.
|
||||||
@@ -637,8 +635,6 @@
|
|||||||
|
|
||||||
· /usr/man/man1/chsh.1.gz
|
· /usr/man/man1/chsh.1.gz
|
||||||
|
|
||||||
· /usr/man/man1/id.1.gz
|
|
||||||
|
|
||||||
· /usr/man/man1/login.1.gz
|
· /usr/man/man1/login.1.gz
|
||||||
|
|
||||||
· /usr/man/man1/passwd.1.gz
|
· /usr/man/man1/passwd.1.gz
|
||||||
@@ -1000,7 +996,7 @@
|
|||||||
sudo for the shadow suite, is available as at:
|
sudo for the shadow suite, is available as at:
|
||||||
<ftp://sunsite.unc.edu/pub/Linux/system/Admin/sudo-1.2-shadow.tgz>
|
<ftp://sunsite.unc.edu/pub/Linux/system/Admin/sudo-1.2-shadow.tgz>
|
||||||
|
|
||||||
Warning: When you install sudo your /etc/sudoers file will be replaced
|
Warning: when you install sudo your /etc/sudoers file will be replaced
|
||||||
with a default one, so you need to make a backup of it if you have
|
with a default one, so you need to make a backup of it if you have
|
||||||
added anything to the default one. (you could also edit the Makefile
|
added anything to the default one. (you could also edit the Makefile
|
||||||
and remove the line that copies the default file to /etc).
|
and remove the line that copies the default file to /etc).
|
||||||
@@ -1311,7 +1307,7 @@
|
|||||||
|
|
||||||
This means that fred's password is valid, it was last changed on
|
This means that fred's password is valid, it was last changed on
|
||||||
03/04/96, it can be changed at any time, it expires after 60 days,
|
03/04/96, it can be changed at any time, it expires after 60 days,
|
||||||
fred will not be warned, and and the account won't be disabled when
|
fred will not be warned, and the account won't be disabled when
|
||||||
the password expires.
|
the password expires.
|
||||||
|
|
||||||
This simply means that if fred logs in after the password expires, he
|
This simply means that if fred logs in after the password expires, he
|
||||||
@@ -1377,7 +1373,7 @@
|
|||||||
users or changing the group password, the /etc/gshadow file will be
|
users or changing the group password, the /etc/gshadow file will be
|
||||||
changed.
|
changed.
|
||||||
|
|
||||||
The programs groups, groupadd, groupmod, and groupdel are provided as
|
The programs groupadd, groupmod, and groupdel are provided as
|
||||||
part of the Shadow Suite to modify groups.
|
part of the Shadow Suite to modify groups.
|
||||||
|
|
||||||
The format of the /etc/group file is as follows:
|
The format of the /etc/group file is as follows:
|
||||||
@@ -1487,7 +1483,7 @@
|
|||||||
|
|
||||||
If a user logs into a line that is listed in /etc/dialups, and his
|
If a user logs into a line that is listed in /etc/dialups, and his
|
||||||
shell is listed in the file /etc/d_passwd he will be allowed access
|
shell is listed in the file /etc/d_passwd he will be allowed access
|
||||||
only by suppling the correct password.
|
only by supplying the correct password.
|
||||||
|
|
||||||
Another useful purpose for using dial-up passwords might be to setup a
|
Another useful purpose for using dial-up passwords might be to setup a
|
||||||
line that only allows a certain type of connect (perhaps a PPP or UUCP
|
line that only allows a certain type of connect (perhaps a PPP or UUCP
|
||||||
@@ -1755,7 +1751,7 @@
|
|||||||
}
|
}
|
||||||
#ifdef HAS_SHADOW
|
#ifdef HAS_SHADOW
|
||||||
if ((pw->pw_passwd && pw->pw_passwd[0] == '@'
|
if ((pw->pw_passwd && pw->pw_passwd[0] == '@'
|
||||||
&& pw_auth (pw->pw_passwd+1, pw->pw_name, PW_LOGIN, NULL))
|
&& pw_auth(pw->pw_passwd+1, pw->pw_name))
|
||||||
|| !valid (passwd, pw)) {
|
|| !valid (passwd, pw)) {
|
||||||
return (UPAP_AUTHNAK);
|
return (UPAP_AUTHNAK);
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-2
@@ -1,5 +1,4 @@
|
|||||||
# This is a dummy Makefile.am to get automake work flawlessly,
|
# This is a dummy Makefile.am to get automake work flawlessly,
|
||||||
# and also cooperate to make a distribution for `make dist'
|
# and also cooperate to make a distribution for `make dist'
|
||||||
|
|
||||||
EXTRA_DIST = HOWTO README.limits \
|
EXTRA_DIST = HOWTO README.limits
|
||||||
README.platforms WISHLIST console.c.spec.txt cracklib26.diff
|
|
||||||
|
|||||||
+518
@@ -0,0 +1,518 @@
|
|||||||
|
# Makefile.in generated by automake 1.18.1 from Makefile.am.
|
||||||
|
# @configure_input@
|
||||||
|
|
||||||
|
# Copyright (C) 1994-2025 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))
|
||||||
|
am__rm_f = rm -f $(am__rm_f_notfound)
|
||||||
|
am__rm_rf = rm -rf $(am__rm_f_notfound)
|
||||||
|
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@
|
||||||
|
FILECMD = @FILECMD@
|
||||||
|
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__rm_f_notfound = @am__rm_f_notfound@
|
||||||
|
am__tar = @am__tar@
|
||||||
|
am__untar = @am__untar@
|
||||||
|
am__xargs_n = @am__xargs_n@
|
||||||
|
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:
|
||||||
|
-$(am__rm_f) $(CONFIG_CLEAN_FILES)
|
||||||
|
-test . = "$(srcdir)" || $(am__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:
|
||||||
|
|
||||||
|
# Tell GNU make to disable its built-in pattern rules.
|
||||||
|
%:: %,v
|
||||||
|
%:: RCS/%,v
|
||||||
|
%:: RCS/%
|
||||||
|
%:: s.%
|
||||||
|
%:: SCCS/s.%
|
||||||
+1
-2
@@ -15,7 +15,7 @@ Changes:
|
|||||||
- code merged into lmain.c --cristiang
|
- code merged into lmain.c --cristiang
|
||||||
|
|
||||||
TODO: - support groups in the limits file
|
TODO: - support groups in the limits file
|
||||||
(only usernames are supported at this momment :-( )
|
(only usernames are supported at this moment :-( )
|
||||||
|
|
||||||
Setting user limits for shadow login program
|
Setting user limits for shadow login program
|
||||||
|
|
||||||
@@ -63,4 +63,3 @@ 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
|
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
|
not global, nor are they permanent. Perhaps global limits will come, but
|
||||||
for now this will have to do ;)
|
for now this will have to do ;)
|
||||||
|
|
||||||
|
|||||||
@@ -1,33 +0,0 @@
|
|||||||
# $Id$
|
|
||||||
#
|
|
||||||
# This is the current (still incomplete) list of platforms this
|
|
||||||
# package has been verified to work on. Additions (preferably
|
|
||||||
# in the format as described below) are welcome. Thanks!
|
|
||||||
#
|
|
||||||
# V: last version reported to work
|
|
||||||
# H: host type
|
|
||||||
# L: Linux libc version
|
|
||||||
# D: Linux distribution, or other OS name and version
|
|
||||||
# C: changes (if any)
|
|
||||||
# R: reported by
|
|
||||||
|
|
||||||
V: 980529
|
|
||||||
H: sparc-unknown-linux-gnu
|
|
||||||
L: glibc-2.0.7
|
|
||||||
D: Ultrapenguin-1.0.9
|
|
||||||
C: had to explicitly disable desrpc.
|
|
||||||
R: Bjorn Christianson <bjorn@cascade.psychology.mcmaster.ca>
|
|
||||||
|
|
||||||
V: 980724
|
|
||||||
H: i486-pc-linux-gnulibc1
|
|
||||||
L: libc-5.4.33
|
|
||||||
D: Debian-1.3.1.r6
|
|
||||||
C: none (use dpkg-buildpackage)
|
|
||||||
R: Marek Michalkiewicz <marekm@linux.org.pl>
|
|
||||||
|
|
||||||
V: current
|
|
||||||
H: i686-pc-linux-gnu
|
|
||||||
L: glibc-2.0.7.19981211
|
|
||||||
D: Debian-2.1
|
|
||||||
C: none (use dpkg-buildpackage)
|
|
||||||
R: Marek Michalkiewicz <marekm@linux.org.pl>
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
$Id$
|
|
||||||
|
|
||||||
This is my wishlist for the shadow suite, in no particular order. Feel
|
|
||||||
free to do anything from this list and mail me the diffs :-).
|
|
||||||
|
|
||||||
Patches in diff -u format, against the latest version (sometimes in the
|
|
||||||
"beta" directory) are preferred and make my job easier. Please, no
|
|
||||||
MIME, base64, quoted-printable, or HTML. For very big patches, or if
|
|
||||||
your mailer can corrupt them, please use gzip and uuencode. Thanks!
|
|
||||||
|
|
||||||
New ideas to add to this list are welcome, too. --marekm
|
|
||||||
|
|
||||||
- fix all the bugs, of course
|
|
||||||
- implement "su only" accounts (no logins, only su from other account)
|
|
||||||
- rewrite getdef.c to be more general? (no hardcoded names)
|
|
||||||
- patch for rlogind/telnetd to create utmp entry and fill in ut_addr
|
|
||||||
- option to specify encrypted password in passwd (for yppasswdd, so it
|
|
||||||
doesn't need to know about shadow/non-shadow); should probably use a pipe
|
|
||||||
(less insecure than command line arguments)
|
|
||||||
- add support for changing NIS passwords
|
|
||||||
- add option to check passwords by piping them to external programs
|
|
||||||
- add functionality of the contrib/rpasswd.c wrapper to passwd
|
|
||||||
- option to generate pronounceable passwords (like on SCO), external program?
|
|
||||||
- poppassd (remote password change for eudora etc.)
|
|
||||||
- add support for passwd/shadow db files (glibc)
|
|
||||||
- vipw: check password files for errors after editing
|
|
||||||
- add "maximum time users allowed to stay logged in" limit option to logoutd
|
|
||||||
- handle quotes in /etc/environment like the shell does (but sshd doesn't...)
|
|
||||||
- better utmpx support (logoutd, ...)
|
|
||||||
- better OPIE support (report number of logins left, etc.)
|
|
||||||
- new option for /etc/suauth: don't load user's environment (force "su -")
|
|
||||||
suggested by Ulisses Alonso Camaro
|
|
||||||
- find out why recent releases won't compile on Solaris
|
|
||||||
- newusers UID/GID selection algorithm should be the same as useradd
|
|
||||||
(and use UID_MIN, UID_MAX from login.defs)
|
|
||||||
- newusers should be able to copy /etc/skel to the new home directory
|
|
||||||
(like useradd)
|
|
||||||
- add directories where other packages can add hooks for package-specific
|
|
||||||
per-user configuration, to be executed with run-parts. Some hooks should
|
|
||||||
be executed at package install time for existing users, likewise for
|
|
||||||
package removal and possibly modification. (Debian Bug#36019)
|
|
||||||
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
$Id$
|
|
||||||
|
|
||||||
Specification for console.c source file --
|
|
||||||
|
|
||||||
input values --
|
|
||||||
tty -- character pointer to device name with leading "/dev/"
|
|
||||||
removed.
|
|
||||||
|
|
||||||
return values --
|
|
||||||
0 -- false
|
|
||||||
1 -- true
|
|
||||||
|
|
||||||
int console (char * tty)
|
|
||||||
if "CONSOLE" string value is not present in login.defs
|
|
||||||
return true
|
|
||||||
|
|
||||||
if the first character of "CONSOLE" string value is not "/"
|
|
||||||
treat the string as a ":" delimited list of device
|
|
||||||
names and search for the value of tty in that
|
|
||||||
tokenized list.
|
|
||||||
|
|
||||||
if a match is found
|
|
||||||
return true
|
|
||||||
|
|
||||||
return false
|
|
||||||
|
|
||||||
if the file named by "CONSOLE" cannot be opened
|
|
||||||
return true
|
|
||||||
|
|
||||||
scan the file looking for a match between the input line
|
|
||||||
and the value of tty
|
|
||||||
|
|
||||||
if a match is found
|
|
||||||
return true
|
|
||||||
|
|
||||||
return false
|
|
||||||
@@ -1,340 +0,0 @@
|
|||||||
diff -ur orig/cracklib26_small/cracklib/fascist.c cracklib26_small/cracklib/fascist.c
|
|
||||||
--- orig/cracklib26_small/cracklib/fascist.c Mon Dec 15 02:56:55 1997
|
|
||||||
+++ cracklib26_small/cracklib/fascist.c Sat Apr 4 22:14:45 1998
|
|
||||||
@@ -12,6 +12,7 @@
|
|
||||||
#include <ctype.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <pwd.h>
|
|
||||||
+#include <string.h>
|
|
||||||
|
|
||||||
#define ISSKIP(x) (isspace(x) || ispunct(x))
|
|
||||||
|
|
||||||
@@ -460,28 +461,27 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
char *
|
|
||||||
-FascistGecos(password, uid)
|
|
||||||
+FascistGecosPw(password, pwd)
|
|
||||||
char *password;
|
|
||||||
- int uid;
|
|
||||||
+ struct passwd *pwd;
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
int j;
|
|
||||||
int wc;
|
|
||||||
char *ptr;
|
|
||||||
- struct passwd *pwp;
|
|
||||||
char gbuffer[STRINGSIZE];
|
|
||||||
char tbuffer[STRINGSIZE];
|
|
||||||
char *uwords[STRINGSIZE];
|
|
||||||
char longbuffer[STRINGSIZE * 2];
|
|
||||||
|
|
||||||
- if (!(pwp = getpwuid(uid)))
|
|
||||||
+ if (!pwd)
|
|
||||||
{
|
|
||||||
return ("you are not registered in the password file");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* lets get really paranoid and assume a dangerously long gecos entry */
|
|
||||||
|
|
||||||
- strncpy(tbuffer, pwp->pw_name, STRINGSIZE);
|
|
||||||
+ strncpy(tbuffer, pwd->pw_name, STRINGSIZE);
|
|
||||||
tbuffer[STRINGSIZE-1] = '\0';
|
|
||||||
if (GTry(tbuffer, password))
|
|
||||||
{
|
|
||||||
@@ -490,12 +490,13 @@
|
|
||||||
|
|
||||||
/* it never used to be that you got passwd strings > 1024 chars, but now... */
|
|
||||||
|
|
||||||
- strncpy(tbuffer, pwp->pw_gecos, STRINGSIZE);
|
|
||||||
+ strncpy(tbuffer, pwd->pw_gecos, STRINGSIZE);
|
|
||||||
tbuffer[STRINGSIZE-1] = '\0';
|
|
||||||
strcpy(gbuffer, Lowercase(tbuffer));
|
|
||||||
|
|
||||||
wc = 0;
|
|
||||||
ptr = gbuffer;
|
|
||||||
+ uwords[0] = (char *) 0;
|
|
||||||
|
|
||||||
while (*ptr)
|
|
||||||
{
|
|
||||||
@@ -530,6 +531,8 @@
|
|
||||||
*(ptr++) = '\0';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+ if (!uwords[0])
|
|
||||||
+ return ((char *) 0); /* empty gecos */
|
|
||||||
#ifdef DEBUG
|
|
||||||
for (i = 0; uwords[i]; i++)
|
|
||||||
{
|
|
||||||
@@ -586,9 +589,10 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
char *
|
|
||||||
-FascistLook(pwp, instring)
|
|
||||||
+FascistLookPw(pwp, instring, pwd)
|
|
||||||
PWDICT *pwp;
|
|
||||||
char *instring;
|
|
||||||
+ struct passwd *pwd;
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
char *ptr;
|
|
||||||
@@ -667,7 +671,7 @@
|
|
||||||
return ("it looks like a National Insurance number.");
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (ptr = FascistGecos(password, getuid()))
|
|
||||||
+ if (ptr = FascistGecosPw(password, pwd ? pwd : getpwuid(getuid())))
|
|
||||||
{
|
|
||||||
return (ptr);
|
|
||||||
}
|
|
||||||
@@ -715,9 +719,10 @@
|
|
||||||
}
|
|
||||||
|
|
||||||
char *
|
|
||||||
-FascistCheck(password, path)
|
|
||||||
+FascistCheckPw(password, path, pwd)
|
|
||||||
char *password;
|
|
||||||
char *path;
|
|
||||||
+ struct passwd *pwd;
|
|
||||||
{
|
|
||||||
static char lastpath[STRINGSIZE];
|
|
||||||
static PWDICT *pwp;
|
|
||||||
@@ -750,5 +755,29 @@
|
|
||||||
strncpy(lastpath, path, STRINGSIZE);
|
|
||||||
}
|
|
||||||
|
|
||||||
- return (FascistLook(pwp, pwtrunced));
|
|
||||||
+ return (FascistLookPw(pwp, pwtrunced, pwd));
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+char *
|
|
||||||
+FascistGecos(password, uid)
|
|
||||||
+ char *password;
|
|
||||||
+ int uid;
|
|
||||||
+{
|
|
||||||
+ return (FascistGecosPw(password, getpwuid(uid)));
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+char *
|
|
||||||
+FascistLook(pwp, instring)
|
|
||||||
+ PWDICT *pwp;
|
|
||||||
+ char *instring;
|
|
||||||
+{
|
|
||||||
+ return (FascistLookPw(pwp, instring, (char *) 0));
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+char *
|
|
||||||
+FascistCheck(password, path)
|
|
||||||
+ char *password;
|
|
||||||
+ char *path;
|
|
||||||
+{
|
|
||||||
+ return (FascistCheckPw(password, path, (char *) 0));
|
|
||||||
}
|
|
||||||
diff -ur orig/cracklib26_small/cracklib/packer.h cracklib26_small/cracklib/packer.h
|
|
||||||
--- orig/cracklib26_small/cracklib/packer.h Mon Dec 15 00:09:30 1997
|
|
||||||
+++ cracklib26_small/cracklib/packer.h Sat Jan 10 22:13:46 1998
|
|
||||||
@@ -34,6 +34,7 @@
|
|
||||||
FILE *dfp;
|
|
||||||
FILE *wfp;
|
|
||||||
|
|
||||||
+ int canfree;
|
|
||||||
int32 flags;
|
|
||||||
#define PFOR_WRITE 0x0001
|
|
||||||
#define PFOR_FLUSH 0x0002
|
|
||||||
diff -ur orig/cracklib26_small/cracklib/packlib.c cracklib26_small/cracklib/packlib.c
|
|
||||||
--- orig/cracklib26_small/cracklib/packlib.c Fri Jul 9 22:22:58 1993
|
|
||||||
+++ cracklib26_small/cracklib/packlib.c Sat Jan 10 22:28:49 1998
|
|
||||||
@@ -16,7 +16,7 @@
|
|
||||||
char *mode;
|
|
||||||
{
|
|
||||||
int32 i;
|
|
||||||
- static PWDICT pdesc;
|
|
||||||
+ PWDICT *pdesc;
|
|
||||||
char iname[STRINGSIZE];
|
|
||||||
char dname[STRINGSIZE];
|
|
||||||
char wname[STRINGSIZE];
|
|
||||||
@@ -25,92 +25,94 @@
|
|
||||||
FILE *ifp;
|
|
||||||
FILE *wfp;
|
|
||||||
|
|
||||||
- if (pdesc.header.pih_magic == PIH_MAGIC)
|
|
||||||
- {
|
|
||||||
- fprintf(stderr, "%s: another dictionary already open\n", prefix);
|
|
||||||
+ if ((pdesc = (PWDICT *) malloc(sizeof(PWDICT))) == 0)
|
|
||||||
return ((PWDICT *) 0);
|
|
||||||
- }
|
|
||||||
|
|
||||||
- memset(&pdesc, '\0', sizeof(pdesc));
|
|
||||||
+ memset(pdesc, '\0', sizeof(*pdesc));
|
|
||||||
|
|
||||||
sprintf(iname, "%s.pwi", prefix);
|
|
||||||
sprintf(dname, "%s.pwd", prefix);
|
|
||||||
sprintf(wname, "%s.hwm", prefix);
|
|
||||||
|
|
||||||
- if (!(pdesc.dfp = fopen(dname, mode)))
|
|
||||||
+ if (!(pdesc->dfp = fopen(dname, mode)))
|
|
||||||
{
|
|
||||||
perror(dname);
|
|
||||||
+ free(pdesc);
|
|
||||||
return ((PWDICT *) 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (!(pdesc.ifp = fopen(iname, mode)))
|
|
||||||
+ if (!(pdesc->ifp = fopen(iname, mode)))
|
|
||||||
{
|
|
||||||
- fclose(pdesc.dfp);
|
|
||||||
+ fclose(pdesc->dfp);
|
|
||||||
perror(iname);
|
|
||||||
+ free(pdesc);
|
|
||||||
return ((PWDICT *) 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (pdesc.wfp = fopen(wname, mode))
|
|
||||||
+ if (pdesc->wfp = fopen(wname, mode))
|
|
||||||
{
|
|
||||||
- pdesc.flags |= PFOR_USEHWMS;
|
|
||||||
+ pdesc->flags |= PFOR_USEHWMS;
|
|
||||||
}
|
|
||||||
|
|
||||||
- ifp = pdesc.ifp;
|
|
||||||
- dfp = pdesc.dfp;
|
|
||||||
- wfp = pdesc.wfp;
|
|
||||||
+ ifp = pdesc->ifp;
|
|
||||||
+ dfp = pdesc->dfp;
|
|
||||||
+ wfp = pdesc->wfp;
|
|
||||||
|
|
||||||
if (mode[0] == 'w')
|
|
||||||
{
|
|
||||||
- pdesc.flags |= PFOR_WRITE;
|
|
||||||
- pdesc.header.pih_magic = PIH_MAGIC;
|
|
||||||
- pdesc.header.pih_blocklen = NUMWORDS;
|
|
||||||
- pdesc.header.pih_numwords = 0;
|
|
||||||
+ pdesc->flags |= PFOR_WRITE;
|
|
||||||
+ pdesc->header.pih_magic = PIH_MAGIC;
|
|
||||||
+ pdesc->header.pih_blocklen = NUMWORDS;
|
|
||||||
+ pdesc->header.pih_numwords = 0;
|
|
||||||
|
|
||||||
- fwrite((char *) &pdesc.header, sizeof(pdesc.header), 1, ifp);
|
|
||||||
+ fwrite((char *) &pdesc->header, sizeof(pdesc->header), 1, ifp);
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
- pdesc.flags &= ~PFOR_WRITE;
|
|
||||||
+ pdesc->flags &= ~PFOR_WRITE;
|
|
||||||
|
|
||||||
- if (!fread((char *) &pdesc.header, sizeof(pdesc.header), 1, ifp))
|
|
||||||
+ if (!fread((char *) &pdesc->header, sizeof(pdesc->header), 1, ifp))
|
|
||||||
{
|
|
||||||
fprintf(stderr, "%s: error reading header\n", prefix);
|
|
||||||
|
|
||||||
- pdesc.header.pih_magic = 0;
|
|
||||||
+ pdesc->header.pih_magic = 0;
|
|
||||||
fclose(ifp);
|
|
||||||
fclose(dfp);
|
|
||||||
+ free(pdesc);
|
|
||||||
return ((PWDICT *) 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (pdesc.header.pih_magic != PIH_MAGIC)
|
|
||||||
+ if (pdesc->header.pih_magic != PIH_MAGIC)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "%s: magic mismatch\n", prefix);
|
|
||||||
|
|
||||||
- pdesc.header.pih_magic = 0;
|
|
||||||
+ pdesc->header.pih_magic = 0;
|
|
||||||
fclose(ifp);
|
|
||||||
fclose(dfp);
|
|
||||||
+ free(pdesc);
|
|
||||||
return ((PWDICT *) 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (pdesc.header.pih_blocklen != NUMWORDS)
|
|
||||||
+ if (pdesc->header.pih_blocklen != NUMWORDS)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "%s: size mismatch\n", prefix);
|
|
||||||
|
|
||||||
- pdesc.header.pih_magic = 0;
|
|
||||||
+ pdesc->header.pih_magic = 0;
|
|
||||||
fclose(ifp);
|
|
||||||
fclose(dfp);
|
|
||||||
+ free(pdesc);
|
|
||||||
return ((PWDICT *) 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
- if (pdesc.flags & PFOR_USEHWMS)
|
|
||||||
+ if (pdesc->flags & PFOR_USEHWMS)
|
|
||||||
{
|
|
||||||
- if (fread(pdesc.hwms, 1, sizeof(pdesc.hwms), wfp) != sizeof(pdesc.hwms))
|
|
||||||
+ if (fread(pdesc->hwms, 1, sizeof(pdesc->hwms), wfp) != sizeof(pdesc->hwms))
|
|
||||||
{
|
|
||||||
- pdesc.flags &= ~PFOR_USEHWMS;
|
|
||||||
+ pdesc->flags &= ~PFOR_USEHWMS;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-
|
|
||||||
- return (&pdesc);
|
|
||||||
+ pdesc->canfree = 1;
|
|
||||||
+ return (pdesc);
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
@@ -159,8 +161,13 @@
|
|
||||||
|
|
||||||
fclose(pwp->ifp);
|
|
||||||
fclose(pwp->dfp);
|
|
||||||
+ if (pwp->wfp)
|
|
||||||
+ fclose(pwp->wfp);
|
|
||||||
|
|
||||||
- pwp->header.pih_magic = 0;
|
|
||||||
+ if (pwp->canfree)
|
|
||||||
+ free(pwp);
|
|
||||||
+ else
|
|
||||||
+ pwp->header.pih_magic = 0;
|
|
||||||
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
@@ -307,6 +314,11 @@
|
|
||||||
register char *this;
|
|
||||||
int idx;
|
|
||||||
|
|
||||||
+/*
|
|
||||||
+ * comment in npasswd-2.0beta4 says this:
|
|
||||||
+ * This does not work under all circumstances, so don't bother
|
|
||||||
+ */
|
|
||||||
+#if 0
|
|
||||||
if (pwp->flags & PFOR_USEHWMS)
|
|
||||||
{
|
|
||||||
idx = string[0] & 0xff;
|
|
||||||
@@ -317,6 +329,10 @@
|
|
||||||
lwm = 0;
|
|
||||||
hwm = PW_WORDS(pwp) - 1;
|
|
||||||
}
|
|
||||||
+#else
|
|
||||||
+ lwm = 0;
|
|
||||||
+ hwm = PW_WORDS(pwp);
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
printf("---- %lu, %lu ----\n", lwm, hwm);
|
|
||||||
diff -ur orig/cracklib26_small/util/mkdict cracklib26_small/util/mkdict
|
|
||||||
--- orig/cracklib26_small/util/mkdict Fri Jul 9 22:23:03 1993
|
|
||||||
+++ cracklib26_small/util/mkdict Sat Apr 4 22:31:45 1998
|
|
||||||
@@ -14,9 +14,16 @@
|
|
||||||
SORT="sort"
|
|
||||||
###SORT="sort -T /tmp"
|
|
||||||
|
|
||||||
-cat $* |
|
|
||||||
+### Use zcat to read compressed (as well as uncompressed) dictionaries.
|
|
||||||
+### Compressed dictionaries can save quite a lot of disk space.
|
|
||||||
+
|
|
||||||
+CAT="gzip -cdf"
|
|
||||||
+###CAT="zcat"
|
|
||||||
+###CAT="cat"
|
|
||||||
+
|
|
||||||
+$CAT $* |
|
|
||||||
tr '[A-Z]' '[a-z]' |
|
|
||||||
- tr -cd '[\012a-z0-9]' |
|
|
||||||
+ tr -cd '\012[a-z][0-9]' |
|
|
||||||
$SORT |
|
|
||||||
uniq |
|
|
||||||
grep -v '^#' |
|
|
||||||
+2
-3
@@ -4,8 +4,7 @@
|
|||||||
sysconf_DATA = login.defs
|
sysconf_DATA = login.defs
|
||||||
|
|
||||||
defaultdir = $(sysconfdir)/default
|
defaultdir = $(sysconfdir)/default
|
||||||
default_DATA = \
|
default_DATA =
|
||||||
useradd
|
|
||||||
|
|
||||||
nonpam_files = \
|
nonpam_files = \
|
||||||
limits \
|
limits \
|
||||||
@@ -21,4 +20,4 @@ EXTRA_DIST = \
|
|||||||
$(sysconf_DATA) \
|
$(sysconf_DATA) \
|
||||||
$(default_DATA)
|
$(default_DATA)
|
||||||
|
|
||||||
SUBDIRS = pam.d
|
SUBDIRS = pam.d shadow-maint
|
||||||
|
|||||||
+810
@@ -0,0 +1,810 @@
|
|||||||
|
# Makefile.in generated by automake 1.18.1 from Makefile.am.
|
||||||
|
# @configure_input@
|
||||||
|
|
||||||
|
# Copyright (C) 1994-2025 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))
|
||||||
|
am__rm_f = rm -f $(am__rm_f_notfound)
|
||||||
|
am__rm_rf = rm -rf $(am__rm_f_notfound)
|
||||||
|
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 ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
|
||||||
|
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
|
||||||
|
$(am__cd) "$$dir" && echo $$files | $(am__xargs_n) 40 $(am__rm_f); }; \
|
||||||
|
}
|
||||||
|
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@
|
||||||
|
FILECMD = @FILECMD@
|
||||||
|
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__rm_f_notfound = @am__rm_f_notfound@
|
||||||
|
am__tar = @am__tar@
|
||||||
|
am__untar = @am__untar@
|
||||||
|
am__xargs_n = @am__xargs_n@
|
||||||
|
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:
|
||||||
|
-$(am__rm_f) $(CONFIG_CLEAN_FILES)
|
||||||
|
-test . = "$(srcdir)" || $(am__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:
|
||||||
|
|
||||||
|
# Tell GNU make to disable its built-in pattern rules.
|
||||||
|
%:: %,v
|
||||||
|
%:: RCS/%,v
|
||||||
|
%:: RCS/%
|
||||||
|
%:: s.%
|
||||||
|
%:: SCCS/s.%
|
||||||
+154
-50
@@ -6,16 +6,18 @@
|
|||||||
|
|
||||||
#
|
#
|
||||||
# Delay in seconds before being allowed another attempt after a login failure
|
# 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
|
FAIL_DELAY 3
|
||||||
|
|
||||||
#
|
#
|
||||||
# Enable logging and display of /var/log/faillog login failure info.
|
# Enable logging and display of /var/log/faillog login(1) failure info.
|
||||||
#
|
#
|
||||||
FAILLOG_ENAB yes
|
FAILLOG_ENAB yes
|
||||||
|
|
||||||
#
|
#
|
||||||
# Enable display of unknown usernames when login failures are recorded.
|
# Enable display of unknown usernames when login(1) failures are recorded.
|
||||||
#
|
#
|
||||||
LOG_UNKFAIL_ENAB no
|
LOG_UNKFAIL_ENAB no
|
||||||
|
|
||||||
@@ -25,10 +27,19 @@ LOG_UNKFAIL_ENAB no
|
|||||||
LOG_OK_LOGINS no
|
LOG_OK_LOGINS no
|
||||||
|
|
||||||
#
|
#
|
||||||
# Enable logging and display of /var/log/lastlog login time info.
|
# Enable logging and display of /var/log/lastlog login(1) time info.
|
||||||
#
|
#
|
||||||
LASTLOG_ENAB yes
|
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.
|
# Enable checking and display of mailbox status upon login.
|
||||||
#
|
#
|
||||||
@@ -48,13 +59,13 @@ OBSCURE_CHECKS_ENAB yes
|
|||||||
PORTTIME_CHECKS_ENAB yes
|
PORTTIME_CHECKS_ENAB yes
|
||||||
|
|
||||||
#
|
#
|
||||||
# Enable setting of ulimit, umask, and niceness from passwd gecos field.
|
# Enable setting of ulimit, umask, and niceness from passwd(5) gecos field.
|
||||||
#
|
#
|
||||||
QUOTAS_ENAB yes
|
QUOTAS_ENAB yes
|
||||||
|
|
||||||
#
|
#
|
||||||
# Enable "syslog" logging of su activity - in addition to sulog file logging.
|
# Enable "syslog" logging of su(1) activity - in addition to sulog file logging.
|
||||||
# SYSLOG_SG_ENAB does the same for newgrp and sg.
|
# SYSLOG_SG_ENAB does the same for newgrp(1) and sg(1).
|
||||||
#
|
#
|
||||||
SYSLOG_SU_ENAB yes
|
SYSLOG_SU_ENAB yes
|
||||||
SYSLOG_SG_ENAB yes
|
SYSLOG_SG_ENAB yes
|
||||||
@@ -62,13 +73,13 @@ SYSLOG_SG_ENAB yes
|
|||||||
#
|
#
|
||||||
# If defined, either full pathname of a file containing device names or
|
# If defined, either full pathname of a file containing device names or
|
||||||
# a ":" delimited list of device names. Root logins will be allowed only
|
# a ":" delimited list of device names. Root logins will be allowed only
|
||||||
# upon these devices.
|
# from these devices.
|
||||||
#
|
#
|
||||||
CONSOLE /etc/securetty
|
CONSOLE /etc/securetty
|
||||||
#CONSOLE console:tty01:tty02:tty03:tty04
|
#CONSOLE console:tty01:tty02:tty03:tty04
|
||||||
|
|
||||||
#
|
#
|
||||||
# If defined, all su activity is logged to this file.
|
# If defined, all su(1) activity is logged to this file.
|
||||||
#
|
#
|
||||||
#SULOG_FILE /var/log/sulog
|
#SULOG_FILE /var/log/sulog
|
||||||
|
|
||||||
@@ -80,33 +91,33 @@ MOTD_FILE /etc/motd
|
|||||||
#MOTD_FILE /etc/motd:/usr/lib/news/news-motd
|
#MOTD_FILE /etc/motd:/usr/lib/news/news-motd
|
||||||
|
|
||||||
#
|
#
|
||||||
# If defined, this file will be output before each login prompt.
|
# If defined, this file will be output before each login(1) prompt.
|
||||||
#
|
#
|
||||||
#ISSUE_FILE /etc/issue
|
#ISSUE_FILE /etc/issue
|
||||||
|
|
||||||
#
|
#
|
||||||
# If defined, file which maps tty line to TERM environment parameter.
|
# If defined, file which maps tty line to TERM environment parameter.
|
||||||
# Each line of the file is in a format something like "vt100 tty01".
|
# Each line of the file is in a format similar to "vt100 tty01".
|
||||||
#
|
#
|
||||||
#TTYTYPE_FILE /etc/ttytype
|
#TTYTYPE_FILE /etc/ttytype
|
||||||
|
|
||||||
#
|
#
|
||||||
# If defined, login failures will be logged here in a utmp format.
|
# If defined, login(1) failures will be logged here in a utmp format.
|
||||||
# last, when invoked as lastb, will read /var/log/btmp, so...
|
# last(1), when invoked as lastb(1), will read /var/log/btmp, so...
|
||||||
#
|
#
|
||||||
FTMP_FILE /var/log/btmp
|
FTMP_FILE /var/log/btmp
|
||||||
|
|
||||||
#
|
#
|
||||||
# If defined, name of file whose presence which will inhibit non-root
|
# If defined, name of file whose presence will inhibit non-root
|
||||||
# logins. The contents of this file should be a message indicating
|
# logins. The content of this file should be a message indicating
|
||||||
# why logins are inhibited.
|
# why logins are inhibited.
|
||||||
#
|
#
|
||||||
NOLOGINS_FILE /etc/nologin
|
NOLOGINS_FILE /etc/nologin
|
||||||
|
|
||||||
#
|
#
|
||||||
# If defined, the command name to display when running "su -". For
|
# If defined, the command name to display when running "su -". For
|
||||||
# example, if this is defined as "su" then a "ps" will display the
|
# example, if this is defined as "su" then ps(1) will display the
|
||||||
# command is "-su". If not defined, then "ps" would 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".
|
# name of the shell actually being run, e.g. something like "-sh".
|
||||||
#
|
#
|
||||||
SU_NAME su
|
SU_NAME su
|
||||||
@@ -156,10 +167,10 @@ ENV_PATH PATH=/bin:/usr/bin
|
|||||||
# TTYGROUP Login tty will be assigned this group ownership.
|
# TTYGROUP Login tty will be assigned this group ownership.
|
||||||
# TTYPERM Login tty will be set to this permission.
|
# TTYPERM Login tty will be set to this permission.
|
||||||
#
|
#
|
||||||
# If you have a "write" program which is "setgid" to a special group
|
# If you have a write(1) program which is "setgid" to a special group
|
||||||
# which owns the terminals, define TTYGROUP to the group number and
|
# which owns the terminals, define TTYGROUP as the number of such group
|
||||||
# TTYPERM to 0620. Otherwise leave TTYGROUP commented out and assign
|
# and TTYPERM as 0620. Otherwise leave TTYGROUP commented out and
|
||||||
# TTYPERM to either 622 or 600.
|
# set TTYPERM to either 622 or 600.
|
||||||
#
|
#
|
||||||
TTYGROUP tty
|
TTYGROUP tty
|
||||||
TTYPERM 0600
|
TTYPERM 0600
|
||||||
@@ -169,7 +180,6 @@ TTYPERM 0600
|
|||||||
#
|
#
|
||||||
# ERASECHAR Terminal ERASE character ('\010' = backspace).
|
# ERASECHAR Terminal ERASE character ('\010' = backspace).
|
||||||
# KILLCHAR Terminal KILL character ('\025' = CTRL/U).
|
# KILLCHAR Terminal KILL character ('\025' = CTRL/U).
|
||||||
# UMASK Default "umask" value.
|
|
||||||
# ULIMIT Default "ulimit" value.
|
# ULIMIT Default "ulimit" value.
|
||||||
#
|
#
|
||||||
# The ERASECHAR and KILLCHAR are used only on System V machines.
|
# The ERASECHAR and KILLCHAR are used only on System V machines.
|
||||||
@@ -180,9 +190,22 @@ TTYPERM 0600
|
|||||||
#
|
#
|
||||||
ERASECHAR 0177
|
ERASECHAR 0177
|
||||||
KILLCHAR 025
|
KILLCHAR 025
|
||||||
UMASK 022
|
|
||||||
#ULIMIT 2097152
|
#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:
|
# Password aging controls:
|
||||||
#
|
#
|
||||||
@@ -205,35 +228,38 @@ PASS_WARN_AGE 7
|
|||||||
SU_WHEEL_ONLY no
|
SU_WHEEL_ONLY no
|
||||||
|
|
||||||
#
|
#
|
||||||
# If compiled with cracklib support, where are the dictionaries
|
# Min/max values for automatic uid selection in useradd(8)
|
||||||
#
|
|
||||||
CRACKLIB_DICTPATH /var/cache/cracklib/cracklib_dict
|
|
||||||
|
|
||||||
#
|
|
||||||
# Min/max values for automatic uid selection in useradd
|
|
||||||
#
|
#
|
||||||
UID_MIN 1000
|
UID_MIN 1000
|
||||||
UID_MAX 60000
|
UID_MAX 60000
|
||||||
# System accounts
|
# System accounts
|
||||||
SYS_UID_MIN 100
|
SYS_UID_MIN 101
|
||||||
SYS_UID_MAX 999
|
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
|
# Min/max values for automatic gid selection in groupadd(8)
|
||||||
#
|
#
|
||||||
GID_MIN 1000
|
GID_MIN 1000
|
||||||
GID_MAX 60000
|
GID_MAX 60000
|
||||||
# System accounts
|
# System accounts
|
||||||
SYS_GID_MIN 100
|
SYS_GID_MIN 101
|
||||||
SYS_GID_MAX 999
|
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 retries if password is bad
|
# Max number of login(1) retries if password is bad
|
||||||
#
|
#
|
||||||
LOGIN_RETRIES 5
|
LOGIN_RETRIES 5
|
||||||
|
|
||||||
#
|
#
|
||||||
# Max time in seconds for login
|
# Max time in seconds for login(1)
|
||||||
#
|
#
|
||||||
LOGIN_TIMEOUT 60
|
LOGIN_TIMEOUT 60
|
||||||
|
|
||||||
@@ -250,17 +276,17 @@ PASS_ALWAYS_WARN yes
|
|||||||
#
|
#
|
||||||
# Number of significant characters in the password for crypt().
|
# Number of significant characters in the password for crypt().
|
||||||
# Default is 8, don't change unless your crypt() is better.
|
# Default is 8, don't change unless your crypt() is better.
|
||||||
# Ignored if MD5_CRYPT_ENAB set to "yes".
|
# Only used for DES encryption algorithm.
|
||||||
#
|
#
|
||||||
#PASS_MAX_LEN 8
|
#PASS_MAX_LEN 8
|
||||||
|
|
||||||
#
|
#
|
||||||
# Require password before chfn/chsh can make any changes.
|
# Require password before chfn(1)/chsh(1) can make any changes.
|
||||||
#
|
#
|
||||||
CHFN_AUTH yes
|
CHFN_AUTH yes
|
||||||
|
|
||||||
#
|
#
|
||||||
# Which fields may be changed by regular users using chfn - use
|
# Which fields may be changed by regular users using chfn(1) - use
|
||||||
# any combination of letters "frwh" (full name, room number, work
|
# any combination of letters "frwh" (full name, room number, work
|
||||||
# phone, home phone). If not defined, no changes are allowed.
|
# phone, home phone). If not defined, no changes are allowed.
|
||||||
# For backward compatibility, "yes" = "rwh" and "no" = "frwh".
|
# For backward compatibility, "yes" = "rwh" and "no" = "frwh".
|
||||||
@@ -282,10 +308,10 @@ CHFN_RESTRICT rwh
|
|||||||
# Set to "no" if you need to copy encrypted passwords to other systems
|
# Set to "no" if you need to copy encrypted passwords to other systems
|
||||||
# which don't understand the new algorithm. Default is "no".
|
# which don't understand the new algorithm. Default is "no".
|
||||||
#
|
#
|
||||||
# Note: If you use PAM, it is recommended to use a value consistent with
|
# Note: if you use PAM, it is recommended to use a value consistent with
|
||||||
# the PAM modules configuration.
|
# the PAM modules configuration.
|
||||||
#
|
#
|
||||||
# This variable is deprecated. You should use ENCRYPT_METHOD.
|
# This variable is deprecated. You should use ENCRYPT_METHOD instead.
|
||||||
#
|
#
|
||||||
#MD5_CRYPT_ENAB no
|
#MD5_CRYPT_ENAB no
|
||||||
|
|
||||||
@@ -294,10 +320,13 @@ CHFN_RESTRICT rwh
|
|||||||
# If set to MD5, MD5-based algorithm will be used for encrypting password
|
# 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 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 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)
|
# 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
|
# Overrides the MD5_CRYPT_ENAB option
|
||||||
#
|
#
|
||||||
# Note: If you use PAM, it is recommended to use a value consistent with
|
# Note: if you use PAM, it is recommended to use a value consistent with
|
||||||
# the PAM modules configuration.
|
# the PAM modules configuration.
|
||||||
#
|
#
|
||||||
#ENCRYPT_METHOD DES
|
#ENCRYPT_METHOD DES
|
||||||
@@ -306,35 +335,72 @@ CHFN_RESTRICT rwh
|
|||||||
# Only works if ENCRYPT_METHOD is set to SHA256 or SHA512.
|
# Only works if ENCRYPT_METHOD is set to SHA256 or SHA512.
|
||||||
#
|
#
|
||||||
# Define the number of SHA rounds.
|
# Define the number of SHA rounds.
|
||||||
# With a lot of rounds, it is more difficult to brute forcing the password.
|
# With a lot of rounds, it is more difficult to brute-force the password.
|
||||||
# But note also that it more CPU resources will be needed to authenticate
|
# However, more CPU resources will be needed to authenticate users if
|
||||||
# users.
|
# this value is increased.
|
||||||
#
|
#
|
||||||
# If not specified, the libc will choose the default number of rounds (5000).
|
# If not specified, the libc will choose the default number of rounds (5000),
|
||||||
# The values must be inside the 1000-999999999 range.
|
# 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 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.
|
# If MIN > MAX, the highest value will be used.
|
||||||
#
|
#
|
||||||
#SHA_CRYPT_MIN_ROUNDS 5000
|
#SHA_CRYPT_MIN_ROUNDS 5000
|
||||||
#SHA_CRYPT_MAX_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
|
# List of groups to add to the user's supplementary group set
|
||||||
# when logging in on the console (as determined by the CONSOLE
|
# when logging in from the console (as determined by the CONSOLE
|
||||||
# setting). Default is none.
|
# setting). Default is none.
|
||||||
#
|
#
|
||||||
# Use with caution - it is possible for users to gain permanent
|
# Use with caution - it is possible for users to gain permanent
|
||||||
# access to these groups, even when not logged in on the console.
|
# access to these groups, even when not logged in from the console.
|
||||||
# How to do it is left as an exercise for the reader...
|
# How to do it is left as an exercise for the reader...
|
||||||
#
|
#
|
||||||
#CONSOLE_GROUPS floppy:audio:cdrom
|
#CONSOLE_GROUPS floppy:audio:cdrom
|
||||||
|
|
||||||
#
|
#
|
||||||
# Should login be allowed if we can't cd to the home directory?
|
# Should login be allowed if we can't cd to the home directory?
|
||||||
# Default in no.
|
# Default is no.
|
||||||
#
|
#
|
||||||
DEFAULT_HOME yes
|
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
|
# If this file exists and is readable, login environment will be
|
||||||
# read from it. Every line should be in the form name=value.
|
# read from it. Every line should be in the form name=value.
|
||||||
@@ -353,17 +419,55 @@ ENVIRON_FILE /etc/environment
|
|||||||
# (examples: 022 -> 002, 077 -> 007) for non-root users, if the uid is
|
# (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.
|
# the same as gid, and username is the same as the primary group name.
|
||||||
#
|
#
|
||||||
# This also enables userdel to remove user groups if no members exist.
|
# This also enables userdel(8) to remove user groups if no members exist.
|
||||||
#
|
#
|
||||||
USERGROUPS_ENAB yes
|
USERGROUPS_ENAB yes
|
||||||
|
|
||||||
#
|
#
|
||||||
# If set to a non-nul number, the shadow utilities will make sure that
|
# 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.
|
# groups never have more than this number of users on one line.
|
||||||
# This permit to support split groups (groups split into multiple lines,
|
# 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
|
# with the same group ID, to avoid limitation of the line length in the
|
||||||
# group file).
|
# group file).
|
||||||
#
|
#
|
||||||
# 0 is the default value and disables this feature.
|
# 0 is the default value and disables this feature.
|
||||||
#
|
#
|
||||||
#MAX_MEMBERS_PER_GROUP 0
|
#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
|
||||||
|
|||||||
+16
-9
@@ -2,19 +2,19 @@
|
|||||||
# and also cooperate to make a distribution for `make dist'
|
# and also cooperate to make a distribution for `make dist'
|
||||||
|
|
||||||
pamd_files = \
|
pamd_files = \
|
||||||
chage \
|
|
||||||
chfn \
|
|
||||||
chgpasswd \
|
|
||||||
chpasswd \
|
chpasswd \
|
||||||
|
chfn \
|
||||||
chsh \
|
chsh \
|
||||||
groupadd \
|
|
||||||
groupdel \
|
|
||||||
groupmems \
|
groupmems \
|
||||||
groupmod \
|
|
||||||
login \
|
login \
|
||||||
newusers \
|
newusers \
|
||||||
passwd \
|
passwd
|
||||||
su \
|
|
||||||
|
pamd_acct_tools_files = \
|
||||||
|
chgpasswd \
|
||||||
|
groupadd \
|
||||||
|
groupdel \
|
||||||
|
groupmod \
|
||||||
useradd \
|
useradd \
|
||||||
userdel \
|
userdel \
|
||||||
usermod
|
usermod
|
||||||
@@ -22,6 +22,13 @@ pamd_files = \
|
|||||||
if USE_PAM
|
if USE_PAM
|
||||||
pamddir = $(sysconfdir)/pam.d
|
pamddir = $(sysconfdir)/pam.d
|
||||||
pamd_DATA = $(pamd_files)
|
pamd_DATA = $(pamd_files)
|
||||||
|
if ACCT_TOOLS_SETUID
|
||||||
|
pamd_DATA += $(pamd_acct_tools_files)
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
EXTRA_DIST = $(pamd_files)
|
if WITH_SU
|
||||||
|
pamd_files += su
|
||||||
|
endif
|
||||||
|
|
||||||
|
EXTRA_DIST = $(pamd_files) $(pamd_acct_tools_files)
|
||||||
|
|||||||
@@ -0,0 +1,586 @@
|
|||||||
|
# Makefile.in generated by automake 1.18.1 from Makefile.am.
|
||||||
|
# @configure_input@
|
||||||
|
|
||||||
|
# Copyright (C) 1994-2025 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))
|
||||||
|
am__rm_f = rm -f $(am__rm_f_notfound)
|
||||||
|
am__rm_rf = rm -rf $(am__rm_f_notfound)
|
||||||
|
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 ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
|
||||||
|
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
|
||||||
|
$(am__cd) "$$dir" && echo $$files | $(am__xargs_n) 40 $(am__rm_f); }; \
|
||||||
|
}
|
||||||
|
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@
|
||||||
|
FILECMD = @FILECMD@
|
||||||
|
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__rm_f_notfound = @am__rm_f_notfound@
|
||||||
|
am__tar = @am__tar@
|
||||||
|
am__untar = @am__untar@
|
||||||
|
am__xargs_n = @am__xargs_n@
|
||||||
|
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:
|
||||||
|
-$(am__rm_f) $(CONFIG_CLEAN_FILES)
|
||||||
|
-test . = "$(srcdir)" || $(am__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:
|
||||||
|
|
||||||
|
# Tell GNU make to disable its built-in pattern rules.
|
||||||
|
%:: %,v
|
||||||
|
%:: RCS/%,v
|
||||||
|
%:: RCS/%
|
||||||
|
%:: s.%
|
||||||
|
%:: SCCS/s.%
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
#%PAM-1.0
|
|
||||||
auth sufficient pam_rootok.so
|
|
||||||
account required pam_permit.so
|
|
||||||
password include system-auth
|
|
||||||
+2
-2
@@ -4,8 +4,8 @@ auth include system-auth
|
|||||||
account required pam_nologin.so
|
account required pam_nologin.so
|
||||||
account include system-auth
|
account include system-auth
|
||||||
password include system-auth
|
password include system-auth
|
||||||
session required pam_selinux.so close
|
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close
|
||||||
session include system-auth
|
session include system-auth
|
||||||
session required pam_loginuid.so
|
session required pam_loginuid.so
|
||||||
session optional pam_console.so
|
session optional pam_console.so
|
||||||
session required pam_selinux.so open
|
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open
|
||||||
|
|||||||
+2
-2
@@ -7,7 +7,7 @@ auth required pam_wheel.so use_uid
|
|||||||
auth include system-auth
|
auth include system-auth
|
||||||
account include system-auth
|
account include system-auth
|
||||||
password include system-auth
|
password include system-auth
|
||||||
session required pam_selinux.so close
|
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so close
|
||||||
session include system-auth
|
session include system-auth
|
||||||
session required pam_selinux.so open multiple
|
session [success=ok ignore=ignore module_unknown=ignore default=bad] pam_selinux.so open
|
||||||
session optional pam_xauth.so
|
session optional pam_xauth.so
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
shadowmaint_files = \
|
||||||
|
groupdel-pre.d/01-kill_group_procs.sh \
|
||||||
|
userdel-pre.d/01-kill_user_procs.sh
|
||||||
|
|
||||||
|
EXTRA_DIST = $(shadowmaint_files)
|
||||||
@@ -0,0 +1,519 @@
|
|||||||
|
# Makefile.in generated by automake 1.18.1 from Makefile.am.
|
||||||
|
# @configure_input@
|
||||||
|
|
||||||
|
# Copyright (C) 1994-2025 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))
|
||||||
|
am__rm_f = rm -f $(am__rm_f_notfound)
|
||||||
|
am__rm_rf = rm -rf $(am__rm_f_notfound)
|
||||||
|
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@
|
||||||
|
FILECMD = @FILECMD@
|
||||||
|
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__rm_f_notfound = @am__rm_f_notfound@
|
||||||
|
am__tar = @am__tar@
|
||||||
|
am__untar = @am__untar@
|
||||||
|
am__xargs_n = @am__xargs_n@
|
||||||
|
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:
|
||||||
|
-$(am__rm_f) $(CONFIG_CLEAN_FILES)
|
||||||
|
-test . = "$(srcdir)" || $(am__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:
|
||||||
|
|
||||||
|
# Tell GNU make to disable its built-in pattern rules.
|
||||||
|
%:: %,v
|
||||||
|
%:: RCS/%,v
|
||||||
|
%:: RCS/%
|
||||||
|
%:: s.%
|
||||||
|
%:: SCCS/s.%
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
#!/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
|
||||||
|
|
||||||
+31
@@ -0,0 +1,31 @@
|
|||||||
|
#!/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
|
||||||
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
# useradd defaults file
|
|
||||||
GROUP=1000
|
|
||||||
HOME=/home
|
|
||||||
INACTIVE=-1
|
|
||||||
EXPIRE=
|
|
||||||
SHELL=/bin/bash
|
|
||||||
SKEL=/etc/skel
|
|
||||||
CREATE_MAIL_SPOOL=yes
|
|
||||||
+267
-8
@@ -5,43 +5,302 @@ DEFS =
|
|||||||
|
|
||||||
noinst_LTLIBRARIES = libshadow.la
|
noinst_LTLIBRARIES = libshadow.la
|
||||||
|
|
||||||
libshadow_la_LDFLAGS = -version-info 0:0:0
|
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 = \
|
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.c \
|
||||||
commonio.h \
|
commonio.h \
|
||||||
|
console.c \
|
||||||
|
copydir.c \
|
||||||
|
csrand.c \
|
||||||
defines.h \
|
defines.h \
|
||||||
encrypt.c \
|
encrypt.c \
|
||||||
|
env.c \
|
||||||
|
exit_if_null.c \
|
||||||
|
exit_if_null.h \
|
||||||
exitcodes.h \
|
exitcodes.h \
|
||||||
faillog.h \
|
faillog.h \
|
||||||
fputsx.c \
|
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.c \
|
||||||
getdef.h \
|
getdef.h \
|
||||||
|
getgr_nam_gid.c \
|
||||||
|
getrange.c \
|
||||||
|
gettime.c \
|
||||||
groupio.c \
|
groupio.c \
|
||||||
groupmem.c \
|
groupmem.c \
|
||||||
groupio.h \
|
groupio.h \
|
||||||
gshadow.c \
|
hushed.c \
|
||||||
|
idmapping.h \
|
||||||
|
idmapping.c \
|
||||||
|
isexpired.c \
|
||||||
|
limits.c \
|
||||||
|
list.c \
|
||||||
lockpw.c \
|
lockpw.c \
|
||||||
|
loginprompt.c \
|
||||||
|
mail.c \
|
||||||
|
motd.c \
|
||||||
|
myname.c \
|
||||||
|
nss.c \
|
||||||
nscd.c \
|
nscd.c \
|
||||||
nscd.h \
|
nscd.h \
|
||||||
|
obscure.c \
|
||||||
pam_defs.h \
|
pam_defs.h \
|
||||||
|
pam_pass.c \
|
||||||
|
pam_pass_non_interactive.c \
|
||||||
port.c \
|
port.c \
|
||||||
port.h \
|
port.h \
|
||||||
|
prefix_flag.c \
|
||||||
prototypes.h \
|
prototypes.h \
|
||||||
pwauth.c \
|
pwauth.c \
|
||||||
pwauth.h \
|
pwauth.h \
|
||||||
pwio.c \
|
pwio.c \
|
||||||
pwio.h \
|
pwio.h \
|
||||||
|
pwd_init.c \
|
||||||
|
pwd2spwd.c \
|
||||||
|
pwdcheck.c \
|
||||||
pwmem.c \
|
pwmem.c \
|
||||||
sgetgrent.c \
|
remove_tree.c \
|
||||||
sgetpwent.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.c \
|
||||||
sgroupio.h \
|
sgroupio.h \
|
||||||
shadow.c \
|
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.c \
|
||||||
shadowio.h \
|
shadowio.h \
|
||||||
|
shadowlog.c \
|
||||||
|
shadowlog.h \
|
||||||
|
shadowlog_internal.h \
|
||||||
shadowmem.c \
|
shadowmem.c \
|
||||||
utent.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
|
# These files are unneeded for some reason, listed in
|
||||||
# order of appearance:
|
# order of appearance:
|
||||||
@@ -50,4 +309,4 @@ libshadow_la_SOURCES = \
|
|||||||
|
|
||||||
EXTRA_DIST = \
|
EXTRA_DIST = \
|
||||||
.indent.pro \
|
.indent.pro \
|
||||||
gshadow_.h
|
xgetXXbyYY.c
|
||||||
|
|||||||
+3212
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,88 @@
|
|||||||
|
// 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
@@ -0,0 +1,13 @@
|
|||||||
|
// 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
@@ -0,0 +1,70 @@
|
|||||||
|
// 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
|
||||||
@@ -0,0 +1,182 @@
|
|||||||
|
/*
|
||||||
|
* 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
@@ -0,0 +1,145 @@
|
|||||||
|
/*
|
||||||
|
* 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);
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
/*
|
||||||
|
* 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
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
// 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"
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
// 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
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
// 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);
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
// 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
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
// 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"
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
// 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
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
// 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);
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
// 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
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
// SPDX-FileCopyrightText: 2023-2025, Alejandro Colomar <alx@kernel.org>
|
||||||
|
// SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#include "atoi/a2i.h"
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
// 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
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
// 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);
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
// 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
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
// 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);
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
// 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
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
// 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);
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
// 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
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
// 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);
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
// 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
@@ -0,0 +1,62 @@
|
|||||||
|
#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
|
||||||
@@ -0,0 +1,135 @@
|
|||||||
|
/*
|
||||||
|
* 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 */
|
||||||
|
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
// 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, "/");
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
/*
|
||||||
|
* 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);
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
/*
|
||||||
|
* 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
@@ -0,0 +1,110 @@
|
|||||||
|
#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
@@ -0,0 +1,15 @@
|
|||||||
|
// 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
|
||||||
@@ -0,0 +1,82 @@
|
|||||||
|
#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;
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
#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
@@ -0,0 +1,146 @@
|
|||||||
|
// 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);
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
/*
|
||||||
|
* 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
@@ -0,0 +1,149 @@
|
|||||||
|
/*
|
||||||
|
* 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);
|
||||||
|
}
|
||||||
@@ -0,0 +1,79 @@
|
|||||||
|
/*
|
||||||
|
* 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
@@ -0,0 +1,121 @@
|
|||||||
|
/*
|
||||||
|
* 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,220 @@
|
|||||||
|
/*
|
||||||
|
* 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
|
||||||
|
|
||||||
@@ -0,0 +1,134 @@
|
|||||||
|
/*
|
||||||
|
* 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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
+591
-355
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user