From 7b6523fd35195772e0e0a8841da4c19c7d9f1928 Mon Sep 17 00:00:00 2001 From: Kibum Kim Date: Sat, 7 Jan 2012 00:43:38 +0900 Subject: [PATCH] Git init --- COPYING | 340 ++++ Makefile.in | 52 + README | 68 + config.h.in | 19 + configure | 3875 +++++++++++++++++++++++++++++++++++++++++++ configure.ac | 17 + debian/changelog | 681 ++++++++ debian/control | 19 + debian/copyright | 23 + debian/doc-base | 13 + debian/lintian | 2 + debian/postinst | 125 ++ debian/rules | 118 ++ doc/Makefile | 12 + doc/users-and-groups.sgml | 810 +++++++++ group.master | 39 + install-sh | 251 +++ man/Makefile | 12 + man/po4a/po/base-passwd.pot | 251 +++ man/po4a/po/fr.po | 281 ++++ man/po4a/po/ru.po | 284 ++++ man/po4a/po4a.cfg | 10 + man/po4a/translator_fr.add | 16 + man/po4a/translator_ru.add | 4 + man/update-passwd.8 | 78 + man/update-passwd.pl.8 | 78 + man/update-passwd.ru.8 | 76 + passwd.master | 18 + update-passwd.c | 1230 ++++++++++++++ version.h | 1 + 30 files changed, 8803 insertions(+) create mode 100644 COPYING create mode 100644 Makefile.in create mode 100644 README create mode 100644 config.h.in create mode 100755 configure create mode 100644 configure.ac create mode 100644 debian/changelog create mode 100644 debian/control create mode 100644 debian/copyright create mode 100644 debian/doc-base create mode 100644 debian/lintian create mode 100755 debian/postinst create mode 100755 debian/rules create mode 100644 doc/Makefile create mode 100644 doc/users-and-groups.sgml create mode 100644 group.master create mode 100755 install-sh create mode 100644 man/Makefile create mode 100644 man/po4a/po/base-passwd.pot create mode 100644 man/po4a/po/fr.po create mode 100644 man/po4a/po/ru.po create mode 100644 man/po4a/po4a.cfg create mode 100644 man/po4a/translator_fr.add create mode 100644 man/po4a/translator_ru.add create mode 100644 man/update-passwd.8 create mode 100644 man/update-passwd.pl.8 create mode 100644 man/update-passwd.ru.8 create mode 100644 passwd.master create mode 100644 update-passwd.c create mode 100644 version.h diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..3912109 --- /dev/null +++ b/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 of the License, 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, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 0000000..6c7d39a --- /dev/null +++ b/Makefile.in @@ -0,0 +1,52 @@ +srcdir = @srcdir@ +VPATH = @srcdir@ +top_srcdir = @top_srcdir@ + +# Compilation tools +CC = @CC@ +CFLAGS = @CFLAGS@ @DEFS@ -I. +LDFLAGS = @LDFLAGS@ + +# Other tools +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ + +# Installation locations +sbindir = @sbindir@ +mandir = @mandir@ + +# Files used +sources = update-passwd.c +objects = $(patsubst %.c, %.o, $(sources)) +gen_autoheader = config.h.in +gen_autoconf = configure +gen_configure = config.cache config.status config.log \ + confdefhs.h config.h Makefile + +all: update-passwd + +install: all + mkdir -p $(DESTDIR)$(sbindir) + $(INSTALL) update-passwd $(DESTDIR)$(sbindir)/ + mkdir -p $(DESTDIR)$(mandir)/man8 + $(INSTALL_DATA) man/update-passwd.8 $(DESTDIR)$(mandir)/man8/ + +update-passwd.o: version.h + +update-passwd: $(objects) + $(CC) $(LDFLAGS) -o $@ $^ + +clean: + rm -f update-passwd update-passwd.o core + +mrproper realclean: clean + rm -f $(gen_configure) + rm -rf autom4te.cache + +cvsclean: mrproper + for i in $(gen_autoconf) $(gen_autoheader) ; do \ + rm -f $(srcdir)/$$i ; \ + done + +.PHONY: all install clean mrproper cvsclean + diff --git a/README b/README new file mode 100644 index 0000000..5f26449 --- /dev/null +++ b/README @@ -0,0 +1,68 @@ +base-passwd for Debian +---------------------- + +This package supplies the "master" copies of /etc/passwd and /etc/group, +in /usr/share/base-passwd. It also supplies the utility "update-passwd", +which automatically makes sure that uids and gids in the 0-99 range on +your system are consistent with the Debian master copies. This means +that all entries in the masterfiles in that range have to be present on +your system, and only those entries. The reason for not allowing other +entries is that Debian reserves that range for future use. + +All packages assume that the users and groups listed in those +master-files are always present on a system. If they are not present for +some reason they may break unexpectedly. To ensure your system is +correct you can use the update-passwd utility to check it and optionally +make the necessary changes. + +There are some exceptions to this: +* root is never removed or changed. If it doesn't exist a root account will + be added though. +* the home directory for the ftp user is preserved, and it is neither added + nor removed automatically since this can affect how FTP daemons handle + anonymous access +* the home directory for the www-data user is preserved +* if a user or group exists but with an uid outside our reserved range + we don't change it + +The following uid/gid pairs have been allocated in the static range +60000-64999. They are created by their respective packages. This is the +registry of allocations. + +Reserved uids: + uid | name | description + ------+-----------+--------------- + 63434 | netplan | netplan + 64000 | ftn | fidogate + 64001 | mysql | mysql-server + 64005 | tac-plus | tac-plus user + 64010 | alias | qmail alias + 64011 | qmaild | qmail daemon + 64012 | qmails | qmail send + 64013 | qmailr | qmail remove + 64015 | qmailq | qmail queue + 64016 | qmaill | qmail log + 64017 | qmailp | qmail pw + 64020 | asterisk | asterisk + 64025 | vpopmail | vpopmail + 64030 | slurm | slurm-llnl package + 64035 | hacluster | heartbeat + +Reserved gids: + gid | name | description + ------+-----------+--------------- + 63434 | netplan | netplan + 64000 | ftn | fidogate + 64001 | mysql | mysql-server + 64005 | tac-plus | tac-plus group + 64010 | qmail | qmail + 64020 | asterisk | asterisk + 64025 | vchkpw | vpopmail group + 64030 | slurm | slurm-llnl package + 64035 | haclient | heartbeat + +(Next uid/gid allocation: 64040.) + +You *may not* use any uids or gids in the 60000-64999 range without *first* +requesting an allocation from base-passwd@packages.debian.org and waiting +for confirmation that the allocation has been granted. diff --git a/config.h.in b/config.h.in new file mode 100644 index 0000000..b2a8680 --- /dev/null +++ b/config.h.in @@ -0,0 +1,19 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Define to 1 if you have the `putgrent' function. */ +#undef HAVE_PUTGRENT + +/* 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 version of this package. */ +#undef PACKAGE_VERSION diff --git a/configure b/configure new file mode 100755 index 0000000..1632427 --- /dev/null +++ b/configure @@ -0,0 +1,3875 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.61 for base-passwd 3.5.14. +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + + + +# PATH needs CR +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +as_nl=' +' +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + { (exit 1); exit 1; } +fi + +# Work around bugs in pre-3.0 UWIN ksh. +for as_var in ENV MAIL MAILPATH +do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# CDPATH. +$as_unset CDPATH + + +if test "x$CONFIG_SHELL" = x; then + if (eval ":") 2>/dev/null; then + as_have_required=yes +else + as_have_required=no +fi + + if test $as_have_required = yes && (eval ": +(as_func_return () { + (exit \$1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = \"\$1\" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test \$exitcode = 0) || { (exit 1); exit 1; } + +( + as_lineno_1=\$LINENO + as_lineno_2=\$LINENO + test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" && + test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; } +") 2> /dev/null; then + : +else + as_candidate_shells= + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + case $as_dir in + /*) + for as_base in sh bash ksh sh5; do + as_candidate_shells="$as_candidate_shells $as_dir/$as_base" + done;; + esac +done +IFS=$as_save_IFS + + + for as_shell in $as_candidate_shells $SHELL; do + # Try only shells that exist, to save several forks. + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { ("$as_shell") 2> /dev/null <<\_ASEOF +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + +: +_ASEOF +}; then + CONFIG_SHELL=$as_shell + as_have_required=yes + if { "$as_shell" 2> /dev/null <<\_ASEOF +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + +: +(as_func_return () { + (exit $1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = "$1" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test $exitcode = 0) || { (exit 1); exit 1; } + +( + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; } + +_ASEOF +}; then + break +fi + +fi + + done + + if test "x$CONFIG_SHELL" != x; then + for as_var in BASH_ENV ENV + do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + done + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +fi + + + if test $as_have_required = no; then + echo This script requires a shell more modern than all the + echo shells that I found on your system. Please install a + echo modern shell, or manually run the script under such a + echo shell if you do have one. + { (exit 1); exit 1; } +fi + + +fi + +fi + + + +(eval "as_func_return () { + (exit \$1) +} +as_func_success () { + as_func_return 0 +} +as_func_failure () { + as_func_return 1 +} +as_func_ret_success () { + return 0 +} +as_func_ret_failure () { + return 1 +} + +exitcode=0 +if as_func_success; then + : +else + exitcode=1 + echo as_func_success failed. +fi + +if as_func_failure; then + exitcode=1 + echo as_func_failure succeeded. +fi + +if as_func_ret_success; then + : +else + exitcode=1 + echo as_func_ret_success failed. +fi + +if as_func_ret_failure; then + exitcode=1 + echo as_func_ret_failure succeeded. +fi + +if ( set x; as_func_ret_success y && test x = \"\$1\" ); then + : +else + exitcode=1 + echo positional parameters were not saved. +fi + +test \$exitcode = 0") || { + echo No shell found that supports shell functions. + echo Please tell autoconf@gnu.org about your system, + echo including any error possibly output before this + echo message +} + + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line after each line using $LINENO; the second 'sed' + # does the real work. The second script uses 'N' to pair each + # line-number line with the line containing $LINENO, and appends + # trailing '-' during substitution so that $LINENO is not a special + # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # scripts with optimization help from Paolo Bonzini. Blame Lee + # E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in +-n*) + case `echo 'x\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + *) ECHO_C='\c';; + esac;; +*) + ECHO_N='-n';; +esac + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir +fi +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + + +exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} + +# Identity of this package. +PACKAGE_NAME='base-passwd' +PACKAGE_TARNAME='base-passwd' +PACKAGE_VERSION='3.5.14' +PACKAGE_STRING='base-passwd 3.5.14' +PACKAGE_BUGREPORT='' + +ac_unique_file="update-passwd.c" +ac_default_prefix=/usr +ac_subst_vars='SHELL +PATH_SEPARATOR +PACKAGE_NAME +PACKAGE_TARNAME +PACKAGE_VERSION +PACKAGE_STRING +PACKAGE_BUGREPORT +exec_prefix +prefix +program_transform_name +bindir +sbindir +libexecdir +datarootdir +datadir +sysconfdir +sharedstatedir +localstatedir +includedir +oldincludedir +docdir +infodir +htmldir +dvidir +pdfdir +psdir +libdir +localedir +mandir +DEFS +ECHO_C +ECHO_N +ECHO_T +LIBS +build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +CPPFLAGS +ac_ct_CC +EXEEXT +OBJEXT +INSTALL_PROGRAM +INSTALL_SCRIPT +INSTALL_DATA +LIBOBJS +LTLIBOBJS' +ac_subst_files='' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` + eval enable_$ac_feature=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'` + eval enable_$ac_feature=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package | sed 's/[-.]/_/g'` + eval with_$ac_package=\$ac_optarg ;; + + -without-* | --without-*) + ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package | sed 's/[-.]/_/g'` + eval with_$ac_package=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) { echo "$as_me: error: unrecognized option: $ac_option +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + { echo "$as_me: error: missing argument to $ac_option" >&2 + { (exit 1); exit 1; }; } +fi + +# Be sure to have absolute directory names. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; } +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + { echo "$as_me: error: Working directory cannot be determined" >&2 + { (exit 1); exit 1; }; } +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + { echo "$as_me: error: pwd does not report name of working directory" >&2 + { (exit 1); exit 1; }; } + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$0" || +$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$0" : 'X\(//\)[^/]' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +echo X"$0" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 + { (exit 1); exit 1; }; } +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2 + { (exit 1); exit 1; }; } + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures base-passwd 3.5.14 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/base-passwd] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of base-passwd 3.5.14:";; + esac + cat <<\_ACEOF + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +base-passwd configure 3.5.14 +generated by GNU Autoconf 2.61 + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by base-passwd $as_me 3.5.14, which was +generated by GNU Autoconf 2.61. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + echo "PATH: $as_dir" +done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 2) + ac_configure_args1="$ac_configure_args1 '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + ac_configure_args="$ac_configure_args '$ac_arg'" + ;; + esac + done +done +$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } +$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + cat <<\_ASBOX +## ---------------- ## +## Cache variables. ## +## ---------------- ## +_ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 +echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + *) $as_unset $ac_var ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------------- ## +## File substitutions. ## +## ------------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + echo "$as_me: caught signal $ac_signal" + echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer explicitly selected file to automatically selected ones. +if test -n "$CONFIG_SITE"; then + set x "$CONFIG_SITE" +elif test "x$prefix" != xNONE; then + set x "$prefix/share/config.site" "$prefix/etc/config.site" +else + set x "$ac_default_prefix/share/config.site" \ + "$ac_default_prefix/etc/config.site" +fi +shift +for ac_site_file +do + if test -r "$ac_site_file"; then + { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 +echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special + # files actually), so we avoid doing that. + if test -f "$cache_file"; then + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 +echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { echo "$as_me:$LINENO: creating cache $cache_file" >&5 +echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 +echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 +echo "$as_me: former value: $ac_old_val" >&2;} + { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 +echo "$as_me: current value: $ac_new_val" >&2;} + ac_cache_corrupted=: + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 +echo "$as_me: error: changes in the environment can compromise the build" >&2;} + { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 +echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} + { (exit 1); exit 1; }; } +fi + + + + + + + + + + + + + + + + + + + + + + + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +ac_config_headers="$ac_config_headers config.h" + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6; } +else + { echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&5 +echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools +whose name does not start with the host triplet. If you think this +configuration is useful to you, please write to autoconf@gnu.org." >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&5 +echo "$as_me: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + +# Provide some information about the compiler. +echo "$as_me:$LINENO: checking for C compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (ac_try="$ac_compiler --version >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler --version >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -v >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler -v >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (ac_try="$ac_compiler -V >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compiler -V >&5") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 +echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; } +ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +# +# List of possible output files, starting from the most likely. +# The algorithm is not robust to junk in `.', hence go to wildcards (a.*) +# only as a last resort. b.out is created by i960 compilers. +ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out' +# +# The IRIX 6 linker writes into existing files which may not be +# executable, retaining their permissions. Remove them first so a +# subsequent execution test works. +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { (ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi + +{ echo "$as_me:$LINENO: result: $ac_file" >&5 +echo "${ECHO_T}$ac_file" >&6; } +if test -z "$ac_file"; then + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: C compiler cannot create executables +See \`config.log' for more details." >&5 +echo "$as_me: error: C compiler cannot create executables +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; } +fi + +ac_exeext=$ac_cv_exeext + +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5 +echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; } +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 +# If not cross compiling, check that we can run a simple program. +if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' + { (case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { echo "$as_me:$LINENO: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + fi + fi +fi +{ echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6; } + +rm -f a.out a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 +echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; } +{ echo "$as_me:$LINENO: result: $cross_compiling" >&5 +echo "${ECHO_T}$cross_compiling" >&6; } + +{ echo "$as_me:$LINENO: checking for suffix of executables" >&5 +echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; } +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest$ac_cv_exeext +{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 +echo "${ECHO_T}$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +{ echo "$as_me:$LINENO: checking for suffix of object files" >&5 +echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; } +if test "${ac_cv_objext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 +echo "${ECHO_T}$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_compiler_gnu=no +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; } +GCC=`test $ac_compiler_gnu = yes && echo yes` +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + CFLAGS="" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5 +echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_compile") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then + ac_cv_prog_cc_c89=$ac_arg +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + +fi + +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { echo "$as_me:$LINENO: result: none needed" >&5 +echo "${ECHO_T}none needed" >&6; } ;; + xno) + { echo "$as_me:$LINENO: result: unsupported" >&5 +echo "${ECHO_T}unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;; +esac + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5 +echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;} + { (exit 1); exit 1; }; } +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; } +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + done + done + ;; +esac +done +IFS=$as_save_IFS + + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ echo "$as_me:$LINENO: result: $INSTALL" >&5 +echo "${ECHO_T}$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + + + + +for ac_func in putgrent +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +{ echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; } +if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$ac_func || defined __stub___$ac_func +choke me +#endif + +int +main () +{ +return $ac_func (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5 + (eval "$ac_link") 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && + $as_test_x conftest$ac_exeext; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + eval "$as_ac_var=no" +fi + +rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \ + conftest$ac_exeext conftest.$ac_ext +fi +ac_res=`eval echo '${'$as_ac_var'}'` + { echo "$as_me:$LINENO: result: $ac_res" >&5 +echo "${ECHO_T}$ac_res" >&6; } +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + +ac_config_files="$ac_config_files Makefile" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5 +echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + *) $as_unset $ac_var ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + test "x$cache_file" != "x/dev/null" && + { echo "$as_me:$LINENO: updating cache $cache_file" >&5 +echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file + else + { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5 +echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext" + ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + +: ${CONFIG_STATUS=./config.status} +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 +echo "$as_me: creating $CONFIG_STATUS" >&6;} +cat >$CONFIG_STATUS <<_ACEOF +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false +SHELL=\${CONFIG_SHELL-$SHELL} +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in + *posix*) set -o posix ;; +esac + +fi + + + + +# PATH needs CR +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +as_nl=' +' +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + { (exit 1); exit 1; } +fi + +# Work around bugs in pre-3.0 UWIN ksh. +for as_var in ENV MAIL MAILPATH +do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# CDPATH. +$as_unset CDPATH + + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || { + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line after each line using $LINENO; the second 'sed' + # does the real work. The second script uses 'N' to pair each + # line-number line with the line containing $LINENO, and appends + # trailing '-' during substitution so that $LINENO is not a special + # case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # scripts with optimization help from Paolo Bonzini. Blame Lee + # E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in +-n*) + case `echo 'x\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + *) ECHO_C='\c';; + esac;; +*) + ECHO_N='-n';; +esac + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir +fi +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 + +# Save the log message, to keep $[0] and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by base-passwd $as_me 3.5.14, which was +generated by GNU Autoconf 2.61. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. + +Usage: $0 [OPTIONS] [FILE]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Report bugs to ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +ac_cs_version="\\ +base-passwd config.status 3.5.14 +configured by $0, generated by GNU Autoconf 2.61, + with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" + +Copyright (C) 2006 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +# If no file are specified by the user, then we need to provide default +# value. By we need to know if files were specified by the user. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + echo "$ac_cs_version"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + CONFIG_FILES="$CONFIG_FILES $ac_optarg" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + { echo "$as_me: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; };; + --help | --hel | -h ) + echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) { echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } ;; + + *) ac_config_targets="$ac_config_targets $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +if \$ac_cs_recheck; then + echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 + CONFIG_SHELL=$SHELL + export CONFIG_SHELL + exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + + *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 +echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= + trap 'exit_status=$? + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status +' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || +{ + echo "$me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } +} + +# +# Set up the sed scripts for CONFIG_FILES section. +# + +# No need to generate the scripts if there are no CONFIG_FILES. +# This happens for instance when ./config.status config.h +if test -n "$CONFIG_FILES"; then + +_ACEOF + + + +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + cat >conf$$subs.sed <<_ACEOF +SHELL!$SHELL$ac_delim +PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim +PACKAGE_NAME!$PACKAGE_NAME$ac_delim +PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim +PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim +PACKAGE_STRING!$PACKAGE_STRING$ac_delim +PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim +exec_prefix!$exec_prefix$ac_delim +prefix!$prefix$ac_delim +program_transform_name!$program_transform_name$ac_delim +bindir!$bindir$ac_delim +sbindir!$sbindir$ac_delim +libexecdir!$libexecdir$ac_delim +datarootdir!$datarootdir$ac_delim +datadir!$datadir$ac_delim +sysconfdir!$sysconfdir$ac_delim +sharedstatedir!$sharedstatedir$ac_delim +localstatedir!$localstatedir$ac_delim +includedir!$includedir$ac_delim +oldincludedir!$oldincludedir$ac_delim +docdir!$docdir$ac_delim +infodir!$infodir$ac_delim +htmldir!$htmldir$ac_delim +dvidir!$dvidir$ac_delim +pdfdir!$pdfdir$ac_delim +psdir!$psdir$ac_delim +libdir!$libdir$ac_delim +localedir!$localedir$ac_delim +mandir!$mandir$ac_delim +DEFS!$DEFS$ac_delim +ECHO_C!$ECHO_C$ac_delim +ECHO_N!$ECHO_N$ac_delim +ECHO_T!$ECHO_T$ac_delim +LIBS!$LIBS$ac_delim +build_alias!$build_alias$ac_delim +host_alias!$host_alias$ac_delim +target_alias!$target_alias$ac_delim +CC!$CC$ac_delim +CFLAGS!$CFLAGS$ac_delim +LDFLAGS!$LDFLAGS$ac_delim +CPPFLAGS!$CPPFLAGS$ac_delim +ac_ct_CC!$ac_ct_CC$ac_delim +EXEEXT!$EXEEXT$ac_delim +OBJEXT!$OBJEXT$ac_delim +INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim +INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim +INSTALL_DATA!$INSTALL_DATA$ac_delim +LIBOBJS!$LIBOBJS$ac_delim +LTLIBOBJS!$LTLIBOBJS$ac_delim +_ACEOF + + if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 49; then + break + elif $ac_last_try; then + { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5 +echo "$as_me: error: could not make $CONFIG_STATUS" >&2;} + { (exit 1); exit 1; }; } + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed` +if test -n "$ac_eof"; then + ac_eof=`echo "$ac_eof" | sort -nru | sed 1q` + ac_eof=`expr $ac_eof + 1` +fi + +cat >>$CONFIG_STATUS <<_ACEOF +cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end +_ACEOF +sed ' +s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g +s/^/s,@/; s/!/@,|#_!!_#|/ +:n +t n +s/'"$ac_delim"'$/,g/; t +s/$/\\/; p +N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n +' >>$CONFIG_STATUS >$CONFIG_STATUS <<_ACEOF +:end +s/|#_!!_#|//g +CEOF$ac_eof +_ACEOF + + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/ +s/:*\${srcdir}:*/:/ +s/:*@srcdir@:*/:/ +s/^\([^=]*=[ ]*\):*/\1/ +s/:*$// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF +fi # test -n "$CONFIG_FILES" + + +for ac_tag in :F $CONFIG_FILES :H $CONFIG_HEADERS +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5 +echo "$as_me: error: Invalid tag $ac_tag." >&2;} + { (exit 1); exit 1; }; };; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5 +echo "$as_me: error: cannot find input file: $ac_f" >&2;} + { (exit 1); exit 1; }; };; + esac + ac_file_inputs="$ac_file_inputs $ac_f" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input="Generated from "`IFS=: + echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure." + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + fi + + case $ac_tag in + *:-:* | *:-) cat >"$tmp/stdin";; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + { as_dir="$ac_dir" + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5 +echo "$as_me: error: cannot create directory $as_dir" >&2;} + { (exit 1); exit 1; }; }; } + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= + +case `sed -n '/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p +' $ac_file_inputs` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF + sed "$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s&@configure_input@&$configure_input&;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +$ac_datarootdir_hack +" $ac_file_inputs | sed -f "$tmp/subs-1.sed" >$tmp/out + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&5 +echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined." >&2;} + + rm -f "$tmp/stdin" + case $ac_file in + -) cat "$tmp/out"; rm -f "$tmp/out";; + *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;; + esac + ;; + :H) + # + # CONFIG_HEADER + # +_ACEOF + +# Transform confdefs.h into a sed script `conftest.defines', that +# substitutes the proper values into config.h.in to produce config.h. +rm -f conftest.defines conftest.tail +# First, append a space to every undef/define line, to ease matching. +echo 's/$/ /' >conftest.defines +# Then, protect against being on the right side of a sed subst, or in +# an unquoted here document, in config.status. If some macros were +# called several times there might be several #defines for the same +# symbol, which is useless. But do not sort them, since the last +# AC_DEFINE must be honored. +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where +# NAME is the cpp macro being defined, VALUE is the value it is being given. +# PARAMS is the parameter list in the macro definition--in most cases, it's +# just an empty string. +ac_dA='s,^\\([ #]*\\)[^ ]*\\([ ]*' +ac_dB='\\)[ (].*,\\1define\\2' +ac_dC=' ' +ac_dD=' ,' + +uniq confdefs.h | + sed -n ' + t rset + :rset + s/^[ ]*#[ ]*define[ ][ ]*// + t ok + d + :ok + s/[\\&,]/\\&/g + s/^\('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p + s/^\('"$ac_word_re"'\)[ ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p + ' >>conftest.defines + +# Remove the space that was appended to ease matching. +# Then replace #undef with comments. This is necessary, for +# example, in the case of _POSIX_SOURCE, which is predefined and required +# on some systems where configure will not decide to define it. +# (The regexp can be short, since the line contains either #define or #undef.) +echo 's/ $// +s,^[ #]*u.*,/* & */,' >>conftest.defines + +# Break up conftest.defines: +ac_max_sed_lines=50 + +# First sed command is: sed -f defines.sed $ac_file_inputs >"$tmp/out1" +# Second one is: sed -f defines.sed "$tmp/out1" >"$tmp/out2" +# Third one will be: sed -f defines.sed "$tmp/out2" >"$tmp/out1" +# et cetera. +ac_in='$ac_file_inputs' +ac_out='"$tmp/out1"' +ac_nxt='"$tmp/out2"' + +while : +do + # Write a here document: + cat >>$CONFIG_STATUS <<_ACEOF + # First, check the format of the line: + cat >"\$tmp/defines.sed" <<\\CEOF +/^[ ]*#[ ]*undef[ ][ ]*$ac_word_re[ ]*\$/b def +/^[ ]*#[ ]*define[ ][ ]*$ac_word_re[( ]/b def +b +:def +_ACEOF + sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS + echo 'CEOF + sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS + ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in + sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail + grep . conftest.tail >/dev/null || break + rm -f conftest.defines + mv conftest.tail conftest.defines +done +rm -f conftest.defines conftest.tail + +echo "ac_result=$ac_in" >>$CONFIG_STATUS +cat >>$CONFIG_STATUS <<\_ACEOF + if test x"$ac_file" != x-; then + echo "/* $configure_input */" >"$tmp/config.h" + cat "$ac_result" >>"$tmp/config.h" + if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then + { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 +echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f $ac_file + mv "$tmp/config.h" $ac_file + fi + else + echo "/* $configure_input */" + cat "$ac_result" + fi + rm -f "$tmp/out12" + ;; + + + esac + +done # for ac_tag + + +{ (exit 0); exit 0; } +_ACEOF +chmod +x $CONFIG_STATUS +ac_clean_files=$ac_clean_files_save + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || { (exit 1); exit 1; } +fi + + diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..c16c419 --- /dev/null +++ b/configure.ac @@ -0,0 +1,17 @@ +dnl Initialize the autoconf process +AC_INIT([base-passwd], [3.5.14]) +AC_CONFIG_SRCDIR([update-passwd.c]) +AC_CONFIG_HEADER([config.h]) +AC_PREFIX_DEFAULT([/usr]) + +dnl Let's see if all programs we need are installed +AC_PROG_CC +AC_PROG_INSTALL + +dnl Scan for things we need +AC_CHECK_FUNCS([putgrent]) + +dnl Finally output everything +AC_CONFIG_FILES([Makefile]) +AC_OUTPUT + diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..0c1e9e0 --- /dev/null +++ b/debian/changelog @@ -0,0 +1,681 @@ +base-passwd (3.5.22+s2) unstable; urgency=low + + * Set myself as maintainer. + + -- Rafal Krypa Mon, 12 Apr 2010 16:21:08 +0200 + +base-passwd (3.5.22+s1) unstable; urgency=low + + * Set empty password for root + * Don't build documentation and manuals, drop build-dependencies + * Change shell of root user from /bin/bash to /bin/sh + * debian/control: added Uploaders field. + + -- Rafal Krypa Thu, 04 Feb 2010 10:38:06 +0900 + +base-passwd (3.5.22) unstable; urgency=low + + * Compress files using gzip -n (cf. debhelper 6.0.6). + * Remove explicit calls to install-docs (cf. debhelper 7.2.3). + + -- Colin Watson Mon, 07 Sep 2009 00:07:19 +0100 + +base-passwd (3.5.21) unstable; urgency=low + + * Set up the root user without a password by default, rather than giving + it an empty password. In this day and age the latter is not really a + defensible default (LP: #296841). + * Update description of dip group, based on a suggestion by Osamu Aoki + (closes: #512938). + + -- Colin Watson Tue, 17 Mar 2009 13:37:23 +0000 + +base-passwd (3.5.20) unstable; urgency=medium + + * Document that the staff group is typically root-equivalent (thanks, Guy + Hulbert). + + -- Colin Watson Fri, 06 Feb 2009 16:20:12 +0000 + +base-passwd (3.5.19) unstable; urgency=low + + * Allocate uid/gid 64035 for hacluster/haclient (Horms, closes: #494070). + * Moved to bzr.debian.org; add Vcs-Bzr control field. + + -- Colin Watson Sat, 06 Sep 2008 15:27:12 +0100 + +base-passwd (3.5.18) unstable; urgency=low + + * Convert manual pages to UTF-8. + * Update DEB_BUILD_OPTIONS parsing code from policy 3.8.0. + * Update a few copyright notices. + * Convert to machine-readable copyright format, wiki revision 179. + * Update to new section hierarchy from doc-base >= 0.8.10. + + -- Colin Watson Mon, 07 Jul 2008 15:11:07 +0100 + +base-passwd (3.5.17) unstable; urgency=low + + * hal was renamed to haldaemon in hal 0.5.7.1-1 (closes: #452631). + * Make the description of plugdev in users-and-groups slightly more + generic; I don't want to end up having to list all the programs that + implement it, but "can access removable devices" should be good enough + (closes: #285732). + * Add Russian translation of update-passwd(8) (thanks, Yuri Kozlov; + closes: #461732). + + -- Colin Watson Mon, 21 Jan 2008 14:43:50 +0000 + +base-passwd (3.5.16) unstable; urgency=low + + * Register users-and-groups with doc-base (closes: #451680). + + -- Colin Watson Sun, 18 Nov 2007 00:44:46 +0000 + +base-passwd (3.5.15) unstable; urgency=low + + * Use autotools-dev's recommended ./configure --build and --host options + (closes: #451123). + + -- Colin Watson Sat, 17 Nov 2007 20:00:42 +0000 + +base-passwd (3.5.14) unstable; urgency=low + + * Allocate uid/gid 64030 for slurm (Gennaro Oliva, closes: #444412). + * Update to Autoconf 2.61. + + -- Colin Watson Mon, 12 Nov 2007 10:40:26 +0000 + +base-passwd (3.5.13) unstable; urgency=low + + * users-and-groups improvements from Justin Pryzby (closes: #440306): + - jabberd no longer runs as daemon. + - www-data no longer owns log files as of apache2. + + -- Colin Watson Fri, 31 Aug 2007 13:58:21 +0100 + +base-passwd (3.5.12) unstable; urgency=low + + * Change section to admin, matching the override file. + * Support DEB_BUILD_OPTIONS=nostrip (closes: #436542). + + -- Colin Watson Wed, 08 Aug 2007 11:44:44 +0100 + +base-passwd (3.5.11) unstable; urgency=low + + * Update GPL notices with the FSF's new address. + * Add po4a infrastructure and French translation of update-passwd(8) + (thanks, Nicolas François; closes: #326550). + * Fix syntax error in ssh group documentation. + + -- Colin Watson Thu, 15 Dec 2005 10:51:34 +0000 + +base-passwd (3.5.10) unstable; urgency=low + + * Remove preinst, for several reasons: + - the 'dpkg --assert-support-predepends' check isn't guaranteed to be + effective anyway (it tests the current version of dpkg on the system, + not the one that's performing the upgrade); + - dpkg has supported Pre-Depends since 1996; + - it unnecessarily required dpkg to have been configured when running + base-passwd.preinst (#316084). + * users-and-groups improvements from David Mandelberg (closes: #290237): + - Document messagebus, postfix, hal, gdm, saned, klog, and syslog users + and groups. + - Document sshd, fetchmail, and cupsys users. + - Document lpadmin, sasl, scanner, and ssh groups. + - Correct "writeable" to "writable" throughout. + + -- Colin Watson Tue, 28 Jun 2005 15:01:00 +0100 + +base-passwd (3.5.9) unstable; urgency=low + + * Add and document static group plugdev, gid 46, for use by pmount and + similar tools to allow local users to mount removable devices without + the need for entries in /etc/fstab (closes: #283233). + + -- Colin Watson Sat, 4 Dec 2004 10:15:06 +0000 + +base-passwd (3.5.8) unstable; urgency=low + + * Fix typoes in README. + * Clarify in README that packages may not make use of ids in the + 60000-64999 range without *first* having them allocated by this package. + * Allocate static uid/gid 64025 for vpopmail/vchkpw (Pawel Wiecek, + closes: #270719). + + -- Colin Watson Thu, 9 Sep 2004 00:06:00 +0100 + +base-passwd (3.5.7) unstable; urgency=low + + * Improve documentation of 'operator' (Peter Benie). + * In fact, remove the 'operator' user (not group) entirely from new + installations. It will not be automatically removed from existing + installations. Its uses are historical and not well-supported by Debian + anyway, and a local administrator can easily set up something + appropriate without it having to be in everyone's /etc/passwd file + (closes: #198943). + + -- Colin Watson Sat, 24 Jan 2004 14:40:21 +0000 + +base-passwd (3.5.6) unstable; urgency=low + + * Show names of groups when changing users' group ids (closes: #217511). + This incidentally means that group has to be updated before passwd, + since groups might be changed in the same update-passwd run. + * Update Standards-Version: to 3.6.0. Higher policy versions require + prompting via debconf, which is a major code change that hasn't been + done yet. + + -- Colin Watson Sat, 17 Jan 2004 11:58:19 +0000 + +base-passwd (3.5.5) unstable; urgency=low + + * Add md5sums control file. + + -- Colin Watson Tue, 9 Dec 2003 02:24:15 +0000 + +base-passwd (3.5.4) unstable; urgency=low + + * Move the man pages into their own directory in the source package. + * Change irc's home directory to /var/run/ircd, which seems to exist in + most ircd-providing packages (closes: #198913). + * Update Standards-Version: to 3.5.10. + + -- Colin Watson Fri, 27 Jun 2003 23:45:58 +0100 + +base-passwd (3.5.3) unstable; urgency=low + + * The noautoadd flag has been broken since 3.2.0: update-passwd was + looking at the wrong id. Fortunately, since noautoadd entries aren't in + the master files, this didn't matter except that it caused a segfault on + empty system files (closes: #189196). + + -- Colin Watson Wed, 16 Apr 2003 13:44:55 +0100 + +base-passwd (3.5.2) unstable; urgency=low + + * Fix groff problems, mainly the use of "-", throughout update-passwd(8). + I've attempted to keep the Polish translation in step. + * Allocate static uid/gid 64020 for asterisk (Jeff Noxon). + * Update Standards-Version: to 3.5.9. + + -- Colin Watson Sat, 12 Apr 2003 15:14:49 +0100 + +base-passwd (3.5.1) unstable; urgency=low + + * For consistency with the rest of group.master, don't put the lp user in + its group explicitly. We pick that up from passwd.master already. + * Avoid using the 'users' group for any system users (part of #25882): + - Change the sync user's group to nogroup. + - Change the games user's group to be the already-existing games group. + - Create a man group (gid 12) and set that as the man user's group. + * Don't use 'command -v' in postinst; include a pure shell implementation + instead. + * Make '[' argument syntax in postinst strict enough that posh can cope + with it. + * Change nobody's home directory to /nonexistent (the name is mostly for + documentation purposes), following the BSDs (closes: #135732). + * Strip update-passwd after installing it into the temporary tree, not + before. + * Fix a segfault while removing accounts. + + -- Colin Watson Fri, 28 Feb 2003 01:35:18 +0000 + +base-passwd (3.5.0) unstable; urgency=low + + * Remove the postgres user and group for new installations, although not + on upgrades. postgresql 7.1release-3 and up will create a user and group + for itself in the system range (closes: #81222, #95557). + * When using fget*ent_r(), we're supposed to reallocate larger and larger + chunks of memory until we find one in which each passwd/group/shadow + line fits, and there's an arbitrary limit on the length of lines because + we don't. Since update-passwd is single-threaded, this is unnecessary; + just use fget*ent() and copy the returned structures (closes: #109038). + + -- Colin Watson Sat, 8 Feb 2003 00:25:32 +0000 + +base-passwd (3.4.7) unstable; urgency=low + + * Clarify description (thanks, Filip Van Raemdonck; closes: #178170). + * Make -v/--verbose, and thus the postinst, a little less verbose. A + second -v option restores the previous level of verbosity. + * Build with -Wall. Implement DEB_BUILD_OPTIONS=noopt. + * users-and-groups: + - Add Robert Bihlmeyer's comments about daemon, sys, tty, lp, and + nogroup (closes: #178460). + - Improvements to nobody/nogroup and operator documentation suggested by + Tony Finch. + - Include LSB 1.3 comments on bin and daemon. + + -- Colin Watson Sat, 1 Feb 2003 18:01:49 +0000 + +base-passwd (3.4.6) unstable; urgency=low + + * Build users-and-groups.txt as well as users-and-groups.html. + * Clarify the purpose of group mail a little. + * Per Debian policy, utmp can write to /var/log/wtmp and /var/log/lastlog + as well, so document this. + * Update Standards-Version: to 3.5.8. + * Correct "changing shell" message to print both the original and new + values (thanks, Joost van Baal; closes: #178057). + * Include Polish translation of update-passwd(8) (thanks, Marcin Owsiany; + closes: #160146). + + -- Colin Watson Thu, 23 Jan 2003 19:27:09 +0000 + +base-passwd (3.4.5) unstable; urgency=medium + + * Fix a thinko that caused update-passwd never to add new passwd/group + entries unless a NIS compat entry was present (closes: #174187). + + -- Colin Watson Tue, 24 Dec 2002 17:46:39 +0000 + +base-passwd (3.4.4) unstable; urgency=low + + * Downcase the short description, apart from "Debian" (closes: #134614). + * Add initial informative documentation of the global static users and + groups (closes: #50304). This is a work in progress, so feel free to + send suggestions and corrections. + * Ensure that new entries are added before "+" entries (which ignore the + rest of the file and switch to NIS) (closes: #166756). Existing entries + are reordered if and only if they're in the master files. See #130735. + + -- Colin Watson Sat, 14 Dec 2002 13:21:46 +0000 + +base-passwd (3.4.3) unstable; urgency=low + + * New maintainer. Thanks, Wichert. + * Don't fail to configure if nscd isn't running (closes: #166606). + * Fix typo in update-passwd's usage output (closes: #139981). + * Print old value of gecos / home directory / shell as well as new value + (closes: #136227). + * Fix strip argument typo in debian/rules. + * Change gecos for list to "Mailing List Manager" (closes: #149466). + + -- Colin Watson Sat, 30 Nov 2002 03:15:06 +0000 + +base-passwd (3.4.2) unstable; urgency=low + + * Add new sasl group used to regulate access to the sasl secrets + * Drop prerm + * No longer make /usr/doc symlinks + + -- Wichert Akkerman Fri, 27 Sep 2002 19:35:30 +0200 + +base-passwd (3.4.1) unstable; urgency=low + + * Change directory for gnats to /var/lib/gnats on new installs. Do + not change it for existing systems. Closes: Bug#133121 + + -- Wichert Akkerman Sat, 9 Feb 2002 19:44:57 +0100 + +base-passwd (3.4.0) unstable; urgency=medium + + * Don't reorder entries while reading them. Closes: Bug#130735 + + -- Wichert Akkerman Sun, 3 Feb 2002 22:36:13 +0100 + +base-passwd (3.3.0) unstable; urgency=medium + + * Fix typo in postinst prompt. Closes: Bug#130662 + * Remove ancient code from Galen from the source + * Relicense under just version 2 of the GNU GPL + * Check for noninteractive debconf frontend and handle redirected + input in the postinst. Closes: Bug#130362 + * Correct extension of backup file in postinst. Closes: Bug#130366 + * Remove all Linux references + * Be even more paranoid in fputpwent so we can handle syntactically + incorrect entries as well. Closes: Bug#130192 + * Remove bashisms from debian/rules + * Do a better job at stripping update-passwd + + -- Wichert Akkerman Thu, 24 Jan 2002 16:44:28 +0100 + +base-passwd (3.2.3) unstable; urgency=high + + * Major paper brown bag release + * Do not swap uid and gid in putpwent. Closes: Bug#130032 + * If we are upgrading from 3.2.2 explain the uid/gid problem and + offer to restore the previous passwd file + + -- Wichert Akkerman Sun, 20 Jan 2002 17:08:01 +0100 + +base-passwd (3.2.2) unstable; urgency=high + + * Implement our own putpwent since the GNU libc version will happily + give root access to everyone when encountering NIS compat entries. + Closes: Bug#123345 + * Fix typo in error message when reading group files + * Remove majordomo user and group from master passwd and group files + Closes: Bug#108071,#87214 + * Change mail homedirectory to /var/mail. Closes: Bug#95670 + * Improve test for nscd presence. Hopefully Closes: Bug#95479 + * Include section and priority in control file + + -- Wichert Akkerman Sat, 19 Jan 2002 18:18:17 +0100 + +base-passwd (3.2.1) unstable; urgency=low + + * Use a 8192 byte buffer for reading passwd and group entries. If + someone has a group with over 8kb of group members we will still + break (libc has no way to prevent that), but such a system will + be so rate I doubt we will even run into it. + Closes: Bug#51577,#51692,#69819 + * Tell nscd to invalidate the user and group cache if we make any + changes. Closes: Bug#51943 + * Fix a typo in the update-passwd manpage. Closes: Bug#53857,#75791 + * Don't create the msql user and group anymore by default. + Closes: Bug#55878,#87213 + * Don't create the dos user and group anymore by default. Closes: Bug#69485 + * Note that tac-plus uses the static uid and gid 64005. Closes: Bug#63759 + + -- Wichert Akkerman Sat, 21 Apr 2001 20:30:49 +0200 + +base-passwd (3.2.0) unstable; urgency=low + + * Update Standards-Version to 3.2.1 + * Modify update-passwd to use seperate flag lists for users and + groups + * Actually honour noautoadd flag + * Use asprintf so we are no longer bound by PATH_MAX limits. This + has the unfortunate side effect of making update-passwd dependent + on glibc. We'll deal with that when somebody files a bugreport. + + -- Wichert Akkerman Sun, 15 Oct 2000 14:09:52 +0200 + +base-passwd (3.1.9) stable unstable; urgency=low + + * Fix typo: we run update-passwsd instead of uppdate-modules. + Closes: Bug#73668,#74209 + * Modify postinst to not output anything if we're not doing anything, + and clarify the messages in case something does need to be done. + Closes: Bug#74106 + + -- Wichert Akkerman Sun, 8 Oct 2000 00:50:21 +0200 + +base-passwd (3.1.8) stable unstable; urgency=low + + * Leave a backup file for modified files. Closes: Bug#72916 + * Update code to atomically replace a file to be more modular + * Modified --dry-run output to only list modification instead of + detailed actions. This makes the postinst output simpler. + * Abort on errors in the postinst + * Update texts in postinst to better explain what we are doing + + -- Wichert Akkerman Mon, 2 Oct 2000 23:58:59 +0200 + +base-passwd (3.1.7) unstable; urgency=low + + * Remove qmail accounts, but mark them as special in update-passwd so + we don't automatically remove them + * Reserve uids 64010-64016 and gid 64010 for qmail + * Update README to reflect that we don't always reserve uid&gid pairs + + -- Wichert Akkerman Fri, 14 Jan 2000 01:41:55 +0100 + +base-passwd (3.1.6) unstable; urgency=high + + * Merge patches from Gordon Matzigkeit : + + handle broken returnvalue for fget*ent_r from glibc2.0, Closes: #54120 + + if lchown doesn't work also try chown, Closes: #54121 + + -- Wichert Akkerman Fri, 7 Jan 2000 23:54:44 +0100 + +base-passwd (3.1.5) unstable; urgency=high + + * Fix an embarrasing error in copy_group + + -- Wichert Akkerman Wed, 1 Dec 1999 16:35:54 +0100 + +base-passwd (3.1.4) unstable; urgency=low + + * Don't print an error if the shadow-file doens't exist + + -- Wichert Akkerman Wed, 1 Dec 1999 16:23:01 +0100 + +base-passwd (3.1.3) unstable; urgency=medium + + * Fix typo in printf format in putgrent() + * Don't override compilation options in debian/rules + + -- Wichert Akkerman Wed, 1 Dec 1999 15:53:36 +0100 + +base-passwd (3.1.2) unstable; urgency=medium + + * Check gr_mem for NULL in our putgrent substitute + + -- Wichert Akkerman Wed, 1 Dec 1999 01:44:46 +0100 + +base-passwd (3.1.1) unstable; urgency=medium + + * Bump Standards-Version to 3.1.1 (nicely in sync with our own version :) + * Add missing fallback-return for scan_users + * Index special users by id instead of name so we can handle strangely + named entries (like proftp'd anonftp or root-aliases) + * Update the README + + -- Wichert Akkerman Tue, 30 Nov 1999 17:02:27 +0100 + +base-passwd (3.1) unstable; urgency=medium + + * autoconfed the source so we can detect systems without putgrent() + and provide use our own implementation of putgrent + * Don't abort if the shadow-file doesn't exist + * Add new logic to make users special. Use this to remove the special + cases for root and ftp and keep the homedirectory for www-data. + * Update README to document new behaviour + + -- Wichert Akkerman Tue, 30 Nov 1999 15:59:34 +0100 + +base-passwd (3.0.7) unstable; urgency=low + + * We no longer need to add the utmp-group manually in the postinst, + update-passwd will do that for us. + + -- Wichert Akkerman Mon, 29 Nov 1999 17:57:15 +0100 + +base-passwd (3.0.6) unstable; urgency=low + + * Fix slight error in postinst + * Change the wording of messages in the postinst + + -- Wichert Akkerman Mon, 29 Nov 1999 17:49:34 +0100 + +base-passwd (3.0.5) unstable; urgency=low + + * Make postinst smarted to check if changes should be made, and if so + ask the user if he agrees. + * Update the README + + -- Wichert Akkerman Mon, 29 Nov 1999 17:43:40 +0100 + +base-passwd (3.0.4) unstable; urgency=low + + * Add newline at the end of the usage information + * Add video group with gid 44 + * Reserve uid&gid for mysql, Closes: #28158 + * Run update-passwd without --dry-run but with --verbose + + -- Wichert Akkerman Mon, 29 Nov 1999 02:32:32 +0100 + +base-passwd (3.0.3) experimental; urgency=low + + * Handle NIS entries in group as well + + -- Wichert Akkerman Mon, 15 Nov 1999 00:59:02 +0100 + +base-passwd (3.0.2) experimental; urgency=low + + * Set standards-version to 3.0.1 to make lintian silent + * Pass description of what we are processing to process_(new|old)_entries + * Set umask in put_file_in_place() so we can use it elsewhere as well + + -- Wichert Akkerman Sun, 14 Nov 1999 13:44:56 +0100 + +base-passwd (3.0.1) experimental; urgency=low + + * Don't attempt to lock when doing a dry run + * Also copy the gid when we're copying a passwd-node + * Set umask to 0077 before creating any files + * Copy filemodes and ownership to new file + + -- Wichert Akkerman Sun, 14 Nov 1999 04:22:49 +0100 + +base-passwd (3.0) experimental; urgency=low + + * Change homedirectory for man to /var/cache/man + * Complete rewrite of update-passwd + * Call update-passwd --dry-run in the postinst so people get + a chance to check for bugs before we destroy their system + + -- Wichert Akkerman Sun, 14 Nov 1999 04:02:08 +0100 + +base-passwd (2.1.1) unstable; urgency=low + + * Update location of GPL in copyright + * Actually change maintainer in debian/control + * Completely redid debian/rules + * FHS + * Use Pre-Depends instead of Depends + + -- Wichert Akkerman Fri, 5 Nov 1999 14:06:32 +0100 + +base-passwd (2.1) unstable; urgency=low + + * New maintainer + * Update versionnumber for no reason at all + + -- Wichert Akkerman Fri, 5 Nov 1999 13:42:10 +0100 + +base-passwd (2.0.3.5) unstable; urgency=high + + * Non-maintainer upload + * Fix homedirectory for postgres user, Closes: Bug# 47264 + + -- Wichert Akkerman Sat, 30 Oct 1999 14:05:32 +0200 + +base-passwd (2.0.3.4) unstable; urgency=high + + * Non-maintainer upload + * Add utmp group (gid 43) + * Rename changelog to just `changelog' + + -- Wichert Akkerman Fri, 16 Jul 1999 14:24:17 +0200 + +base-passwd (2.0.3.3) frozen unstable; urgency=high + + * update-passwd.c (main): on --sanity-check exit both on failure *and* + success (with an appropriate return value). + * update-passwd.c (main): run sanity_check() unconditionally. + * update-passwd.c (sanity_check): more descriptive error message. + * README: correct location of master /etc/passwd and /etc/group. + + -- James Troup Fri, 22 May 1998 18:29:09 +0200 + +base-passwd (2.0.3.2) frozen unstable; urgency=low + + * Non-maintainer release. + * debian/rules: swap binary-indep and binary-arch. [#20219, #20766] + * update-passwd.8: refer to /usr/share/base-passwd/ not + /usr/lib/base-passwd/. [#20917] + * passwd.master: backup's home directory is /var/backups. [#20462] + + -- James Troup Mon, 13 Apr 1998 00:07:45 +0200 + +base-passwd (2.0.3.1) unstable; urgency=HIGH + + * Emergency release; don't call update-passwd in postinst + + -- Galen Hazelwood Thu, 19 Mar 1998 19:04:53 -0700 + +base-passwd (2.0.3) unstable; urgency=low + + * Added special hack to move ftp user out of slot 11 (#12826) + * Moved into unstable (at last!) + + -- Galen Hazelwood Sun, 15 Mar 1998 15:40:49 -0700 + +base-passwd (2.0.2) experimental; urgency=low + + * Removed dos uid/gid + * Changed majordom's full name to "Majordomo" (#13766) + * Fixed unbelievably stupid bug in update-passwd (#13765, #13862) + + -- Galen Hazelwood Tue, 14 Oct 1997 12:15:58 -0600 + +base-passwd (2.0.1) experimental; urgency=low + + * Fixed gnats home directory (#11073, #12655) + * update-passwd now enforces correct passwd/group file permissions + * Moved master files to /usr/share/base-passwd + + -- Galen Hazelwood Mon, 15 Sep 1997 13:19:30 -0600 + +base-passwd (2.0.0) experimental; urgency=low + + * New utility "update-passwd" to automatically handle passwd/group updates + (#6502, #7792) + * /etc/passwd and /etc/group are now detached from any package + * Moved master files to /usr/lib/base-passwd + + -- Galen Hazelwood Sat, 6 Sep 1997 17:11:37 -0600 + +base-passwd (1.3.2) unstable; urgency=low + + * Added msql uid/gid (#12140) + * Added one-line description (#10167) + + -- Galen Hazelwood Mon, 18 Aug 1997 15:34:00 -0600 + +base-passwd (1.3.1) frozen unstable; urgency=low + + * Added qmail uids/gid from Christian Hudon + + -- Galen Hazelwood Fri, 28 Mar 1997 11:51:02 -0700 + +base-passwd (1.3.0) unstable; urgency=low + + * New maintainer + * Fixed majordomo and postgres problems (fixes bugs #3002, #4295) + * Removed entries above 99 (fixes bug #4849) + * Fixed SmartList name (fixes bug #7838) + * Added shadow group with gid 42 + + -- Galen Hazelwood Fri, 7 Mar 1997 13:00:17 -0700 + +base-passwd (1.2.0-5) unstable; urgency=low + + * Changed UID for Gnats to 41, and added a Gnats group (GID 41) at the + request of Brian C. White. + + -- Philippe Troin Thu, 16 Jan 1997 01:05:28 -0800 + +base-passwd (1.2.0-4) unstable; urgency=low + + * Changed the home directory for the list entry from /var to /var/list. + + -- Philippe Troin Mon, 6 Jan 1997 20:35:33 -0800 + +base-passwd (1.2.0-3) frozen unstable; urgency=low + + * Removed the ftp entry from both passwd and group. + * Removed the unnecessary users root for group root and nobody for group + nogroup. + * Added a UID and GID for `list' (ID 38) + * Added a UID and GID for `irc' (ID 39) + + -- Philippe Troin Thu, 21 Nov 1996 00:46:37 -0800 + +base-passwd (1.2.0-2) frozen unstable; urgency=low + + * Changed debian/rules not to use debmake. + * Fixed the sudo entry in /etc/group. + + -- Philippe Troin Mon, 18 Nov 1996 00:58:58 -0800 + +base-passwd (1.2.0-1) unstable; urgency=low + + * Initial Release. + + -- Bruce Perens Wed, 13 Nov 1996 18:38:10 -0800 diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..95cacde --- /dev/null +++ b/debian/control @@ -0,0 +1,19 @@ +Source: base-passwd +Section: admin +Priority: required +Maintainer: Rafal Krypa +X-Original-Maintainer: Colin Watson +Standards-Version: 3.6.0 +Build-Depends: +Vcs-Bzr: http://bzr.debian.org/users/cjwatson/base-passwd/trunk + +Package: base-passwd +Architecture: any +Depends: ${shlibs:Pre-Depends} +Essential: yes +Replaces: base +Description: Debian base system master password and group files + These are the canonical master copies of the user database files + (/etc/passwd and /etc/group), containing the Debian-allocated user and + group IDs. The update-passwd tool is provided to keep the system databases + synchronized with these master files. diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..bbedee3 --- /dev/null +++ b/debian/copyright @@ -0,0 +1,23 @@ +Format-Specification: http://wiki.debian.org/Proposals/CopyrightFormat?action=recall&rev=179 +Upstream-Name: base-passwd +Upstream-Maintainer: Colin Watson + +Files: update-passwd.c, man/* +Copyright: Copyright 1999-2002 Wichert Akkerman + Copyright 2002, 2003, 2004 Colin Watson +License: GPL-2 + +Files: passwd.master, group.master +License: PD +X-Notes: Originally written by Ian Murdock and + Bruce Perens . + +Files: doc/* +Copyright: Copyright 2001, 2002 Joey Hess + Copyright 2002, 2003, 2004, 2005, 2007 Colin Watson + Copyright 2007 David Mandelberg +License: GPL-2 + +License-Terms: GPL-2 + On Debian and Debian-based systems, a copy of the GNU General Public + License version 2 is available in /usr/share/common-licenses/GPL-2. diff --git a/debian/doc-base b/debian/doc-base new file mode 100644 index 0000000..b1bad50 --- /dev/null +++ b/debian/doc-base @@ -0,0 +1,13 @@ +Document: users-and-groups +Title: Users and Groups in the Debian System +Author: Joey Hess, Colin Watson, David Mandelberg +Abstract: Descriptions of important system users and groups in Debian. +Section: System/Administration + +Format: text +Files: /usr/share/doc/base-passwd/users-and-groups.txt.gz + +Format: HTML +Index: /usr/share/doc/base-passwd/users-and-groups.html +Files: /usr/share/doc/base-passwd/users-and-groups.html + diff --git a/debian/lintian b/debian/lintian new file mode 100644 index 0000000..721142c --- /dev/null +++ b/debian/lintian @@ -0,0 +1,2 @@ +base-passwd: maintainer-script-does-not-check-for-existence-of-installdocs postinst +base-passwd: maintainer-script-does-not-check-for-existence-of-installdocs prerm diff --git a/debian/postinst b/debian/postinst new file mode 100755 index 0000000..7a3e22c --- /dev/null +++ b/debian/postinst @@ -0,0 +1,125 @@ +#! /bin/sh + +set -e + +changes=0 + +askyesno () { + if [ "$DEBIAN_FRONTEND" = "noninteractive" ] ; then + a=y + return + fi + + while : ; do + echo -n "$1 " + read a || true + if [ "$a" = "" ] ; then + a="y" + fi + a=`echo $a | tr A-Z a-z` + if [ "$a" = "y" ] || [ "$a" = "n" ] ; then + break + fi + echo "Illegal answer" + done +} + +# A cut-down version of 'which' from debianutils. +searchpath () { + PROGRAM="$1" + IFS_SAVE="$IFS" + IFS=: + RET=1 + for ELEMENT in $PATH; do + if [ -z "$ELEMENT" ]; then + ELEMENT=. + fi + if [ -f "$ELEMENT/$PROGRAM" ] && \ + [ -x "$ELEMENT/$PROGRAM" ]; then + RET=0 + break + fi + done + IFS="$IFS_SAVE" + return "$RET" +} + + +if [ ! "$1" = "configure" ] ; then + exit 0 +fi + +if [ ! -e /etc/passwd ] ; then + cp /usr/share/base-passwd/passwd.master /etc/passwd +fi + +if [ ! -e /etc/group ] ; then + cp /usr/share/base-passwd/group.master /etc/group +fi + +if [ "$2" = "3.2.2" ] && [ -f /etc/passwd.org ] ; then + cat < /etc/passwd + changes=1 + fi +fi + +tmp=`tempfile` +if ! update-passwd --dry-run > $tmp ; then + cat < debian/tmp/DEBIAN/md5sums + chown root:root debian/tmp/DEBIAN/md5sums + chmod 644 debian/tmp/DEBIAN/md5sums + dpkg --build debian/tmp .. + diff --git a/doc/Makefile b/doc/Makefile new file mode 100644 index 0000000..b41a85a --- /dev/null +++ b/doc/Makefile @@ -0,0 +1,12 @@ +DOCS := users-and-groups.html users-and-groups.txt + +all: $(DOCS) + +clean: + rm -f $(DOCS) + +%.html: %.sgml + sgmltools -b onehtml $< + +%.txt: %.sgml + sgmltools -b txt $< diff --git a/doc/users-and-groups.sgml b/doc/users-and-groups.sgml new file mode 100644 index 0000000..bf45706 --- /dev/null +++ b/doc/users-and-groups.sgml @@ -0,0 +1,810 @@ + + + + Users and Groups in the Debian System + 0.2 + + + + Joey + Hess + joeyh@debian.org + + + Colin + Watson + cjwatson@debian.org + + + David + Mandelberg + mandelbergd@eth0.is-a-geek.org + + + + + 2001 + 2002 + 2003 + 2004 + 2005 + 2007 + Joey Hess + Colin Watson + David Mandelberg + + + + + This document is free; you can redistribute it and/or modify it + under the terms of version 2 of the GNU General Public License as + published by the Free Software Foundation. + + + + This document 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 document; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + 02110-1301, USA. + + + + + + Introduction + + + The Debian base-passwd package contains the master versions of + /etc/passwd and /etc/group. + The update-passwd tool keeps the entries in these + master files in sync on all Debian systems. They comprise only "global + static" ids: that is, those which are reserved globally for the + benefit of packages which need to include files owned by those users + or groups, or need the ids compiled into binaries. Since this + reservation is a serious restriction, these ids must be allocated by + the base-passwd maintainer on request. In general, packages should + avoid requesting such ids where possible and instead allocate system + users or groups dynamically. See Debian Policy for further details. + + + + The Debian Policy Manual reserves ranges for these global static users + and groups, but it makes no attempt to allocate individual numbers or + define their purposes. This document fills that gap by describing the + purposes of the individual entries in these master files. + + + + This is a work in progress. Items in need of feedback are marked with + the "HELP" tag. Please send mail to + base-passwd@packages.debian.org or file a bug with the + Debian bug tracking system if you have more information. + + + + + Users and Groups + + + Many users have a corresponding group, and these pairs will be treated + together. + + + + + root + + + Root is (typically) the superuser. + + + + + + daemon + + + Some unprivileged daemons that need to be able to write to some + files on disk run as daemon.daemon (portmap, + atd, lambdamoo, + mon, and others). Daemons that don't need to + own any files sometimes run as nobody.nogroup instead; it is + generally better practice to use a dedicated user, and more + complex or security-conscious daemons certainly do this. The + daemon user is also handy for locally installed daemons, + probably. + + + LSB 1.3 lists daemon as legacy, and says: "The 'daemon' UID/GID + was used as an unprivileged UID/GID for daemons to execute under + in order to limit their access to the system. Generally daemons + should now run under individual UID/GIDs in order to further + partition daemons from one another." + + + + + + bin + + + HELP: No files on my system are owned by user or group bin. What + good are they? Historically they were probably the owners of + binaries in /bin? It is not mentioned in + the FHS, Debian Policy, or the changelogs of base-passwd or + base-files. + + + LSB 1.3 lists bin as legacy, and says: "The 'bin' UID/GID is + included for compatibility with legacy applications. New + applications should no longer use the 'bin' UID/GID." + + + + + + sys + + + HELP: As with bin, except I don't even know what it was good for + historically. + + + I'm told that /var/spool/cups is owned by + group sys, dunno why. + + + + + + sync + + + The shell of user sync is /bin/sync. Thus, + if its password is set to something easy to guess (such as ""), + anyone can sync the system at the console even if they have no + account on the system. + + + + + + games + + + Many games are sgid to games so they can write their high score + files. This is explained in Debian Policy. + + + + + + man + + + The man program (sometimes) runs as user man, + so it can write cat pages to /var/cache/man + and update its databases there. + + + + + + lp + + + The lp* devices are writable by this group + so that users in it can access the parallel ports directly. + Traditionally this job is taken by a printer daemon instead + which will only need to run in this group. + + + The lpr system keeps its spool directories + owned by lp/lp. Its daemon and frontend tools (through setuid) + run as user root. + + + HELP: what do other print systems (rlpr, + lprng, ...) do? + + + + + + mail + + + Mailboxes in /var/mail are owned and + writable by group mail, as is explained in Debian Policy. The + user and group is used for other purposes as well by various + MTAs and MUAs. + + + + + + news + + + Various news servers and other associated programs (such as + suck) use user and group news in various + ways. Files in the news spool are often owned by user and group + news. Programs such as inews that can be used + to post news are typically sgid news. + + + + + + uucp + + + The uucp user and group is used by the UUCP subsystem. It owns + spool and configuration files. Users in the uucp group may run + uucico. + + + + + + proxy + + + Like daemon, this user and group is used by some daemons + (specifically, proxy daemons) that don't have dedicated user ids + and that need to own files. For example, group proxy is used by + pdnsd, and squid runs as + user proxy. + + + + + + majordom + + + Majordomo has a statically allocated uid on Debian systems for + historical reasons. It is not installed on new systems. + + + + + + postgres + + + Postgresql databases are owned by this user and group. + + + + + + www-data + + + Some web servers run as www-data. Web content should + not be owned by this user, or a compromised + web server would be able to rewrite a web site. Data written out + by web servers will be owned by www-data. + + + + + + backup + + + Presumably so backup/restore responsibilities can be locally + delegated to someone without full root permissions? + + + HELP: Is that right? Amanda reportedly uses this, details? + + + + + + operator + + + Historically, the operator user account was used by system + operators with low privilege to dump filesystem backups to tape, + and was in the root group so that it could do this. In Debian, + the use of a utility such as sudo to gain + privilege is preferred over such highly-special-purpose + accounts, and the operator user is no longer created by default. + It had uid 37. + + + The operator group is used by dump -n to + notify logged-in operators via wall when it + requires operator attention. This is a historical use, and new + applications should not behave this way. (If nothing else, the + group should be configurable.) + + + + + + list + + + Mailing list archives and data are owned by this user and group. + Some mailing list programs may run as this user as well. + + + + + + irc + + + Used by IRC daemons. A statically allocated user is needed only + because of a bug in ircd: it + setuid()s itself to a compiled-in user id + on startup. + + + + + + gnats + + + HELP: Evidently used by gnats. And it needs a + static set why? + + + + + + nobody, nogroup + + + Daemons that need not own any files sometimes run as user nobody + and group nogroup, although using a dedicated user is far + preferable. Thus, no files on a system should be owned by this + user or group. + + + (Technically speaking, it does no harm for a file to be owned by + group nogroup as long as the ownership confers no additional + privileges, that is if the group and other permission bits are + equal. However, this is sloppy practice and should be avoided.) + + + If root-squashing is in use over NFS, root access from the + client is performed as user nobody on the server. + + + + + + messagebus + + + The dbus daemon (dbus-daemon-1) runs as this + user and group. + + + + + + postfix + + + Used by the postfix MTA. + + + + + + haldaemon + + + Used by the hardware abstraction layer (hal). + + + + + + gdm + + + GDM (GNOME Display Manager) runs as this user/group. + + + + + + saned + + + Added by sane-utils, but appear to be unused. + + + + + + klog + + + Used by klogd, the kernel logger. + + + + + + syslog + + + Used by syslog, the general purpose logger. + + + + + + + Other groups have no associated user. + + + + + adm + + + Group adm is used for system monitoring tasks. Members of this + group can read many log files in /var/log, + and can use xconsole. + + + Historically, /var/log was + /usr/adm (and later + /var/adm), thus the name of the group. + + + HELP: Perhaps policy should state the purpose of this group so + users may be safely added to it, in certainty that all they'll + be able to do is read logs. Wouldn't hurt to rename it 'log' + either ... + + + + + + tty + + + Tty devices and /dev/vcs* are owned by this + group. This is used by write and + wall to enable them to write to other + people's ttys. + + + + + + disk + + + Raw access to disks. Mostly equivalent to root access. + + + HELP: Well, I have some disk devices in + /dev owned by the group, but I can't see + the point. On another system, I noticed that some of the files + lilo puts in /boot are + also owned by disk. I can imagine local uses for such a group, + like if you want to give some users in the group direct access + to some hard disk. But these uses I've found on my systems seem + to preclude doing that easily; if I put a user in group disk + here, they'd have write access to the root filesystem. + + + + + + kmem + + + /dev/kmem and similar files are readable by + this group. This is mostly a BSD relic, but any programs that + need direct read access to the system's memory can thus be made + setgid kmem. + + + + + + dialout + + + Full and direct access to serial ports. Members of this group + can reconfigure the modem, dial anywhere, etc. + + + + + + dip + + + The group's name stands for "Dialup IP". Being in group dip + allows you to use tools such as pppd, + pon, and poff to make + dialup connections to other systems using predefined + configuration file(s) in the /etc/ppp/peers + directory. + + + + + + fax + + + Allows members to use fax software to send or receive faxes. + + + + + + voice + + + Voicemail, useful for systems that use modems as answering + machines. + + + + + + cdrom + + + This group can be used locally to give a set of users access to + a CD-ROM drive. + + + + + + floppy + + + This group can be used locally to give a set of users access to + a floppy drive. + + + + + + tape + + + This group can be used locally to give a set of users access to + a tape drive. + + + + + + sudo + + + Members of this group do not need to type their password when + using sudo. See + /usr/share/doc/sudo/OPTIONS. + + + + + + audio + + + This group can be used locally to give a set of users access to + an audio device. + + + + + + src + + + This group owns source code, including files in + /usr/src. It can be used locally to give a + user the ability to manage system source code. + + + HELP: /usr/src is owned by group src and is + setgid. This doesn't make files put there by foo-src packages + necessarily be owned by group src though. If the intent is to + make group src be able to manage source code, perhaps policy + should say that foo-src packages make files in + /usr/src owned and writable by the group + (and files in tarballs dropped there likewise)? + + + + + + shadow + + + /etc/shadow is readable by this group. Some + programs that need to be able to access the file are setgid + shadow. + + + + + + utmp + + + This group can write to /var/run/utmp, + /var/log/wtmp, + /var/log/lastlog, and similar files. + Programs that need to be able to write to them (such as X + terminal emulators) are setgid utmp. + + + + + + video + + + This group can be used locally to give a set of users access to + a video device. + + + + + + plugdev + + + Members of this group can access removable devices in limited + ways without explicit configuration in + /etc/fstab. This is useful for local users + who expect to be able to insert and use CDs, USB drives, and so + on. + + + Since pmount (the original implementor of + group plugdev) always mounts with the nodev and nosuid options + and applies other checks, this group is not intended to be + root-equivalent in the ways that the ability to mount + filesystems might ordinarily allow. Implementors of semantics + involving this group should be careful not to allow + root-equivalence. + + + + + + staff + + + Allows users to add local modifications to the system + (/usr/local, /home) + without needing root privileges. Compare with group 'adm', which + is more related to monitoring/security. + + + Note that the ability to modify /usr/local + is effectively equivalent to root access (since + /usr/local is intentionally on search paths + ahead of /usr), and so you should only add + trusted users to this group. Be careful in environments using + NFS since acquiring another non-root user's privileges is often + easier in such environments. + + + + + + users + + + While Debian systems use the user-group system by default (each + user has their own group), some prefer to use a more traditional + group system. In that system, each user is a member of the + 'users' group. + + + + + + lpadmin + + + Allows a user to add, modify, and remove printers from foomatic, + cups, and possibly other printer databases. + + + + + + sasl + + + Users in this group have read/write access to + /etc/sasldb and/or + /etc/sasldb2, wich are used to + authentication with sasl. This is commonly used by IMAP, POP, + and SMTP servers for authentication. + + + + + + scanner + + + Users in this group can use scanner(s). + + + + + + ssh + + + ssh-agent is setgid to ssh in order to + prevent ptrace attacks. + + + + + + + Some users have no corresponding group. + + + + + sshd + + + Unprivileged user used by the privilege-separated + sshd when communicating with the network + before successful authentication. + + + + + + fetchmail + + + Used by the fetchmail program. + + + + + + cupsys + + + CUPS (Common Un*x Printing System) runs as + this user. It is in group lp, so it can access printer devices. + + + + + + + + diff --git a/group.master b/group.master new file mode 100644 index 0000000..ad1dd2d --- /dev/null +++ b/group.master @@ -0,0 +1,39 @@ +root:*:0: +daemon:*:1: +bin:*:2: +sys:*:3: +adm:*:4: +tty:*:5: +disk:*:6: +lp:*:7: +mail:*:8: +news:*:9: +uucp:*:10: +man:*:12: +proxy:*:13: +kmem:*:15: +dialout:*:20: +fax:*:21: +voice:*:22: +cdrom:*:24: +floppy:*:25: +tape:*:26: +sudo:*:27: +audio:*:29: +dip:*:30: +www-data:*:33: +backup:*:34: +operator:*:37: +list:*:38: +irc:*:39: +src:*:40: +gnats:*:41: +shadow:*:42: +utmp:*:43: +video:*:44: +sasl:*:45: +plugdev:*:46: +staff:*:50: +games:*:60: +users:*:100: +nogroup:*:65534: diff --git a/install-sh b/install-sh new file mode 100755 index 0000000..e9de238 --- /dev/null +++ b/install-sh @@ -0,0 +1,251 @@ +#!/bin/sh +# +# install - install a program, script, or datafile +# This comes from X11R5 (mit/util/scripts/install.sh). +# +# Copyright 1991 by the Massachusetts Institute of Technology +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of M.I.T. not be used in advertising or +# publicity pertaining to distribution of the software without specific, +# written prior permission. M.I.T. makes no representations about the +# suitability of this software for any purpose. It is provided "as is" +# without express or implied warranty. +# +# 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. It can only install one file at a time, a restriction +# shared with many OS's install programs. + + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" +mkdirprog="${MKDIRPROG-mkdir}" + +transformbasename="" +transform_arg="" +instcmd="$mvprog" +chmodcmd="$chmodprog 0755" +chowncmd="" +chgrpcmd="" +stripcmd="" +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src="" +dst="" +dir_arg="" + +while [ x"$1" != x ]; do + case $1 in + -c) instcmd="$cpprog" + shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + -s) stripcmd="$stripprog" + shift + continue;; + + -t=*) transformarg=`echo $1 | sed 's/-t=//'` + shift + continue;; + + -b=*) transformbasename=`echo $1 | sed 's/-b=//'` + shift + continue;; + + *) if [ x"$src" = x ] + then + src=$1 + else + # this colon is to work around a 386BSD /bin/sh bug + : + dst=$1 + fi + shift + continue;; + esac +done + +if [ x"$src" = x ] +then + echo "install: no input file specified" + exit 1 +else + true +fi + +if [ x"$dir_arg" != x ]; then + dst=$src + src="" + + if [ -d $dst ]; then + instcmd=: + chmodcmd="" + else + instcmd=mkdir + fi +else + +# Waiting for this to be detected by the "$instcmd $src $dsttmp" command +# might cause directories to be created, which would be especially bad +# if $src (and thus $dsttmp) contains '*'. + + if [ -f $src -o -d $src ] + then + true + else + echo "install: $src does not exist" + exit 1 + fi + + if [ x"$dst" = x ] + then + echo "install: no destination specified" + exit 1 + else + true + fi + +# If destination is a directory, append the input filename; if your system +# does not like double slashes in filenames, you may need to add some logic + + if [ -d $dst ] + then + dst="$dst"/`basename $src` + else + true + fi +fi + +## this sed command emulates the dirname command +dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` + +# Make sure that the destination directory exists. +# this part is taken from Noah Friedman's mkinstalldirs script + +# Skip lots of stat calls in the usual case. +if [ ! -d "$dstdir" ]; then +defaultIFS=' +' +IFS="${IFS-${defaultIFS}}" + +oIFS="${IFS}" +# Some sh's can't handle IFS=/ for some reason. +IFS='%' +set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` +IFS="${oIFS}" + +pathcomp='' + +while [ $# -ne 0 ] ; do + pathcomp="${pathcomp}${1}" + shift + + if [ ! -d "${pathcomp}" ] ; + then + $mkdirprog "${pathcomp}" + else + true + fi + + pathcomp="${pathcomp}/" +done +fi + +if [ x"$dir_arg" != x ] +then + $doit $instcmd $dst && + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi +else + +# If we're going to rename the final executable, determine the name now. + + if [ x"$transformarg" = x ] + then + dstfile=`basename $dst` + else + dstfile=`basename $dst $transformbasename | + sed $transformarg`$transformbasename + fi + +# don't allow the sed command to completely eliminate the filename + + if [ x"$dstfile" = x ] + then + dstfile=`basename $dst` + else + true + fi + +# Make a temp file name in the proper directory. + + dsttmp=$dstdir/#inst.$$# + +# Move or copy the file name to the temp name + + $doit $instcmd $src $dsttmp && + + trap "rm -f ${dsttmp}" 0 && + +# 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 $instcmd $src $dsttmp" command. + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && + +# Now rename the file to the real destination. + + $doit $rmcmd -f $dstdir/$dstfile && + $doit $mvcmd $dsttmp $dstdir/$dstfile + +fi && + + +exit 0 diff --git a/man/Makefile b/man/Makefile new file mode 100644 index 0000000..6dde6f6 --- /dev/null +++ b/man/Makefile @@ -0,0 +1,12 @@ +LANGS := fr +MANFILES := $(foreach ll,$(LANGS),update-passwd.$(ll).8) + +all: $(MANFILES) + +update: po4a/po/base-passwd.pot + +clean: + rm -f $(MANFILES) + +po4a/po/base-passwd.pot $(MANFILES): update-passwd.8 + cd po4a && po4a po4a.cfg diff --git a/man/po4a/po/base-passwd.pot b/man/po4a/po/base-passwd.pot new file mode 100644 index 0000000..e56f5b1 --- /dev/null +++ b/man/po4a/po/base-passwd.pot @@ -0,0 +1,251 @@ +# SOME DESCRIPTIVE TITLE +# Copyright (C) YEAR Free Software Foundation, Inc. +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: 2008-01-21 14:25+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: ENCODING" + +# type: TH +#: ../update-passwd.8:1 +#, no-wrap +msgid "UPDATE-PASSWD" +msgstr "" + +# type: TH +#: ../update-passwd.8:1 +#, no-wrap +msgid "Debian tools" +msgstr "" + +# type: TH +#: ../update-passwd.8:1 +#, no-wrap +msgid "DEBIAN" +msgstr "" + +# type: SH +#: ../update-passwd.8:2 +#, no-wrap +msgid "NAME" +msgstr "" + +# type: Plain text +#: ../update-passwd.8:4 +msgid "update-passwd - safely update /etc/passwd, /etc/shadow and /etc/group" +msgstr "" + +# type: SH +#: ../update-passwd.8:4 +#, no-wrap +msgid "SYNOPSIS" +msgstr "" + +# type: Plain text +#: ../update-passwd.8:7 +msgid "B [I]" +msgstr "" + +# type: SH +#: ../update-passwd.8:7 +#, no-wrap +msgid "DESCRIPTION" +msgstr "" + +# type: Plain text +#: ../update-passwd.8:14 +msgid "" +"B handles updates of /etc/passwd, /etc/shadow and /etc/group " +"on running Debian systems. It compares the current files to master copies, " +"distributed in the base-passwd package, and updates all entries in the " +"global system range (that is, 0\\(en99)." +msgstr "" + +# type: SH +#: ../update-passwd.8:15 +#, no-wrap +msgid "OPTIONS" +msgstr "" + +# type: Plain text +#: ../update-passwd.8:19 +msgid "" +"B follows the usual GNU command line syntax, with long " +"options starting with two dashes (\\(oq-\\(cq)." +msgstr "" + +# type: TP +#: ../update-passwd.8:19 +#, no-wrap +msgid "B<-p>,\\ B<--passwd-master=FILE>" +msgstr "" + +# type: Plain text +#: ../update-passwd.8:24 +msgid "" +"Use FILE as the master copy of the passwd database. The default value is " +"I." +msgstr "" + +# type: TP +#: ../update-passwd.8:24 +#, no-wrap +msgid "B<-g>,\\ B<--group-master=FILE>" +msgstr "" + +# type: Plain text +#: ../update-passwd.8:29 +msgid "" +"Use FILE as the master copy of the group database. The default value is " +"I." +msgstr "" + +# type: TP +#: ../update-passwd.8:29 +#, no-wrap +msgid "B<-P>,\\ B<--passwd=FILE>" +msgstr "" + +# type: Plain text +#: ../update-passwd.8:34 +msgid "" +"Use FILE as the system passwd database. The default value is " +"I." +msgstr "" + +# type: TP +#: ../update-passwd.8:34 +#, no-wrap +msgid "B<-S>,\\ B<--shadow=FILE>" +msgstr "" + +# type: Plain text +#: ../update-passwd.8:39 +msgid "" +"Use FILE as the system shadow database. The default value is " +"I." +msgstr "" + +# type: TP +#: ../update-passwd.8:39 +#, no-wrap +msgid "B<-G>,\\ B<--group=FILE>" +msgstr "" + +# type: Plain text +#: ../update-passwd.8:44 +msgid "Use FILE as the system group database. The default value is I." +msgstr "" + +# type: TP +#: ../update-passwd.8:44 +#, no-wrap +msgid "B<-s>,\\ B<--sanity-check>" +msgstr "" + +# type: Plain text +#: ../update-passwd.8:47 +msgid "Only perform sanity-checks but don't do anything." +msgstr "" + +# type: TP +#: ../update-passwd.8:47 +#, no-wrap +msgid "B<-v>,\\ B<--verbose>" +msgstr "" + +# type: Plain text +#: ../update-passwd.8:51 +msgid "" +"Give detailed information about we are doing. A second -v gives additional " +"detail." +msgstr "" + +# type: TP +#: ../update-passwd.8:51 +#, no-wrap +msgid "B<-n>,\\ B<--dry-run>" +msgstr "" + +# type: Plain text +#: ../update-passwd.8:54 +msgid "Don't do anything but only show what we would do." +msgstr "" + +# type: TP +#: ../update-passwd.8:54 +#, no-wrap +msgid "B<-L>,\\ B<--no-locking>" +msgstr "" + +# type: Plain text +#: ../update-passwd.8:59 +msgid "" +"Don't attempt to lock the account database. This should only be used for " +"debugging purposes. B" +msgstr "" + +# type: TP +#: ../update-passwd.8:59 +#, no-wrap +msgid "B<-h>,\\ B<--help>" +msgstr "" + +# type: Plain text +#: ../update-passwd.8:63 +msgid "Show a summary of how to use B." +msgstr "" + +# type: TP +#: ../update-passwd.8:63 +#, no-wrap +msgid "B<-V>,\\ B<--version>" +msgstr "" + +# type: Plain text +#: ../update-passwd.8:66 +msgid "Show the version number" +msgstr "" + +# type: SH +#: ../update-passwd.8:66 +#, no-wrap +msgid "BUGS" +msgstr "" + +# type: Plain text +#: ../update-passwd.8:72 +msgid "" +"At this moment B does not verify the shadow-file. It should " +"check if the entries in the passwd are also in shadow and vice versa, and " +"that passwords are not present in both files." +msgstr "" + +# type: SH +#: ../update-passwd.8:72 +#, no-wrap +msgid "AUTHOR" +msgstr "" + +# type: Plain text +#: ../update-passwd.8:74 +msgid "Wichert Akkerman Ewakkerma@debian.orgE" +msgstr "" + +# type: Plain text +#: ../update-passwd.8:78 +msgid "" +"This program was written for the Debian project, and is copyright " +"1999\\(en2002 Wichert Akkerman and copyright 2002, 2003 Colin Watson. It is " +"distributed under version 2 of the GNU General Public License." +msgstr "" diff --git a/man/po4a/po/fr.po b/man/po4a/po/fr.po new file mode 100644 index 0000000..4df622d --- /dev/null +++ b/man/po4a/po/fr.po @@ -0,0 +1,281 @@ +# Traduction des pages de manuel de base-passwd avec po4a +# Copyright (C) 2004 Nicolas FRANCOIS +# +msgid "" +msgstr "" +"Project-Id-Version: base-passwd\n" +"POT-Creation-Date: 2005-08-08 1:27+0200\n" +"PO-Revision-Date: 2005-08-08 1:29+0200\n" +"Last-Translator: Nicolas François \n" +"Language-Team: Debian French Team \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Transfer-Encoding: 8bit\n" + +# type: TH +#: ../update-passwd.8:1 +#, no-wrap +msgid "UPDATE-PASSWD" +msgstr "UPDATE-PASSWD" + +# type: TH +#: ../update-passwd.8:1 +#, no-wrap +msgid "Debian tools" +msgstr "Utilitaires Debian" + +# type: TH +#: ../update-passwd.8:1 +#, no-wrap +msgid "DEBIAN" +msgstr "DEBIAN" + +# type: SH +#: ../update-passwd.8:2 +#, no-wrap +msgid "NAME" +msgstr "NOM" + +# type: Plain text +#: ../update-passwd.8:4 +msgid "update-passwd - safely update /etc/passwd, /etc/shadow and /etc/group" +msgstr "" +"update-passwd - met à jour /etc/passwd, /etc/shadow et /etc/group de façon " +"sécurisée" + +# type: SH +#: ../update-passwd.8:4 +#, no-wrap +msgid "SYNOPSIS" +msgstr "SYNOPSIS" + +# type: Plain text +#: ../update-passwd.8:7 +msgid "B [I]" +msgstr "B [I]" + +# type: SH +#: ../update-passwd.8:7 +#, no-wrap +msgid "DESCRIPTION" +msgstr "DESCRIPTION" + +# NOTE: c'est étonnant pour 0 (root) +# type: Plain text +#: ../update-passwd.8:14 +msgid "" +"B handles updates of /etc/passwd, /etc/shadow and /etc/group " +"on running Debian systems. It compares the current files to master copies, " +"distributed in the base-passwd package, and updates all entries in the " +"global system range (that is, 0\\(en99)." +msgstr "" +"B gère les mises à jour de /etc/passwd, /etc/shadow et /etc/" +"group sur les systèmes Debian. Il compare les fichiers actuels avec les " +"originaux distribués avec le paquet base-passwd, et met à jour toutes les " +"entrées allouées globalement par le projet Debian (c'est-à-dire de 0 à 99)." + +# type: SH +#: ../update-passwd.8:15 +#, no-wrap +msgid "OPTIONS" +msgstr "OPTIONS" + +# type: Plain text +#: ../update-passwd.8:19 +msgid "" +"B follows the usual GNU command line syntax, with long " +"options starting with two dashes (\\(oq-\\(cq)." +msgstr "" +"B suit la syntaxe usuelle des commandes GNU, avec les options " +"longues commençant par deux tirets («\\ -\\ »)." + +# type: TP +#: ../update-passwd.8:19 +#, no-wrap +msgid "B<-p>,\\ B<--passwd-master=FILE>" +msgstr "B<-p>, B<--passwd-master=FICHIER>" + +# NOTE: j'ésite à traduire passwd. Il ne s'agit pas des mots de pase, mais +# de tout ce qu'il y a autour. +# type: Plain text +#: ../update-passwd.8:24 +msgid "" +"Use FILE as the master copy of the passwd database. The default value is I." +msgstr "" +"Utilise FICHIER comme original de la base de données «\\ passwd\\ ». La " +"valeur par défaut est I." + +# type: TP +#: ../update-passwd.8:24 +#, no-wrap +msgid "B<-g>,\\ B<--group-master=FILE>" +msgstr "B<-g>, B<--group-master=FICHIER>" + +# type: Plain text +#: ../update-passwd.8:29 +msgid "" +"Use FILE as the master copy of the group database. The default value is I." +msgstr "" +"Utilise FICHIER comme original de la base de données «\\ group\\ ». La " +"valeur par défaut est I." + +# type: TP +#: ../update-passwd.8:29 +#, no-wrap +msgid "B<-P>,\\ B<--passwd=FILE>" +msgstr "B<-P>, B<--passwd=FICHIER>" + +# type: Plain text +#: ../update-passwd.8:34 +msgid "" +"Use FILE as the system passwd database. The default value is I." +msgstr "" +"Utilise FICHIER comme base de données «\\ passwd\\ » du système. La valeur " +"par défaut est I." + +# type: TP +#: ../update-passwd.8:34 +#, no-wrap +msgid "B<-S>,\\ B<--shadow=FILE>" +msgstr "B<-S>, B<--shadow=FICHIER>" + +# type: Plain text +#: ../update-passwd.8:39 +msgid "" +"Use FILE as the system shadow database. The default value is I." +msgstr "" +"Utilise FICHIER comme base de données «\\ shadow\\ » du système. La valeur " +"par défaut est I." + +# type: TP +#: ../update-passwd.8:39 +#, no-wrap +msgid "B<-G>,\\ B<--group=FILE>" +msgstr "B<-G>, B<--group=FICHIER>" + +# type: Plain text +#: ../update-passwd.8:44 +msgid "" +"Use FILE as the system group database. The default value is I." +msgstr "" +"Utilise FICHIER comme base de données «\\ group\\ » du système. La valeur " +"par défaut est I." + +# type: TP +#: ../update-passwd.8:44 +#, no-wrap +msgid "B<-s>,\\ B<--sanity-check>" +msgstr "B<-s>, B<--sanity-check>" + +# type: Plain text +#: ../update-passwd.8:47 +msgid "Only perform sanity-checks but don't do anything." +msgstr "Ne réalise que les tests de contrôle, mais ne touche à rien." + +# type: TP +#: ../update-passwd.8:47 +#, no-wrap +msgid "B<-v>,\\ B<--verbose>" +msgstr "B<-v>, B<--verbose>" + +# type: Plain text +#: ../update-passwd.8:51 +msgid "" +"Give detailed information about we are doing. A second -v gives additional " +"detail." +msgstr "" +"Donne des informations précises sur ce qui est réalisé. Un second B<-v> " +"donne encore plus de précisions." + +# type: TP +#: ../update-passwd.8:51 +#, no-wrap +msgid "B<-n>,\\ B<--dry-run>" +msgstr "B<-n>, B<--dry-run>" + +# type: Plain text +#: ../update-passwd.8:54 +msgid "Don't do anything but only show what we would do." +msgstr "Ne fait rien, montre seulement ce qui va être fait." + +# type: TP +#: ../update-passwd.8:54 +#, no-wrap +msgid "B<-L>,\\ B<--no-locking>" +msgstr "B<-L>, B<--no-locking>" + +# type: Plain text +#: ../update-passwd.8:59 +msgid "" +"Don't attempt to lock the account database. This should only be used for " +"debugging purposes. B" +msgstr "" +"Ne cherche pas à verrouiller la base de données des comptes. Cette option ne " +"devrait être utilisée qu'à des fins de débogage. B" + +# type: TP +#: ../update-passwd.8:59 +#, no-wrap +msgid "B<-h>,\\ B<--help>" +msgstr "B<-h>, B<--help>" + +# type: Plain text +#: ../update-passwd.8:63 +msgid "Show a summary of how to use B." +msgstr "Affiche un résumé d'aide pour l'utilisation de B." + +# type: TP +#: ../update-passwd.8:63 +#, no-wrap +msgid "B<-V>,\\ B<--version>" +msgstr "B<-V>, B<--version>" + +# type: Plain text +#: ../update-passwd.8:66 +msgid "Show the version number" +msgstr "Affiche le numéro de version." + +# type: SH +#: ../update-passwd.8:66 +#, no-wrap +msgid "BUGS" +msgstr "BOGUES" + +# type: Plain text +#: ../update-passwd.8:72 +msgid "" +"At this moment B does not verify the shadow-file. It should " +"check if the entries in the passwd are also in shadow and vice versa, and " +"that passwords are not present in both files." +msgstr "" +"Pour l'instant B ne vérifie pas le fichier shadow. Il devrait " +"vérifier si les entrées de passwd sont également dans le fichier shadow et " +"vice versa, et que les mots de passe ne sont pas présents dans les deux " +"fichiers." + +# type: SH +#: ../update-passwd.8:72 +#, no-wrap +msgid "AUTHOR" +msgstr "AUTEUR" + +# type: Plain text +#: ../update-passwd.8:74 +msgid "Wichert Akkerman Ewakkerma@debian.orgE" +msgstr "Wichert Akkerman Ewakkerma@debian.orgE" + +# type: Plain text +#: ../update-passwd.8:78 +msgid "" +"This program was written for the Debian project, and is copyright 1999" +"\\(en2002 Wichert Akkerman and copyright 2002, 2003 Colin Watson. It is " +"distributed under version 2 of the GNU General Public License." +msgstr "" +"Ce programme a été écrit pour le projet Debian, et est placé sous le " +"copyright 1999\\(en2002 Wichert Akkerman et le copyright 2002, 2003 Colin " +"Watson. Il est distribué sous la licence publique générale du projet GNU " +"(«\\ GPL\\ ») version 2." diff --git a/man/po4a/po/ru.po b/man/po4a/po/ru.po new file mode 100644 index 0000000..10a4fa0 --- /dev/null +++ b/man/po4a/po/ru.po @@ -0,0 +1,284 @@ +# translation of ru.po to Russian +# SOME DESCRIPTIVE TITLE +# Copyright (C) 2008 Free Software Foundation, Inc. +# +# Yuri Kozlov , 2008. +msgid "" +msgstr "" +"Project-Id-Version: base-passwd 3.5.16\n" +"POT-Creation-Date: 2005-09-03 13:25+0200\n" +"PO-Revision-Date: 2008-01-20 13:20+0300\n" +"Last-Translator: Yuri Kozlov \n" +"Language-Team: Russian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: KBabel 1.11.4\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +# type: TH +#: ../update-passwd.8:1 +#, no-wrap +msgid "UPDATE-PASSWD" +msgstr "UPDATE-PASSWD" + +# type: TH +#: ../update-passwd.8:1 +#, no-wrap +msgid "Debian tools" +msgstr "утилиты Debian" + +# type: TH +#: ../update-passwd.8:1 +#, no-wrap +msgid "DEBIAN" +msgstr "DEBIAN" + +# type: SH +#: ../update-passwd.8:2 +#, no-wrap +msgid "NAME" +msgstr "НАЗВАНИЕ" + +# type: Plain text +#: ../update-passwd.8:4 +msgid "update-passwd - safely update /etc/passwd, /etc/shadow and /etc/group" +msgstr "update-passwd - безопасное обновление файлов /etc/passwd, /etc/shadow и /etc/group" + +# type: SH +#: ../update-passwd.8:4 +#, no-wrap +msgid "SYNOPSIS" +msgstr "СИНТАКСИС" + +# type: Plain text +#: ../update-passwd.8:7 +msgid "B [I]" +msgstr "B [I<параметры>]" + +# type: SH +#: ../update-passwd.8:7 +#, no-wrap +msgid "DESCRIPTION" +msgstr "ОПИСАНИЕ" + +# type: Plain text +#: ../update-passwd.8:14 +msgid "" +"B handles updates of /etc/passwd, /etc/shadow and /etc/group " +"on running Debian systems. It compares the current files to master copies, " +"distributed in the base-passwd package, and updates all entries in the " +"global system range (that is, 0\\(en99)." +msgstr "" +"B служит для обновления файлов /etc/passwd, /etc/shadow и /etc/group в работающих системах Debian. Она сравнивает текущие файлы " +"с мастер-копиями из пакета base-passwd и обновляет все записи " +"глобального системного диапазона (то есть, 0\\(en99)." + +# type: SH +#: ../update-passwd.8:15 +#, no-wrap +msgid "OPTIONS" +msgstr "ПАРАМЕТРЫ" + +# type: Plain text +#: ../update-passwd.8:19 +msgid "" +"B follows the usual GNU command line syntax, with long " +"options starting with two dashes (\\(oq-\\(cq)." +msgstr "" +"Для B используется обычный синтаксис запуска программ GNU " +"из командной строки, то есть длинные имена параметров " +"начинаются с двух символов тире (\\(oq-\\(cq)." + +# type: TP +#: ../update-passwd.8:19 +#, no-wrap +msgid "B<-p>,\\ B<--passwd-master=FILE>" +msgstr "B<-p>,\\ B<--passwd-master=ФАЙЛ>" + +# type: Plain text +#: ../update-passwd.8:24 +msgid "" +"Use FILE as the master copy of the passwd database. The default value is " +"I." +msgstr "" +"Использовать ФАЙЛ в качестве мастер-копии базы данных passwd. " +"Значением по умолчанию является I." + +# type: TP +#: ../update-passwd.8:24 +#, no-wrap +msgid "B<-g>,\\ B<--group-master=FILE>" +msgstr "B<-g>,\\ B<--group-master=ФАЙЛ>" + +# type: Plain text +#: ../update-passwd.8:29 +msgid "" +"Use FILE as the master copy of the group database. The default value is " +"I." +msgstr "" +"Использовать ФАЙЛ в качестве мастер-копии базы данных group. " +"Значением по умолчанию является I." + +# type: TP +#: ../update-passwd.8:29 +#, no-wrap +msgid "B<-P>,\\ B<--passwd=FILE>" +msgstr "B<-P>,\\ B<--passwd=ФАЙЛ>" + +# type: Plain text +#: ../update-passwd.8:34 +msgid "" +"Use FILE as the system passwd database. The default value is " +"I." +msgstr "" +"Использовать ФАЙЛ в качестве системной базы данных passwd. " +"Значением по умолчанию является I." + +# type: TP +#: ../update-passwd.8:34 +#, no-wrap +msgid "B<-S>,\\ B<--shadow=FILE>" +msgstr "B<-S>,\\ B<--shadow=ФАЙЛ>" + +# type: Plain text +#: ../update-passwd.8:39 +msgid "" +"Use FILE as the system shadow database. The default value is " +"I." +msgstr "" +"Использовать ФАЙЛ в качестве системной базы данных shadow. " +"Значением по умолчанию является I." + +# type: TP +#: ../update-passwd.8:39 +#, no-wrap +msgid "B<-G>,\\ B<--group=FILE>" +msgstr "B<-G>,\\ B<--group=ФАЙЛ>" + +# type: Plain text +#: ../update-passwd.8:44 +msgid "Use FILE as the system group database. The default value is I." +msgstr "" +"Использовать ФАЙЛ в качестве системной базы данных group. " +"Значением по умолчанию является I." + +# type: TP +#: ../update-passwd.8:44 +#, no-wrap +msgid "B<-s>,\\ B<--sanity-check>" +msgstr "B<-s>,\\ B<--sanity-check>" + +# type: Plain text +#: ../update-passwd.8:47 +msgid "Only perform sanity-checks but don't do anything." +msgstr "" +"Провести проверку на отсутствие тривиальных ошибок ничего " +"не изменяя." + +# type: TP +#: ../update-passwd.8:47 +#, no-wrap +msgid "B<-v>,\\ B<--verbose>" +msgstr "B<-v>,\\ B<--verbose>" + +# type: Plain text +#: ../update-passwd.8:51 +msgid "" +"Give detailed information about we are doing. A second -v gives additional " +"detail." +msgstr "" +"Показывать подробную информацию о всех выполняемых действиях. " +"Если указать параметр -v дважды, будет выдано ещё больше " +"подробностей." + +# type: TP +#: ../update-passwd.8:51 +#, no-wrap +msgid "B<-n>,\\ B<--dry-run>" +msgstr "B<-n>,\\ B<--dry-run>" + +# type: Plain text +#: ../update-passwd.8:54 +msgid "Don't do anything but only show what we would do." +msgstr "Ничего не делать, только показать выполняемые действия." + +# type: TP +#: ../update-passwd.8:54 +#, no-wrap +msgid "B<-L>,\\ B<--no-locking>" +msgstr "B<-L>,\\ B<--no-locking>" + +# type: Plain text +#: ../update-passwd.8:59 +msgid "" +"Don't attempt to lock the account database. This should only be used for " +"debugging purposes. B" +msgstr "" +"Не пытаться установить блокировку на базу данных. Должно использоваться " +"только в отладочных целях. B<Внимание: не используйте этот параметр, " +"если вам это действительно ненужно!>" + +# type: TP +#: ../update-passwd.8:59 +#, no-wrap +msgid "B<-h>,\\ B<--help>" +msgstr "B<-h>,\\ B<--help>" + +# type: Plain text +#: ../update-passwd.8:63 +msgid "Show a summary of how to use B." +msgstr "Показать справку по работе с B." + +# type: TP +#: ../update-passwd.8:63 +#, no-wrap +msgid "B<-V>,\\ B<--version>" +msgstr "B<-V>,\\ B<--version>" + +# type: Plain text +#: ../update-passwd.8:66 +msgid "Show the version number" +msgstr "Показать номер версии" + +# type: SH +#: ../update-passwd.8:66 +#, no-wrap +msgid "BUGS" +msgstr "ОШИБКИ" + +# type: Plain text +#: ../update-passwd.8:72 +msgid "" +"At this moment B does not verify the shadow-file. It should " +"check if the entries in the passwd are also in shadow and vice versa, and " +"that passwords are not present in both files." +msgstr "" +"На данный момент B не производит проверку файла " +"shadow. Нужно проверять, что записи из passwd есть в shadow и " +"наоборот, и то, что пароли не указаны в обоих файлах сразу." + +# type: SH +#: ../update-passwd.8:72 +#, no-wrap +msgid "AUTHOR" +msgstr "АВТОР" + +# type: Plain text +#: ../update-passwd.8:74 +msgid "Wichert Akkerman Ewakkerma@debian.orgE" +msgstr "Вичерт Акерман (Wichert Akkerman) Ewakkerma@debian.orgE" + +# type: Plain text +#: ../update-passwd.8:78 +msgid "" +"This program was written for the Debian project, and is copyright " +"1999\\(en2002 Wichert Akkerman and copyright 2002, 2003 Colin Watson. It is " +"distributed under version 2 of the GNU General Public License." +msgstr "" +"Эта программа была написана для проекта Debian; авторское " +"право принадлежит 1999\\(en2002 Wichert Akkerman и 2002, 2003 Colin Watson. " +"Она распространяется на условиях универсальной общественной лицензии " +"GNU версии 2." + diff --git a/man/po4a/po4a.cfg b/man/po4a/po4a.cfg new file mode 100644 index 0000000..de96bdf --- /dev/null +++ b/man/po4a/po4a.cfg @@ -0,0 +1,10 @@ +# list the languages (for the $lang expansion) +[po4a_langs] fr ru + +# first explain where are the translators' input files +[po4a_paths] po/base-passwd.pot $lang:po/$lang.po + +# Then list the documents to translate, their format, their translations +# (as well as the addenda to apply to the translations) +[type:man] ../update-passwd.8 $lang:../update-passwd.$lang.8 \ + add_$lang:translator_$lang.add opt:"-L UTF-8" diff --git a/man/po4a/translator_fr.add b/man/po4a/translator_fr.add new file mode 100644 index 0000000..312892e --- /dev/null +++ b/man/po4a/translator_fr.add @@ -0,0 +1,16 @@ +PO4A-HEADER:mode=after;position=^\.SH NOM;beginboundary=FausseLimitePo4a +.SH TRADUCTION +Ce document est une traduction, réalisée par Nicolas FRANÇOIS le +8 août 2005. + +L'équipe de traduction a fait le maximum pour réaliser une adaptation +française de qualité. + +La version anglaise la plus à jour de ce document est toujours consultable +en ajoutant l'option «\ \-L C\ » à la commande \fBman\fR. + +N'hésitez pas à signaler à l'auteur ou à la liste de traduction +.nh +<\fIdebian\-l10\-french@lists.debian.org\fR>, +.hy +selon le cas, toute erreur dans cette page de manuel. diff --git a/man/po4a/translator_ru.add b/man/po4a/translator_ru.add new file mode 100644 index 0000000..b189c78 --- /dev/null +++ b/man/po4a/translator_ru.add @@ -0,0 +1,4 @@ +PO4A-HEADER:mode=before;position=^\.TH UPDATE;beginboundary=^FakePo4aBoundary +.\" Russian translation: +.\" Yuri Kozlov , 2008 +.\" diff --git a/man/update-passwd.8 b/man/update-passwd.8 new file mode 100644 index 0000000..0ba04b9 --- /dev/null +++ b/man/update-passwd.8 @@ -0,0 +1,78 @@ +.TH UPDATE\-PASSWD 8 "Debian tools" "DEBIAN" +.SH NAME +update\-passwd \- safely update /etc/passwd, /etc/shadow and /etc/group +.SH SYNOPSIS +.B update\-passwd +.RI [ options ] +.SH DESCRIPTION +.B update\-passwd +handles updates of /etc/passwd, /etc/shadow and /etc/group on running Debian +systems. +It compares the current files to master copies, distributed in the +base\-passwd package, and updates all entries in the global system range (that +is, 0\(en99). +.PP +.SH OPTIONS +.B update\-passwd +follows the usual GNU command line syntax, with long +options starting with two dashes (\(oq\-\(cq). +.TP +.BR \-p ,\ \-\-passwd\-master=FILE +Use FILE as the master copy of the passwd database. +The default value is +.IR /usr/share/base\-passwd/passwd.master . +.TP +.BR \-g ,\ \-\-group\-master=FILE +Use FILE as the master copy of the group database. +The default value is +.IR /usr/share/base\-passwd/group.master . +.TP +.BR \-P ,\ \-\-passwd=FILE +Use FILE as the system passwd database. +The default value is +.IR /etc/passwd . +.TP +.BR \-S ,\ \-\-shadow=FILE +Use FILE as the system shadow database. +The default value is +.IR /etc/shadow . +.TP +.BR \-G ,\ \-\-group=FILE +Use FILE as the system group database. +The default value is +.IR /etc/group . +.TP +.BR \-s ,\ \-\-sanity\-check +Only perform sanity-checks but don't do anything. +.TP +.BR \-v ,\ \-\-verbose +Give detailed information about we are doing. +A second \-v gives additional detail. +.TP +.BR \-n ,\ \-\-dry\-run +Don't do anything but only show what we would do. +.TP +.BR \-L ,\ \-\-no\-locking +Don't attempt to lock the account database. +This should only be used for debugging purposes. +.B I repeat: do not do this unless you are really sure you need this! +.TP +.BR \-h ,\ \-\-help +Show a summary of how to use +.BR update\-passwd . +.TP +.BR \-V ,\ \-\-version +Show the version number +.SH BUGS +At this moment +.B update\-passwd +does not verify the shadow-file. +It should check if the entries in the passwd are also in shadow +and vice versa, and that passwords are not present in both files. +.SH AUTHOR +Wichert Akkerman +.PP +This program was written for the Debian project, and is +copyright 1999\(en2002 Wichert Akkerman and +copyright 2002, 2003 Colin Watson. +It is distributed under version 2 of the GNU General Public License. diff --git a/man/update-passwd.pl.8 b/man/update-passwd.pl.8 new file mode 100644 index 0000000..c7d4a89 --- /dev/null +++ b/man/update-passwd.pl.8 @@ -0,0 +1,78 @@ +.TH UPDATE\-PASSWD 8 "Narzędzia Debiana" "DEBIAN" +.SH NAZWA +update\-passwd \- bezpiecznie aktualizuj /etc/passwd, /etc/shadow i /etc/group +.SH SKŁADNIA +.B update\-passwd +.RI [ opcje ] +.SH OPIS +.B update\-passwd +aktualizuje pliki /etc/passwd, /etc/shadow i /etc/group w działających +systemach Debian. +Porównuje je z autorytatywnymi kopiami zawartymi w pakiecie +base\-passwd, a następnie aktualizuje wszystkie wpisy w globalnym przedziale +systemowym (to jest 0\(en99). +.PP +.SH OPCJE +.B update\-passwd +wykorzystuje standardową składnię linii poleceń GNU, gdzie długie opcje +poprzedzone są dwoma znakami myślnika (\(oq\-\(cq). +.TP +.BR \-p ,\ \-\-passwd\-master=PLIK +Użyj PLIKu jako autorytatywnej kopii bazy danych "passwd". +Domyślna wartość to +.IR /usr/share/base\-passwd/passwd.master . +.TP +.BR \-g ,\ \-\-group\-master=PLIK +Użyj PLIKu jako autorytatywnej kopii bazy danych "group". +Domyślna wartość to +.IR /usr/share/base\-passwd/group.master . +.TP +.BR \-P ,\ \-\-passwd=PLIK +Użyj PLIKu jako systemowej bazy danych "passwd". +Domyślna wartość to +.IR /etc/passwd . +.TP +.BR \-S ,\ \-\-shadow=PLIK +Użyj PLIKu jako systemowej bazy danych "shadow". +Domyślna wartość to +.IR /etc/shadow . +.TP +.BR \-G ,\ \-\-group=PLIK +Użyj PLIKu jako systemowej bazy danych "group". +Domyślna wartość to +.IR /etc/group . +.TP +.BR \-s ,\ \-\-sanity\-check +Wykonaj tylko testy poprawności, niczego nie zmieniaj. +.TP +.BR \-v ,\ \-\-verbose +Podawaj dokładne informacje o wykonywanych czynnościach. +.TP +.BR \-n ,\ \-\-dry\-run +Niczego nie zmieniaj, ale napisz co zostałoby wykonane. +.TP +.BR \-L ,\ \-\-no\-locking +Nie blokuj bazy danych kont. +Opcji tej należy używać tylko przy wyłapywaniu błędów, +nie w czasie normalnej pracy. +.B Powtarzam: używaj tej opcji tylko jeśli masz pewność, że jej potrzebujesz! +.TP +.BR \-h ,\ \-\-help +Pokaż instrukcję użycia +.BR update\-passwd . +.TP +.BR \-V ,\ \-\-version +Pokaż wersję. +.SH BŁĘDY +W tym momencie +.B update\-passwd +nie sprawdza pliku shadow. +Powinien sprawdzać czy wpisy w passwd są także w shadow i na odwrót, +oraz czy tylko jeden z plików zawiera hasła. +.SH AUTOR +Wichert Akkerman +.PP +Ten program został napisany dla projektu Debian. +Prawa autorskie: Copyright 1999\(en2002 Wichert Akkerman i +copyright 2002, 2003 Colin Watson. +Jest rozpowszechniany pod wersją 2 Powszechnej Publicznej Licencji GNU. diff --git a/man/update-passwd.ru.8 b/man/update-passwd.ru.8 new file mode 100644 index 0000000..971267f --- /dev/null +++ b/man/update-passwd.ru.8 @@ -0,0 +1,76 @@ +.\"******************************************************************* +.\" +.\" This file was generated with po4a. Translate the source file. +.\" +.\"******************************************************************* +.\" Russian translation: +.\" Yuri Kozlov , 2008 +.\" +.TH UPDATE\-PASSWD 8 "утилиты Debian" DEBIAN +.SH НАЗВАНИЕ +update\-passwd \- безопасное обновление файлов /etc/passwd, /etc/shadow и +/etc/group +.SH СИНТАКСИС +\fBupdate\-passwd\fP [\fIпараметры\fP] +.SH ОПИСАНИЕ +\fBupdate\-passwd\fP служит для обновления файлов /etc/passwd, /etc/shadow и +/etc/group в работающих системах Debian. Она сравнивает текущие файлы с +мастер\-копиями из пакета base\-passwd и обновляет все записи глобального +системного диапазона (то есть, 0\(en99). +.PP +.SH ПАРАМЕТРЫ +Для \fBupdate\-passwd\fP используется обычный синтаксис запуска программ GNU из +командной строки, то есть длинные имена параметров начинаются с двух +символов тире (\(oq\-\(cq). +.TP +\fB\-p\fP,\ \fB\-\-passwd\-master=ФАЙЛ\fP +Использовать ФАЙЛ в качестве мастер\-копии базы данных passwd. Значением по +умолчанию является \fI/usr/share/base\-passwd/passwd.master\fP. +.TP +\fB\-g\fP,\ \fB\-\-group\-master=ФАЙЛ\fP +Использовать ФАЙЛ в качестве мастер\-копии базы данных group. Значением по +умолчанию является \fI/usr/share/base\-passwd/group.master\fP. +.TP +\fB\-P\fP,\ \fB\-\-passwd=ФАЙЛ\fP +Использовать ФАЙЛ в качестве системной базы данных passwd. Значением по +умолчанию является \fI/etc/passwd\fP. +.TP +\fB\-S\fP,\ \fB\-\-shadow=ФАЙЛ\fP +Использовать ФАЙЛ в качестве системной базы данных shadow. Значением по +умолчанию является \fI/etc/shadow\fP. +.TP +\fB\-G\fP,\ \fB\-\-group=ФАЙЛ\fP +Использовать ФАЙЛ в качестве системной базы данных group. Значением по +умолчанию является \fI/etc/group\fP. +.TP +\fB\-s\fP,\ \fB\-\-sanity\-check\fP +Провести проверку на отсутствие тривиальных ошибок ничего не изменяя. +.TP +\fB\-v\fP,\ \fB\-\-verbose\fP +Показывать подробную информацию о всех выполняемых действиях. Если указать +параметр \-v дважды, будет выдано ещё больше подробностей. +.TP +\fB\-n\fP,\ \fB\-\-dry\-run\fP +Ничего не делать, только показать выполняемые действия. +.TP +\fB\-L\fP,\ \fB\-\-no\-locking\fP +Не пытаться установить блокировку на базу данных. Должно использоваться +только в отладочных целях. \fBВнимание: не используйте этот параметр, если +вам это действительно ненужно!\fP +.TP +\fB\-h\fP,\ \fB\-\-help\fP +Показать справку по работе с \fBupdate\-passwd\fP. +.TP +\fB\-V\fP,\ \fB\-\-version\fP +Показать номер версии +.SH ОШИБКИ +На данный момент \fBupdate\-passwd\fP не производит проверку файла shadow. Нужно +проверять, что записи из passwd есть в shadow и наоборот, и то, что пароли +не указаны в обоих файлах сразу. +.SH АВТОР +Вичерт Акерман (Wichert Akkerman) +.PP +Эта программа была написана для проекта Debian; авторское право принадлежит +1999\(en2002 Wichert Akkerman и 2002, 2003 Colin Watson. Она +распространяется на условиях универсальной общественной лицензии GNU версии +2. diff --git a/passwd.master b/passwd.master new file mode 100644 index 0000000..e1c32ff --- /dev/null +++ b/passwd.master @@ -0,0 +1,18 @@ +root::0:0:root:/root:/bin/sh +daemon:*:1:1:daemon:/usr/sbin:/bin/sh +bin:*:2:2:bin:/bin:/bin/sh +sys:*:3:3:sys:/dev:/bin/sh +sync:*:4:65534:sync:/bin:/bin/sync +games:*:5:60:games:/usr/games:/bin/sh +man:*:6:12:man:/var/cache/man:/bin/sh +lp:*:7:7:lp:/var/spool/lpd:/bin/sh +mail:*:8:8:mail:/var/mail:/bin/sh +news:*:9:9:news:/var/spool/news:/bin/sh +uucp:*:10:10:uucp:/var/spool/uucp:/bin/sh +proxy:*:13:13:proxy:/bin:/bin/sh +www-data:*:33:33:www-data:/var/www:/bin/sh +backup:*:34:34:backup:/var/backups:/bin/sh +list:*:38:38:Mailing List Manager:/var/list:/bin/sh +irc:*:39:39:ircd:/var/run/ircd:/bin/sh +gnats:*:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh +nobody:*:65534:65534:nobody:/nonexistent:/bin/sh diff --git a/update-passwd.c b/update-passwd.c new file mode 100644 index 0000000..e333157 --- /dev/null +++ b/update-passwd.c @@ -0,0 +1,1230 @@ +/* update-passwd - Safely update /etc/passwd, /etc/shadow and /etc/group + * Copyright 1999-2002 Wichert Akkerman + * Copyright 2002, 2003, 2004 Colin Watson + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of version 2 of the GNU General Public License as + * published by the Free Software Foundation. + * + * 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, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "version.h" + +#define _GNU_SOURCE +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define DEFAULT_PASSWD_MASTER "/usr/share/base-passwd/passwd.master" +#define DEFAULT_GROUP_MASTER "/usr/share/base-passwd/group.master" +#define DEFAULT_PASSWD_SYSTEM "/etc/passwd" +#define DEFAULT_SHADOW_SYSTEM _PATH_SHADOW +#define DEFAULT_GROUP_SYSTEM "/etc/group" + +#define WRITE_EXTENSION ".upwd-write" +#define BACKUP_EXTENSION ".org" + + +#define FL_KEEPHOME 0x0001 +#define FL_KEEPSHELL 0x0002 +#define FL_KEEPGECOS 0x0004 +#define FL_KEEPALL 0x000f + +#define FL_NOAUTOREMOVE 0x0010 +#define FL_NOAUTOADD 0x0020 + +/* This structure is actually used for both users and groups + * we probably should split that someday. + */ +struct _info { + uid_t id; + unsigned flags; +}; + +const struct _info specialusers[] = { + { 0, (FL_KEEPALL|FL_NOAUTOREMOVE) }, /* root */ + { 11, (FL_KEEPHOME|FL_NOAUTOADD|FL_NOAUTOREMOVE) }, /* ftp */ + { 30, (FL_KEEPHOME|FL_NOAUTOADD|FL_NOAUTOREMOVE) }, /* majordom */ + { 31, (FL_NOAUTOREMOVE) }, /* postgres */ + { 33, (FL_KEEPHOME) }, /* www-data */ + { 35, (FL_KEEPALL|FL_NOAUTOADD|FL_NOAUTOREMOVE) }, /* dos */ + { 36, (FL_KEEPALL|FL_NOAUTOADD|FL_NOAUTOREMOVE) }, /* msql */ + { 37, (FL_NOAUTOREMOVE) }, /* operator */ + { 41, (FL_KEEPHOME) }, /* gnats */ + { 70, (FL_NOAUTOREMOVE) }, /* alias */ + { 71, (FL_KEEPALL|FL_NOAUTOADD|FL_NOAUTOREMOVE) }, /* qmaild */ + { 72, (FL_KEEPALL|FL_NOAUTOADD|FL_NOAUTOREMOVE) }, /* qmails */ + { 73, (FL_KEEPALL|FL_NOAUTOADD|FL_NOAUTOREMOVE) }, /* qmailr */ + { 74, (FL_KEEPALL|FL_NOAUTOADD|FL_NOAUTOREMOVE) }, /* qmailq */ + { 75, (FL_KEEPALL|FL_NOAUTOADD|FL_NOAUTOREMOVE) }, /* qmaill */ + { 76, (FL_KEEPALL|FL_NOAUTOADD|FL_NOAUTOREMOVE) }, /* qmailp */ + { 0, 0} +}; + + +const struct _info specialgroups[] = { + { 0, (FL_KEEPALL|FL_NOAUTOREMOVE) }, /* root */ + { 11, (FL_NOAUTOADD|FL_NOAUTOREMOVE) }, /* ftp */ + { 31, (FL_NOAUTOADD|FL_NOAUTOREMOVE) }, /* majordom */ + { 32, (FL_NOAUTOREMOVE) }, /* postgres */ + { 35, (FL_NOAUTOADD|FL_NOAUTOREMOVE) }, /* dos */ + { 36, (FL_NOAUTOADD|FL_NOAUTOREMOVE) }, /* msql */ + { 70, (FL_NOAUTOREMOVE) }, /* qmail */ + { 0, 0} +}; + +struct _node { + union { + struct passwd pw; + struct spwd sp; + struct group gr; + } d; + enum { + t_passwd, + t_shadow, + t_group, + t_error + } t; + const char* name; + uid_t id; + struct _node* next; + struct _node* prev; + struct _node* last; +}; + +const char* master_passwd = DEFAULT_PASSWD_MASTER; +const char* master_group = DEFAULT_GROUP_MASTER; +const char* sys_passwd = DEFAULT_PASSWD_SYSTEM; +const char* sys_shadow = DEFAULT_SHADOW_SYSTEM; +const char* sys_group = DEFAULT_GROUP_SYSTEM; + +struct _node* master_accounts = NULL; +struct _node* master_groups = NULL; +struct _node* system_accounts = NULL; +struct _node* system_shadow = NULL; +struct _node* system_groups = NULL; + +int opt_dryrun = 0; +int opt_verbose = 0; +int opt_nolock = 0; +int opt_sanity = 0; + +int flag_dirty = 0; + + +/* malloc() with out-of-memory checking. + */ +void* xmalloc(size_t n) { + void *p=malloc(n); + if (p==0 && n==0) { + p=malloc((size_t)1); + if (p==0) { + fprintf(stderr, "Out of memory!\n"); + exit(1); + } + } + return p; +} + +/* Copy a string with out-of-memory checking. + */ +char* xstrdup(const char *string) { + if (!string) + return NULL; + return strcpy(xmalloc(strlen(string) + 1), string); +} + +/* Create an empty list-entry + */ +struct _node* create_node() { + struct _node* newnode; + + newnode=(struct _node*)xmalloc(sizeof(struct _node)); + newnode->name=0; + newnode->id=0; + newnode->next=NULL; + newnode->prev=NULL; + newnode->last=NULL; + newnode->t=t_error; + + return newnode; +} + + +void copy_passwd(struct _node* newnode, const struct passwd* pw) { + newnode->d.pw=*pw; + newnode->d.pw.pw_name=xstrdup(pw->pw_name); + newnode->d.pw.pw_passwd=xstrdup(pw->pw_passwd); + newnode->d.pw.pw_gecos=xstrdup(pw->pw_gecos); + newnode->d.pw.pw_dir=xstrdup(pw->pw_dir); + newnode->d.pw.pw_shell=xstrdup(pw->pw_shell); +} + + +void copy_shadow(struct _node* newnode, const struct spwd* sp) { + newnode->d.sp=*sp; + newnode->d.sp.sp_namp=xstrdup(sp->sp_namp); + newnode->d.sp.sp_pwdp=xstrdup(sp->sp_pwdp); +} + + +void copy_group(struct _node* newnode, const struct group* gr) { + int memcount, mem; + + newnode->d.gr=*gr; + newnode->d.gr.gr_name=xstrdup(gr->gr_name); + newnode->d.gr.gr_passwd=xstrdup(gr->gr_passwd); + + for (memcount=0; gr->gr_mem[memcount]; ++memcount) + ; + newnode->d.gr.gr_mem=xmalloc((memcount+1) * sizeof(char*)); + for (mem=0; memd.gr.gr_mem[mem]=xstrdup(gr->gr_mem[mem]); + newnode->d.gr.gr_mem[memcount]=NULL; +} + +/* Make a copy of a list-entry + */ +struct _node* copy_node(const struct _node* node) { + struct _node* newnode; + + newnode=create_node(); + newnode->id=node->id; + newnode->name=node->name; + newnode->t=node->t; + + switch (newnode->t) { + case t_passwd: + copy_passwd(newnode, &node->d.pw); + break; + case t_shadow: + copy_shadow(newnode, &node->d.sp); + break; + case t_group: + copy_group(newnode, &node->d.gr); + break; + default: + fprintf(stderr, "Internal error: unexpected entrytype %d\n", newnode->t); + exit(1); + } + + return newnode; +} + + +/* Add a new item to a list + */ +void add_node(struct _node** head, struct _node* node, int new_entry) { + node->prev=NULL; + node->next=NULL; + + if (*head==NULL) { + *head=node; + node->last=node; + return; + } + + if (new_entry) { + /* Make sure NIS compat entries stay at the end when adding new + * entries. + */ + struct _node* walk; + for (walk=*head; walk; walk=walk->next) { + if (strcmp(walk->name, "+")==0) + break; + } + /* Was there a "+" entry at all? + */ + if (walk) { + node->prev=walk->prev; + node->next=walk; + if (walk->prev) + walk->prev->next=node; + walk->prev=node; + if (walk==*head) { + node->last=(*head)->last; + *head=node; + } + return; + } + /* Otherwise fall through and add as normal. + */ + } + + (*head)->last->next=node; + node->prev=(*head)->last; + (*head)->last=node; +} + + +/* Remove an item from a list + */ +void remove_node(struct _node** head, struct _node* node) { + if (node==*head) { + if (node->next) { + node->next->last=(*head)->last; + node->next->prev=NULL; + } + *head=node->next; + } else { + if (node==(*head)->last) + (*head)->last=node->prev; + if (node->prev) + node->prev->next=node->next; + if (node->next) + node->next->prev=node->prev; + } + + node->prev=NULL; + node->next=NULL; +} + + +/* Locate an entry with a specific name in the list + */ +struct _node* find_by_name(struct _node* head, const char* name) { + while (head) { + if (strcmp(name, head->name)==0) + return head; + head=head->next; + } + + return NULL; +} + + +/* Look for an entry in a list, using the name of _entry as the + * searchkey. + */ +struct _node* find_by_named_entry(struct _node* head, const struct _node* entry) { + while (head) { + if (strcmp(entry->name, head->name)==0) + return head; + head=head->next; + } + + return NULL; +} + + +/* Look for an entry in a list, using the id of _entry as the + * searchkey. + */ +struct _node* find_by_id(struct _node* head, uid_t id) { + while (head) { + if (id==head->id) + return head; + head=head->next; + } + + return NULL; +} + + +/* Function to scan the list of special users or groups to see if a an + * entry has a certain flag set. + */ +int scan_infos(const struct _info *lst, uid_t id, unsigned flag) { + const struct _info* walk; + for (walk=lst; !((walk->id==0) && (walk->flags==0)); walk++) + if (walk->id==id) + return ((walk->flags&flag)!=0); + return 0; +} + +/* Just for our convenience */ +int keephome(const struct _info* lst, uid_t id) { + return scan_infos(lst, id, FL_KEEPHOME); } +int keepshell(const struct _info* lst, uid_t id) { + return scan_infos(lst, id, FL_KEEPSHELL); } +int keepgecos(const struct _info* lst, uid_t id) { + return scan_infos(lst, id, FL_KEEPGECOS); } +int noautoremove(const struct _info* lst, uid_t id) { + return scan_infos(lst, id, FL_NOAUTOREMOVE); } +int noautoadd(const struct _info* lst, uid_t id) { + return scan_infos(lst, id, FL_NOAUTOADD); } + +/* Function to read passwd database */ +int read_passwd(struct _node** list, const char* file) { + FILE* input; + struct _node* node; + struct passwd* result; + + if (opt_verbose>2) + printf("Reading passwd from %s\n", file); + + if ((input=fopen(file, "r"))==NULL) { + fprintf(stderr, "Error opening passwd file %s: %s\n", file, strerror(errno)); + return 1; + } + + while ((result=fgetpwent(input))!=NULL) { + node=create_node(); + copy_passwd(node, result); + node->t=t_passwd; + node->name=node->d.pw.pw_name; + if (!node->name) + break; + if (node->name[0]=='+') + node->id=0; + else + node->id=node->d.pw.pw_uid; + add_node(list, node, 0); + } + + if ((result==NULL) && (errno!=ENOENT)) { + fprintf(stderr, "Error reading passwd file %s: %s\n", file, strerror(errno)); + return 2; + } + + fclose(input); + + return 0; +} + + +/* Function to read group database */ +int read_group(struct _node** list, const char* file) { + FILE* input; + struct _node* node; + struct group* result; + + if (opt_verbose>2) + printf("Reading group from %s\n", file); + + if ((input=fopen(file, "r"))==NULL) { + fprintf(stderr, "Error opening group file %s: %s\n", file, strerror(errno)); + return 1; + } + + while ((result=fgetgrent(input))!=NULL) { + node=create_node(); + copy_group(node, result); + node->t=t_group; + node->name=node->d.gr.gr_name; + if (!node->name) + break; + if (node->name[0]=='+') + node->id=0; + else + node->id=node->d.gr.gr_gid; + add_node(list, node, 0); + } + + if ((result==NULL) && (errno!=ENOENT)) { + fprintf(stderr, "Error reading group file %s: %s\n", file, strerror(errno)); + return 2; + } + + fclose(input); + + return 0; +} + + +/* Function to read shadow database */ +int read_shadow(struct _node** list, const char* file) { + FILE* input; + struct _node* node; + struct spwd* result; + + if (opt_verbose>2) + printf("Reading shadow from %s\n", file); + + if ((input=fopen(file, "r"))==NULL) { + if (errno!=ENOENT) + fprintf(stderr, "Error opening shadow file %s: %s\n", file, strerror(errno)); + return 1; + } + + while ((result=fgetspent(input))!=NULL) { + node=create_node(); + copy_shadow(node, result); + node->t=t_shadow; + node->id=0; + node->name=node->d.sp.sp_namp; + if (!node->name) + break; + add_node(list, node, 0); + } + + if ((result==NULL) && (errno!=ENOENT)) { + fprintf(stderr, "Error reading shadow file %s: %s\n", file, strerror(errno)); + return 2; + } + + fclose(input); + + return 0; +} + + +/* Small helper functions to safely print strings that might be NULL. + */ +const char* safestr(const char* str) { + if (str==NULL) + return ""; + else + return str; +} + + +/* Implement our own putpwent(3). The version in GNU libc is stupid enough + * to not recognize NIS compat entries and will happily turn an entry like + * this: + * + * +@staff:::::: + * + * into this: + * + * +@staff::0:0::: + * + */ + +int fputpwent(const struct passwd *passwd, FILE * f) { + int res; + + assert(passwd!=NULL); + assert(f!=NULL); + + if (passwd->pw_name[0]=='+') + res=fprintf(f, "%s:%s:::%s:%s:%s\n", + safestr(passwd->pw_name), + safestr(passwd->pw_passwd), + safestr(passwd->pw_gecos), + safestr(passwd->pw_dir), + safestr(passwd->pw_shell)); + else + res=fprintf(f, "%s:%s:%u:%u:%s:%s:%s\n", + safestr(passwd->pw_name), + safestr(passwd->pw_passwd), + passwd->pw_uid, passwd->pw_gid, + safestr(passwd->pw_gecos), + safestr(passwd->pw_dir), + safestr(passwd->pw_shell)); + + if (res<0) + return -1; + + return 0; +} + + +/* Simple function to print usage information */ +void usage() { + printf( + "Usage: update-passwd [OPTION]...\n" + "\n" + " -p, --passwd-master=file Use file as the master account list\n" + " -g, --group-master=file Use file as the master group list\n" + " -P, --passwd=file Use file as the system passwd file\n" + " -S, --shadow=file Use file as the system shadow file\n" + " -G, --group=file Use file as the system group file\n" + " -s, --sanity-check Only perform sanity-checks\n" + " -v, --verbose Show details about what we are doing (recommended)\n" + " -n, --dry-run Just say what we would do but do nothing\n" + " -L, --no-locking Don't try to lock files\n" + " -h, --help Display this information and exit\n" + " -V, --version Show version number and exit\n" + "\n" + " File locations used:\n" + " master passwd: %s\n" + " master group : %s\n" + " system passwd: %s\n" + " system shadow: %s\n" + " system group : %s\n" + "\n" + "Report bugs to the Debian bug tracking system, package \"base-passwd\".\n" + "\n", + master_passwd, master_group, sys_passwd, sys_shadow, sys_group); +} + +/* Simple function to print our name and version + */ +void version() { + printf("update-passwd %s\n", VERSION); +} + + +/* Check if we need to move any master file entries above NIS compat + * switching entries ("+"). + */ +void process_moved_entries(const struct _info* lst, struct _node** passwd, struct _node* master, const char* descr) { + struct _node* walk=*passwd; + + while (walk) { + if (strcmp(walk->name, "+")==0) { + walk=walk->next; + break; + } + walk=walk->next; + } + while (walk) { + if (find_by_named_entry(master, walk)) { + if (!noautoadd(lst, walk->id)) { + struct _node* movednode=walk; + walk=walk->next; + remove_node(passwd, movednode); + add_node(passwd, movednode, 1); + flag_dirty++; + + if (opt_verbose) + printf("Moving %s \"%s\" (%u) to before \"+\" entry\n", descr, movednode->name, movednode->id); + continue; + } + } + walk=walk->next; + } +} + + +/* Check if new accounts should be made on the system. Please note we don't + * add accounts to shadow here; those will be made automatically at a later + * stage where we verify the contents of the shadow database + */ +void process_new_entries(const struct _info* lst, struct _node** passwd, struct _node* master, const char* descr) { + while (master) { + if (find_by_named_entry(*passwd, master)==NULL) { + struct _node* newnode; + + if (noautoadd(lst, master->id)) { + master=master->next; + continue; + } + + newnode=copy_node(master); + add_node(passwd, newnode, 1); + flag_dirty++; + + if (opt_verbose) + printf("Adding %s \"%s\" (%u)\n", descr, newnode->name, newnode->id); + } + master=master->next; + } +} + + +/* Check if accounts should be removed. Like with process_new_accounts we + * don't update shadow here since it is verified at a later stage anyway. + * We will only remove accounts in our range (uids 0-99). + */ +void process_old_entries(const struct _info* lst, struct _node** passwd, struct _node* master, const char* descr) { + struct _node* walk=*passwd; + + while (walk) { + if ((walk->id<0) || (walk->id>99)) { + walk=walk->next; + continue; + } + + if (noautoremove(lst, walk->id)) { + walk=walk->next; + continue; + } + + if (find_by_named_entry(master, walk)==NULL) { + struct _node* oldnode=walk; + + if (opt_verbose) + printf("Removing %s \"%s\" (%u)\n", descr, oldnode->name, oldnode->id); + + walk=walk->next; + remove_node(passwd, oldnode); + flag_dirty++; + continue; + } + walk=walk->next; + } +} + + +/* Check if account-information needs to be updated. + */ +void process_changed_accounts(struct _node* passwd, struct _node* group, struct _node* master) { + for (;passwd; passwd=passwd->next) { + struct _node* mc; /* mastercopy of this account */ + + if (((passwd->id<0) || (passwd->id>99)) && (passwd->id!=65534)) + continue; + + mc=find_by_named_entry(master, passwd); + if (mc==NULL) + continue; + + if (passwd->id!=mc->id) { + if (opt_verbose) + printf("Changing uid of %s from %u to %u\n", passwd->name, passwd->id, mc->id); + passwd->id=mc->id; + passwd->d.pw.pw_uid=mc->d.pw.pw_uid; + flag_dirty++; + } + + if (passwd->d.pw.pw_gid!=mc->d.pw.pw_gid) { + if (opt_verbose) { + const struct _node* oldentry = find_by_id(group, passwd->d.pw.pw_gid); + const struct _node* newentry = find_by_id(group, mc->d.pw.pw_gid); + const char* oldname = oldentry ? oldentry->name : "ABSENT"; + const char* newname = newentry ? newentry->name : "ABSENT"; + printf("Changing gid of %s from %u (%s) to %u (%s)\n", passwd->name, passwd->d.pw.pw_gid, oldname, mc->d.pw.pw_gid, newname); + } + passwd->d.pw.pw_gid=mc->d.pw.pw_gid; + flag_dirty++; + } + + if (!keepgecos(specialusers, passwd->id)) + if ((passwd->d.pw.pw_gecos==NULL) || (strcmp(passwd->d.pw.pw_gecos, mc->d.pw.pw_gecos)!=0)) { + if (opt_verbose) { + const char *oldgecos = passwd->d.pw.pw_gecos ? passwd->d.pw.pw_gecos : ""; + printf("Changing GECOS of %s from \"%s\" to \"%s\".\n", passwd->name, oldgecos, mc->d.pw.pw_gecos); + } + /* We update the pw_gecos entry of passwd so it now points into the + * buffer from mc. This is safe for us, since we know we won't free + * the data in mc until after we are done. + */ + passwd->d.pw.pw_gecos=mc->d.pw.pw_gecos; + flag_dirty++; + } + + if (!keephome(specialusers, passwd->id)) + if ((passwd->d.pw.pw_dir==NULL) || (strcmp(passwd->d.pw.pw_dir, mc->d.pw.pw_dir)!=0)) { + if (opt_verbose) { + const char *olddir = passwd->d.pw.pw_dir ? passwd->d.pw.pw_dir : "(none)"; + printf("Changing home-directory of %s from %s to %s\n", passwd->name, olddir, mc->d.pw.pw_dir); + } + /* We update the pw_dir entry of passwd so it now points into the + * buffer from mc. This is safe for us, since we know we won't free + * the data in mc until after we are done. + */ + passwd->d.pw.pw_dir=mc->d.pw.pw_dir; + flag_dirty++; + } + + if (!keepshell(specialusers, passwd->id)) + if ((passwd->d.pw.pw_shell==NULL) || (strcmp(passwd->d.pw.pw_shell, mc->d.pw.pw_shell)!=0)) { + if (opt_verbose) { + const char *oldshell = passwd->d.pw.pw_shell ? passwd->d.pw.pw_shell : "(none)"; + printf("Changing shell of %s from %s to %s\n", passwd->name, oldshell, mc->d.pw.pw_shell); + } + /* We update the pw_shell entry of passwd so it now points into the + * buffer from mc. This is safe for us, since we know we won't free + * the data in mc until after we are done. + */ + passwd->d.pw.pw_shell=mc->d.pw.pw_shell; + flag_dirty++; + } + } +} + + +/* Check if account-information needs to be updated. + */ +void process_changed_groups(struct _node* group, struct _node* master) { + for (;group; group=group->next) { + struct _node* mc; /* mastercopy of this group */ + + if (((group->id<0) || (group->id>99)) && (group->id!=65534)) + continue; + + mc=find_by_named_entry(master, group); + if (mc==NULL) + continue; + + if (group->id!=mc->id) { + if (opt_verbose) + printf("Changing gid of %s from %u to %u\n", group->name, group->id, mc->id); + group->id=mc->id; + group->d.gr.gr_gid=mc->d.gr.gr_gid; + flag_dirty++; + } + } +} + + +int write_passwd(const struct _node* passwd, const char* file) { + FILE* output; + + if (opt_verbose>2) + printf("Writing passwd-file to %s\n", file); + + if ((output=fopen(file, "wt"))==NULL) { + fprintf(stderr, "Failed to open passwd-file %s for writing: %s\n", + file, strerror(errno)); + return 0; + } + + for (;passwd; passwd=passwd->next) { + assert(passwd->t==t_passwd); + if (fputpwent(&(passwd->d.pw), output)!=0) { + fprintf(stderr, "Error writing passwd-entry: %s\n", strerror(errno)); + return 0; + } + } + + if (fclose(output)!=0) { + fprintf(stderr, "Error closing passwd-file: %s\n", strerror(errno)); + return 0; + } + + return 1; +} + + +int write_shadow(const struct _node* shadow, const char* file) { + FILE* output; + + if (opt_verbose>2) + printf("Writing shadow-file to %s\n", file); + + if ((output=fopen(file, "wt"))==NULL) { + fprintf(stderr, "Failed to open shadow-file %s for writing: %s\n", + file, strerror(errno)); + return 0; + } + + for (;shadow; shadow=shadow->next) { + assert(shadow->t==t_shadow); + if (putspent(&(shadow->d.sp), output)!=0) { + fprintf(stderr, "Error writing shadow-entry: %s\n", strerror(errno)); + return 0; + } + } + + if (fclose(output)!=0) { + fprintf(stderr, "Error closing shadow-file: %s\n", strerror(errno)); + return 0; + } + + return 1; +} + + +#ifndef HAVE_PUTGRENT +int putgrent(const struct group* g, FILE* f) { + int idx; + fprintf(f, "%s:%s:%u:", g->gr_name, g->gr_passwd, g->gr_gid); + if (g->gr_mem) + for (idx=0; g->gr_mem[idx]; idx++) + fprintf(f, ((idx==0) ? "%s" : ",%s"), g->gr_mem[idx]); + fprintf(f, "\n"); + return fflush(f); +} +#endif + + +int write_group(const struct _node* group, const char* file) { + FILE* output; + + if (opt_verbose>2) + printf("Writing group-file to %s\n", file); + + if ((output=fopen(file, "wt"))==NULL) { + fprintf(stderr, "Failed to open group-file %s for writing: %s\n", + file, strerror(errno)); + return 0; + } + + for (;group; group=group->next) { + assert(group->t==t_group); + if (putgrent(&(group->d.gr), output)!=0) { + fprintf(stderr, "Error writing group-entry: %s\n", strerror(errno)); + return 0; + } + } + + if (fclose(output)!=0) { + fprintf(stderr, "Error closing group-file: %s\n", strerror(errno)); + return 0; + } + + return 1; +} + + +/* Unlink a file and print an error on failure. + */ +int unlink_file(const char* file) { + if (unlink(file)!=0) { + fprintf(stderr, "Error unlinking %s: %s\n", file, strerror(errno)); + return 0; + } + + return 1; +} + + +/* Rename a file and print an error on failure. + */ +int rename_file(const char* source, const char* target) { + if (rename(source, target)!=0) { + fprintf(stderr, "Error renaming %s to %s: %s\n", + source, target, strerror(errno)); + return 0; + } + + return 1; +} + + +/* Copy the filemodes from one file to another + */ + +int copy_filemodes(const char* source, const char* target) { + struct stat st; + + if (lstat(source, &st)!=0) { + fprintf(stderr, "Error lstating %s: %s\n", source, strerror(errno)); + return 0; + } + + if (chmod(target, st.st_mode)!=0) { + fprintf(stderr, "Error chmoding %s: %s\n", source, strerror(errno)); + return 0; + } + + if (lchown(target, st.st_uid, st.st_gid)!=0) { + /* Hmm, this failed. Lets try a normal chown in case we + * are running on a kernel that doesn't support lchown + */ + if (errno==ENOSYS) { + struct stat tst; + + if (lstat (target, &tst)!=0) { + fprintf (stderr, "Error lstating %s: %s\n", + target, strerror(errno)); + return 0; + } + + if (!S_ISLNK (tst.st_mode) && + chown (target, st.st_uid, st.st_gid) != 0) { + fprintf(stderr, "Error lchowning %s: %s\n", + source, strerror(errno)); + return 0; + } + } else { + fprintf(stderr, "Error lchowning %s: %s\n", + source, strerror(errno)); + return 0; + } + } + + return 1; +} + + +/* Atomically replace a file with another, possibly keeping a backup file. + * Taken from the dpkg2 sourcetree. + */ +int replace_file(const char* org, const char* new, const char* backup) { + if (backup) { + int res; + + if ((res=link(org, backup))==-1) { + if (errno==EEXIST) { + if (unlink(backup)==-1) { + fprintf(stderr, "Error unlinking old backupfile %s: %s\n", + backup, strerror(errno)); + return 0; + } + res=link(org, backup); + } + if (res==-1) { + fprintf(stderr, "Error making backupfile %s: %s\n", backup, strerror(errno)); + return 0; + } + } + } + + if (rename(new, org)==-1) { + fprintf(stderr, "Error: failed to replace %s with %s: %s\n", org, new, strerror(errno)); + return 0; + } + + return 1; +} + + +/* Try to replace a file as safely as possible. If we fail unlink the + * new copy, since it's useless anyway. + */ +int put_file_in_place(const char* source, const char* target) { + char* uf; + int ret; + + if (opt_verbose>2) + printf("Replacing \"%s\" with \"%s\"\n", target, source); + + asprintf(&uf, "%s%s", target, BACKUP_EXTENSION); + + if (uf==NULL) { + fprintf(stderr, "put_file_in_place: Not enough memory available\n"); + return 0; + } + + if (!copy_filemodes(target, source)) { + free(uf); + return 0; + } + + ret=replace_file(target, source, uf); + free(uf); + + return ret; +} + + +/* Rewrite the account-database if we made any changes + */ +int commit_files() { + char* wf; + + if (!flag_dirty) { + if (opt_verbose) + printf("No changes needed\n"); + return 1; + } + + if (opt_dryrun) { + printf("Would commit %d changes\n", flag_dirty); + return 1; + } + + printf("%d changes have been made, rewriting files\n", flag_dirty); + + if (opt_verbose==2) + printf("Writing passwd-file to %s\n", sys_passwd); + + asprintf(&wf, "%s%s", sys_passwd, WRITE_EXTENSION); + + if (wf==NULL) { + fprintf(stderr, "Not enough memory available while committing " + "passwd-file\n"); + return 0; + } + + if (!write_passwd(system_accounts, wf)) { + free(wf); + return 0; + } + + if (!put_file_in_place(wf, sys_passwd)) { + free(wf); + return 0; + } + + free(wf); + + if (system_shadow!=NULL) { + if (opt_verbose==2) + printf("Writing shadow-file to %s\n", sys_shadow); + + asprintf(&wf, "%s%s", sys_shadow, WRITE_EXTENSION); + + if (wf==NULL) { + fprintf(stderr, "Not enough memory available while committing " + "shadow-file\n"); + return 0; + } + + if (!write_shadow(system_shadow, wf)) { + free(wf); + return 0; + } + + if (!put_file_in_place(wf, sys_shadow)) { + free(wf); + return 0; + } + + free(wf); + } + + if (opt_verbose==2) + printf("Writing group-file to %s\n", sys_group); + + asprintf(&wf, "%s%s", sys_group, WRITE_EXTENSION); + + if (wf==NULL) { + fprintf(stderr, "Not enough memory available while committing " + "group-file\n"); + return 0; + } + + if (!write_group(system_groups, wf)) { + free(wf); + return 0; + } + + if (!put_file_in_place(wf, sys_group)) { + free(wf); + return 0; + } + + free(wf); + + return 1; +} + + +/* Try to lock the account database + */ +int lock_files() { + if (lckpwdf()!=0) { + fprintf(stderr, "Error locking files: %s\n", strerror(errno)); + return 0; + } + + return 1; +} + + +/* Try to unlock the account database + */ +int unlock_files() { + if (ulckpwdf()!=0) { + fprintf(stderr, "Error unlocking files: %s\n", strerror(errno)); + return 0; + } + + return 1; +} + + +/* I don't need to say what main is for, do I? + */ +int main(int argc, char** argv) { + int optc; + int opt_index; + + struct option const options[] = { + { "passwd-master", required_argument, 0, 'p' }, + { "group-master", required_argument, 0, 'g' }, + { "passwd", required_argument, 0, 'P' }, + { "shadow", required_argument, 0, 'S' }, + { "group", required_argument, 0, 'G' }, + { "sanity-check", no_argument, 0, 's' }, + { "verbose", no_argument, 0, 'v' }, + { "dry-run", no_argument, 0, 'n' }, + { "help", no_argument, 0, 'h' }, + { "version", no_argument, 0, 'V' }, + { 0, 0, 0, 0 } + }; + + while ((optc=getopt_long(argc, argv, "g:p:G:P:S:snvLhV", options, &opt_index))!=-1) + switch (optc) { + case 'p': + master_passwd=optarg; + break; + case 'g': + master_group=optarg; + break; + case 'P': + sys_passwd=optarg; + break; + case 'S': + sys_shadow=optarg; + break; + case 'G': + sys_group=optarg; + break; + case 'v': + opt_verbose++; + if (opt_verbose==1) + opt_verbose++; + break; + case 's': + opt_sanity=1; + break; + case 'n': + opt_dryrun=1; + opt_verbose++; + break; + case 'L': + opt_nolock=1; + break; + case 'h': + usage(); + return 0; + case 'V': + version(); + return 0; + default: + fprintf(stderr, "Internal error: getopt_long returned unexpected value \'%c\'\n", optc); + return 1; + } + + if (read_passwd(&master_accounts, master_passwd)!=0) + return 2; + + if (read_group(&master_groups, master_group)!=0) + return 2; + + if (read_passwd(&system_accounts, sys_passwd)!=0) + return 2; + + /* Only abort on a readerror */ + if ((read_shadow(&system_shadow, sys_shadow)!=0) && (errno!=ENOENT)) + return 2; + + if (read_group(&system_groups, sys_group)!=0) + return 2; + + process_moved_entries(specialgroups, &system_groups, master_groups, "group"); + process_new_entries(specialgroups, &system_groups, master_groups, "group"); + process_old_entries(specialgroups, &system_groups, master_groups, "group"); + process_changed_groups(system_groups, master_groups); + + process_moved_entries(specialusers, &system_accounts, master_accounts, "user"); + process_new_entries(specialusers, &system_accounts, master_accounts, "user"); + process_old_entries(specialusers, &system_accounts, master_accounts, "user"); + process_changed_accounts(system_accounts, system_groups, master_accounts); + + if (opt_sanity) + return 0; + + if (!opt_nolock && !opt_dryrun) + if (!lock_files()) + return 3; + + umask(0077); + + if (!commit_files()) { + unlock_files(); + return 4; + } + + if (!opt_nolock && !opt_dryrun) + if (!unlock_files()) + return 5; + + if (opt_dryrun) + return flag_dirty; + else + return 0; +} + +/* vim: ts=8 sw=4 cindent si + */ diff --git a/version.h b/version.h new file mode 100644 index 0000000..93e2cf5 --- /dev/null +++ b/version.h @@ -0,0 +1 @@ +#define VERSION "3.5.3" -- 2.7.4